Voici des astuces et techniques pour améliorer vos jeux sous Unity. D’autres arriveront au fur et à mesure que j’en découvre.

Vous pouvez télécharger un projet Unity configuré avec toutes les options présentées ici: https://github.com/Linko-3D/Realistic-Unity-Project

Rendu photoréaliste

Ces paramètres ont été réunis en visionnant plusieurs tutoriels, copiez-les pour avoir un rendu réaliste next-gen:

  • Directionnal light (soleil): le mettre en intensité 1.5.
  • Matériaux: Edit > Project Settings > Player, en bas à Other Settings mettre Color Space sur Linear (ne fonctionne pas en WebGL). Il faut le faire dès le début sinon ça peut prendre beaucoup de temps, ça oblige aussi bien souvent à refaire tout l’éclairage de votre jeu (plus d’informations sur le Color Space).
  • Qualité: Edit > Project Settings > Quality et mettre sur Ultra, désactiver l’antialiasing qui sera fait en post-production. Pixel Light Count à 15 (pour le nombre de light en pixel lighting au lieu de vertex lighting (voir optimisation), mais en Deffered toutes les lampes seront en pixel lighting), Shadow Projection sur Close fit et Shadow Distance à 500.
  • Graphismes: Edit > Project Settings > Graphics à High (Tier 3) décochez User Default et changer à Rendering Path mettez Deffered (pour pouvoir utiliser le SSR, ne fonctionne pas en WebGL).
  • Post-processing: Window > Asset Store (Ctrl + 9) puis prendre Post Processing Stack et tout importer. Dans les fichiers du projet, faire Create > Post-Processing Profile. Sélectionner la caméra, faire Component > Effects > Post-Processing Behavior. Activer Antialiasing (le mettre sur Temporal Anti-aliasing pour moins de jitter pour les objets en mouvement surtout si la caméra bouge). Activez Ambient Occlusion (Intensity: 0.03, la qualité peut rester sur Medium avec le downsampling activé. cochez Ambient Only (Defferred + HDR) pour ne pas avoir d’AO sur les zones éclairées), Screen Space Reflection (Quality: High et Reflect Backface si il n’y a pas de reflection probes), Bloom (je vous conseil de mettre le threshold à 2) et Color Grading (Neutral est réaliste et Filmic (ACES) vous donnera un effet cinéma, je vous conseil ce dernier). Le reste est optionnel.
  • Environnement: importer une image .exr ou .hdr, sélectionner l’image et mettre Texture Shape sur Cube. Créer un nouveau matériau, type Skybox > Cubemap, sélectionner l’image importée. Ouvrir Window > Lighting > Settings, dans l’onglet Scene à Skybox Material glisser le matériau créé, vous pouvez éventuellement augmenter l’Intensity Multiplier à 2. Cliquer sur le matériau pour éditer sa rotation. Il faut aligner le directionnel light du sun par rapport à la skybox. Pour orienter la directionnelle facilement, il faut orienter la vue pour center le soleil, puis déplacer la vue latéralement pour centrer la directionnal light, puis il faut diriger la directionnal light vers vous en rotate mode.
  • Lightmap baking: mettre les lampes en mode Mixed. Vérifier que les objets ont deux UVs channels (pas possible en .obj) ou le générer en cliquant sur le mesh dans les sources, dans Models puis Generate Lightmap UVs. Vous êtes obligés de générer la lightmap avec des obj. Les objets dans la scène doivent être en static, pour ceux légèrement animés décocher Batching Static (accessible en cliquant sur la flèche). Dans la scène passer du mode de vue Shaded à Baked Lightmap, les meshes qui seront bakés ont un checkboard. Pour baker Window > Lighting > Settings, onglet Scene. En bas, décocher Auto-Generate. Décocher Real-time Global Illumination, Lighting Mode: Baked Indirect (baker l’éclairage direct n’est recommandé que pour un jeu sur tablette), Indirect Resolution à 4 en intérieur sinon 2, augmenter lightmap résolution pour votre bake final à 60 minimum. Activez le Final Gather, vous pouvez mettre une valeur à 64 ou 128 pour gagner en temps de baking, la différence est minime. Le baking va automatiquement baker les matériaux avec de l’emissive, les lightprobes et les réflexions probes en mode baked (gain de performances), vérifier qu’elle les light probes reçoivent bien l’éclairage, si elles apparaissent noires c’est qu’elles sont dans un mesh.
  • Eclairage volumétrique: il faut télécharger ces fichiers: VolumetricLights. Pour l’utiliser, vous devez cliquer sur la lampe qui l’utilise, puis dans l’inspector Add Component > Volumetric Light. Vous pouvez aussi activer le noise si vous voulez des variation de luminosité (pour l’attacher à du feu par exemple). Pour que la caméra les affiche, il faut la sélectionner et importer le script Volumetric Light Renderer, à résolution mettez Full et à Default Spot Cookie importer l’image Spot. Pour que l’effet soit plus visible, il faut modifier le Range de l’éclairage et augmenter la valeur du paramètre Scattering Coef.
  • Particules: pour l’importer, faites clic droit Import Package > ParticleSystems. Je vous conseille d’utiliser l’effet de poussière que vous trouverez dans Misf Effects > DustMotesEffect. Vous pouvez l’attacher à la caméra ce sera moins réaliste, mais vous aurez cet effet partout.

Attention avec les light probes, les assets dans la scène les utilisent tous par défaut. Si vous ne mettez pas assez de light probes partout dans le niveau, l’asset va chercher le light probe le plus proche même s’il est à l’autre bout du niveau ce qui vous créera des erreurs d’éclairage. Dans un petit projet ou prototype qui évolue beaucoup évitez-les.

L’éclairage et les matériaux peuvent maintenant être réalisés.

Rendu obtenu, des light probes sont utilisés dans les coins pour capturer l’éclairage sur la sphère qui n’est pas statique:

rendu réaliste.png
Rendu obtenu dans Unity, il n’y a pas d’éclairage volumetrique.

Des effets

  • De l’eau:
  • La refraction:

Animation

  • Actions: les actions ou clips sont à réaliser dans votre logiciel de 3D, vos assecs doivent être animés sur place, c’est le module d’animation d’Unity qui servira à les déplacer. Nommez l’action de l’animation dans Blender, puis exportez en FBX ou en DAE. Dans Unity sélectionner le fichier, dans Animation, mettre la durée de frame pour chaque action. Cocher Loop Time si l’animation ce répète. Dans les fichiers du projet, faire Create > Animator Controller, le renommer. Double cliquer dessus. Dans la nouvelle fenêtre, faire Create State > Empty. Cliquer dessus puis charger l’action, renommer le node. Mettre l’asset dans la scène, dans l’inspector à Animator charger le Controller. Si l’animation centre l’asset dans la scène, créer un Empty et le mettre enfant avec ses coordonnées à 0 pour le déplacer que le parent. Voir aussi les Prefabs dans la partie gestion de projet.
  • Animation: l’animation est faite depuis Unity, elle ne sert pas seulement à déplacer un objet, elle peut être utilisée pour modifier des paramètres comme l’intensité d’une lampe pour la faire clignoter. Créez un dossier qui contiendra vos animations, dedans faites Create > Animation. Cliquez à droite de l’Inspector sur les l’icône représentant 3 lignes horizontales à droite d’un cadenas et passez en mode Debug et activez le mode Legacy. Pour l’asset à animer ajoutez un component Animation, à Animations et Size mettez 1, le nom devrait apparaitre automatiquement dans Element 0 grâce au mode Legacy activé avant. Play automatically doit être coché pour lire l’animation au lancement du jeu. Revenez en mode Normal et réglez le Warp mode, vous pouvez le mettre sur Loop pour répéter l’animation. Pour créer l’animation, il vous faut la fenêtre Windows > Animation, cliquez sur Add Property et choisissez celle à modifier en cliquant sur le bouton « + ». En modifiant la valeur, une clé d’animation sera ajoutée à la frame actuel. La frame la plus éloigné à droite va définir la durée de l’animation.
  • Animator Controller: l’Animator Controller permet de lire les actions et animations comme vue plus haut mais aussi de les gérer, de définir la ou les condition(s) à remplir pour passer d’une action à une autre et de gérer les transitions. Pour l’utiliser, il faut faire Create > Animator Controller et ouvrir la fenêtre dans Window > Animator. Glissez une animation elle sera automatiquement attachée à Entry, elle apparaitra en orange pour indiquer que ce c’est l’animation par défaut (par exemple, un personnage idle). Glissez-y les autres animations. Pour créer une transition, il faut faire un clic droit sur l’action source puis Make Transition puis cliquez sur l’autre action. Cliquez sur les flèches de la transition pour accéder à ses options et décochez Has Exit Time pour que la transition se fasse immédiatement même si l’animation n’est pas terminée. Pour créer une condition pour utiliser la transition vous devez d’abord créer une variable dans Parameters en haut à gauche de la fenêtre, puis en cliquant sur le « + ». Vous devez indiquer le type et sa valeur de départ, elle changera ensuite dans un script. Cliquez sur la transition et dans ses options indiquez la ou les variables et entrez la valeur et indiquez si la variable doit être plus grande ou plus petite que celle entrée.
  • Cloth: exportez un plan subdivisé dans Blender et faire un unwrap des UVs, faire en sorte d’avoir des carrés pour une meilleure simulation. Importer le plan dans la scène, sélectionner l’enfant, puis Component > Physics > Cloth. Pour indiquer les vertices qui tiennent le vêtement, dans l’Inspector cliquer sur Edit Contraints, mode Paint dans la scène et Max Distance 0 puis cliquer sur les vertices qui tiennent le vêtement. En rouge vous verrez les vertices qui retiennent le vêtement et en noir ce qui n’ont pas de constraints. Décocher Max distance pour remettre les vertices en noir.

Audio

  • Son 3D:
  • Audio Mixer:

UI

Gestion du projet

  • Travailler à plusieurs: cette vidéo vous montre comment utiliser GitHub. Afin de bien envoyer tous les fichiers, il faut tous les afficher. Allez dans Edit > Project Settings > Editor à Version Control mode vérifiez qu’il soit sur Visible Meta Files.
  • Formats de fichiers à utiliser:
    • Modèles 3D en glTF 2.0 (FBX si non supporté): ils permettent l’utilisation de LODs et d’animer vos modèles 3D.
    • Textures en TGA: les TGA sont moins compressés que les PNG, ils sont un peu plus lourds, mais amélioreront les temps de chargements de vos jeux.
    • Musiques en mp3: ce format audio est compressé et populaire.
  • Les dossiers: pour vos modèles 3D créer un dossier Art, dedans un sous dossier 2D et 3D. Dans 3D vous pouvez éventuellement ajouter des sous dossiers si c’est un gros jeu pour indiquer les assets d’un certain type d’environnement. Ensuite créer un sous dossier Textures et un autre Material. Créer un dossier prefabs à la racie. Vous pouvez enregistrer vos scène Unity directement à la racine. Créer Audio avec dedans un sous dossier Musics et Sounds. Un dossier Addons (mettez y les fichiers téléchargés sur l’asset store).
  • Les prefabs: les prefabs permettent d’unifier les paramètres, par exemple un prefab d’une lampe permettra de changer la couleur, l’intensité et la portée des mêmes lampes. Pour un assets 3D vous pourrez modifier l’échelle, les propriétés telles que Static, ajouter un script, un son, les mettre enfants d’un empty. Ce sont aussi des groupes, vous pouvez avoir plusieurs assets avec plusieurs lampes. Vous pouvez aussi de cette manière commencer le level design et placer par exemple des prefabs d’intérupteurs puis plus tard les éditer en ajoutant un script de déclenchement pour tous, des collisions, une animation, des lumières, etc. Pour créer un prefab il faut déplacer les éléments qui le constitueront dans la scène 3D puis les déplacer depuis la liste des objets de la scène dans les ressources. Pour éditer le préfab modifiez en un dans la scène, ajoutez des enfants, scripts, etc. puis cliquez sur Apply pour l’appliquer à tout les prefabs.

Optimisations

  • Utiliser des LoDs: ajouter _LOD0, puis incrémenter le numéro tout en réduisant le polycount. Le decimate modifier peut être utilisé.  Ensuite il faut tout centrer avec Alt + g et exporter en .FBX. Il faut activer Selected object dans les options à l’export. Dans Unity glisser le FBX dans la scène, puis régler la distance d’affichage des LOD à droite.
  • Optimiser l’éclairage: pour optimiser une lampe au maximum il faut qu’elle ne génère pas d’ombres, et qu’elle soit en mode baked au lieu de mixed, les light probes peuvent éclairer les assets mobiles, c’est utile pour créer une ambiance dans la scène. En forward rendering certaines lumières peuvent être définies en vertex lighting au lieu de pixel lighting. Le vertex lighting utilise les vertices de vos low poly pour recevoir l’éclairage, cela allège considérablement les ressources, mais ne peuvent utiliser les normales map. Ces éclairages sont à utiliser pour l’ambiance générale de la scène. Le Pixel lighting est utilisé pour chaque pixel il est beaucoup plus détaillé, mais aussi utilise beaucoup plus de ressources. Pour changer le type d’éclairage, sélectionnez une lampe puis Render Mode vous avez Auto (Unity décide du type d’éclairage), Important (Pixel light) et Not important (Vertex light). Unity vous limite par défaut à 4 Pixel Light pour le mode Auto, vous pouvez augmenter cette valeur dans Edit > Project Settings > Quality puis à Pixel Light Count. Je vous conseil de mettre 15.
  • Mip Map:
  • Les statistiques: en haut à gauche de la scène vous avez un bouton stats, il vous affichera le frame rate et le nombre de triangle affiché à l’écran. Comme les performances varient selon la puissance d’un ordinateur, vérifiez que vous votre ordinateur s’il est puissant vous ne devez pas descendre en dessous des 60 FPS. Si vous descendez en dessous et souhaitez conservé un éclairage réaliste, ajuster la distance des LODs et éventuellement optimisez vos LOD0.

Multijoueur

Scripts utiles

Tips

  • Placer la caméra à la vue actuel: sélectionnez la caméra et pressez le raccourcie Ctrl + Shift + f
  • Changer la couleur de l’interface quand le jeu est lancé: lorsque vous testez le jeu, les paramètres changés dans l’interface sont temporaires. Pour vous rappeler que vous êtes en mode de test, vous pouvez changer la couleur de l’interface. Allez dans Edit > Preferences… à Colors changez le Playmode tint. Je vous conseille de mettre R, G et B à 150.

Des addons utiles

Je vous conseille de sauvegarder les addons dans un dossier pour les importer rapidement dans vos jeux (de plus, les serveurs d’Unity ne sont pas très rapides).

Menus

  • Game Jam Menu Template: ce menu ne sert pas uniquement pour les Game Jam, il peut servir de base pour réaliser le menu de votre jeu et avoir une base propre qui s’adapte à plusieurs résolutions. Il contient aussi une option pour régler le volume de la musique.

Visuel

Gameplay

  • Standard Assets: normalement il n’y a pas besoin de les télécharger, ils sont inclus par défaut avec l’installation d’Unity s’ils n’ont pas été décochés. Vous les trouverez directement en faisant un clic droit dans les fichiers du jeu dans Import Package (ils ont été découpés, mais ils font partie du pack Standard Assets). Dedans le populaire FPS controller (dans le package Characters). Vous trouverez aussi des effets comme une glasse réfractive.
  • Playmaker: un addon puissant vous permettant de développer de façon visuelle à la manière de Blueprint dans Unreal ou des briques dans Blender.

Unity discord

Blender discord