Decolayers
Fonctionnement
Un decolayer est un outil permettant de générer et de répartir aléatoirement des static-meshes sur la surface d'un terrain pour afficher de la végétation ou des cailloux.
Les static-meshes ainsi générés ne sont affichés que dans un rayon paramétrable autour du joueur, ce qui permet de ne pas dessiner à chaque instant des centaines de touffes d'herbes. Plus ils sont éloignés, plus ils deviennent transparents, jusqu'à ne plus être affichés du tout au-delà du rayon voulu, à l'instar des particules du xWeatherEffect.
Tout comme un layer, un decolayer est formé d'au moins deux éléments : une texture, la DensityMap (en lieu et place de l'AlphaMap du layer) qui définit la densité de static-meshes sur chaque point du terrain, et un static-mesh (en lieu et place de la texture du layer).
Les decolayers sont généralement utilisés pour répartir de la végétation (herbe, buissons) ou bien des petites pierres ou des débris. Leur utilisation est limitée par deux facteurs : tout d'abord, les static-meshes d'un decolayer ne projettent aucune ombre, ce qui empêche de les utiliser pour des éléments de grande taille dont on attend qu'ils aient un impact visuel fort. De plus, ils sont dépourvus de collision, ce qui convient pour des éléments qui ne sont pas censés ralentir le joueur mais interdit leur utilisation pour placer par exemple des arbres ou des murets sur un terrain.
Création d'un decolayer
Dans l'éditeur de terrains, l'onglet Decorations se présente comme l'onglet Layers.
New, Delete et Duplicate permettent d'ajouter, supprimer et dupliquer un decolayer. Les deux derniers ne fonctionnent qu'en sélectionnant un decolayer existant. Cliquer sur New ajoute un élément vierge à la liste des decolayers.
Après avoir sélectionné un static-mesh dans le static-mesh browser, on peut l'ajouter au decolayer en faisant un clic droit sur ce dernier et en sélectionnant "Set Static Mesh from Current". Le nom du static-mesh apparaît alors à droite des trois icônes noires à croix rouge.
Il faut ensuite ajouter une DensityMap. Contrairement aux layers pour les textures, l'éditeur ne propose pas de créer un DensityMap à partir de rien.
Deux options sont alors possibles. La plus directe est de créer une texture de la même taille que l'heightmap dans un logiciel externe et de l'importer dans UnrealEd. Le contenu de la texture n'a pas d'importance car seul le canal alpha est utilisé pour déterminer la répartition des meshes, de la même façon qu'un layer. Si la texture importée est enregistrée dans un format sans information de transparence (.bmp par exemple), le canal alpha sera par défaut entièrement opaque et les static-meshes couvriront l'intégralité du terrain par défaut. À l'inverse, en utilisant un format qui contient des données de transparence (.tga notamment) et en rendant la texture totalement invisible avant de l'importer, on s'assure que le decolayer n'est appliqué nulle part par défaut et qu'il ne sera visible que là où il sera ajouté à la main.
La deuxième option est de créer un layer mais de ne l'appliquer nulle part, de le supprimer, et de récupérer son AlphaMap inutilisée comme DensityMap du decolayer. Cette technique a l'avantage de ne pas faire appel à un quelconque autre logiciel et de rester dans UnrealEd.
Une fois la DensityMap créée, on l'ajoute au decolayer de la même façon que le static-mesh, par un clic droit et en choisissant "Set Density Texture from Current". Elle apparaît alors à la place de la première croix rouge.
Dans mon cas, la DensityMap est entièrement opaque, à l'exception d'un grand "œ" transparent.
Aucune décoration n'apparaît immédiatement, même si la DensityMap n'est pas entièrement transparente, en raison du réglage par défaut du decolayer. En effet, le rayon dans lequel les décorations sont affichées est 0 par défaut. Pour l'agrandir, il faut se rendre dans les propriétés de l'actor TerrainInfo. On y trouve une liste, DecoLayers, où chaque élément possède un ensemble de propriétés.
Chaque élément numéroté est un decolayer, correspondant à une ligne de l'onglet Decorations dans l'éditeur de terrains. On peut d'ailleurs ajouter des decolayers directement dans la TerrainInfo et ils apparaissent dans l'éditeur. Toutes les modifications doivent se faire à cet endroit. La première chose à faire est de modifier FadeoutRadius : Min et Max sont par défaut à 0 et les static-meshes ne sont donc pas affichés. Il suffit donc de mettre dans ces deux champs la distance (en unités) jusqu'à laquelle les static-meshes sont visibles.
Les décorations sont visibles normalement autour du joueur jusqu'à la distance donnée par la valeur Min. Au-delà, ils deviennent progressivement transparents jusqu'à la distance indiquée dans Max, après laquelle ils ne sont plus affichés du tout. Au fur et à mesure que le joueur se déplace, les décorations lointaines disparaissent au loin tandis que de nouvelles sont affichées autour de sa nouvelle position.
Si Max est inférieur ou égal à Min, les static-meshes sont visibles intégralement jusqu'à la distance Max et disparaissent brutalement au-delà de ce rayon, ce qui donne un effet disgracieux de clipping.
Application sur le terrain
Une fois créé et le rayon d'affichage réglé, le decolayer doit être appliqué sur les parties voulues. La DensityMap d'origine est généralement créée entièrement transparente afin de n'ajouter les décorations que sur les parties désirées, mais si elles doivent couvrir l'écrasante majorité de la map, on peut au contraire utiliser une DensityMap opaque dont on ne retire les static-meshes que des zones où ils ne doivent pas apparaître.
Avec le decolayer sélectionné, on modifie la répartition des static-meshes sur la map en peignant le decolayer comme un layer normal, avec le pinceau de l'éditeur de terrains et les outils Painting, Noise, Smoothing.
Les decolayers sont visibles en mode Wireframe et leur maillage a la couleur de l'éclairage (ou du ColorMap) qui leur est appliqué. On peut alors visualiser facilement leur distance d'affichage.
Si le terrain est affiché dans une des vues 2D avec la touche T, les decolayers sont également visibles en Wireframe sur le terrain. Le centre de la vue est alors considéré comme la position du joueur, quel que soit le niveau de zoom, ce qui permet de bien se représenter le rayon dans lequel le decolayer s'affiche.
On peut utiliser la même texture simultanément comme AlphaMap d'un layer et comme DensityMap d'un decolayer. Dans ce cas, peindre le layer ou le decolayer sur le terrain ajoute à la fois la texture et des static-meshes sous le pinceau. Et effacer l'un efface l'autre.
Si le layer est recouvert par une autre texture, en revanche, le decolayer reste visible là où le layer est appliqué "sous" la seconde couche de texture.
Il est possible d'utiliser une ColorMap pour colorer les décorations disséminées sur le terrain. Il s'agit d'une texture RGBA8 de la taille de la DensityMap qui est projetée sur le terrain et dont la couleur est appliquée aux static-meshes, comme un lightmap simplifié.
On ajoute la ColorMap en la sélectionnant dans le texture browser et en faisant un clic droit sur le decolayer pour choisir l'option "Set Color Texture from Current". La ColorMap remplace alors la seconde croix rouge.
La ColorMap étant "ajoutée" aux static-meshes, le blanc n'a pas d'effet et peut être utilisé comme couleur de fond.
La dernière croix rouge du layer est la ScaleMap, qui peut aussi être ajoutée depuis le menu contextuel. Elle permet de contrôler l'échelle des static-meshes avec une texture RGBA8 dont les valeurs RGB déterminent l'échelle des static-meshes, respectivement sur les axes X, Y et Z. 255, la valeur maximale, est l'équivalent de la taille normale du static-mesh. Si une partie de la ColorMap est par exemple d'un violet pâle dont la couleur est R = 128, V = 128 et B = 255, les static-meshes de la zone couverte par cette couleur seront à l'échelle ½ sur les axes X et Y mais de taille normale sur l'axe vertical Z.
L'ajout d'une ColorMap ou d'une ScaleMap peut sembler n'avoir aucun effet. Dans ce cas, changer n'importe quelle propriété du decolayer dans la TerrainInfo permet de rafraîchir toutes les données qui lui sont liées et les deux textures sont prises en compte (sous réserve qu'elles soient au bon format).
Propriétés avancées
La liste des propriétés du decolayer est relativement longue et permet de jouer sur la répartition et l'affichage des static-meshes utilisés comme décorations.
- AlignToTerrain : Par défaut, ce paramètre contient la valeur 0 et est donc désactivé : tous les static-meshes générés sont parfaitement verticaux. En mettant 1 dans ce champ, on peut activer l'alignement des static-meshes sur le terrain : ils restent alors perpendiculaires aux quads sur lesquels ils sont placés.
- ColorMap : L'éventuelle ColorMap utilisée.
- DensityMap : La DensityMap.
- DensityMultiplier : Détermine la fourchette du nombre de static-meshes par quad. En augmentant ces valeurs, on augmente les chances d'en générer sur chaque quad où le decolayer est appliqué, ainsi que leur densité.
- DetailMode : Choisit à partir de quel niveau de détail le decolayer est utilisé. Si le niveau de détail du jeu est inférieur à celui choisi, le decolayer est masqué pour améliorer les performances.
- DisregardTerrainLighting : Quand ce paramètre est désactivé (avec la valeur 0), les static-meshes reçoivent l'éclairage du quad sur lequel ils se trouvent. Si le champ contient 1, les static-meshes ignorent l'éclairage et apparaissent donc entièrement clairs.
- DrawOrder : L'ordre d'affichage des static-meshes. SORT_BackToFront affiche les static-meshes proches par-dessus les static-meshes lointains, SORT_FrontToBack fait l'inverse. SORT_NoSort n'utilise pas un ordre défini. Ce paramètre est important lorsque les static-meshes utilisés possèdent des parties transparentes sur leurs textures, comme c'est généralement le cas sur la végétation et le feuillage. SORT_BackToFront permet de s'assurer qu'une plante lointaine ne s'affiche pas par-dessus une plante proche dont la texture est partiellement transparente.
- LitDirectional : Régler ce paramètre sur 1 active l'éclairage directionnel des static-meshes au lieu de leur appliquer un éclairage uniforme. Chaque face du static-mesh est alors éclairée en fonction de son orientation par rapport aux lumières qui éclairent le quad correspondant à sa position. Si DisregardTerrainLighting = 0, l'éclairage des quads étant ignoré, les static-meshes ne reçoivent pas un éclairage uniforme mais seule la direction des SunLights est prise en compte, pas leur couleur et leur intensité. Les autres types de lumières sont ignorés.
- MaxPerQuad : Nombre maximal de static-meshes par quad.
- RandomYaw : Donne une rotation aléatoire à chaque static-mesh autour de son axe vertical. Cela permet d'éviter l'effet de répétition lorsque de nombreux éléments sont proches, par exemple pour de l'herbe ou des buissons.
- ScaleMap : L'éventuelle ScaleMap utilisée.
- ScaleMultiplier : Permet de modifier la taille des static-meshes sur les trois axes. Chaque axe accepte une valeur minimale et une maximale pour donner des variations.
- Seed : Nombre utilisé dans le calcul de la répartition aléatoire des static-meshes sur le terrain. On peut ajouter n'importe quel entier pour modifier la façon dont les static-meshes sont placés et ainsi conserver leur densité tout en changeant leur disposition.
- ShowOnInvisibleTerrain : Par défaut, ce paramètre est réglé sur 0 et les static-meshes du decolayer ne sont donc pas affichés sur les quads où l'outil Visibility a été utilisé pour créer un trou. Si ce paramètre est 1, le decolayer est affiché même si les quads sont invisibles (attention, le "terrain invisible" ne concerne que les polygones masqués avec Visibility ; les quads où aucune texture n'est appliquée ne sont pas considérés comme masqués, possèdent une collision et le decolayer est toujours affiché dessus).
- ShowOnTerrain : En réglant ce paramètre sur 0, on peut désactiver l'affichage d'un decolayer, par exemple à des fins de test ou pour travailler sur les reliefs et layers sans que les static-meshes ne masquent la vue. C'est le paramètre modifié par l'option "Toggle Show On Terrain" à la fin du menu contextuel qui apparaît lors d'un clic droit sur le decolayer dans l'éditeur de terrains, ou de la désactivation d'un decolayer dans la liste qui s'ouvre en cliquant sur l'icône de lunettes sous le bouton Duplicate.
- StaticMesh : Le static-mesh utilisé par le decolayer.
Changer la DensityMap, la ColorMap, la ScaleMap ou le static-mesh dans les options de la TerrainInfo revient à utiliser le menu contextuel du decolayer. Toute modification apportée dans les propriétés de la TerrainInfo est immédiatement répercutée dans l'éditeur de terrains et vice versa.
RSS Feed