Bon alors en fait non ...
Je suis tout bêtement revenu à mon truc initial où je stocke la normale secondaire dans la couleur des vertices... Et donc ça n'est pas mis à jour par le skinning du mesh, qui ne modifie bien que le buffer des normales "officielles".
On m'a dit que normalement la matrice "MODEL" était censée contenir toutes les transformations issues des bones pour chaque vertex (ce qui me paraissait un peu trop beau pour être vrai, mais comme j'étais à moitié endormi j'ai eu une brève lueur d'espoir...)
Je me suis basé sur ce shader :
http://wiki.unity3d.com/index.php/Silho ... ed_Diffuse
En modifiant la première passe comme ceci (c'est très simple comme modif):
Code : Tout sélectionner
v2f vert(appdata v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
// utilisation de la couleur à la place de la normale
float3 col;
col.xyz = (1-v.color.rgb) * 2 - 1;
float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, col.xyz);
float2 offset = TransformViewToProjection(norm.xy);
o.pos.xy += offset * o.pos.z * _Outline;
o.color = _OutlineColor;
return o;
}
et donc ça me génère un mesh tout de travers, à partir du moment où il est skinné et animé avec des bones.
Pour un mesh non déformé, ça fonctionne parfaitement.
Quelqu'un saurait s'il existe un moyen de continuer sur cette voie (parce que le coup de la normal map, c'est bien cracra et pas pratique de mon point de vue) et faire en sorte d'appliquer les transformations des bones sur le buffer des couleurs de la même façon qu'il affecte celui des normales ?
(oui j'ai bien conscience que c'est ma question du départ
)
boubouk50 a écrit :Le lissage sera toujours pris en compte, ta normalMap sera là pour rectifier au mieux les normales.
C'est la création de ta normalMap qui va être déterminante. En fait, tu fais comme pour les meshs ultradétaillés, sauf qu'au lieu de projeter ton ultraMesh tu projettes ton modèle non lissé.
A priori, ce devrait le faire.
Réponse tardive: c'est ce que j'ai fait, mais je me retrouve toujours avec un mesh tout lissé, où l'on ne voit que les bordures des zones flat de la normalmap sur le mesh.
Comme la zone flat de la normalmap ne fait que s'ajouter au lissage actuel (sans le remplacer) c'est cohérent que ça garde un aspect lissé au final.
Dans ce cas il me faudrait une sorte de normalmap "inverse" qui vienne contre-balancer le lissage pour revenir à un aspect plat ... enfin je suppose.
Mais ce n'est pas une solution qui m'enchante des masses car elle n'est pas très "user friendly", et ça serait alors beaucoup plus simple de revenir à la solution du mesh inversé fait à la main.