jeudi 31 janvier 2019

Unreal - Conception d'un noise procédural pour les normales

Bonjours à tous,

je me lance dans cette année 2019 avec comme initiative de développer mes talents de Unreal 4.

J'ai regardé un peu pour le sujet à aborder et j'ai constaté que si je veux me donner un défi, je peux me créer un modèle sans texture diffuse (ton de gris) et l'éclairer. Avant de commencer, je constate que le shader par défaut ne me convient pas et qu'il mérite des petits rajouts de détails. Habituellement, c'est dans la diffuse que nous rajoutons un noise de façon procédurale. Cette fois-ci j'ai préféré me tenter à l'expérience d'une normal map.
 



































































Noise normalisé dans un environnement non-linéaire

Avec une normalisation du noise, je reçoit ce type d'information:

Évidement le moindrement que vous regardez une map de normal,  vous constatez que celle-ci est faussée par des coordonnées du monde. Je ne peux que la restreindre à des informations qui imitent les tangeantes.

Comment faire? Voici :
- Je sépare mes trois canaux (RVB)
- J'isole mon Z (B) pour qu'il soit pure : n'oubliez pas qu'une normale, de base, possède un canal bleu 100% duquel nous soustrayons. Dans la tangeante, j'ai constaté qu'une valeur décente où cesser est lorsque le bleu est à 66% (deux tiers arrondis).
- Les autres couleurs (RV) seront mises à 50% : le but ici étant de produire un canevas "blanc pour la normale supplémentaire, bref:
- RÉSUMÉ - R:50% V: 50% B:100%

- On additionne le tout ensemble
La normale de base dans un environnement non-linéaire
- On se crée un LERP afin de jouer correctement avec l'intensité du "noise" (canal "Alpha" de la node).
- Je me permets de mettre le multiplicateur de chaque canal (RG) ainsi que l'intensité dans le LERP (alpha) en tant que paramètres pour la suite.

- L'alpha du LERP est primordial car c'est ce qui empêche la normale de présenter des information que j’appellerais World-based (en opposition à Tangent-based). Je le restreint entre 66% et 100% car c'est dans cette région que se situe l'écart qui nous est nécessaire (pour la tangente).






https://upload.wikimedia.org/wikipedia/commons/c/c4/Ripple_disc_norm.jpg
C'est grâce à ce disque ci-contre, trouvé sur le web, que j'ai pu confirmer mes restrictions.












Noise normalisé (tangente) dans un environnement non-linéaire
- Voici ce que le mélange donne à 66% d'alpha :


















- Voici le résultat sur une sphère 
- Une fois paramétré dans une instance, je l'intègre à un mur. Voici le résultat :


Avant
Après


Une image du Graph du "Normnoise"


Dôme avec le "normnoise"

 La prochaine étape sera de l'intégrer avec une autre normale sur l'objet. Cela signifie qu'il me faudra utiliser des canaux UV séparés.

D'ici là, je vous souhaite une bonne journée,

Vôtre,
David



Suite au Game Jam 2019


Salut à tous,

j'ai retardé mes posts puisque je voulais discuter d'un évènement auquel j'ai participé : le Global Game Jam 2019.

C'est mon 4e Game Jam et je suis toujours bien excité à l'idée de créer un jeu de A à Z en une fin de semaine.

Cette fois-ci comme auparavant, je me suis greffé à une équipe comportant des amis (à chaque fois c'est une surprise d'en rencontrer). L'équipe était constituée uniquement de programmeur; mais dans un game jam, on prend rapidement un autre poste.

C'est la première fois que je me retrouve à être l'unique artiste (dans l'officiel). Cela m'a créé de réels défis que même en "scoping" je n'aurais pu concevoir. Design de persos (2D et 3D), création de shaders, "rigging" et "skinning", modélisation, texture et animation. C'était un peu trop malgré qu'on me diminuait constamment la charge, soit en prenant une partie du boulot (merci à l'équipe) soit en coupant sur certaines fonctionnalités qui ne seraient plus visuelles.

Le Jeu

Il s'intitule Haunted(Not) House. Il est fait sur le thème de "Ce que signifie la maison pour vous" que l'équipe a reviré en : "Ce que vous signifiez pour la maison".

Vous jouez maintenant la maison qui se trouve a être "hantée" par vous même. Vous tentez de protéger la personne qui y habite. C'est un vieil homme qui se nomme Herméningilde.

De mon côté, il me fallait le rendre sympatique. Certain membre de l'équipe voulaient une sonorité "Wacky". J'ai alors pensé aux Munny; en me rétractant rapidement puisque nous voulions garder l'aspect amusant uniquement pour les animation. J'ai donc gardé l'idée des grandes têtes de Munny et j'y ai juxtaposé des corps plus élancés, un peu comme dans " Last Day of June".
Sketch
3D




















Inspiration principale : Last Day of June














Shader//Ergonomie

J'ai également tenté de produire un shader avec lequel nous pourrions montrer la progression de la crainte. Je voulais une donnée paramétrable sur les Y qui monte et descend créant une jauge et, visuellement, montrant une crainte grimpante.

Pour ainsi faire j'ai utilisé le Fresnel en modifiant le canal View vers le Monde. Faisant ainsi, il est possible de manipuler les dégradés du Fresnel pour qu'ils puisse partir du bas d'un axe et rejoindre le haut de celui-ci. Les nodes "add" sont ainsi rajoutées afin de créer les déplacements. La contrainte devient celle-ci: les réplacement se font tels des rotations puisque nous utilisons 3 canaux qui sont ajustés sur un objet dans les 3 dimensions!
Section 1 du canal d'émission : De l'oeil à l'objet

Quelques considération ont dû être prises lors de l'application du "Shader". D'un premier temps, l'objet est importé de Max vers Unity, ce qui crée une rotation de l'axe de Y sur les X de 90 degrés, ce qui déplace l'axe des Y et des Z (problème bien connu et dû à la fonction primitive de 3DSmax de travail en l'isométrique).



Comme on parle de normales de l'objet, il faut modifier le canal rouge (des X) car l'axe des Y tombe  tombe sur cet axe X.



Section 2 du canal d'émission : De la normale à l'objet


Afin de terminer la "shader", je paramètre les évènements afin de pouvoir appeler les propriétés sur les personnages. Plus il est stressé plus la démarquation va être élevée.





Animations


Évidement, je ne peux partir sans mentionner l'intégration d'animations ainsi que le rigging et skinning durant cette fin de semaine.

Le rigging est on ne plus simple : le bon vieux biped de 3DSMax, merci bonsoir!

Le skinning m'a simplement demandé de faire quelques loops additionnel sur un mesh très simple, ce qui m'a pris peu de temps.

Pour l'animation, il y avait deux personnages a faire avec 3 animations de base pour chacun (6 animations). Notre vieux monsieur tient une posture fière. Son opposant, Path le malfrat, se tient torse bombé tel que quelqu'un affrontant des peur bravement. Évidement, chacun a son animation de course suite à la crainte! C'est à ce moment là que je me suis amusé à leur faire des mouvement plus clownesque.

Herméningilde appeuré


En bref...


C'est énormément de poids sur les épaules être le seul artiste visuel d'une équipe lorsque tu es entouré de programmeur. J'ai donc dû laisser aller le level art pour que l'on puisse réellement se concentrer sur les 3 C : Characters, Camera, Controls.

J'ai tout de même mis ma touche lumineuse APRÈS que la fin de semaine soit terminée :




Sur ce, je vous laisse la suite pour un prochain post de blogue,

Vôtre,
David