Aller au contenu

Cours 8

Le level design

Un bon niveau n'est pas un beau décor, en tout cas, pas que.
C'est un décor qui informe, guide ou récompense.

Couleurs

Roue chromatique

Balisage

Le balisage (ou signposting) c'est les techniques de design (visuelles, sonores ou narratives) utilisées pour guider le joueur, orienter son attention sans l'interrompre avec des textes ou des flèches.

Lumière
L'oeil va vers le plus clair

Couleur
Une tache contrastée dans un décor uniforme attire

Lignes
Chemins, clôtures, rangées d'arbres pointent quelque part

Repères (landmarks)
Un élément visible de partout (tour, arbre géant)

L'éclairage

Lumières par défaut

Pour voir ce que fait chaque lumière retirons ce que Unity allume par défaut :

  1. Dans la Hierarchy, sélectionner Directional Light; dans l'Inspector, la désactiver (case à cocher en haut)
  2. Ouvrir Window > Rendering > Lighting, onglet Environment :

    • Environment Lighting > Intensity Multiplier à 0
    • Environment Reflections > Intensity Multiplier à 0
    Évitez la valeur 0 pour l'intensité

    Très rare qu'on veut 0. C'est un effet exploité dans le genre Film noir .

    Une scène trop sombre peut être fatiguante pour les yeux. Une intensité de 0.3 par exemple, est souvent plus intéressante.

    Exemple

Retirer le ciel

On peut aussi retirer le skybox en assignant None à Skybox Material, mais "Environment Lighting" se réaffichera avec une couleur d'ambiance. En appliquant noir, on arrive au même résultat.

Le ciel n'a plus de skybox, mais est bleu ! Ça c'est parce que la caméra applique un fond si aucun skybox n'est configuré.

  • Ouvrir l'inspecteur de la caméra
  • Sous environnement, remplacer background type par Solid Color
  • Choisir noir, et là, c'est le noir total

Dans la scène, ça commence à être difficile de voir quoi que ce soit 😅

Les types de lumières

Lumière Métaphore
Directional Light Le soleil (partout, une seule direction)
Point Light Une ampoule (rayonne dans toutes les directions)
Spot Light Un projecteur (cône orienté)
Area Light Un panneau lumineux (baked seulement)

Exemple d'éclairage

Sans lumière

Spot Light

Point Light

Balisage

Modes

Le champ Mode de chaque lumière décide quand son éclairage est calculé.

Mode Calcul Avantages Limites
Realtime À chaque image Peut bouger, clignoter, changer de couleur Taxant pour l'ordi. Pas de lumière qui rebondit
Baked Une fois, dans l'éditeur Gratuit en jeu, ombres douces, lumière indirecte Figée : ne bouge pas, n'éclaire pas les objets mobiles
Mixed Les deux Indirect précalculé + ombres en temps réel Le plus lourd des trois
Baking

Le baking enregistre l'éclairage dans des textures (lightmaps) plaquées sur des objets statiques.

  1. Dans la Hierarchy, sélectionner le décor qui ne bouge jamais (sol, murs, rochers, bâtiments)
  2. Dans l'Inspector, ouvrir la flèche à côté de Static et cocher seulement Contribute GI
  3. Régler le Mode des lumières du décor à Baked (ou Mixed)
  4. Ouvrir Window > Rendering > Lighting, onglet Scene : cliquer New sous Lighting Settings
  5. Section Baked Lighting Settings : Lightmapper = Progressive GPU (beaucoup plus vite que CPU)
  6. Dans la même section, Lightmap Resolution : passer de 40 (défaut) à 10 texels environ, pour un calcul rapide quand on développe le jeu
  7. Cliquer Generate Lighting (en bas de la fenêtre). La barre de progression est en bas à droite de l'éditeur

Si le bake reste trop long, dans la section Baked Lighting Settings :

Réglage Par défaut Essayez
Direct Samples 32 16
Indirect Samples 512 256
Environment Samples 256 128
Max Bounces 2 1
Lightmap Parameters (au bas de la section) Default-Medium Default-VeryLowResolution

Combien de lumières par scène ?

  • Baked : pas de limite
  • Realtime :
    • 256 sur PC et console
    • 32 sur mobile
    • 16 en Web 👈👈👈

Ombres

Chaque lumière temps réel (mode = realtime) qui projette des ombres recalcule la scène à chaque image et c'est assez lourd pour l'ordinateur à calculer. Voici des recommandations :

  • Shadow Type = No Shadows sur les lumières décoratives
  • Garder les ombres pour la Directional Light et une ou deux lumières clés, pas plus
  • Si possible, utilisez "Hard shadow" pour un gain de performance

Qualité des ombres

Des ombres floues, en "escalier" ou qui disparaissent au loin ? Ça se corrige, mais au détriment de la performance.

URP Asset

L'URP Asset gère entre autres les ombres temps réel de tout le projet

  1. Ouvrir Edit > Project Settings > Quality et repérer le Render Pipeline Asset du niveau de qualité actif (ex. : PC_RPAsset)
  2. Dans le panneau Project, sélectionner cet asset (dossier Assets > Settings)
  3. Dans l'Inspector :
Réglage Effet Point de départ
Lighting : Main Light > Shadow Resolution Netteté des ombres de la Directional Light 2048, 4096 au besoin
Lighting : Additional Lights > Shadow Atlas Resolution Netteté des ombres des Point et Spot Lights 2048
Shadows : Max Distance Distance jusqu'où les ombres sont dessinées. Plus courte = plus nette 50 à 80 m
Shadows : Cascade Count Découpe la distance en tranches : plus de détail près de la caméra 4
Shadows : Soft Shadows Adoucit les bords Coché, Quality Medium

Source lumineuse

On peut aussi gérer granulairement l'ombre via la source lumineuse dans son Inspector

  • Shadow Type : Soft Shadows (bords doux) ou Hard Shadows (bords nets, moins taxant pour l'ordi)
  • Strength : 1 = ombre plein, 0 = ombre transparent
  • Bias à Custom pour corriger les éléments suivant :

Lumière vacillante

Une lumière dont l'intensité varie sans cesse donne vie à une scène figée (torche, bougie, néon défectueux).

  1. Dans la Hierarchy, sélectionner la lumière (Point ou Spot); dans l'Inspector : Mode = Realtime (une lumière baked ne peut pas varier), Shadow Type = No Shadows
  2. Dans le panneau Project, dossier Assets > _ > Scripts : clic-droit Create > MonoBehaviour Script, le nommer LumiereVacillante, y coller le code ci-dessous
  3. Glisser le script sur la lumière, puis régler les valeurs dans l'Inspector
LumiereVacillante.cs
using UnityEngine;

[RequireComponent(typeof(Light))]
public class LumiereVacillante : MonoBehaviour
{
    public float intensiteMin = 0.6f;
    public float intensiteMax = 1.4f;
    public float vitesse = 7f;

    Light lumiere;
    float decalage;

    void Start()
    {
        lumiere = GetComponent<Light>();
        decalage = Random.Range(0f, 100f);
    }

    void Update()
    {
        float bruit = Mathf.PerlinNoise(decalage, Time.time * vitesse);
        lumiere.intensity = Mathf.Lerp(intensiteMin, intensiteMax, bruit);
    }
}

Les materials

Un material associe un shader (la façon de calculer la surface, ici Universal Render Pipeline/Lit) à des réglages.

Paramètre Rôle
Base Map (ou albedo) Couleur ou texture de la surface
Normal Map Une texture violette/bleutée qui simule des creux et des bosses sans modifier la forme 3D
Emission La surface émet sa propre lumière

Emission

Créer un material

  1. Dans le panneau Project, dossier Assets > _ > Materials : clic-droit Create > Material, le nommer (ex. : M_Sang ou Sang)
  2. Dans l'Inspector, configurer les réglages
  3. Glisser le material depuis le panneau Project sur l'objet dans la Scene ou la Hierarchy

L'ambiance

Skybox procédural

  1. Dans le panneau Project, dossier Assets > _ > Materials : clic-droit Create > Material, le nommer M_Ciel
  2. Dans l'Inspector, champ Shader, choisir Skybox > Procedural
  3. Ouvrir Window > Rendering > Lighting, onglet Environment : glisser M_Ciel dans Skybox Material
  4. Dans l'Inspector de M_Ciel, ajuster les champs Sky Tint, Ground, Atmosphere Thickness et Exposure
Skybox HDRI

Un HDRI est une photo panoramique à 360° qui sert de ciel tout en éclairant la scène de façon crédible.

  1. Sur Poly Haven , menu Assets > HDRIs : choisir un ciel, format HDR, résolution 2K (4K pour un ciel très visible; 8K alourdit le build sans gain visible)
  2. Glisser le fichier .hdr dans le panneau Project, dossier Assets > _ > Textures
  3. Sélectionner la texture; dans l'Inspector : Texture Shape = Cube, puis Apply
  4. Dans le panneau Project, dossier Assets > _ > Materials : clic-droit Create > Material, le nommer M_Ciel_HDRI; dans l'Inspector, Shader = Skybox > Cubemap
  5. Glisser la texture dans le champ Cubemap (HDR); régler Exposure et Rotation pour placer le soleil de la photo
  6. Window > Rendering > Lighting, onglet Environment : glisser M_Ciel_HDRI dans Skybox Material, et Environment Lighting > Source = Skybox
  7. Dans la Hierarchy, orienter la Directional Light dans la même direction que le soleil de la photo : sinon les ombres contredisent le ciel
  8. Cliquer Generate Lighting pour que la lumière ambiante tienne compte du nouveau ciel

Brouillard

Sans brouillard

Avec brouillard

Cache le bout du monde, donne de la profondeur. Ajoute un peu de mysterieux à la scène.

  • Window > Rendering > Lighting, onglet Environment
  • Other Settings, cocher Fog

Petit truc

Ajuster la couleur pour quelle soit proche de celle de l'horizon du skybox. Ce sera plus convainquant.

Le post-traitement URP

Le post-traitement (post-processing) applique des effets à l'image entière, après le rendu. Un peu comme un filtre de photo. Attention, car cela peut affecter les performances de votre jeu.

Le Volume

  1. Dans la Hierarchy : clic-droit Volume > Global Volume
  2. Dans l'Inspector, champ Profile : cliquer New
  3. Cliquer Add Override > Post-processing et choisir un effet (ex. : Bloom, Film Grain, etc.)
  4. Sélectionner la Main Camera; dans l'Inspector, section Rendering : cocher Post Processing
Volume local

En mode Global, le volume s'applique partout. En mode local, il fonctionne à un endroit précis. Son usage ressemble à celui du CES.

Volume global + animation + CES

On peut alors penser à transitionner l'effet d'un volume en modifiant son weight. À 0, l'effet du post-processing est annulé, à 1, il est à 100%.

Build

Un build est une version du jeu détachée du logiciel Unity.

  • File > Build profiles
  • Cliquer sur Scene List et ajouter les scènes du jeu
  • Cliquer sur Windows, dans la colonne de gauche

    Windows n'est pas là ?

    Si Windows n'est pas disponible dans la colonne de gauche :

    • Cliquer sur Add build Pofile, puis installer Desktop / Windows
    • Redémarrer Unity Hub
    • File > Build profiles, cliquer sur Add build Pofile > Desktop / Windows, puis Add Build Profile
  • Cliquer "Build"
  • Enregistrer dans un dossier "build" à la racine du projet.

10, 20, 30 minutes ? C'est possible 😅
Le premier build est toujours plus long

Trello

  • Semaine 1
  • Semaine 2
  • Semaine 3
  • Semaine 4
  • Semaine 5
  • Semaine 6
  • Semaine 7 | 🏃🏻‍♂️ Sprint 1 : Prototype
  • Semaine 8 | 22 octobre ⭐️ Aujourd'hui
  • Semaine 9 | 29 octobre 🏃🏻‍♂️ Sprint 2 : Tranche verticale
  • Semaine 10 | 5 novembre
  • Semaine 11 | 12 novembre
  • Semaine 12 | 19 novembre 🏃🏻‍♂️ Sprint 3 : Alpha
  • Semaine 13 | 26 novembre
  • Semaine 14 | 3 décembre 🏃🏻‍♂️ Sprint 4 : Beta
  • Semaine 15 | 10 décembre 🏃🏻‍♂️ Sprint 5 : Oral

Nouvelles cartes :

  • Must Ajuster la qualité des ombres (URP Asset et/ou lumière clé)
  • Must Guider vers un objectif, sans flèche, ni texte
  • Must Ajouter un Global Volume pour un post-traitement simple
  • Must Remplacer le ciel (skybox)
  • Should Ajouter un Volume à une zone qui change d'ambiance
  • Should Ajouter un brouillard dont la couleur s'accorde à l'horizon du skybox
  • Should Faire un bake de l'éclairage du décor statique
  • Could Ajouter une lumière qui vacille (torche, bougie, néon)

Devoirs

  • Terminer la tranche verticale : la zone 1 habillée, éclairée, animée et sonorisée
  • Préparer un build Windows qui se lance sans erreur
  • Lire l'énoncé du projet final

Énoncé du projet final