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

vendredi 21 décembre 2018

Commencer avec "Shader Graph" - Premiers tests


Rebienvenu à mon blog.


Voilà déjà 3 ans que je suis parti de mon blog. Ce fut un long voyage dans le domaine de l'emploi. Plusieurs travaux dans le monde de la 3D et quelques boulots concernant la bicyclette. Ce sont de belles expériences qui m'amènent à revisiter d'anciens projets, dont certain que je n'ai jamais mentionné ici.

Je le fais renaître dès maintenant!

Shader Graph

Maintenant que j'ai utilisé une multitude de logiciels pour l'attrait du public (Nuke, Maya, encore plus de Unity, Unreal 4 est apparu depuis le temps), me voilà revenu à l'aspect shader qui m’attirait tant en retour.

Ayant utilisé Strumpy Shaders ainsi que la manipulation de légères modifications via HLSL à l'époque, me voici de retour avec le dernier enfant des shaders de Unity, le ShaderGraph.

Évidement, pour bien démarrer en beauté, il me fallait tenter de reproduire le fameux shader créé dans l'une de mes premières publications : Le shader artistique-microscopique de Korrasso.


Reproduire l'effet de mon ancien shader avec le ShaderGraph de Unity 2018
plutôt que Strumpy shader
Souvenez vous de mon intention de départ : créer ma propre interprétation du microscopique -
en m'inspirant des extrêmophiles et la coloration artistique des Sea Slugs.

Limace des mers - https://www.dailymail.co.uk/

Two heads are better than one! Double-headed psychedelic sea slug is discovered off the coast of Borneo


Tardigrade "extrêmophile" - http://www.humanite-biodiversite.fr/
Publié dans


le 23.01.16 

 Pour se faire j'ai recommencé à zéro sur un nouveau projet. Après avoir recréé ce qui me manquait (textures et shaders), retrouvé mes anciens objets (Korrasso) et installé le nécessaire (Unity 2018, shaderGraph et Lightweight), me voilà parti sur la création d'un premier shader simple.

Le graph est plutôt simple et modifiable
Contrairement à la dernière itération de Strumpy Shaders, c'est bien plus épuré avec moins de commandes modifiées (par exemple au niveau du jeu de la transparence via le Fresnel. Il me reste à vérifier pour l'orientation de l'effet artistique qui doit passer au centre de la zone transparente.

Je tenterai de jouer avec les niveaux de gris des deux Fresnel pour créer un nouveau canal Alpha qui comprendra l'opacité dans le "sample texture 2D" en noir et blanc. Tout ceci sera une question de mesures.

Pour l'instant, le shader donne un bel effet de Lava Lamp!

Je vous écris bientôt,
Joyeux Noël!

David

lundi 22 décembre 2014

PBS - du néant jusqu'à l'outil complété

Voici un vidéo qui présente de A à Z mon processus afin d'amener mes outils jusqu'à leur présentation - avec l'application des 2 mêmes textures d'un objet à un autre.


Merci et bon visionnement,
je vous reviens plus tard.

vendredi 12 décembre 2014

Optimisation des PBS // Intro


Bonjour à tous, j'entre immédiatement dans les détails de mes récentes recherches :

Que signifie PBS, à la base :
Physically-based Shading



Avec l'arrivée de Direct X11 et des consoles de notre génération, la toute dernière barrière à franchir afin d'accéder au système PBS est ouverte. Cette étape était celle d'intégrer des réflexions temps réel dans tous les matériaux, et ce, sans affecter les performances des jeux. Il faut avoir une bonne compréhension que tous les matériaux de notre environnement réflète la lumière, à la différence de ce que nous voyons dans les anciens systèmes de rendu temps réel où la réflexion n'est qu'une reproduction d'image.(1) De nos jours, nous pouvons sans crainte opérer des calculs et algorythmes se basant sur des vecteurs s'orientant de la source de lumière à l'objet puis de l'objet à la caméra.



Voici le set-up optimisé que je propose pour un projet : 2 TEXTURES

Texture no.: 1 - 128x128 au plus
Le dégradé ou les variances lumière - objet - objet - oeil

Gloss - UV channel 1 - 
Color channel choix de R, G, B ou A

Spec - UV channel 2 - 
Le color channel doit rester en RGB (car c'est un système qui lit la couleur - s'il y a sursaturation tel que dans les modes sRGB, il faut rajouter un paramètre de désaturation par la suite-)

Maintenant, pour donner un coup de main aux visuels de ce monde, voici la mise en place de base de la plage colorimétrique. Le carré dans le coin en bas à droit représente le canal UV 1 de mon objet.


Les canaux :

RGBA (en sRGB)                              Alpha                                             Rouge
                    

                         Vert                                                    Bleu

Texture no.: 2 - résolution au choix
Détails uniques ou propriété distinctive dans la colorimétrie d'un objet

Albedo - UV channel 3 - 
Le Color channel doit rester en RGB (il agit comme l'ancienne diffuse - garde plus pâle qu'une diffuse conventionnelle - certains angles d'incidence obtus vont porter l'objet à réagir de façon très sombre, et ce serait de même dans la nature également)

Occlusion Ambiante - UV channel 4 - 
Color channel A (alpha dans la texture de base)

---

Je mentionne jusqu'ici les canaux UV : Pour aller les chercher dans 3DSMax, il s'agit d'un paramètre à changer dans le "Unwrap UV Modifier"



J'ai déplacé mes UVs pour le bien de l'exercice. Voici mon Canal UV 2 pour le "Plane" - Bleu marin


















Pour Marmoset, le premier canal (ce qu'ils nomment "UV set") est le 0 - bref : UV set 0 = Couleur Verdâtre ; UV set 1 = Couleur Bleuetée

Le meilleur exemple de jouer avec les Canaux dans Marmoset est l'Occlusion Ambiante;
Si je prend le Canal Bleu (jusqu'à présent, il est sombre pour le UV set 0 et pâle pour le UV set 1) l'occlusion ambiante, expliquée plus en profondeur ci-bas, paraîtra mieux sur le UV set 1







---

GLOSS - Canal UV 1

Voici une mise en scène de base pour présenter les réactions de la "Plane"

Le Gloss fonctionne à la façon réelle. Il considère la dispersion des rayons de lumière lors de leur impact sur l'objet (2). Il vient également affecter la qualité du grain dans la réflexion.

Ici,  j'ai choisi le Color Channel Vert qui est le plus pâle sur notre UV set 0. 
Plus pâle = plus concentré
Ici,  j'ai choisi le Color Channel Rouge qui est le plus sombre sur notre UV set 0.
Plus sombre = plus dispersé


SPECULAIRE - RÉFLECTIVITÉ - Canal UV 2 (dans Marmoset, il existe que 2 canaux; dans les engins de jeux, il y en a une panoplie)

La map spéculaire vient chercher les tonalités additives du gloss des sources de lumière et des bounces lumineuse (analysé de base en niveaux de gris) pour venir teinter les zone de la couleur dans la map (ici le "plane" se trouve dans la zone bleu-vert). Plus on se trouve dans une zone sombre, plus l'objet va chercher la teinte opposée à la couleur originale (on voit ici le magenta ressortir sur l'objet).


Cette map est avant tout utile pour coloriser l'objet de façon réaliste; elle peut être manié pour faire réagir l'albedo et prendre sa teinte opposée si l'intensité lumineuse réfléchie est sombre.

Ici, l’albédo est vert-bleuté (voir le canal RGBA) et la tonalité dans la map spéculaire fait ressortir la réflexion du décor dans ses régions pâle et vient chercher la teinte dans l’albédo lorsque la map est foncée. Ceci est due à la perte de réflection qui nous ramène une couleur plus près de celle qui est caractéristique à l'objet (albédo).


ALBEDO - Canal UV 3 (dans Marmoset, il existe que 2 canaux; dans les engins de jeux, il y en a une panoplie)

Couleur caractéristique de l'objet. Si la lumière rebondit rapidement sur un objet, c'est qu'elle ne capture pas la couleur de l’albédo et renvoie mieux la réflexion rebondie.

Ici, l'albedo est rouge et paraît aisément sur une surface où la map spéculaire est plus faible


OCCLUSION AMBIANTE - AO - Canal UV 4 (Canal UV 1 dans Marmoset)






Map qui vient simplement émettre une négation dans la tonalité ET dans la teinte. Ici j'ai mis l'intensité de la AO à 4, ce qui tourne la couleur orangée à vert (à l'opposée dans le cercle chromatique), 3 fois plus contrasté que l’albédo d'origine ( 100% - 400% = -300% ).

Affecte uniquement l'albedo.

---

Je résume en vidéo mes explications :

 

Pour la suite je pars à la recherche d'un logiciel qui me permet les Canaux UV multiples pour la malléabilité de la propriété des différents matériaux sur une même texture.

Merci à tous et je vous reviens,
David


---

(1) Andrew Maximov, Physically Based Rendering for Artists, https://www.youtube.com/watch?v=LNwMJeWFr0U
(2) Gloss Introduction, http://www.gloss-meters.com/GlossIntro.html#1

lundi 27 octobre 2014

Rig sur 3DSMax // Les coudes




Bonjour à tous, je reprends la barre du Blog.

Je travaille sur un Rig d'humanoïde simple. Je tiens à créer un "Custom Rig" pour un personnage humain de l'âge de 25 ans (donc un adulte). Mon défi est celui de bien faire attention aux perte de tonus dans les articulations, notamment aujourd'hui, celle du coude. Il faut éviter l'effet "Rubber" qui donne une impression de caoutchouc mou dans la peau du personnage.



Je teste plusieurs façons de simplifier tout en donnant la qualité et la solidité du membre dans sa vraie nature.

J'ai fait un test en me rattachant à un bipède. Cela présente ce que j'illustre.

(  "Dummy" : Visible sous la forme de cubes verts dans 3DSMax, ils sont l'équivalent du "Point" (alternative dans 3DSMax et Maya) ou du "Null" de XSI. Il s'agit en fait d'un point de coordonnées dans l'univers et cette information se trouve au centre du cube.  )

À partir du bras en T-pose,


Avec une commande en "wire" sur le plus grand "Dummy", je lui donne un axe et point de pivot plus large. Son mouvement et sa réponse seront accentués vers l'arrière et vers le corps du bipède lorsqu'on serre le coude.








Ici, je vais évidement chercher le mixte de IK et FK de l'épaule du Bipède.





Donc les "dummy" suivent les actions du personnage tout en gardant leurs contraintes d'orientation.



Suite à ceci, j'ai fait les tests sur des os pour un rig plus flexible.

Setup :


Rotation délayée :



Le grand "Dummy" forme un plus grand arc qui oppose le poids du bone qui reserre la peau du personnage fictif.

Après avoir "skinné" le mesh en rajoutant le plus Grand "Dummy" de l'image précédente,

Bref, à partir d'un coude en caoutchouc...

... j'ai donné le tonus à mon personnage!



Cela peut également se produire au niveau du Coccyx et des genoux. Des chaines de "Dummy" fixés aux os de l'articulation avec un plus grand "Dummy" qui possède un axe de rotation modifié suffisent à créer la force opposée qui rappelle la forme de notre coude.

Évidement, mon rig est encore lié à un biped. Je fais la transition précisément pour obtenir la flexibilité du "Custom Rig". Je dois donc venir compenser pour l'unique avantage du Bipède, celui de posséder les propriété du IK et du FK en même temps tel que présenté avec l'épaule du bipède que l'on peut rotater alors que le bras garde son orientation fixée sur le poignet.

N'hésitez pas à me poser des question sur le sujet du Rigging, mes prochaines nouvelles concerneront avant tout de la modélisation et de l'éclairage. Si vous voulez revenir sur ce sujet, les commentaires sont bienvenus.

Merci de me supporter ;  AVIS aux intéressé, je suis disponible à l'emploi. Contactez-moi si mon travail vous intéresse.