Blog Gamasutra David Leon - Next-Gen Cel Shading dans l'unité 5
Le billet de blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.
Les pensées et les opinions exprimées sont celles de l'auteur et non Gamasutra ou sa société mère.
introduction
Avec l'arrivée de l'unité 5, nous constatons qu'il n'a jamais été aussi facile d'obtenir des visuels de haute qualité dans notre jeu, mais nous ne voulons pas toujours des graphismes réalistes pour notre projet.
Cel Shading est une technique de rendu utilisé pour simuler l'éclairage dans les dessins animés et bandes dessinées. Dans un ombrage diffuse plus traditionnelle, la lumière crée un gradient sur la surface d'un objet en utilisant ses Normales; Cel Shading polarise le gradient, ce qui rend un pixel est allumé ou éteint par la lumière, sans interpolations ou des valeurs interpolées.

Dans l'image précédente, nous pouvons voir la différence entre un éclairage diffus et cel shading. Le produit scalaire entre la direction de la lumière et la normale la surface (que nous appelons la « NdotL ») définit la quantité de lumière d'un pixel reçoit. Arrondir cette valeur à 0 ou 1, ou définir différentes « classes » ou « coupes » se traduira par différents styles d'ombrage cel.
Il y a beaucoup de façons de le faire cel shading dans un jeu, certains d'entre eux avec des résultats incroyables. mais aujourd'hui, nous allons apprendre d'une manière très rapide à mettre en œuvre notre propre modèle de lumière cel shading dans l'unité 5.
Il y a différentes façons d'y parvenir en fonction du pipeline de rendu (le chemin de rendu) utilisé. Vous pouvez définir le chemin de rendu souhaité dans votre composant de l'appareil photo ou paramètres du lecteur.
rendu en avant
Avec l'avant de rendu, le moteur passe au-dessus chaque sommet, chaque pixel et chaque lumière dans la scène. La complexité rendu est énorme lorsque vous avez plusieurs sources de lumière dans votre scène, mais quand vous ne l'utilisez beaucoup de lumières, il est un pipeline de rendu très léger.
La meilleure façon d'atteindre Cel Shading avec l'avant de rendu utilise un modèle d'éclairage sur mesure dans un shader de surface.
Ce même « hack » peut être utilisé avec d'autres shaders personnalisés qui utilisent spéculaires, normal mapping, l'éclairage de la jante, etc.
Lumière pré-Pass (ancien Différé)
Avec un pipeline différé le moteur passe au-dessus toute la lumière sur l'écran une seule fois et stocke cette information dans un tampon. Lumière magasins Pré-Pass uniquement les informations de lumière, alors que les nouveaux magasins de pipelines Différé info Unité 5 sur toutes la géométrie de la scène. Cette approche est beaucoup plus efficace lorsque vous avez une grande quantité de sources de lumière de la scène, mais nécessite une architecture matérielle plus complexe.
On extrait les fichiers et recherchez « interne-PrePassLighting.shader » dans le dossier « DefaultResourcesExtra ». Nous copier ce fichier dans notre projet Unity, de préférence dans le dossier Ressources (créer si vous n'avez pas). Si nous utilisons l'unité 5 nous pouvons changer son nom de fichier.
Maintenant, nous allons modifier le fichier et recherchez la ligne:
moitié diff = max (0, point (lightDir, normal));
et de le modifier à:
moitié diff = max (0, point (lightDir, normal));
si (diff> 0.0f) diff = 1.0f;
autre diff = 0.0f;
Nous économisons le fichier et il est fait. Nous devons maintenant dire l'unité d'utiliser ce fichier au lieu de la valeur par défaut pipeline d'éclairage pré-Pass.
Allez dans Edition -> Paramètres du projet -> Graphics et, dans Legacy différée. changer le shader intégré et sélectionnez notre fichier. Si vous utilisez l'unité 4, l'unité doit déjà reconnaître le fichier (si vous ne l'avez pas changé le nom du fichier) et de l'utiliser sans action de l'utilisateur. S'il vous plaît vérifier que votre appareil utilise les paramètres du lecteur ou utilise héritage différé (Light Pre-Pass), et que nos matériaux utiliser un shader Legacy. Si vous avez tout fait correctement, vous devriez obtenir cel shading travailler dans votre jeu.
rendu différé
Mais quel est le point d'avoir l'unité 5 si nous ne pouvons pas tirer profit de ses nouvelles fonctionnalités et les puissants standard Shader?
La solution consiste à utiliser un nouveau pipeline de rendu différé, qui stocke toutes les géométries de la scène le long de l'éclairage dans des tampons pour calculer la nuance finale de l'objet de l'unité.
En suivant les mêmes étapes que la lumière pré-Pass, nous téléchargeons le haut-Shaders, mais cette fois-ci nous copions dans notre projet, le fichier nommé « interne-DeferredShading.shader ». Nous éditons ce fichier à la recherche de la fonction « CalculateLight » et modifions la ligne suivante:
light.ndotl = LambertTerm (normalWorld, light.dir);
Et ajouter ces lignes:
si (light.ndotl <= 0.0) light.ndotl = 0;
d'autre light.ndotl = 1;
Comme la dernière fois, nous allons modifier le contenu -> Paramètres du projet -> Graphics et différé nous choisissons notre fichier modifié. Vérifiez que le composant de l'appareil photo a rendu Path = différé, et que vous utilisez un modèle avec un shader standard dans sa matière. Vous devriez remarquer maintenant que votre modèle a tous les avantages de la norme Shader, mais avec Cel Shading appliquée.
Toon Outline et autres effets
Vous avez vous-même Cel Shading dans l'unité 5, mais nous sommes toujours pas fait pour obtenir notre regard next-gen toon. Nous avons besoin d'un plan de toon.
Importons les effets de l'image de la caméra en allant à l'actif -> Importer Paquet -> Effets.
Nous passons maintenant à notre appareil photo et ajoutez le composant de détection Edge. Nous configurons à notre goût (je l'utilise habituellement Robert Cross Normales de profondeur). Nous pouvons maintenant ajouter d'autres effets d'image comme Anti Aliasing pour adoucir les lignes, ou des effets plus avancés comme Ambient Occlusion, Bloom ou la profondeur de champ pour obtenir ce look AAA que nous allions pour.

conclusions
Comme vous pouvez le voir, dans une petite quantité de temps que nous « piraté » le nouveau pipeline reporté l'unité pour changer complètement notre jeu style visuel.
Dans deux âmes jumelles: Le Chemin des ombres (le jeu je travaille), nous utilisons cette approche avec quelques autres ajouts pour obtenir notre look unique:
