Utilisation des assets graphiques et audio
La caméra
1. Présentation
La caméra sert à capturer et à afficher le monde au joueur. Cet élément est un objet essentiel d’une scène et doit être défini avec précaution car c’est lui qui est en première ligne sur l’aspect général de votre jeu. Le nombre de caméras n’est pas limité mais les performances peuvent baisser si ce nombre devient important. Elles n’ont pas d’ordre de rendu défini et peuvent afficher l’intégralité de la scène ou seulement une partie.
2. Paramétrage de l’affichage
Dans l’Inspector on retrouve de nombreuses propriétés permettant de modeler la caméra selon ses besoins.
a. Affichage des objets
-
Clear Flags : cette propriété permet de paramétrer l’affichage des parties de l’écran sans affichage. Cela est utile lors de l’utilisation de plusieurs caméras en même temps afin d’afficher un type d’objet sur la première caméra et un autre type d’objet sur la seconde caméra. Le principe est simple, chaque caméra enregistre les informations de couleur et de profondeur quand il rend la vue. Les parties de l’écran n’étant pas renseignées, sans information de couleur donc, afficheront par défaut une Skybox. Lors de l’utilisation de plusieurs caméras, chacune d’entre elles enregistre ses propres informations en mémoire pour ensuite les combiner lors de la génération de la vue.
-
Skybox : c’est la valeur par défaut. Chaque portion vide de l’écran affichera la Skybox attachée à celle-ci.
-
Solid Color : chaque portion vide de l’écran affichera la couleur définie dans la propriété Background.
-
Depth Only : cette valeur permet de rendre un objet sans prendre en compte sa position dans l’espace et donc sa profondeur. Elle est particulièrement utilisée dans les FPS (First Person Shooter) afin d’afficher une arme par exemple.
-
Don’t Clear : cette valeur un peu spéciale est rarement utilisée sans être associée à un shader. Elle fait en sorte de ne pas effacer les informations du buffer de rendu de la vue ce qui fait qu’à...
Les lumières
1. Présentation
Les lumières prennent une place de choix dans la création d’un jeu vidéo. Elles font partie de la mise en place de l’ambiance générale que vous souhaitez donner à votre jeu. De plus, ce sont les lumières qui détermineront l’affichage, total ou partiel, ou l’emplacement des ombres des objets de la scène.
Dans Unity, il existe quatre types de lumières : Point, Spot, Directional et Area. La version 5 introduit aussi un nouveau système appelé Global Illumination (GI) permettant de gérer les lumières indirectes.
2. Paramétrage des lumières
Dans l’Inspector on retrouve de nombreuses propriétés permettant de modeler la lumière selon ses besoins.
-
Type : définit le type de lumière utilisé parmi Point, Spot, Directional et Area.
-
Baking : permet de choisir si on doit utiliser un procédé de baking (voir remarque à la suite de cette liste) sur la lumière. En choisissant Baked, vous activez le baking sur la lumière. L’option Realtime permet de gérer le rendu en temps réel des objets non statiques que la Global Illumination soit utilisée ou non. Pour activer les deux options en même temps, choisissez le mode Mixed.
-
Range : définit la distance d’émission à partir du centre de l’objet. Uniquement utilisable pour les lumières de type Point et Spot.
-
Spot Angle : définit l’angle, en degrés, à la base du cône. Plus l’angle est grand, plus le spot sera ouvert. Uniquement utilisable pour la lumière de type Spot.
-
Color : définit la couleur émise par la lumière.
-
Intensity : définit la luminosité de la lumière. Pour une lumière de type Point, Spot et Area cette valeur est de 1 par défaut tandis qu’elle est de 0,5 pour une lumière Directional.
-
Bounce Intensity : définit la variation de l’intensité des lumières indirectes comme une lumière qui rebondit sur un objet. Ce paramètre est un multiplicateur de la luminosité calculé par le système de Global Illumination. Les valeurs supérieures à 1 auront pour effet de rendre la lumière plus brillante...
Les shaders et matériaux
1. Introduction
Afin d’afficher un objet à l’écran, le moteur graphique s’appuie sur une combinaison de shader et de matériau. Cette collaboration s’effectue dans le sens où un matériau va définir un shader à utiliser, celui-ci va être utile afin de déterminer quelles options sont disponibles dans le matériau.
Unity fournit un bon nombre de shaders prédéfinis qui peuvent être utilisés dans la majorité des cas : c’est le Standard Shader. Il est conseillé de l’utiliser pour les rendus classiques comme l’affichage d’un personnage, d’un objet solide ou transparent, d’une surface… Il est paramétrable et permet donc de rendre la plupart des objets d’une manière réaliste. En parallèle de ce shader, Unity en met à disposition des plus spécialisés qui seront utiles uniquement dans certains cas : ce sont les Built-in Shaders.
Lorsque les shaders prédéfinis (Standard Shader et Built-in Shader) ne suffisent plus, Unity permet d’utiliser vos propres shaders afin de créer des effets plus spécifiques.
2. Les matériaux
a. Introduction
Un matériau définit comment une surface doit être rendu en prenant en compte sa teinte, les textures qu’il peut utiliser et un grand nombre d’autres paramètres. Dans Unity, ils sont utilisés principalement avec les composants de type Mesh Renderer, Skinned Mesh Renderer, Particle Systems, etc.
b. Les propriétés
Un matériau étant fortement couplé à un shader, c’est ce dernier qui définit les propriétés réglables que l’Inspector affichera pour le matériau. Malgré tout, la classe Material propose plusieurs propriétés de base :
-
color : permet de définir la couleur principale du matériau.
-
globalIlluminationFlags : permet de définir le type d’interaction que doit avoir le matériau avec le système de Global Illumination (GI).
-
mainTexture : permet de définir la texture principale rattachée au matériau.
-
mainTextureOffset : permet de définir le décalage à appliquer à la texture principale.
-
mainTextureScale...
Les meshes
1. Présentation
Comme nous avons pu le voir dans le chapitre Le GameObject et ses composants, à la section Les meshes, les meshes font partie intégrante de la plupart des objets d’une scène. Ils représentent la structure géométrique de l’objet et de ce fait, une grande partie de son aspect général.
L’éditeur d’Unity n’étant pas fait pour modéliser ce type d’objet directement, il peut néanmoins charger la plupart des modèles créés à partir de logiciels tiers. Parmi ceux-ci on retrouve les formats .FBX, .dae, .3DS, .dxf et .obj pour les formats universels. Il peut aussi importer un grand nombre de types de fichiers créés à partir de logiciels propriétaires comme Blender, Cinema4D, Maya…
2. Mesh Filter
Le composant Mesh Filter fonctionne de pair avec le composant Mesh Renderer. Il permet simplement de spécifier le modèle à utiliser, celui-ci devant être dans le dossier Assets (à la racine du projet), à travers la propriété mesh.
3. Mesh Renderer
a. Introduction
Le composant Mesh Renderer récupère le modèle défini à partir du Mesh Filter et s’occupe de l’afficher.
b. Les propriétés
Plusieurs paramètres sont disponibles afin de régler le rendu de l’objet...
Les textures
1. Présentation
L’utilisation des textures est omniprésente dans la plupart des objets d’une scène. Elles sont par exemple utilisées afin de donner vie aux meshes grâce à l’ajout d’une image ou d’une vidéo qui vient s’appliquer au modèle, lui donnant une consistance.
Nous avons vu dans la section précédente que les shaders utilisent des textures différentes (Normal Map, Height Map…) qui sont adaptées au matériau et au modèle qui sera utilisé. Concrètement, n’importe quelle image peut devenir une texture pour peu que la taille requise soit bonne.
2. Les types de texture
Lorsque l’on sélectionne une image ou une texture, l’Inspector nous propose de nombreux réglages :
-
Texture Type : permet de définir le type de texture dont les principaux types sont :
-
Texture : ce paramètre est utilisé pour la majorité des textures de base qui ne sont pas spécifiques (Normal Map, Sprite, Cubemap, etc.). C’est le paramètre par défaut.
-
Normal Map : définit la texture afin de pouvoir l’utiliser comme une Normal Map.
-
Editor GUI : définit cette texture afin de l’utiliser dans des contrôles de l’UI.
-
Sprite (2D and UI) : définit cette texture afin de l’utiliser comme un sprite 2D.
-
Cubemap : définit...
Les sprites
1. Présentation
Les sprites sont des objets 2D utilisés pour afficher des éléments graphiques. Ils sont créés à partir d’images ou textures. La spécificité d’un sprite est qu’il permet d’afficher tout ou partie d’une image, ce qui permet de créer plusieurs sprites différents à partir d’une seule image.
2. Sprite Renderer
Afin d’afficher une image, il suffit d’utiliser le composant Sprite Renderer et de lui associer l’image souhaitée. Le sprite sera rendu à l’écran à la position de l’objet dans la scène.
Il est aussi possible de définir une couleur et un type de matériau spécifique.
3. Sprite Editor
Présentation
Une image peut contenir un ou plusieurs éléments graphiques qui seront utilisés à chaque fois comme un sprite à part. On représente donc souvent un personnage entier dans une seule image avec l’ensemble des parties du corps détachées les unes des autres. Afin que l’éditeur connaisse où se situe chacun de ces éléments dans l’image, il faut faire appel au Sprite Editor.
Pour ouvrir l’éditeur de sprite, il suffit de sélectionner une image de type Sprite (2D and UI) et de cliquer sur le bouton Sprite Editor.
Afin de pouvoir être...
L’audio
1. Introduction
Dans un jeu vidéo, l’importance de la musique est souvent sous-estimée alors qu’elle fait partie intégrante de l’ambiance générale du jeu. Avec Unity, il est possible d’ajouter une ambiance sonore riche et variée en y ajoutant des sons s’intégrant parfaitement dans un environnement 3D.
Un gros travail a été fait afin de rendre la perception des sons de manière réaliste. Dans la vraie vie, les sons sont perçus en fonction d’une distance, d’une intensité, d’un environnement. Si le son provient d’un objet qui bouge rapidement, il va être perçu différemment selon la distance entre votre oreille et l’objet : c’est ce qu’on appelle l’effet Doppler. De la même manière, un bruit dans une pièce entièrement fermée et vide ne va pas être perçu comme dans un espace entièrement ouvert.
Ce sont tous ces effets qu’Unity a reproduits à l’intérieur de son moteur de jeu en essayant de rester le plus fidèle possible avec la réalité. Afin d’intégrer un son dans une scène, il faut donc qu’il soit rattaché à un objet de celle-ci, les filtres s’appliquant de la même façon.
2. Audio Listener
Le composant qui sert à imiter...
Batching et Draw Calls
1. Présentation
Si l’affichage des objets d’une scène peut paraître magique, il n’en reste pas moins qu’il s’agit de traitement effectué par une API graphique 3D ou 2D (comme Direct3D ou OpenGL). Ses appels peuvent être coûteux en termes de performance lorsque les ressources changent, par exemple lorsque le matériau n’est plus le même, ce qui provoque des montées en charge significatives pour le CPU. Ces demandes de rendu sont appelées Draw Calls et il peut y en avoir un très grand nombre. Unity a mis en place deux systèmes de regroupement appelés Static Batching et Dynamic Batching afin d’optimiser ses appels et gagner en performance.
Seuls les Mesh Renderer et les Particle Systems peuvent utiliser ces systèmes.
2. Static Batching
Il permet au moteur de réduire le nombre de Draw Calls en regroupant les objets utilisant le même matériau et ne bougeant pas dans la scène (rotation, translation, taille). Afin d’activer ce comportement à un GameObject, il faut le spécifier directement dans l’Inspector en cochant la case Static.
Il est préférable d’utiliser cette méthode au Dynamic Batching car cela demande beaucoup moins de ressources en CPU mais un peu plus en mémoire.
3. Dynamic Batching
Contrairement au précédent système...