Floaty flottants

  • Ajouter un Plane avec un “Ocean” modifier, avec, pour les Waves, un Scale à 2.5 et Choppiness à 0.3

  • Pour le time, ajoutez comme driver l’équation “#frame/20” puis appuyer sur ↩, ça va animer l’océan.

  • S’assurer que l’interpolation est linéaire

  • Faites “Play” (spacebar) pour voir 🙂

  • Créer un cube, aller dans le workspace Geometry Nodes et faire New.

  • Assurez-vous d’épingler le workspace geo nodes pour ne pas qu’il disparaisse dès lors qu’on sélectionne un autre objet ou un autre modifier du cube.

  • Ajouter un noeud raycast, ne pas le connecter pour l’isntant.

  • La cible, c’est l’océan, Donc Drag and drop l’ocean de l’Outliner vers le workspace des geo nodes et connecter le socket geometry de cew dernier à socket du Raycast.

  • Aussi, assurez-vous que Object Info est à Relative afin que les matrice de transformations “World” soient appliqués, sinon la référence locale de l’objet sera prise en considération.

👌🏼

Vous avez renommé le Plane à “Ocean” et le Geo Nodes à, genre, “Flotty flottant”, right?

  • BTW, si vous voulez ce bel effet de transparence en mode Solid View, on l’active dans les paramètres du Shading. X-Ray (et Cavity pour les occlusions ambiantes).

  • Ajoutez les noeuds suivants puis faire Play. Vous voyez l’emprunte du cube flotter sur la surface de l’océan. C’est un bon départ.

  • Donc le cube et l’objet qui “cast” des rayons sur l’océan dans la direction des Z négatifs. On prend la valeur Z de la distance du rayon entre le cube et l’océan, on le multiplie par -1 pour le rendre négatif et on se sert de cette valeur pour calculer l’offset de Set Position dudit cube. Set Position va “transformer” la position du cube à l’endroit ou les rayons de ce dernier frappent la surface de l’océan.

  • Oui on a perdu le cube et c’est parce que Set Position va modifier la position de tous les vertices du cube en fonction du calcul et du ray cast qu’on vient de faire, l’écrapoutissant ce faisant (en d’autres termes, chaque paire de vertices du cube alignés en Z auront la même valeur Z à la sortie du Group Output).

  • Si on ajoute un join geometry pour voir le cube, déplacez-le et tournez-le pour voir l’effet sur l’océan.

  • Ain’t it chouette?

  • Une manière de retrouver l’objet, c’est de modifier “Source Position” du Raycast, pour lui dire que l’on veut conserver les positions relatives des vertices du cube.

  • P.S., j’ai retiré le join geometry node.

  • On veut aussi influencer la rotation, donc Set Position n’est pas le bon noeud. On va utiliser un noeud plus générique, le Transform geometry Node peut modifier non seulement la position (comme Set Position), mais également la rotation et le scale.

  • Pour la rotation, celle-ci est forcément fonction de la normale à la surface de l’océan.

  • Incidemment, le socket “Hit normal” du Raycast donne la direction du vecteur normal à la surface à l’endroit de la collision du casted ray. C’est exactement ce que l’on veut utiliser, avec un “Align Rotation to Vector”

  • Ça marche, mais vous notez le “jitter” (sautillement)? Si on réduisait le “choppiness” des vagues à zéro, se serait mieux, plus smooth, mais le saccadé vient du fait qu’une seule normal pour tout le cube est calculée, celle à l’endroit où le rayon touche à la surface de l’océan.

  • En d’autres termes, la variation de l’angle de la surface de l’océan, d’un frame à l’autre, varie trop à cause du “choppinness” des vagues.

  • Pour ça, il y a plusieurs manières. On va utiliser un noeud “Attributes Statistic” qui va nous calculer des valeurs comme la moyenne, etc., de notre cube.

  • On va remplacer le Location info du cube qui aliment Source Position du RayCast par la valeur “Mean” (moyenne) du Attribute Statics. Bien sûr, il faut dire à ce dernier que les stats, sur sur la position qu’on veut la calculer.

  • C’est encore trop “choppy”. On peut soit réduire le “choppiness” des vagues, soit calculer la. valeur de la normale autour de celle du rayon, sur le plan XY et en faire une moyenne.

  • On va donc copier Le Raycast 4 fois supplémentaires. On va connecter à chaque fois la géometrie de l’Object Info du cube au socket Target Geometry du Raycast.

  • Mais l’output Mean du Attribute Statistic, on va d’abord le faire passer par un Vector Math node de type Add.

  • La première fois, on laisse ça à zéro (donc la valeur moyenne au centre de l’objet).

  • La fois 2 et 3, on ajoute 1 en X puis on retire 1 en X (pas Z et pas Y).

  • Les 2 dernières fois, on ajoute 1 en Y, puis on retire 1 en Y (pas Z et pas X).

  • On a donc maintenant 5 rayons, un au centre, et 4 autres autour de ce dernier. Il suffit maintenant de calculer la valeur moyenne de la normale.

  • Un Vector Math à chaque fois, qui additionne tous les 5 vecteurs puis on divise par 5. Et c’est cette nouvelle normale, qui est la moyenne des 5 mesurées, qui sera utilisée pour aligner la rotation du cube.

  • Tada!

  • Remplacez le cube par une sphère par exemple.