Last updated: 06/10/2024, 02:17

Current Project: Easing hk.fr into its new life.

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.

Exemple de decolayers utilisés pour l'herbe et les fougères dans BR-Serenity

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.

Onglet Decorations de l'éditeur de terrains

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.

Decolayer vierge ajouté

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.

Decolayer pourvu d'un static-mesh

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.

Ajout d'une DensityMap au decolayer

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.

Propriétés d'un decolayer dans la TerrainInfo

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.

Decolayer visible sur le terrain après avoir ajouté un rayon de visibilité suffisant

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.

Decolayer peint sur un terrain vierge

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.

Static-mesh d'un decolayer affichés en Wireframe sur le terrain

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.

Vue de dessus avec terrain affiché : les decolayers sont visibles en Wireframe

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.

Application d'un decolayer dont la DensityMap est aussi l'Alphamap d'un layer

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.

Un layer recouvre le layer, mais le decolayer reste visible

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.

Utilisation d'une ColorMap avec un decolayer

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.

Les static-meshes héritent de l'orientation du quad sur lequel ils sont placés Éclairage du terrain ignoré par le decolayer Decolayer affiché sur les quads masqués du terrain

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.

© 2005-2026, by Hellkeeper.

Valid XHTML 1.1 & CSS 3