Chapitre 2.1 : caméras

Chapitre 2.1 : caméras #

Les caméras spécifient comment les objets 3D sont projetés (transformés) sur l’écran 2D. Elles définissent donc quels objets 3D seront visibles par l’utilisateur final.

Built-in, Universal and High Definition Render Pipelines

Dans Unity, les Components de type Camera sont différents en fonction du Render Pipeline utilisé. Dans ce cours, nous nous focalisons sur URP. Des liens sur la documentation relative aux Cameras pour le Built-in Render Pipeline et pour le High Definition Render Pipeline se trouvent dans les références.

Dans Unity, les Cameras1 sont composées et représentées de la manière suivante :

On peut en particulier noter :

  1. le Gizmo de la Camera et son icône associée dans la scène 3D;
  2. le frustum de la Camera;
  3. une fenêtre de preview visible dans la scène 3D lorsque qu’une Camera est sélectionnée;
  4. le Component Camera qui contient les paramètres importants.

Il est important de rappeler qu’une Camera est un GameObject et contient donc au moins un Transform. En particulier, une Camera peut être déplacée, tournée, et même être parentée à un autre GameObject.

Aligner une caméra avec la vue interactive (et vice versa)

Il est important de bien positionner une Camera dans la scène 3D pour que la vue finale soit correcte. La première étape est donc de bien définir les valeurs de son Transform. Pour ce faire, on peut par exemple utiliser son Gizmo. Une autre solution consiste à positionner la vue interactive dans la position désirée, puis de sélectionner l’outil GameObject > Align With View dans la barre d’outils. On peut aussi utiliser le racourci clavier Ctrl+Shift+F.

Inversement, on peut aussi aligner la vue interactive avec la Camera. Pour ce faire, il suffit de sélectionner la Camera dans la scène 3D, puis de sélectionner l’outil GameObject > Align View With dans la barre d’outils.

De manière simplifiée, on peut imaginer qu’une caméra prend des entrées, effectue des calculs, et stocke les résultats dans des sorties :

  • les entrées : la liste d’objets 3D à projeter ainsi que les paramètres de la Camera;
  • les sorties : l’image finale (Color Buffer) et les informations de profondeur (Depth Buffer ou Z-Buffer).

Les paramètres les plus utiles du Component Camera sont :

  • Projection / Projection : définit le type de projection à effectuer. Elle peut-être perspective ou orthogonale.
  • Projection / Field of View : correspond à l’angle de vue (horizontal ou vertical) de la Camera.
  • Projection / Clipping Planes : ce paramètre permet d’ignorer les objets qui sont trop près ou au contraire trop éloignés.
  • Environment / Background Type : spécifie la couleur ou l’image du fond. C’est ce qui doit être affiché dans les espaces vides, c’est-à-dire les espaces de l’image finale dans lesquels aucun objet 3D n’est présent.
  • Output / Viewport Rect : permet d’afficher l’image finale sur une sous-partie de l’écran seulement.

Certains paramètres offrent des fonctionnalités très intéressantes et méritent d’être un peu plus détaillés.

Culling Mask #

Le paramètre Rendering / Culling Mask permet de spécifier quels groupes d’objets 3D doivent être considérés (et donc rendus) par la Camera.

Un Culling Mask permet par exemple de créer des mini-maps avec une Camera qui fait le rendu de la scène 3D en vue du dessus, en ne considérant que certains objets particuliers. Par exemple, on peut souhaiter ignorer le personnage principal, mais uniquement utiliser une représentation simplifiée sur la mini-map.

Output Texture #

Le paramètre Output / Output Texture permet de sauvegarder le rendu final dans une texture de rendu (Render Texture), plutôt que de l’afficher sur l’écran. Cette Render Texture peut ensuite être réutilisée en temps-réel dans la scène 3D.

Pour attacher une Render Texture à une caméra par l’intermédiaire du paramètre Output Texture, il faut d’abord la créer sous forme d’Asset. Pour ce faire, il faut aller dans le menu Assets/Create/Render Texture, comme indiqué sur l’image suivante :

Les Render Textures sont utiles par exemple pour :

  • avoir plusieurs rendus de Camera dans la même vue (vue top, left, right de la même scène);
  • simuler des caméras de surveillance. On positionne des Cameras là où il y a des caméras de surveillance dans la scène 3D. Ensuite, les images calculées par les Cameras sont stockées en temps-réel dans des Render Texture. Ces textures sont finalement plaquées sur des objets 3D représentant des écrans dans la scène 3D.

Slides #

Références #