Auteur : Saddik Amine
Chapitre 3 TD 5 – Dômes Célestes
Introduction
Ce TD porte sur la création et la configuration d’un environnement de ciel dynamique (SkyDome) dans Unity. L’objectif est de comprendre comment fonctionne un système de ciel et comment utiliser les phénomènes physiques pour obtenir un rendu atmosphérique réaliste. Ce travail a été réalisé sur Mac avec Unity 2022, en utilisant le pipeline URP.

Partie 1 : Mise en place de la scène et du Skydome
La première étape consiste à importer les éléments de base : le package Character Controller pour le déplacement du joueur, puis à créer un Terrain. Ensuite, on importe le SkyDome.unitypackage fourni. Une fois le prefab ajouté à la scène, il apparaît comme une grande sphère englobante. Le script SkyDome.cs gère l’affichage du ciel.
Le SkyDome est configuré pour suivre la position du joueur (sans copier sa rotation) afin que le ciel reste autour du personnage. Cela évite que le joueur ne puisse “atteindre” le bord du ciel.
Partie 2 : Compréhension et création d’un Skydome
Un skydome est une sphère (ou demi-sphère) sur laquelle est appliquée une texture simulant le ciel. Il est placé autour de la scène pour donner l’illusion d’un arrière-plan lointain sans avoir à créer de vraies géométries distantes.
Pour créer un skydome dans Unity, on peut utiliser une sphère dont les normales sont inversées (afin de voir la texture depuis l’intérieur). Cette sphère doit suivre la position du joueur mais pas sa rotation.
transform.position = new Vector3(
player.transform.position.x,
player.transform.position.y - 50,
player.transform.position.z
);
Partie 3 : Turbidité
La turbidité correspond à la quantité de particules en suspension dans l’atmosphère (poussières, pollution, humidité). Plus la turbidité est élevée, plus la lumière est diffusée et le ciel paraît moins bleu, plus “voilé”. Cela peut aussi rallonger visuellement les couchers de soleil et accentuer les couleurs chaudes près de l’horizon. Simuler cet effet en jeu est important car il permet de rendre des ambiances crédibles (désert poussiéreux, ville polluée, brume, etc.) et d’améliorer l’immersion.
Sans SkyDome, une façon simple de simuler cet effet dans Unity consiste à agir sur le brouillard (RenderSettings.fog). Plus la turbidité est forte, plus on augmente la densité du fog et on modifie sa couleur vers des tons plus gris/orangés.
Si turbidité augmente :
augmenter densité du fog
modifier la couleur du fog (ciel plus voilé)
public float Turbidity = 2.0f;
float c = ( 0.6544f * Turbidity - 0.6510f ) * 1e-16f;
float fBeta = 0.04608365822050f * Turbidity - 0.04586025928522f;
RenderSettings.fogColor = new Color(fTau[0], fTau[1], fTau[2]);
sunLight.GetComponent<Light>().color = new Color(fTau[0], fTau[1], fTau[2]);Partie 4 : Diffusion de Rayleigh
La diffusion de Rayleigh est un phénomène physique qui explique pourquoi le ciel est bleu. Elle se produit lorsque la lumière du soleil traverse les molécules de l’air et diffuse davantage les petites longueurs d’onde (bleu) que les grandes (rouge). Comprendre ce phénomène permet de mieux reproduire la couleur du ciel selon les conditions (heure, altitude, épaisseur atmosphérique).
Sans SkyDome, on peut simuler un changement de la couleur du ciel en fonction de l’altitude. Plus le joueur monte, moins l’atmosphère est dense, et le ciel peut progressivement devenir plus sombre. Cela peut se modéliser par une interpolation de couleurs basée sur la hauteur du joueur.
Altitude faible -> ciel bleu
Altitude élevée -> ciel sombre


Partie 5 : Théorie de Mie
La théorie de Mie décrit la diffusion de la lumière par des particules plus grosses (brume, gouttelettes, poussière). Contrairement à Rayleigh, elle dépend moins de la longueur d’onde, ce qui donne souvent un rendu plus blanc/gris. Elle est aussi liée à la création d’un halo lumineux autour du soleil lorsqu’il y a de la brume ou des nuages fins.
Dans Unity, un effet de halo peut être obtenu en ajoutant un sprite/quad face à la caméra près de la direction du soleil, ou en utilisant un post-processing comme le Bloom. Le designer pourrait régler l’intensité du halo et sa taille selon la météo (brume légère, brume dense, etc.).
public float m_fMieFactor = 0.7f;
void CalculateMieCoeff()
{
float[] K = new float[3];
K[0]=0.685f;
K[1]=0.679f;
K[2]=0.670f;
float c = ( 0.6544f * Turbidity - 0.6510f ) * 1e-16f;
float fMieFactor = m_fMieFactor * 0.434f * c * 4.0f * Mathf.PI * Mathf.PI;
m_vBetaMieTheta.x = fMieFactor / ( 2.0f * Mathf.Pow( 650e-9f, 2.0f ) );
m_vBetaMieTheta.y = fMieFactor / ( 2.0f * Mathf.Pow( 570e-9f, 2.0f ) );
m_vBetaMieTheta.z = fMieFactor / ( 2.0f * Mathf.Pow( 475e-9f, 2.0f ) );
vBetaMie.x = K[0] * fMieFactor / Mathf.Pow(650e-9f, 2.0f);
vBetaMie.y = K[1] * fMieFactor / Mathf.Pow(570e-9f, 2.0f);
vBetaMie.z = K[2] * fMieFactor / Mathf.Pow(475e-9f, 2.0f);
}
this.GetComponent<Renderer>().material.SetVector("vBetaMie", vBetaMie);
this.GetComponent<Renderer>().material.SetVector("BetaMieTheta", m_vBetaMieTheta);Partie 6 : Luminosité de la lumière du soleil
La luminosité du soleil varie au cours de la journée. Quand le soleil est haut, la lumière traverse moins d’atmosphère et elle est plus intense et plus blanche. Quand il est bas sur l’horizon, la lumière traverse davantage d’atmosphère, ce qui la rend plus faible et plus chaude. Simuler cela est essentiel pour obtenir un cycle jour/nuit crédible.
Dans notre SkyDome, la lumière solaire est créée par script sous forme de Directional Light. Même si le disque du soleil n’est pas forcément visible dans le ciel (selon le shader/material utilisé en URP), la lumière existe bien et contrôle l’éclairage.

Le cycle temporel est déclenché par l’augmentation de TIME :
TIME += TimeSpeedFactor;
if (TIME >= 24) TIME = 0;
Partie 7 : Objectifs d’un Skydome
Un skydome sert à donner un contexte visuel au joueur. Il permet de rendre le ciel crédible, de poser une ambiance (jour, nuit, coucher de soleil, météo), et d’apporter de la cohérence entre la lumière et l’environnement. Il aide aussi à l’orientation du joueur et renforce l’immersion.
Un skydome peut être lié à la narration. Par exemple, lors de l’entrée dans une zone de boss, le ciel peut devenir plus sombre et les nuages peuvent accélérer pour augmenter la tension. À l’inverse, après une mission réussie, le ciel peut redevenir clair.
Partie 8 : Avantages et inconvénients des skydomes
Un skydome est généralement performant car il affiche un décor lointain avec peu de coût. Il est aussi simple à contrôler artistiquement. En revanche, il peut manquer de profondeur réelle, car le ciel reste un fond. Dans certains cas, des solutions alternatives comme des nuages volumétriques ou des skyboxes HDRI peuvent être préférées, mais elles sont souvent plus coûteuses.
Une solution hybride consiste à garder le skydome pour le fond lointain et ajouter des effets locaux autour du joueur (particules de brume, petits nuages proches) pour donner de la profondeur sans alourdir toute la carte.
Partie 9 : Intégration dans des jeux à missions multiples
Le skydome peut renforcer l’identité d’une mission. Une mission en désert aura un ciel très lumineux et sec, tandis qu’une mission nocturne aura un ciel sombre et une ambiance froide. Cela aide le joueur à ressentir qu’il change de lieu ou de moment.
Pour changer dynamiquement le ciel, on peut utiliser des zones de déclenchement (triggers) ou un gestionnaire de mission. Quand le joueur atteint une zone, le jeu applique un nouveau “profil” de ciel (heure, turbidité, vitesse des nuages). Il est important que la transition soit progressive pour rester réaliste.
On crée 2 cubes pour cela :

Quand on arrive sur le premier cube, cela passe directement au cycle du jour tandis que lorsqu’on va sur l’autre, on passe au cycle de nuit.
Lien de la vidéo : https://youtu.be/Jz9q5UfXoBk
Résultats
Le SkyDome fonctionne et produit un cycle jour/nuit visible. Le temps peut être accéléré grâce au paramètre TimeSpeedFactor, ce qui permet d’observer rapidement la transition entre les différentes phases. Dans ce projet en URP, le soleil est simulé par une Directional Light créée par script. Le disque solaire n’est pas forcément visible, mais l’éclairage et la variation jour/nuit sont bien présents.
Conclusion
Ce TD m’a permis de comprendre comment un ciel dynamique est mis en place dans Unity et pourquoi il est important pour l’immersion. L’utilisation du SkyDome permet d’obtenir rapidement un cycle jour/nuit et des nuages animés, et les paramètres du système sont directement liés à des notions physiques réelles comme la turbidité ou la diffusion de la lumière. Même avec des adaptations techniques liées à l’URP sur Mac, l’objectif du TD est atteint car le système est fonctionnel et le comportement attendu est observable dans la scène.