Skybox (jeu vidéo)

Un article de Wikipédia, l'encyclopédie libre.
L'image en bas à gauche montre le point de vue (en noir), celle de droite le cube reflétant l’environnement extérieur, et celle du haut montre le patron du cube, c'est-à-dire, les 6 images constituant la skybox en émulant l'environnement extérieur.

Une skybox (en anglais, littéralement « boîte de ciel ») est un procédé graphique permettant de donner, dans un espace tridimensionnel, l'illusion que cet espace est plus étendu qu'il ne l'est réellement. Une skybox est techniquement un décor projeté sur les parois intérieures d'un cube dont le centre est une caméra, cela signifie que, concrètement, les éléments qui sont contenus dans une skybox sont inatteignables, étant donné que le cube ne bouge pas par rapport à la caméra.

Pour représenter le ciel dans une scène 3D temps réel, on peut penser dans un premier temps qu'une sphère texturée centrée sur la caméra et de rayon virtuellement infini sera le plus adapté. Mais il se trouve que n'importe quel volume texturé convexe peut remplacer la sphère sans changer le résultat à condition que la texture de ciel ait été projetée convenablement sur ce volume. C'est cette astuce que l'on exploite en remplaçant la sphère par un cube, constitué de 12 triangles et 6 textures carrées ce qui sera peu coûteux en calcul car simple à gérer pour la carte graphique.

Une skybox sert donc à émuler l'existence d'un environnement lointain en infographie 3D, et particulièrement pour des utilisations en temps réel telles que les vieux jeux vidéo en 3D. Elle a longtemps été utilisée, tant pour sa simplicité de mise en œuvre que pour son efficacité technique et graphique. Cependant, au fil des évolutions technologiques, elle a été progressivement remplacée par l'émulation d'environnements atmosphériques paramétrables, plus complexes et gourmands en ressources, mais beaucoup plus réalistes.

Une skybox est constituée de 6 images : une par face du cube dans lequel se trouve la caméra (le point de vue). Lorsque la caméra se déplace, la boite du ciel, elle, reste immobile, contenant ainsi en permanence tout le reste de l'environnement tridimensionnel. En revanche, lorsqu'elle effectue une rotation dans les 3 axes, le cube constituant la skybox s'ajuste (en sens inverse). Comme la skybox représente l'environnement lointain, elle constitue le fond de l'image virtuelle. C'est donc généralement le premier élément à être dessiné dans le buffer/tampon d'affichage du rendu final. Les images la composant ne dépassent généralement pas la taille de 512×512 pixels (2048×2048 maximum) car l'interpolation induite par les texels est suffisante en termes qualitatifs pour l'environnement lointain (sur lequel on ne zoomera pas — sauf modification du champ de vision (FOV) pour l'émulation de cette fonction — puisque la caméra reste au centre du cube). Cependant, la taille optimale de chaque image d'une skybox devrait être définie en fonction de la taille du bord le plus petit du dispositif d'affichage final. Par exemple, si elle est destinée à être utilisée sur un écran de 1024×768 pixels, une taille de 512×512 pixels par image est suffisante. Par contre, sur un smartphone, 256×256 serait préférable du fait de la petite résolution de ces appareils.

Toute la difficulté de la mise en œuvre réside dans l'obtention des images émulant le panorama 3D. Ainsi, il est beaucoup plus facile d'utiliser un logiciel dédié à la genèse d'environnements synthétiques tels que le célèbre Terragen, que de partir de photographies panoramiques ou de dessins. En effet, afin de simuler l'effet panoramique, en particulier lorsque la caméra regarde un angle du cube, il ne faut aucune discontinuité de point de vue entre les 6 images. Ainsi, il ne suffit pas de prendre 6 photos (1 pour chaque face du cube) : il faut utiliser un logiciel dédié aux photos panoramiques ayant une fonction de sortie dédiée aux skyboxes.

Comme dit précédemment, l'utilisation la plus évidente d'une skybox est pour représenter le ciel : ensoleillé, nuageux, orageux, à midi ou au crépuscule, sous une nuit étoilée avec ou sans lune. On peut également y ajouter une chaîne de montagne, la mer, un fleuve, une vallée, des champs, la « skyline » d'une ville. Tout type d'élément de décor lointain peut y être intégré facilement. On peut également penser aux environnements marins, à l'espace interstellaire. Pour ce qui est des nuages, ils posent un problème car ce sont des éléments qui doivent être dynamiques pour plus de réalisme. Une solution possible est d'ajouter à une texture de montagnes et de plaines mais sans le ciel, un mélange de plusieurs textures de ciel, de nuages, d'une texture de soleil ou d'étoiles, mélange que l'on fera varier subtilement (coefficients de mélange ainsi que position des nuages, du soleil...) ; la luminosité de ces textures et du reste de la scène devront également varier. On obtiendra un rendu final assez réaliste à toute heure de la journée, de la nuit, avec différentes conditions climatiques et cela avec un coup en calcul extrêmement faible.

Il est à remarquer que les skyboxes peuvent servir d'outils de visualisation pour la diffusion de photos panoramiques (adaptées). L'un des défauts notables de ce système est qu'on a l'impression que le reste de l'environnement flotte dans les airs lorsqu'on peut apercevoir le « sol » de la skybox car, comme il paraît être loin, l'effet de vide est accentué, ce qui peut poser des problèmes lorsque l'environnement est censé être au niveau du sol. En effet on ne peut pas simplement positionner la caméra au niveau du sol : si la caméra n'est pas à une distance infinie des côtés du cube, on observe près de la caméra une résolution très mauvaise, très pixelisée. Ainsi, si le sol est une prairie, il faudra positionner le sol de la skybox à une distance infinie vers le bas, utiliser des textures de prairies en haute résolution positionnées juste en dessous de la caméra, et trouver un moyen de cacher la transition entre les textures détaillées et la texture de vue d'ensemble du sol de la skybox. Une autre solution toujours pour la prairie ou pour un sol type désert est d'utiliser une texture multi-résolution, type de texture le plus souvent fabriquée par un algorithme plutôt qu'obtenu par des photos retravaillées.