Dimensions des textures

Les textures doivent avoir une dimension en puissances de 2, de 2 à 1024. Il n'est pas nécessaire qu'elle soient carrées.

Mais si le moteur 3D d'Unreal peut traiter des textures de grandes tailles, les cartes graphiques n'affichent en réalité qu'un maximum de 256*256.   Un texture de taille supérieure sera donc réduite proprement à cette taille, avec pour seul inconvénient un léger flou.

Créer et importer des textures

La palette est limitée à 256 couleurs.  Mais chaque texture peut avoir sa propre palette. On peut donc avoir une grande variété de coloris tout en bénéficiant de l'économie de mémoire que représente le mode 8-bit. Toutefois, le fait d'utiliser une seule palette pour plusieurs textures est un facteur d'économie. La fréquenc d'affichage des écrans dépend en effet du nombre de palettes utilisées dans la même scène. Certains logiciels graphiques comme "Image Alchemy"peuvent convertir des groupes d'images de 24 en 8 bits en forçant une seule et même palette.

On peut travailler une texture avec un logiciel graphique, la réduire à la taille voulue en 256 couleurs et la sauver au format *.pcx ou *.bmp pour qu'elle puisse être importée dans UnrealEd. Aller dans le menu Catalogue/Textures et en bas de l'écran cliquer sur le bouton "Import". Dans le sous-menu qui apparaît, on peut définir le nom, le groupe fonctionnel, et la bibliothèque (fichier au format *.utx) dans laquelle elle sera conservée. Si la bibliothèque existe déjà et que cette image s'y oncorpore, il ne faut pas oublier de charger TOUT le contenu de la bibliothèque AVANT d'y incoporer l'image, et de SAUVEGARDER cette bibliothèque à la fin de l'opération, faute de quoi l'image ne sera pas prise en compte.

La couleur 0 de la palette de toute image peut être traitée comme transparente. C'est utile pour des grilles, des "sprites", bref tout objet découpé ou maillé qui doit laisser voir l'arrière-plan. Il faut choisir l'option "Masked" au moment d'importer la texture. 

Le problème qui se pose est le raccord de l'image qui doit répéter son motif sur la surface où elle est affichée. Si l'on veut un raccord invisible, on peut soit utiliser un logiciel comme texsynth, soit simplement procéder comme suit :

Lorsqu'on importe une texture, UnrealEd crée automatiquement des "mipmaps" de cette texture qui en sont des versions de plus faible résolution utilisées pour l'effet "antialiasing".

Textures à partir de structures 3D :

Plutôt que de construire des structures complexes et plutôt que de se limiter aux textures disponibles dans les pictothèques, on peut capturer l'image de la structure dans la fenêtre 3D de l'éditeur, la formater correctement dans le logiciel de dessin utilisé et la sauvegarder au format *.PCX pour la réintégrer dans "MyLevel".
   
Exemple sommaire : la structure complexe à gauche utiliserait inutilement des ressources pour un effet visuel à distance peu différent de la simple texture à droite. On pourra répliquer celle-ci indéfiniment pour des effets de façade, et le vide des croisées par exemple 4 carreaux sera facile à découper. Les deux images ont les mêmes dimensions de 512x512. On peut ainsi se texturer une carte entière sur mesure !

Propriétés de textures

  Elles sont accessibles par BD sur une texture dans le catalogue de textures, et en cliquant sur l'item "Properties".  Les paramètres modifiables concernent :
- L'animation : voir plus loin.
- Surface : elles sont éditables dans la fenêtre de propriété des surfaces.
- Drawscale : Par défaut à 1, permet de régler la taille d'affichage de la texture (indépendamment de celle définie pour chaque surface).


Textures animées

Pour créer une séquence, il faut comme pour un dessin animé, importer une série de textures dont le nom identique pour la première partie se termine par "_A##" où ## est le uméro d'ordre de l'image, commençant à 0 (pas obligé). Par exemple :

Toutes les étapes de l'animation sont visibles dans le catalogue. Elles seront lues par le moteur d'affichage dans l'ordre croissant. Toutefois il faudra toujours utiliser la première lorsqu'on voudra paramétrer l'ensemble :

Ces deux fréquences sont utilisées pour éviter l'effet d' "animation aliasing": où les images se suivent à des vitesses variables, comme "1 2 2 3 4 4 5". Lorsque la fréquence d'affichage est entre "MinFrameRate" et "MaxFrameRate", la texture sera animée de façon homogène
Il suffit en fait de parametrer la premiere image. Les valeurs inférieures ralentissent. Les images sont en PCX. : "1 2 3 4 5".

"Detail textures" et "Macrotextures"

Une texture peut avoir optionnellement une version "détail" et une version "macro".  La première correspond à une vue de très près et laisse voir le grain (par exemple du bois, de la pierre). La seconde est la vue d'ensemble agrandie. Elle peut être utilisée dans un espace en plein air ou on voudra éviter la répétition interminable du motif. Ces options sont accessibles dans les "texture properties". Ces versions de la textures ne sont affichables que par les cartes 3D.

Quand on importe une "detail texture", il faut lui donner une échelle faible (en général 0.25). Les "Macrotextures" doivent avoir une échelle plus grande (soit 8). Ces deux valeurs sont relatives à la texture à laquelle elles seront appliquées. Les textures normales peuvent être utilisées dans cette fonction.

Les "Detail textures" et "macrotextures" multiplient les surfaces sur lesquelles elles sont appliquées. De ce fait, elles ont la capacité de modifier l'éclairage de cette surface. Les couleurs aux valeurs RGB entre 0-127 assombrissent; 128 est neutre; les valeurs entre 129-255 éclaircissent.  Toutefois, en dessinant les "microtextures" et "macrotextures", il importe de leur donner un éclairage cohérent avec leur nature. Si l'éclairage dévie trop de 128, les surfaces paraîtront trop contrastées.

Textures mouvantes

Ce sont des textures dont la surface est animée de façon aléatoire comme l'eau, la lave, etc.. Pour créer une nouvelle texture mouvante, cliquer sur le bouton "New" et sélectionner le type de texture à créer.  Le mouvement donné sera indéfini, non répétitif.  Elles prennent peu d'espace disque, de l'ordre de 4K et autant d'espace en mémoire vive qu'une texture simple de même taille. 

Supposons donc que nous voulions fabriquer de novo une semblable texture : dans le catalogue des textures, cliquer sur Fichier/nouveau (L'exemple que je donne est fait avec UnrealEd2).
Le feuLa glaceLiquideAspect mouillétexture cible d'une gâchettetexture simple

On dénomme comme on veut la nouvelle texture, la taille est généralement 256*256, et on choisit dans le champ "Class" le type d'animation de base
(survolez avec la souris pour lire les légendes)

A chaque type correspond une fenêtre spécifique dans les paramètres

La fenêtre d'édition de la nouvelle texture apparaît :

Dans la liste des paramètres, on retrouve les paramètres généraux des textures qui ne nous concernent pas ici. Seul le champ spécifique est à prendre en compte.

  ZONE DE DESSINType sélectionné

taille de l'aire concernée par l'effettaille de l'effettaille de l'effetbrillance de chaque particuleIntensité globalenombre max de particulestype d'effet  

FireTexture : pour créer une image fuligineuse, il suffit de cliquer BG dans la fenêtre et de placer l'effet ponctuellement ou en ligne, comme en dessinant en fait. Paramètres notables :
- bRising : l'effet apparaît en s'élevant progressivement, comme une fontaine par exemple.
- SparkType : une grande variété d'effets et il faut vraiment les tester pour choisir..

 

  IceTexture
Cet effet utilise une texture source qui est déformée, cette déformation vient d'une ‘GlassTexture’, qui est utilisée pour créer une distorsion ; cette texture est animée d'un mouvement, et transparente. Les dimensions des deux textures doivent être identiques à la texture que l'on veut créer. Dans la zone de dessin, en déplaçant la souris avec le BG enfoncé, on positionne la couche superficielle transparente. en réglant le paramètre TimeMethod sur TIME_RealTimeScroll, la vitesse d'animation que l'on observe dans l'éditeur correspond à ce qu'on voit dans le jeu.

Le potentiel d'effets est énorme. Des remous huileux, des courants en spirales, etc.. MAIS toutes les textures ne sont pas superposables.

Le réglage par défaut de TIME_FrameRateSync correspond à un réaffichage à chaque balayage d'écran qui permet un mouvement assez fluide. L'item MoveIce bascule le mouvement soit à partir de la GlassTexture ou de la SourceTexture.

HorizPanSpeed et VertPanSpeed déterminent le mouvement su les axes X et Y, avec un zéro à 128,128). Frequency and Amplitude agissent sur la vitesse et la taille des mouvements d'ondes.

PanningStyle Il y a cinq modes de mouvements. Tous partagent la vitesse de déplacement linéaire définis par HorizPanSpeed et VertPanSpeed

SLIDE_Linear : Déplace la texture à la vitesse de HorizPanSpeed et VertPanSpeed.

SLIDE_Circular : Mouvement circulaire utilisant Frequency, avec un rayon égal à Amplitude.

SLIDE_Gestation : Mouvement irrégulier, grossièrement circulaire, utilisant Frequency et Amplitude.

SLIDE_WavyX : Un mouvement oscillant horizontal utilisant Frequency and Amplitude.

SLIDE_WavyY : Idem vertical.

 

 

WaveTexture : pour créer une surface liquide. Il faut la considérer au départ comme une surface plane au repos située à une "hauteur" de 128. Les effets appliqués concerneront des points, des lignes, des surfaces, dont le niveau variera entre 0 et 255.
BumpMapLight angle de la lumière incidente. En écartant le curseur de la position médiane, l'image devient plus contrastée mais plus sombre.
BumpMapAngle angle de vue, position relative de l'éclairage.
PhongSize quantité d'éclairage
WaveAmp amplitude des ondes
DropType type d'effet appliqué :

DROP_FixedDepth Fixe un point statique à la profondeur FX_Depth
DROP_PhaseSpot Agite la surface ; fréquence FX_Frequency ; phase FX_Phase ; En placer plusieurs rapprochés avec de légères variations de fréquence pour créer des ondes aléatoires.
Ou encore les placer en cercle à fréquence identique mais avec des phases différentes pour créer des vortex.
DROP_ShallowSpot Comme PhaseSpot mais deux fois moins profond.
DROP_HalfAmpl Comme PhaseSpot, mais les déplacements ne se font qu'en dessous du niveau moyen de 128.
DROP_RandomMover Crée des ondes agitées à localisation aléatoire.
DROP_FixedRandomSpot Effet à localisation fixe mais d'expression aléatoire.
DROP_WhirlyThing Mouvement en petits cercles à la fréquence FX_Frequency de profondeur FX_Depth.
DROP_BigWhirly Idem, mais en cercles plus grands
DROP_HorizontalLine / DROP_VerticalLine / DROP_DiagonalLine1 / DROP_DiiagonalLine2 = Lignes statiques de taille FX_Size, fixant le niveau à la profondeur FX_Depth. Quand FX_Depth=128, ceci forme des barrières invisibles contre les ondes. A d'autres valeurs, ceci forme des ciselures. Bien placées, elles peuvent arrêter ou réfléchir les ondes de façon réaliste.
DROP_HorizontalOsc
/ DROP_VerticalOsc / DROP_DiagonalOsc1/ DROP_DiagonalOsc2 = Lignes de taille FX_Size, oscillant à la fréquence FX_Frequency.
DROP_RainDrops Simule la chute des gouttes de pluie. Enfonce la surface à la profondeur FX_Depth sur des points aléatoires à l'intérieur d'une aire rectangulaire de taille FX_Size.
DROP_AreaClamp Fixe un rectangle de taille FX_Size à la profondeur FX_Depth.
DROP_LeakyTap gouttes de profendeur FX_Depth tombant sur un point fixe, à intervalles réguliers définis par FX_Frequency, de phase FX_Phase.
DROP_DrippyTap idem mais à intervalles irréguliers.

 

 

WetTexture : pour donner un aspect mouillé à une surface. La surface que l'on veut mouiller est sélectionnée dans le champ "SourceTexture". Le type d'effet est dans "DropType".

C'est comme pour l'effet précédent, mais au lieu d'utiliser une palette pour simuler l'action de la lumière sur la surface, une texture source est déformée par les ondes, comme le ferait l'image diffractée dans l'eau. Vérifier que les dimensions de la source et de la nouvelle texture soient les mêmes.
des petites valeurs de WaveAmp conviennent pour simuler la réfraction de l'air chaud.


Scripted Textures (UnrealTournament)

Surface dont l'aspect peut être modifié dans le cours du jeu. Il faut utiliser comme support une "ScriptedTexture" que l'on peut trouver dans une pictothèque, ou la créer soi-même car cette texture doit avoir les mêmes dimensions que les textures qui seront affichées par-dessus.

Pour la créer, on utilise une texture noire à qui l'on aura soin de donner la même palette que les textures qui devront être affichées desuus. En fait rien n'empêche de prendre la texture affichée en premier par exemple comme base pour la texture codée. Ensuite dans le catalogue de textures faire file/New-->ouverture de la fenêtre des propriétés de la texture. Remplir les champs en donnant un nom explicite. Dans le sous-menu Class, sélectionner ScriptedTexture et cliquer sur OK après avoir vérifié les dimensions. Une nouvelle texture est créée. Elle se place à gauche dans l'image ci-dessous, d'abord noire.

Dans la fenêtre des propriétés qui apparaît alors on définit comme SourceTexture le premier état du bouton par exemple. La texture codée apparaît alors avec cet aspect.

Pour faire fonctionner ce système, il faut associer une gâchette "TriggeredTexture". Dont on précisera les propriétés :
- bTriggerOnceOnly : éventuellement
- DestinationTexture : cliquer sur Utiliser en ayant sélectionné la texture codée que l'on vient de crééer.
- Textures : les textures qui seront successivement affichées à la place.

Cette gâchette devra elle-même être activée par l'event d'un autre acteur. Dans l'exemple choisi, le bouton bascule d'un état éteint à un état allumé.

Bibliothèques de textures ou pictothèques

Unreal conserve les textures dans des fichiers de type "*.utx". Une bibliothèque correspond en général aux textures d'une niveau, ou à une catégorie particulière de textures.

Texture Cull

Opération qui consiste à retirer les textures non utilisées dans votre carte, et faire la liste de toutes celles qui sont employées. Il faut, après une recompilation complète de la carte, taper à la console (fenêtre d'une ligne en bas de l'écran) : Texture Cull
Ouvrir ensuite la fenêtre de Log (barre de menu-->view-->Log) où se trouvent listées les textures référencées (referenced) et celles qui sont éliminées (culled).

D'une façon générale, pour se débarrasser d'une texture récalcitrante, il faut exporter la carte, effacer la texture dans la pictothèque, réimporter la carte et recompiler.

Textures dans MyLevel

Lorsqu'on crée une pictothèque perso, se pose le problème de ses variations éventuelles au cours d'améliorations successives, au risque que les utilisateurs n'aient pas de version homogène. Il est préférable d'incorporer ses textures dans le fichier "MyLevel" qui est sauvegardé automatiquement avec la carte (à moins bien sûr qu'on ait produit une collection dont on prévoit qu'elle sera utilisée dans d'autres cartes et par d'autres amateurs).

On peut le faire d'emblée en incorporant les images *.PCX au fur et à mesure des besoins ; dans le catalogue des textures, dans le menu fichiers : importer, etc..

Mais on peut être amené à purger les textures d'une carte déjà construite pour refaire les choses proprement en modifiant ou réincorporant les textures utilisées.

1 - Exporter toutes les textures utilisées qu'on veut déplacer

2 - Les renommer en ajoutant un préfixe court du genre r_ : "r_latexture.pcx"

3 - Importer ces textures dans mylevel, le nom étant différent, il n'y aura pas de confusion avec celles du fichier d'origine

4 - Sélectionner la texture à remplacer et toutes ses semblables en appuyant sur SHIFT+T

5 - Sélectionner la correspondante de mylevel en se repérant sur le nom. Les surfaces précédemment sélectionnées sont alors "repeintes". Reprendre en 4 jusqu'à épuisement du stock..

6 - Recompiler, ouvrir le log, taper "texture cull", les textures éliminées s'affichent. Sauvegarder.

Attention : des textures utilisées dans des décorations faites avec MeshMaker ne seront pas concernées. Il faudra, soit éditer le fichier et le modifier manuellement, soit les refaire..