Shader posteffect de WaterLine / SplitScreen underwater

Questions à propos du scripting Shader.
Athlantanis
Messages : 2
Inscription : 19 Nov 2020 22:46

Shader posteffect de WaterLine / SplitScreen underwater

Message par Athlantanis » 21 Nov 2020 11:55

Salut tout le monde !

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);
Je comprend pas exactement ce que le code est censé faire comme je l'ai dis, donc je pensais arriver à le comprendre en recréer, ce qui n'est toujours pas le cas ... !

Tout aide de n'importe quel ordre pour avancer sera bienvenue !

Un grand merci par avance.
Olivier

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: Shader posteffect de WaterLine / SplitScreen underwater

Message par Max » 21 Nov 2020 12:47

Bonjour,

les shaders n'est pas ce que je maitrise le plus. Et pas sûr du tout d'avoir le temps d'éplucher la vidéo dont tu fournis le lien.
Ma contribution se limitera donc à ce lien (que tu connais probablement déjà): https://docs.unity3d.com/Manual/SL-Unit ... ables.html
tu y trouveras des informations sur les différentes variables globales disponibles et qui pourraient t'être utile dans ton code, comme par exemple _ProjectionParams (_ProjectionParams.y pour le nearPlane et _ProjectionParams.z pour le farPlane).
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: Shader posteffect de WaterLine / SplitScreen underwater

Message par jmhoubre » 21 Nov 2020 16:35

Bonjour,

merci à Max pour la page sur les variables de shaders, elle m'avait échappé. Merci pour cette vidéo, mais je reste sec sur ce que fait cette fonction.
As-tu essayé de poser la question en commentaire de la vidéo ou de contacter l'auteur ? J'ai remarqué qu'il a répondu à une question dans une autre vidéo il y a 3 semaines.

Athlantanis
Messages : 2
Inscription : 19 Nov 2020 22:46

Re: Shader posteffect de WaterLine / SplitScreen underwater

Message par Athlantanis » 22 Nov 2020 11:58

Hello,

Oui, la doc je l'a connais plutôt par cœur.
Sinon je n'ai pas posé la question en commentaire de la vidéo non. Je pourrais pourquoi pas essayer.

Si je devais résumer plutôt mon plus gros problème qui viens peut-être du node "CameraVector".
https://docs.unrealengine.com/en-US/Eng ... index.html
Qui est donc "The direction from the pixel to the camera."

Est-ce que votre implémentation serait telle que la mienne, c'est à dire :
Convertir l'uv posteffect en worldPos (via la depthMap) pour faire ensuite un simple cameraVector = worldPos - cameraPos ?
Ou est-ce que vous interprèteriez ce node différent ?

Merci
Pièces jointes
Sans-titre-1.png
Sans-titre-1.png (145.37 Kio) Consulté 3469 fois

Répondre

Revenir vers « les Shaders »