Terrains
Introduction
Avec les static-meshes, l'éditeur de terrains est sans doute la plus grosse avancée entre l'Unreal Engine 1 et l'Unreal Engine 2. Il permet de créer des terrains de très grande taille sans avoir besoin d'éditer à la main le brush terrain et n'est pas soumis aux inconvénients de la géométrie BSP. Les terrains créés avec cet outil ne peuvent pas engendrer de trous BSP et peuvent être composés de centaines de polygones pour un résultat lisse et naturel, là où les précédents versions devaient se contenter de terrains schématiques, souvent étroits et anguleux.
Les terrains d'Unreal 2, un des pemiers jeux à implémenter l'éditeur de terrains, sont ainsi spectaculaires par rapport à ceux d'Unreal et d'UT99.
Principe
Un terrain est stocké sous la forme d'une texture en niveaux de gris 16 bits, appelée heightmap, qui est interprétée par un actor TerrainInfo comme une carte topographique. Chaque pixel représente l'altitude d'un point du terrain sous la forme d'une nuance de gris allant du noir (l'altitude minimale possible) au blanc pur (l'altitude maximale). Le TerrainInfo projette autour de lui une nappe de polygones, des triangles regroupés deux à deux pour former des carrés, appelés quads dans l'éditeur. Ces quads forment la plus petite unité du terrain.
Chaque pixel de l'heightmap correspond à un vertex du terrain. La taille de l'heightmap en pixels est donc le nombre de quads par côté du terrain (qui est forcément un quadrilatère). La taille des quads est paramétrable. Une heightmap de 256 pixels de côté utilisée pour générer un terrain dont les quads font 64 unités de long (ce sont les mesures par défaut) mesure ainsi 256 x 64 = 16384 unités.
Un terrain est toujours considéré par le jeu comme un sol (ou un plafond, comme expliqué plus loin) et il est donc impossible de réaliser un wall-dodge en prenant appui sur une paroi du terrain ou d'utiliser une pente comme rampe pour accéder à étage avec une esquive comme dans DM-Rankin.
Création du terrain
Un terrain doit être contenu dans une zone régie par une ZoneInfo dont le paramètre bTerrainZone est vrai. S'il s'étend sur plusieurs zones, toutes doivent contenir une ZoneInfo (ou un dérivé, tel qu'une SkyZoneInfo), avec ce paramètre activé.
Une fois la zone réglée, le terrain peut être intégralement créé, sculpté et texturé depuis l'éditeur de terrains, accessible dans la barre d'outil de gauche par l'outil Terrain Editing, qui utilise l'icône de montagnes.
Cette icône correspondait, dans l'Unreal Engine 1, au brush terrain (un cube à la face inférieur subdivisée). L'icône a été réutilisée pour l'éditeur de terrains et le brush terrain utilise une nouvelle icône.
L'éditeur de terrains s'ouvre dans une nouvelle fenêtre, vierge par défaut. La partie supérieure de l'interface n'est pas utile tant qu'un terrain n'a pas été créé dans la partie inférieure. En bas, trois onglets permettent de gérer les différents composants du terrain : Terrains, Layers et Decorations.
Dans le coin inférieur gauche de l'onglet Terrains, le bouton portant une icône de page blanche permet de créer un nouveau terrain (une nouvelle heightmap). La fenêtre de création ressemble à celle utilisée pour définir l'emplacement d'une nouvelle texture.
- Package, Group et Name : Comme pour toute création ou importation, ces champs permettent de définir où stocker l'heightmap et sous quel nom. MyLevel est le package le plus souvent utilisé.
- XSize et YSize : Ces deux paramètres définissent la taille de la texture créée pour servir d'heightmap, donc le nombre de quads sur chaque côté. La même contrainte que pour les autres textures s'applique : ces dimensions doivent être des puissances de 2. Les deux valeurs n'ont pas besoin d'être égales et avoir un côté plus long que l'autre donnera un terrain rectangulaire au lieu d'un carré.
Par défaut, un quad mesurant 64 unités de côté, la taille de l'heightmap doit être la taille de la zone à couvrir divisée par 64. Ainsi, pour remplir une zone de 4096 unités de côté, l'heightmap devra mesure 4096 / 64 = 64 unités de côté. - Height : Couleur par défaut de l'heightmap et donc altitude par défaut du terrain. Ce champ peut contenir n'importe quelle valeur entre 0 (noir) et 65535 (blanc). Par défaut, ce champ est réglé sur 32768, exactement à la moitié de l'intervalle possible, ce qui donne un gris parfaitement moyen.
Une fois l'heightmap créée, un actor TerrainInfo est automatiquement créé à l'emplacement de la caméra de la vue 3D, utilisant la même icône que l'outil Terrain Editing dans la barre d'outils d'UnrealEd.
Le terrain n'est pas visible avant un rebuild. Il apparaît alors dans la vue Wireframe mais pas encore dans les autres modes de rendu car il ne possède pas encore de textures. Bien qu'invisible, il est néanmoins pourvu d'une collision et il est possible de se déplacer dessus dans le jeu si la map est testée.
Si Height a été laissé à 32768, le terrain se trouve exactement à l'altitude du TerrainInfo. Autrement, il se trouve au-dessus ou au-dessous, décalé d'autant d'unités qu'il y a d'écart avec 32768.
Afin de rendre le terrain visible, il est nécessaire d'ajouter une texture de base au terrain à l'aide d'un layer. Ce dernier est composé d'une texture et d'une AlphaMap, un masque de transparence qui définit sur quels polygones du terrain la texture est plus ou moins visible.
Après avoir sélectionné une texture appropriée dans le texture browser (par exemple dans le package ArboreaTerrain.utx), il faut se rendre dans le second onglet de la partie inférieure de l'éditeur de terrains.
Le bouton New permet de créer un layer avec la texture sélectionnée. Il faut pour cela avoir d'abord cliqué sur l'une des bandes rouges marquées "Undefined". Les layers s'affichant les uns sur les autres dans l'ordre, le premier layer doit se trouver au sommet de la pile. La première texture doit donc être ajoutée au premier emplacement. La fenêtre de création de layer est remarquablement similaire à celle de création d'heightmap, avec quelques paramètres en plus.
- AlphaHeight et AlphaWidth : Ces deux paramètres indiquent la taille de l'AlphaMap du layer. Les valeurs doivent être les mêmes que le XSize et YSize de l'heightmap. Des valeurs différentes engendrent des artefacts d'affichage.
- AlphaFill : Définit l'opacité par défaut de l'AlphaMap, et donc de la texture, par rapport à celles placées au-dessus d'elles dans la pile. La texture étant ensuite appliquée ou retirée manuellement, il ne s'agit que de la transparence par défaut, qui est presque toujours modifiée après.
- ColorFill : Définit la couleur de l'AlphaMap. La seule utilité de ce paramètre peut être de rendre les layers identifiables au premier coup d'œil dans le texture browser.
- UScale et VScale : Échelle par défaut de la texture, définie par rapport à chaque quad du terrain. Si la valeur est 1 dans les deux champs, la texture (indépendamment de sa taille) couvre exactement 1 quad. Si la valeur est 2, la texture est étirée pour couvrir un carré de 2 quads de côté. Les deux valeurs peuvent être différentes et les valeurs décimales sont acceptées.
La première texture utilisée est généralement la texture de base du sol et doit donc couvrir la totalité du terrain. Son opacité doit donc être maximale, ce qui est le cas si l'AlphaFill est blanc. Le champ A peut être ignoré totalement, mais les champs R, G et B doivent donc être réglés sur la valeur maximale, 255. Avec les dimensions réglées sur celles de l'heightmap, un nom et un package, le layer peut être créé et le terrain devient alors visible.
Une fois le terrain généré et visible, il est possible de commencer à le travailler. Afin de pouvoir visualiser sa forme facilement, il est toutefois préférable d'ajouter d'abord un éclairage basique, de préférence une Sunlight, qui nécessite que le terrain soit exposé à des faces en Fake Backdrop (c'est généralement le cas du brush de grande taille qui entoure le terrain). La portée infinie de la Sunlight permet d'éclairer tout le terrain à la fois. Les ombres rendent alors visibles les volumes au fur et à mesure que le paysage est sculpté.
Paramètres du TerrainInfo
Avant de s'intéresser à la mise en forme du terrain, il est utile de s'arrêter sur le TerrainInfo. Le terrain est projeté autour de cet actor (un dérivé de la classe Info, comme la ZoneInfo) et déplacer la TerrainInfo déplace donc le terrain avec. Cet actor possède quelques paramètres permettant de changer radicalement l'apparence du terrain.
- bKCollisionHalfRes : Ce paramètre mineur permet d'utiliser une collision simplifiée pour le terrain pour son interaction avec les objets physiques.
- Inverted : En réglant ce paramètre sur vrai, le terrain, qui est par défaut un sol, est inversé et devient donc un plafond. Par défaut, les polygones du terrain ne sont visibles et n'ont de collision que sur leur face supérieur. Inverted permet de les afficher et de placer leur collision sur la face inférieur. Cette fonction est utile pour créer des cavernes en utilisant un terrain pour le sol et un autre pour le plafond de la grotte, technique notamment utilisée dans la map DM-CBP1-Neandertalus.
- TerrainMap : Il s'agit de l'heightmap, qui peut donc être changée tout en conservant les autres paramètres du terrain (layers et decolayers notamment).
- TerrainScale : L'échelle du terrain, correspondant pour X et Y à la taille des quads (qui peuvent être des rectangles si les deux mesures ne sont pas exactes) et pour Z à l'échelle verticale du terrain. Pour ce qui est de l'axe Z, un terrain ne peut pas s'étirer à plus de 8192 unités au-dessus ou au-dessous de la TerrainInfo avec TerrainScale Z = 64. Augmenter ou diminuer cette valeur permet d'augmenter les altitudes minimales et maximales.
Les valeurs peuvent également être négatives pour retourner le terrain en miroir. Cette fonction est utilisée par exemple dans CTF-MoonDragon : les deux parties de la map étant symétrique, la même heightmap est utilisée pour les deux côtés, mais la base bleue utilise des valeurs négatives pour les valeurs X et Y du TerrainScale. Avec une valeur négative sur l'axe Z, les altitudes sont inversées : tout creux devient une bosse et inversement. - TerrainSectorSize : Cette propriété définit la taille d'un secteur du terrain. Tout le terrain est divisé en secteurs carrés donc la longueur en quads est spécifiée par ce paramètre. Il s'agit d'un moyen d'optimisation important.
- VertexLightMap : Il est possible d'ajouter dans ce champ une texture de la même taille que l'heightmap (et au format RGBA8) pour l'utiliser comme lightmap. Elle remplace alors tout autre éclairage présent sur le terrain, qui n'est plus affecté par les sources de lumière.
TerrainScale est, avec les dimensions de l'heightmap, l'élément qui définit la taille finale du terrain dans le jeu : un TerrainScale plus élevé permet de couvrir plus de superficie avec autant de quads ou d'utiliser moins de quads pour la même superficie. ONS-Torlan utilise ainsi un TerrainScale de 320 sur X et Y, ce qui donne des quads relativement grands et permet d'occuper un carré de 44545 unités de côté avec une heightmap de 128 x 128. Avec des quads de 64, l'heightmap aurait dû mesurer 1024 pixels de côté et une bonne partie serait restée inutilisée. Plus important encore, une heightmap de 128 unités de côté génère un terrain de 16384 quads alors qu'une heightmap de 1024 unités de côté aboutit à un terrain de plus d'un million de quads.
Modelage du terrain
En passant le pointeur sur le sol avec l'éditeur de terrains ouvert, deux cercles jaunes se déplacent sur la surface, centrés sur un marqueur rouge sous la souris.
Il s'agit du pinceau, qui s'ajuste avec la partie Options de l'éditeur.
- Inner Radius et Outer Radius : Définissent la taille des deux cercles jaunes : Inner est le plus petit et Outer le plus grand. Les deux valeurs s'ajustent séparémment, mais en activant le cadenas à droite, il est possible de verrouiller l'écart entre les deux. Déplacer le slider du rayon supérieur entraîne alors celui du rayon inférieur qui n'est plus modifiable indépendamment.
- Strength : Puissance de l'outil utilisé.
- Adjust : Modifie également la puissance de l'outil en conjonction avec Strength.
Par défaut, les réglages du pinceau sont globaux. Cocher la case "Per Tool?" au-dessus des réglages réinitialise toute modification et permet de le paramétrer différemment pour chaque outil.
Certains outils n'utilisent qu'un seul cercle du pinceau (Flatten, Smoothing, Noise, Visibility). C'est alors le Outer Radius qui est pris en compte.
Si la map doit être symétrique, plutôt que de réaliser péniblement deux moitiés de terrain identiques, on peut créer un miroir du pinceau avec le menu défilant marqué Mirror. On peut y choisir d'utiliser un miroir sur X (droite-gauche), Y (haut-bas) ou les deux à la fois avec le miroir XY (il y a alors 4 pinceaux). Toute action effectuée sur le terrain est alors reproduite de l'autre côté du miroir.
En appuyant sur la touche T, on peut afficher et masquer le terrain. Ce raccourci fonctionne dans les vues 2D et il est alors possible d'utiliser l'éditeur de terrains dans ces vus, ce qui est particulièrement utile avec la vue de dessus.
Le pinceau est le principal outil permettant de modifier le terrain, aussi bien pour créer les reliefs que pour appliquer les textures et les décorations. Les effets sont différents suivant que l'on utilise les outils de l'éditeur en ayant sélectionné une heightmap dans l'onglet Terrains, un layer dans l'onglet Layers ou un decolayer dans l'onglet Decorations. Pour sculpter les reliefs, il faut sélectionner l'heightmap.
L'utilisation des outils se fait ensuite en appuyant sur CTRL et en cliquant tout en déplaçant la souris sur la surface à traiter. Notez que comme l'heightmap ne fournit que des données d'altitude, le terrain ne peut pas comporter de surplomb : les vertices qui le composent ne peuvent être décalés que verticalement et jamais horizontalement.
Vertex Editing
L'outil Vertex Editing permet de sélectionner des vertices en appuyant sur la touche CTRL et en cliquant sur le terrain. Les vertices compris dans le pinceau sont sélectionnés. Une fois la sélection faite, garder les deux boutons de la souris et la touche CTRL enfoncés permet de déplacer les vertices sélectionnés vers le haut ou vers le bas en déplaçant la souris vers l'avant ou l'arrière.
Les vertices compris à l'intérieur du Inner Radius sont déplaces avec la force maximale et sont donc signalés par des marqueurs clairs (blancs si Strength = 100). Ces marqueurs deviennent plus sombres entre le rayon inférieur et le rayon supérieur et la force de l'outil diminue avec le changement de couleur, ce qui permet de réaliser un effet progressif.
La sélection peut-être étendue en cliquant sur le bouton "Select" sous Soft Selection, à droite des réglages du pinceau. La case à cocher "Automatic ?" est dépourvue d'effet, tout comme le bouton "Undo" en dessous. Il n'est malheureusement pas possible d'annuler une action de modélisation dans l'éditeur de terrains.
Painting
L'outil Painting permet de littéralement peindre du relief sur le terrain en passant le pinceau sur la surface en appuyant sur CTRL et le bouton gauche de la souris pour peindre des bosses, le bouton droit pour peindre des creux. L'effet est très puissant et Strength et/ou Adjust doivent donc être assez faibles.
Smoothing
Smoothing lisse les reliefs pour les adoucir. Les reliefs abrupts sont lissés et les extrêmes de hauteur sont ramenés vers la moyenne.
Passer le smoothing sur les bords du terrain génère des aberrations, il est donc recommandé de se tenir à l'écart des extrémités.
Noise
À l'inverse du smoothing, l'outil Noise ajoute du bruit sous le pinceau. Chaque vertex reçoit une variation de hauteur aléatoire.
Flatten
Flatten permet d'égaliser la surface sur laquelle le pinceau est passé. La hauteur à laquelle est aplatie le terrain est déterminée par la hauteur du vertex unique situé sous le marqueur rouge au moment où CTRL et le clic gauche sont enfoncés, et ce quel que soit le rayon du pinceau.
Visibility
L'outil Visibility masque les quads sur lesquels il est passé avec CTRL et le bouton droit de la souris enfoncés. Avec CTRL et le clic gauche, on peut rendre à nouveau visibles les quads précédemment masqués.
Les quads masqués ne sont pas seulement invisibles : ils perdent aussi toute collision. L'outil permet donc de créer des ouvertures dans le terrain, permettant d'y ajouter des trous ou des entrées.
Edge Turn
Edge Turn permet de changer le sens dans lequel les quads sont alignés sur une portion du terrain. Par défaut, vus de dessus, les quads sont divisés par un segment courant du coin supérieur gauche au coin inférieur droit. Avec Edge Turn, on peut réaligner cette arête pour qu'elle aille du coin supérieur droit au coin inférieur gauche.
Cette modification est utile lorsque des reliefs trop marqués occasionnent un effet de dents en raison de l'alignement des côtés des triangles composant les quads.
L'outil Edge Turn est sélectionné, un seul quad sous le pinceau est mis en valeur, mais l'effet s'applique bien sur la totalité de la surface englobée dans l'Outer Radius, même si celui-ci n'est pas affiché.
Select
L'outil Select permet de sélectionner une zone rectangulaire du terrain. CTRL + clic gauche permet de tracer un cadre en cliquant sur un coin de la zone à sélectionner et en l'étendant autant que voulu. CTRL + clic droit fonctionne de la même façon, mais en ne plaçant que le "coin final" du cadre, le coin d'origine restant le point de départ de la sélection précédemment faite.
L'outil n'a pas d'effet en soi mais s'utilise conjointement avec l'onglet "Misc." de l'éditeur, qui est un générateur automatique de relief.
Cet outil génère des bosses et des creux aléatoires sur la surface.
- Steps : Ce nombre paramètre la taille des reliefs aléatoires générés : plus la valeur est basse, plus les effets seront de grande taille et peu nombreux. On peut grossièrement y voir le nombre de touches apportées par l'outil sur la longueur et la largeur de l'heightmap.
- Strength : Force de l'outil. Détermine la profondeur des creux et la hauteur des sommets générés.
- Use Entire Heightmap? : Permet de générer le relief sur la totalité de l'heightmap, pas seulement sur la zone sélectionnée. Il n'est alors même pas besoin de sélectionner une section du terrain, mais l'outil Select doit tout de même être activé.
Avec une valeur élevée dans Steps et une basse valeur de Strength, et en appliquant l'effet sur toute l'heightmap, on peut créer un paysage dunaire.
À l'inverse, une Strength élevée et un Steps bas donne de profondes vallées entre quelques hautes montagnes.
Si une zone de sélection est utilisée, la valeur de Steps n'est pas appliquée au cadre de sélection mais, virtuellement à toute l'heightmap, et seule la partie sélectionnée est réellement prise en compte. De plus, le générateur tente de garder des reliefs relativement lisses et d'éviter les pentes trop abruptes. En conséquence, si un cadre de sélection est utilisé, à effet équivalent, les valeurs de Steps et de Strength devront être beaucoup plus élevées que si le générateur était appliqué à toute l'heightmap.
Les trois derniers outils, Tex Pan, Tex Rotate et Tex Scale, n'ont aucun effet sur l'heightmap.
Textures et layers
L'application de textures sur le terrain se fait par l'ajout de layers successifs dans l'onglet Layers de l'éditeur de terrains. Le premier layer est totalement opaque et permet de couvrir la totalité de la surface du sol. Les layers successifs sont généralement ajoutés avec un paramétrage qui les rend invisibles par défaut, puis appliqués au pinceau sur les zones voulues. L'ordre est important car plusieurs layers peuvent être superposés sur un même quad, auquel cas ils sont appliqués dans l'ordre, du premier au dernier, les plus bas recouvrant donc ceux au-dessus mais étant eux-mêmes recouverts par ceux placés dessous.
En plus de la liste des layers elle-même, l'onglet possède quelques boutons.
Les boutons New, Delete et Duplicate permettent d'ajouter, de supprimer ou de dupliquer un layer. Les deux flèches vers le haut et le bas remontent ou descendent le layer actuellement sélectionné dans la liste afin d'ajuster l'ordre d'application. Le dernier bouton à droite, portant le schéma d'un quad, permet de mettre en valeur le maillage des quads portant les textures cochées dans la liste qui s'affiche.
L'intérêt est de s'assurer que de trop nombreuses textures ne s'empilent pas sur les mêmes triangles. Si plusieurs layers recouvrent le même triangle, celui-ci doit en effet être dessiné à l'écran plusieurs fois, chaque nouvelle passe recouvrant la précédente.
Après la première texture, dont l'AlphaMap est blanche, on peut ajouter de nouveaux layers jusqu'à en un maximum de 32. Pour toutes, les dimensions de l'AlphaMap doivent être les mêmes que celles de l'heightmap. Autrement, la texture ne s'affiche pas correctement : en pointillés si le layer est plus grand que l'heightmap, en gros blocs aux bords visibles si le layer est de dimensions inférieures.
Lors de la création d'un nouveau layer, en créant une AlphaMap totalement noire (R, G et B = 0) on s'assure que la texture n'est appliquée nulle part pour pouvoir l'ajouter manuellement aux endroits voulus.
On peut à tout moment changer la texture d'un layer en en sélectionnant une dans le texture browser, puis en faisant un clic droit sur le layer et en choisissant "Set Texture from Current".
On peut aussi changer l'AlphaMap en choisissant celle voulue et en cliquant sur "Set Alpha from Current". L'option "Toggle Grid" a le même effet que cocher le layer dans la liste du bouton représentant un quad.
Les outils utilisés pour sculpter le terrain se comportent différemment lorsque c'est non pas l'heightmap mais un layer qui est sélectionné, à l'exception des outils qui ne servent qu'à modifier la forme du terrain. Flatten ne fonctionne pas du tout si l'heightmap n'est pas sélectionnée. Vertex Editing, Visibility, Edge Turn et Select affectent le relief dans tous les cas.
Painting
L'outil Painting est le plus important car il permet d'appliquer la texture du layer sélectionné en passant le pinceau sur le terrain avec CTRL + clic gauche enfoncés. CTRL + clic droit permet au contraire d'effacer la texture là où elle est déjà appliquée.
Il est même possible d'effacer la texture du premier layer, mais le terrain devient alors invisible par secteurs entiers.
Malgré leur invisibilité, les polygones du terrain qui n'ont alors plus du tout de texture restent solides et bloquent le passage, contrairement à l'outil Visibility qui permet de réellement trouer le terrain.
Smoothing
Smoothing permet de rendre plus douces les transitions entre les textures en étendant la distance de fondu du layer actuellement sélectionné. L'effet peut être utile mais il ne doit pas être utilisé de façon indiscriminée car il cause une forte augmentation de nombre de polygones où plusieurs layers se recouvrent et donc du nombre de polygones à afficher plusieurs fois de suite par le moteur du jeu. De plus, la superposition de textures peut avoir un rendu un peu étrange.
Noise
Utilisé sur l'heightmap pour ajouter des variations aléatoires de hauteur, l'outil Noise permet, utilisé avec un layer, d'ajouter des taches aléatoires du layer sous le pinceau.
Tex Pan, Tex Rotate et Tex Scale
Ces trois outils ne fonctionnent qu'avec un layer sélectionné. Ils permettent respectivement de décaler la texture, de changer son orientation et de la redimensionner.
Layer dans le TerrainInfo
Certains des outils de l'éditeur de terrains permettent de modifier visuellement des propriétés accessibles dans le TerrainInfo lui-même. Ses propriétés comportent une liste, Layers, dont chaque item est un layer accompagné de ses propriétés, dont certaines ne sont pas accessibles ailleurs dans l'éditeur.
- AlphaMap et Texture : Contiennent la référence à l'AlphaMap et à la texture du layer, qui peuvent être changées à tout moment.
- LayerRotation : La rotation appliquée au layer. Ce paramètre est celui affecté par Tex Rotate. On peut contrôler très précisément la rotation en ajoutant manuellement une valeur précise dans ce champ. Surtout, Tex Rotate ne permet de faire pivoter la texture qu'autour de l'axe Z (horizontalement), alors que la propriété LayerRotation permet de la faire pivoter verticalement autour des axes X et Y, ce qui peut être utile si le layer est appliqué sur des portions de terrain très verticales, où la projection sur Z occasionne des déformations et étirements disgracieux.
- TextureMapAxis : Permet de définir si la projection de la texture se fait verticalement (par défaut, avec TEXMAPAXIS_XY, donc projetée depuis le dessus) ou horizontalement (avec TEXMAPAXIS_XZ ou YX, donc de droite à gauche ou d'avant en arrière). De la même façon que LayerRotation, ce paramètre est intéressant si la texture est appliquée sur des surfaces tenant plus du mur que du sol.
- TextureRotation : La rotation appliquée non pas au layer mais à la texture. Le layer peut être projeté sous n'importe quel angle, mais la texture peut aussi être pivotée le long de l'angle de projection.
- UPan et VPan : Il s'agit du décalage de la texture. Ces propriétés sont celles affectées par l'outil Tex Pan.
- UScale et VScale : L'échelle de la texture. Valeurs modifiées par l'outil Tex Scale.
Les paramètres KFriction et KRestitution sont des propriétés physiques utilisées pour les collisions du layer avec les objets physique. Le premier détermine la friction appliquée aux objets (la force du freinage qui leur est imposé lorsqu'ils se déplacent sur le layer), le second influence la restitution du mouvement, c'est-à-dire la force des rebonds causés par la collision avec ce layer. Ces paramètres n'ont généralement pas besoin d'être modifiés.
Derniers ajustements
Avec les outils de l'éditeur de terrains, il est ainsi possible de créer un terrain vierge, de le sculpter et de le texturer comme voulu avant d'y disposer les static-meshes, brushes et autres objets nécessaires au jeu. Si des modifications doivent apportées à la topographie après que tous ces éléments aient été placés, tout actor ajouté à la map possède, dans l'onglet Collision de ses propriétés, le paramètre bAutoAlignToTerrain. Si ce paramètre est vrai et que l'actor se trouve à la verticale du terrain (aussi bien dessus que dessous), il se déplacera vers le haut ou le bas en même temps que le quad sur lequel il est positionné.
Il reste possible de déplacer les actors ou le TerrainInfo de façon libre : seul la modification du relief a cet effet. À ce propos, notez qu'un terrain ne peut pas être tourné en faisant subir une rotation au TerrainInfo. Le terrain est toujours parfaitement aligné sur la grille.
Eclairage
L'éclairage des terrains se fait sur le même modèle que celui des static-meshes (en faisant la moyenne de la lumière sur chaque vertex de chaque triangle), mais de façon simplifiée : la quantité de lumière reçue par un triangle du terrain est liée à son orientation par rapport à la source de lumière seulement. En conséquence, s'il peut recevoir les ombres des objets (brushes, static-meshes, etc.), le terrain ne reçoit pas d'ombre de lui-même : si un gouffre profond fait face à la Sunlight, la face orientée vers la lumière sera éclairée à pleine puissance, même si l'autre face du ravin devrait projeter une ombre dessus.
Cet effet est suffisant dans la plupart des cas, car il permet de simuler la radiosité des surfaces, mais l'approximation peut devenir flagrante lorsque des zones qui devraient clairement être à l'ombre sont éclairées, ou lorsque d'autres objets (BSP, static-meshes) reçoivent l'ombre du terrain alors que les quads autour d'eux restent lumineux.
Il peut donc être nécessaire d'ajouter une brush derrière les polygones du terrain afin que celui-ci masque la source de lumière et pour qu'une ombre soit effectivement projetée sur le terrain. Un tel cas est présent dans BR-Riveting, car le pont central de la map reçoit l'ombre d'un des deux pics rocheux alors que le terrain autour reste beaucoup plus ensoleillé.
L'ajout d'un morceau de géométrie dans la montagne permet d'avoir un ombrage cohérent sur le terrain et la géométrie.
Enfin, le lightmap du terrain étant basique (même lorsqu'un lightmap peint à la main est utilisé avec la propriété VertexLightMap), il n'est pas possible de réaliser des ombres détaillées. La seule façon d'y parvenir est d'utiliser des Projectors.
Optimisation
Les terrains sont le plus souvent de grandes zones ouvertes et donc impossibles à zoner de façon efficace. Un terrain, même simple, étant composé de centaines de triangles, il est capital, pour ne pas oblitérer les performances, de contrôler la partie du terrain qui s'affiche à chaque instant.
Comme vu plus haut, le terrain est divisé en secteur de taille définie par le paramètre TerrainSectorSize. Tant qu'au moins un quad d'un secteur est visible, le secteur entier est affiché (cela évite de tester individuellement chaque quad). Tout l'enjeu de l'optimisation d'un terrain est donc de rendre autant de secteurs que possible non affichables à chaque instant. La visibilité n'est pas calculée par rapport à ce que le joueur peut réellement voir de son point de vue, cependant. Un objet est considéré comme visible si son affichage n'est pas expressément interdit.
Le premier moyen d'y parvenir est d'utiliser un brouillard avec bClearToFog = vrai. Ainsi, tout secteur entièrement masqué par le brouillard peut-être sauté. Mais ce moyen n'agit que sur les zones lointaines ou nécessite un brouillard proche pour limiter l'affichage à un rayon restreint autour du joueur. C'est la raison pour laquelle la plupart des maps du mode Onslaught sont noyées dans une épaisse purée de pois.
La deuxième méthode est d'utiliser des antiportals. Ces brushes empêchent l'affichage de tout objet qu'ils cachent entièrement, y compris les secteurs de terrain qu'ils masquent. Les antiportals sont généralement insérés à l'intérieur des collines les plus importantes ou derrière les falaises pour masquer des portions aussi grandes que possible du terrain. Un excellent exemple est BR-Colossus : un antiportal gigantesque coupe la map en deux à l'intérieur du mur central sur lequel se trouve la balle. Depuis l'un des côtés, la base adverse est entièrement masquée, ce qui permet d'éviter l'affichage de la moitié du terrain.
Bien entendu, l'utilisation des zones fonctionne aussi : si le joueur se trouve par exemple dans une zone séparée et ne peut voir qu'une partie du terrain à travers un portal, les secteurs non visibles ne sont pas affichés. Dans BR-Riveting, les intérieurs de chaque base sont des zones séparées. Tant que le joueur reste dedans et ne regarde pas vers l'extérieur à travers un portal, aucun polygone du terrain n'est donc calculé.
RSS Feed