Sky Boxes ou Boîtes à ciel


La boîte à ciel

Il s'agit pour l'essentiel d'une salle construite à part dans la carte, avec une "ZoneInfo" qui agit comme une caméra dont les images sont affichées sur les plafonds ou les murs qui auront la propriété "fake backdrop" cochée. On voit donc sur toute surface ainsi définie ce qui se passe dans la boîte à ciel, comme si on était placé à l'endroit où se trouve l'objet "ZoneInfo", et dans l'orientation où se trouve effectivement placé. On pourrait dessiner une flèche à partir de la caméra, orientée comme le regard que l'on dirige sur la surface de projection.

L'unité fonctionnelle de base

Charger le groupe de textures "GenEarth". Faire une salle de 512 x 512 x 512. Donner au sol une texture appropriée. Ajouter un objet "PlayerStart" n'importe où dans cette salle. Construire ensuite une autre salle plus loin, de la même taille. Ce sera la boîte à ciel.


Dans cette salle, ajouter une forme de 256 x 256 x 128 en la plaçant sur le sol, au milieu.

 

Charger maintenant le groupe de textures "SkyBox". Sélectionner une surface de la boîte à ciel et appuyer sur les touches SHITF-B pour les sélectionner toutes. Cliquer sur la texture nuageuse en bas de la palette des textures. Sélectionner de la même façon les surfaces de la boîte ajoutée au centre de la salle et choisir la texture de sol (GRD). LA boîte a maintenant cet aspect :


Les autres textures disponilble (LND1 LND2 etc...) représentent des montagnes dont les cimes se découpent sur un ciel noir. Ce sont des textures à masque. La couleur noire sera transparente, et on verra donc le profil montagneux se découper sur le fond du ciel. Choisir l'outil feuille 2D et définir dans les propriétés X wall, U:256 V:128.:


Choisir une texture en prenant garde à ce qu'aucune surface ne soit encore sélectionnée (par exemple LND2_1), ajouter la forme plane en la plaçant au bord de la petite boite comme ci-dessous.:

 

Utiliser maintenant l'option "Add Special" en définissant dans les propriétés "Masked Wall" ( Masked, 2-sided et Semi-Solid). Appuyer sur le bouton "Add Special".


Choisir maintenant une autre texture parmi les profils montagneux (LND2_1b). Faire pivoter la forme de 90 degres et la déplacer sur le bord suivant.


Continuer de façon à fermer le carré autour du centre.

L'ojet "SkyZoneInfo" se trouve dans "Browser/classes/info/zoneinfo : SkyZoneInfo. Le placer au centre, juste au-dessus du sol formé par la petite boîte. C'est à cette place que se trouve donc l'oeil de l'observateur. Il est virtuellement ouvert sur 360°. Bien sûr le champ balayé dépendra de l'orientation de l'observateur, de sa distance à la surface où l'image sera projetée, et de la taille de cette surface.

 

On va maintenant ajouter une forme plane de dimensions U:512 V:512 avec l'orientation "Floor". La placer juste au-dessus des feuilles verticales où se trouvent les montagnes.

Choisir une texture nuageuse et ajouter en tant que forme transparente. BD sur cette surface et dans les propriétés sélectionner u-pan ou v-pan, ce qui a pour effet de faire défiler les nuages comme s'ils étaient poussés par le vent.

Il faut éclairer la scène. Avec ces dimensions, une source lumineuse suffit, placée au centre, au-dessus du sol. On peut aussi modifier la luminosité de cette zone. Ceci n'affectera pas l'éclairage du "monde" où se trouve le joueur, mais seulement la clarté du ciel et tout ce qui s'y trouve.

Retour dans la première salle. Sélectionner toutes les surfaces, sauf le sol. BD pour accèder au propriétés. Choisir "Unlit" et "FakeBackdrop".


Ajouter une lumière dans cette salle, compiler et tester. Le joueur peut se déplacer et voir ce qui se passe dans le "ciel". Il ne s'agit que d'un mouvement relatif dans cette autre salle, semblable à ce qui se passe lorsqu'on observe réellement le ciel : le déplacement sur le sol est négligeable, seule compte l'orientation du regard.

Compléments

Dans cet exemple, la limite de la forme plane qui figure les nuages est visible et casse l'illusion. Pour éviter ce désagrément, il faut faire une boîte dont la largeur relativement à la hauteur des montagnes doit être assez grande de façon à ce que les limites soient cachées par les reliefs montagneux.

On a opté pour une couche nuageuse transparente. Elle laisse voir la face supérieure de la boîte à ciel. On peut animer celle-ci et obtenir un effet de nuages sur deux plans. On peut aussi en faire un ciel bleu dont les limites se confondront avec les autres parois. C'est une texture facile à faire ! On peut enfin placer un ciel noir ou étoilé.

La vitesse de défilement des nuages peut être réglée dans les propriétés de l'item "SkyZoneInfo" : "TexUpanSpeed" et "TexVpanSpeed". Plus le nombre est faible, plus le mouvement est lent. 0.5 par exemple.

On peut aussi ajouter dans la boîte à ciel d'autres surfaces planes (semi ou non solides) sur lesquelles on placera des textures représentant des planètes, des lunes, des étoiles (en utilisant alors les textures du groupe GenFx). Mais ici deux cas de figure :
- Soit on utilise les textures disponibles et elles sont dessinées sur fond noir, mais non masquées. Il faut donc les utiliser sur un fond de ciel noir..

- Soit utiliser une lumière qu'on utilise comme support de sprite. Les textures de GenFx peuvent alors être utilisées pour figurer des astres.

On peut définir des sources lumineuses, notamment pour éclairer les étoiles, soleils.. mais il ne faut pas utiliser d'effet dynamique, trop pénalisant en ressources, ou l'attribut "corona" qui n'est pas visible au dehors de la boîte. On peut toutefois créer un halo autour d'un astre dans Ued2 :
- Placer devant l'astre un acteur Actors/Effects/TranslocGlow
- Dans les propriétés de l'item, sélectioner Display et dans les champs de Skin, Sprite et Texture, choisir une texture que l'on trouve dans le catalogue GenFx : LensFlar.DotA.
- Ajuster toujours dans Display l'échelle de l'item pour qu'il convienne et l'éclairer par une source lumineuse.
Voir pour exemple DOM-Wasteland à NaliCity.

Tout simplement, pour figurer un soleil voilé par les nuages, il suffit d'ajouter au-dessus de leur couche transparente, entre celle-ci et le plafond proprement dit de la boîte à ciel, une source lumineuse dont on ajustera les propriétés de couleur et d'intensité.

Pour éviter que les tirs vers le ciel se brisent sur le plafond de la pièce où on se trouve, on peut les faire disparaître dans le lointain du ciel qu'on vient de créer : rajouter un plan à environ 64 u en-dessous du plafond de la salle où se trouve le joueur. Donner la propriété fakebackdrop au nouveau plafond. Rendre cette forme (non transparente bien sûr) non-solide. Le projectile la traversera et son éclatement sur le "vrai" plafond sera invisible.

Et si on veut que le ciel soit mobile, il faut donner la propriété bStasis=faux à SkyZoneInfo et l'associer à un attachmover qui pourra donc le déplacer, par exemple pour figurer un déplacement dans l'espace ou sous-marin. Pour faire un ciel tournant, il faut utiliser un rotating mover qui porte la texture de la voûte céleste. Utiliser la variable yaw=2000 par exp. Pour rajouter une étoile qui tourne aussi autour du pôle, il faut que le rotatingmover qui la supporte soit axé sur le centre, avec initialstate=none. Ceci peut se faire en découpant une forme primitive de très faible épaisseur ayant son centre de gravité au centre du ciel. Ceci se fait en découpant après interesection la partie utile qui porte l'image de l'étoile, de façon à ce que le centre de gravité soit en dehors de la surface visible (unlit). La vitesse yaw est la même bien sûr.

Pour faire simplement un ciel qui tourne sur son axe, sans déplacement, il faut définir dans les propriétés de l'item "SkyZoneInfo" :

Advanced bStatic=Faux
Movement bFixedRotationDir=Vrai
  DesiredRotation : règler Pitch, Roll, Yaw
  Physics=PHYS_Rotating
  Rotation rate : règler la vitesse de rotation

On peut placer des oiseaux dans le ciel, mais il faudra les redimensionner pour qu'ils ne paraissent pas gigantesques.

Rien n'empêche de faire une boite à ciel minuscule, à condition de réduire aussi l'échelle des textures. On peut creuser cette boite dans une autre solide présente dans la pièce où on se trouve. Si on rend cette boite qui contient le ciel transparente, on voit au travers, mais on ne voit pas son contenu. Si on la rend non solide, il n'y a plus de boite autour de la camera en fait : c'est la pièce où on est qui devient le ciel, et si on a rendu un mur "FakeBackdrop", on se voit soi-même aller et venir..

NOMBRE DE BOITES A CIEL

On ne peut avoir en principe qu'une seule boîte à ciel active par niveau. Toutefois, il est possible d'en avoir plusieurs :

- Soit avec Unreal Gold, où l'on peut disposer de plus d'une boîte à ciel par niveau en donnant à chaque SkyZoneInfo des tags différents.
(On en trouve deux dans l'intro de Na-Pali).

- Soit avec Ued2, où on peut utiliser un script : voir à la page des sripts MultiSkyBox