Et merci aux modérateurs de m'avoir ajoutés sur le forum.
Je suis en recherche d'aide, un peu partout sur le net afin d'apprendre et résoudre un problème qui me semble être surement simple, mais mon manque de connaissance basique sur les posteffect me limite.
Je réalise un jeu où j'ai implémenté un océan via du vertex displacement, et j'aimerais maintenant pouvoir mettre la caméra sous l'eau. J'aimerais du coup rajouter une jolie transition entre être à la surface et sous l'eau.
Je n'ai pas trouvé beaucoup de source pour Unity, mais j'ai trouvé un excellent tutorial via UE4 que j'aimerais convertir pour Unity (#waterline, #watersplitscreen, ...) :
https://www.youtube.com/watch?v=rnUEdKPPuhI
Ma question est relativement simple.
A 4 minutes, Marvel Master, celui qui fait le tuto écrit une fonction qui s'appelle GetClipPlane.
J'essaye de la convertir en shader post-effect (je code tout et n'utilise pas le package PostEffect de Unity).
Néanmoins, vu que je ne comprends pas exactement ce que fait cette fonction, je n'arrive pas à la coder.
Le reste du tuto sera simple.
Pourrez-vous peut-être prendre le temps de regarder la minute de vidéo entre 4min et 4min50 afin de m'expliquer le but de cette fonction ? Et encore mieux, les différentes étapes afin d'y parvenir.
Les noeuds que j'ai "compris" ...
- le noeud CameraVector qui serait l'équivalent d'un viewDirection, du pixel vers la camera,
- le noeud CameraDirectorVector qui serait la direction de la cam (je l'injecte du c#) ...
- le noeud CameraPosition la position world ...
- je passe les noeuds dot, la constant nearClip.
Ma tentative foireuse ...
Code : Tout sélectionner
// Converti l'UV en WorldPos (fonctionne quand j'affiche les couleurs en posteffect vert bien en Y 1, bleu en Z1, ...)
half3 wPos = TransformUVToWorldPos(i.uv);
// Viewdirection ?
float3 cameraVector = wPos - _CameraWS;
float3 cameraDirectionVector = _CameraDirWS;
float rDot = dot(cameraVector, cameraDirectionVector);
float rDotDivise = _CameraNearClip / rDot;
float rDotMul = cameraVector * rDotDivise + _CameraWS;
// Je n'ai pas essayé la suite vu que cette partie ne marche déjà pas
return fixed4(rDotDivise, rDotDivise, rDotDivise, 1);
Tout aide de n'importe quel ordre pour avancer sera bienvenue !
Un grand merci par avance.
Olivier