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

Current Project: Rejuvenation of Hellkeeper.net

Skybox

Une skybox est une zone ayant l'apparence d'un ciel et contenant un actor particulier, la SkyZoneInfo. Cette dernière agit comme une caméra dont le point de vue est projeté sur les surfaces dont le paramètre Fake Backdrop est coché.

Voici par exemple la skybox de CTF-Face3.

Skybox de CTF-Face3

Et voici le rendu autour de la map elle-même, contenue dans un immense cube dont les 6 faces sont paramétrées en Fake Backdrop.

CTF-Face3

Lorsque le joueur se déplace dans la map, comme la SkyZoneInfo ne se déplace pas, le ciel reste fixe, simulant un effet de parallaxe. Le ciel est également affiché partout où le jeu n'affiche aucun polygone normal. La skybox "remplit" donc les vides qui afficheraient autrement un hall of mirrors.

Création d'une skybox

Une skybox basique se compose d'un cube soustrait hors de la map avec la SkyZoneInfo positionnée dedans. Cette dernière se trouve dans l'actor browser sous la ZoneInfo.

SkyZoneInfo dans l'actor browser

Après un rebuild, si on active le Fake Backdrop d'une surface de la map, la skybox y est projetée en lieu et place de la surface elle-même.

Fake Backdrop

Tout l'intérêt est bien entendu de faire de ce cube quelque chose qui ressemble à un ciel. Il existe un nombre illimité de techniques pour y parvenir, dont voici les plus simples et les plus courantes.

Ciel en trompe-l'œil

Le plus facile est d'appliquer sur les surfaces de la skybox. Un certain nombre peuvent être trouvés dans le package SkyRenders.

Package SkyRenders

Ces cieux pré-rendus sont divisés en 6 ou 5 textures (4 côtés, une face supérieure et une face inférieure, cette dernière étant parfois omise). Appliquées dans le bon ordre, elles permettent de faire un ciel très détaillé avec seulement 12 polygones, en se reposant sur la qualité des textures choisies.

Skybox en trompe-l'œil

Le rendu dans la map est excellent.

La même skybox utilisée dans une map

L'utilisation de ce package sort un peu de l'ordinaire car la plupart de ses textures ont la particularité d'avoir leurs paramètres UClampMode et VClampMode réglés en TC_Clamp, alors que les textures normales utilisent TC_Wrap.

UClampMode et VClampMode réglés en TC_Clamp

Avec ce réglage, lorsque la texture est appliquée sur une surface, elle est le plus souvent réduite à une bande de pixels étirées à l'infini. Si la surface est plus grande que la texture, on peut voir que le fonctionnement est en fait de n'afficher qu'une seule répétition de la texture et d'étirer ses bords.

Texture avec clamping étirée sur les côtés

Si la texture apparaît seulement comme une suite de stries, il suffit de la faire défiler pour qu'elle finisse par apparaître (généralement d'un seul coup), et l'on peut alors la positionner correctement.

Ce paramètre surprenant permet en fait de contourner une des limites du moteur : à cause du filtering des textures, chaque pixel de la texture, lorsqu'il est appliqué dans le jeu, est légèrement "flou" et se fond dans les pixels adjacents. Cela permet d'afficher une texture à l'apparence lisse quelle que soit sa résolution, la distance entre la texture et la caméra. UT99 permet de comprendre la différence car le rendu logiciel est dépourvu de filtering.

Comparaison de textures avec et sans filtering

Si la texture est réglée en TC_Wrap, avec le filtering, les pixels aux extrémités de la texture sont fondus dans ceux à l'extrémitée opposée (car la texture boucle sur elle-même). Lorsque le tout est projeté "à plat" dans le ciel, les arêtes de la skybox deviennent visibles car une bande quasi microscopique de ce fondu est apparente.

Arrêtes apparentes sur une skybox sans clamping

TC_Clamp empêche la texture de boucler sur elle-même et étire, au contraire, les extrémités de la texture à l'infini, sans répétition. Les pixels sur les bords de l'image ne sont donc pas fondus avec des pixels aux couleurs radicalement différents. Comme les extrémités des rendus de SkyRenders se correspondent parfaitement, les arêtes de la skybox disparaissent et le trompe-l'œil est alors parfait. Les angles peuvent rester visibles, selon le point de vue, à cause de la perspective, mais si la SkyZoneInfo est à peu près centrée dans la skybox, aucune déformation ne sera visible dans la map.

Illusion parfaite sans trace de la forme de la skybox

Autre type de skybox

Il est bien sûr possible de faire une skybox sans textures en trompe-l'œil, en fabriquant purement et simplement son propre ciel. BR-Skyline, par exemple, utilise une skybox très simple avec une texture de ville en bas, une texture de ciel en haut, et un horizon composé de deux fogrings. Un fogring est un static-mesh cylindrique pourvu d'une texture dont l'extrémité supérieure ou inférieure (voire les deux) fait un fondu vers la transparence.

Skybox de BR-Skyline

Les côtés de la skybox sont ainsi cachés par les fogrings qui entourent la SkyZoneInfo et ne sont jamais visibles, la texture qu'ils portent importe peu. L'effet final est celui d'une ville loin sous la map, qui disparaît au loin dans une brume blanche. Au-dessus de cette horizon, la brume se fond dans les nuages.

BR-Skyline avec son ciel

S'il y a un brouillard dans la map, un fogring de la même couleur permet de dissimuler l'extrémité physique du niveau en la dissimulant dans la brume. Plus d'explications sur la technique à la fin du tutorial sur le brouillard.

Skybox utilisée comme ZoneInfo

Une SkyZoneInfo fonctionne comme une ZoneInfo normale et peut donc être utilisée pour les mêmes choses.

La zone régie par une SkyZoneInfo peut contenir un terrain comme n'importe quelle autre zone en réglant bTerrainZone sur vrai dans ses propriétés. Vu la taille d'une skybox en général, il faut soit prévoir un terrain de très petite taille, soit diminuer la taille des quads en diminuant les valeurs du TerrainScale de la TerrainInfo.

La SkyZoneInfo peut générer du brouillard et ce dernier est visible dans le ciel avec ses propres paramètres, quels que soient les paramètres de brouillard (ou même l'absence de brouillard) dans la zone où se trouve le joueur. La skybox de DOM-OutRigger est ainsi agrémentée d'un épais brouillard orange alors que la map elle-même en est dépourvue.

Skybox de DOM-OutRigger avec brouillard

Il s'agit d'une exception au fonctionnement normal du brouillard.

La plupart du temps, la skybox est séparée du reste de la map, mais il ne s'agit pas d'une obligation et une zone normale de la map peut être utilisée comme skybox.
DM-512K-Aquarius, de Sinnical (incluse dans le pack 512k), permet ainsi aux joueurs de se rendre dans la skybox. La map principale est un château miniature dans un aquarium situé dans une pièce d'apparence gigantesque qui n'est autre que la skybox. Il est possible d'emprunter une warpzone pour se rendre dans la skybox afin d'y prendre un item (le UDamage) puis de revenir dans la map normale. Un joueur dans la skybox apparaît en énorme dans le ciel pour ceux situés dans l'aquarium. La même chose est possible dans UT2004 car le fonctionnement des skyboxes n'a pas du tout changé entre les deux versions.

Aquarius, avec une skybox visitable

La SkyZoneInfo peut être soumise à des rotations dans n'importe quel sens et son point de vue sera alors tourné de façon correspondante dans la map lorsqu'un joueur regardera le ciel. Il est donc possible d'orienter précisément la SkyZoneInfo pour obtenir un effet précis. En activant bDirectional dans ses paramètres de la SkyZoneInfo, la flèche qui s'affiche dans l'éditeur permet de visualiser facilement cette orientation.

Éclairage

Afin de simuler l'éclairage du Soleil, de la Lune ou autre dans la map, il existe une sous-classe de l'actor Light, la Sunlight, qui n'est jamais qu'une Light basique avec une icône différente, le LightEffect LE_Sunlight et le paramètre bDirectional réglé sur vrai pour rendre son orientation visible.

Sunlight dans l'éditeur, dans l'actor

La Sunlight projette sa lumière à l'infini, sans aucune limite de portée. Sa lumière n'est pas émise d'un point précis mais par toutes les surfaces en Fake Backdrop, selon l'orientation de la Sunlight, comme si chacune de ces surfaces était une fenêtre sur le ciel. La position de la Sunlight n'a aucune importance, il n'est pas nécessaire de la placer dans la skybox. Il est même possible d'utiliser une Sunlight et des surfaces en Fake Backdrop pour bénéficier de son éclairage alors qu'aucune skybox n'est présente dans la map.

Map sans skybox avec une Sunlight aléatoirement placée. L'éclairage par les surfaces Fake Backdrop fonctionne néanmoins

Beaucoup de maps utilisent plusieurs Sunlights afin de projeter une lumière secondaire sur les parties ombragées qui seraient, autrement, totalement noires. Avec une Sunlight principale jaune pour simuler la lumière du soleil, une Sunlight bleue, moins lumineuse et orientée dans le sens opposé, permet d'éclairer les ombres de façon réalistes. Dans BR-Colossus, par exemple, pas moins de 3 Sunlights sont utilisées et placées non pas dans la skybox, mais dans un endroit facile d'accès : au centre de la map, au niveau de la ZoneInfo principale.

Sunlights de BR-Colossus

Il est cependant généralement plus facile de mettre la Sunlight dans la skybox pour la positionner précisément au niveau d'un éventuel soleil.

Sunlight alignée dans sa skybox

Pour gérer l'orientation avec minute, on peut verrouiller la vue 3D dessus avec l'outil Lock to Selected Actor? de la vue 3D.

Bouton de verrouillage de la vue sur l'actor sélectionné

Lorsqu'il est activé, sélectionner la Sunlight (ou n'importe quel autre actor, d'ailleurs) donne à la vue 3D la position et l'orientation de l'actor. Une grande croix rouge barre alors la vue. Il s'agit de la flèche directionnelle de l'actor vue parfaitement alignée. Tant que l'outil de verrouillage est activé, déplacer ou réorienter la vue 3D change la position et l'orientation de la Sunlight. On peut donc viser de façon précise pour aligner vers la SkyZoneInfo.

Verrouillage sur la Sunlight pour viser la SkyZoneInfo

La lumière solaire étant émise par les surfaces en Fake Backdrop, la skybox elle-même n'est pas affectée. Son contenu s'éclaire donc comme n'importe quelle partie de la map. Les textures du ciel pré-rendu sont, elles, généralement réglées en Unlit car on cherche à éviter d'y projeter des ombres.

Notez que l'orientation de la SkyZoneInfo n'a pas d'incidence sur la direction de la lumière produite par une Sunlight car ce dernier ne dépend que de l'orientation absolue de la Sunlight elle-même, sans relation avec celle du ciel.

Skybox mobile

La SkyZoneInfo possède une sous-classe, RockingSkyZoneInfo, qui peut être dotée de mouvement.

RockingSkyZoneInfo dans l'actor browser

Malgré ce que son nom indique, elle n'est pas limitée à un mouvement de rotation et peut se déplacer de n'importe quelle façon.

Ciel en rotation

L'utilisation première de la RockingSkyZoneInfo est de tourner sur elle-même sur n'importe quel axe. Pour un joueur dans la map, c'est le ciel tout entier qui semblera tourner sur lui-même autour de la map. Il suffit pour cela d'accéder à l'onglet Movement des propriétés de la RockingSkyZoneInfo et de rélger Physics en PHYS_Rotating, puis bFixedRotationDir à vrai. Une fois paramétré ainsi, l'actor pour tourner sur les trois axes grâce aux trois champs Pitch, Roll et Yaw sous RotationRate.

RockingSkyZoneInfo avec paramètres de rotation

L'exemple par excellence est bien sûr CTF-FaceClassic avec sa célèbre skybox comprenant la Terre, la Lune, des étoiles, des galaxies, le tout en rotation constante autour de l'astéroïde où se situe la map.

La skybox complexe de CTF-FaceClassic

Autres mouvements possibles

On peut déplacer la RockingSkyZoneInfo en la liant à objet mobile. Il suffit d'ajouter le tag de l'objet dans le champ AttachTag de la RockingSkyZoneInfo (onglet Movement de ses propriétés). Un exemple frappant se trouve dans AS-Convoy.

Package SkyRenders

Il s'agit d'une skybox compliquée composée d'un terrain entouré de falaises formant un anneau. Un static-mesh cubique en rotation constante, portant un ensemble de textures tiré de SkyRenders, englobe le tout et (élément capital), son pivot se trouve exactement au centre de l'anneau. Ce cube a un mouvement de rotation. La RockingSkyZoneInfo est placée sur l'anneau, au niveau du sol, et est liée au mouvement du cube par son AttachTag (et bHardAttach réglé sur vrai). En tournant sur lui-même, le cube fait tourner la RockingSkyZoneInfo sur l'anneau tout en restant parfaitement aligné avec elle. Pour un joueur dans la map, qui voit cela du point de vue de la RockingSkyZoneInfo, l'effet est inverse : le ciel et la RockingSkyZoneInfo semblent immobiles alors que l'anneau et les falaises semblent défiler.

La skybox de Convoy, plus compliquée que la plupart

Pour l'anecdote, la RockingSkyZoneInfo existe également dans UT99, mais n'est utilisée dans aucune des maps du jeu, pas même CTF-Face, qui possède pourtant une célèbre skybox en rotation. La SkyZoneInfo de base peut en effet être rendue mobile en jouant sur quelques paramètres, rendant sa dérivée inutile. Dans UT2004, les choses sont différentes car cet onglet est caché dans les paramètres de la SkyZoneInfo et visible seulement dans ceux de la RockingZkyZoneInfo, ce qui rend nécessaire le recours à cette dernière pour jouer sur les réglages de mouvement.

Limites

La skybox est un outil simple, soumis à très peu de limitations. La principale est qu'une seule skybox peut être active dans une map. Il est cependant possible de trouver des classes modifiées qui permettent d'avoir plus d'un ciel dans la map (comme dans CTF-PhaseShift, d'Angel_Mapper), mais ces versions personnalisées sont soumises à des contraintes particulières. Il est notamment impossible d'afficher deux skyboxes en même temps à l'écran.

© 2005-2025, by Hellkeeper.

Valid XHTML 1.1 & CSS 3