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
Componentsde typeCamerasont différents en fonction duRender Pipelineutilisé. Dans ce cours, nous nous focalisons sur URP. Des liens sur la documentation relative auxCameraspour leBuilt-in Render Pipelineet pour leHigh Definition Render Pipelinese trouvent dans les références.
Dans Unity, les Cameras1 sont composées et représentées de la manière suivante :
- le
Gizmode laCameraet son icône associée dans la scène 3D; - le frustum de la
Camera; - une fenêtre de preview visible dans la scène 3D lorsque qu’une
Cameraest sélectionnée; - le
ComponentCameraqui 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
Cameradans la scène 3D pour que la vue finale soit correcte. La première étape est donc de bien définir les valeurs de sonTransform. Pour ce faire, on peut par exemple utiliser sonGizmo. Une autre solution consiste à positionner la vue interactive dans la position désirée, puis de sélectionner l’outilGameObject > Align With Viewdans la barre d’outils. On peut aussi utiliser le racourci clavierCtrl+Shift+F.Inversement, on peut aussi aligner la vue interactive avec la
Camera. Pour ce faire, il suffit de sélectionner laCameradans la scène 3D, puis de sélectionner l’outilGameObject > Align View Withdans 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 BufferouZ-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 laCamera.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
Cameradans la même vue (vue top, left, right de la même scène); - simuler des caméras de surveillance. On positionne des
Cameraslà où il y a des caméras de surveillance dans la scène 3D. Ensuite, les images calculées par lesCamerassont stockées en temps-réel dans desRender Texture. Ces textures sont finalement plaquées sur des objets 3D représentant des écrans dans la scène 3D.