Nous simulons une rivière réaliste dans Houdini et Unreal Engine 4



Lorsque la transition de DX9 à DX10 vient de commencer, de nombreux jeux ont commencé à apparaître avec de l'eau modélisée avec les bons effets. Ensuite, la différence était très notable, surtout si vous comparez des jeux des générations passées avec le même Crysis. Par conséquent, lorsque je suis tombé sur un guide sur la façon de faire une simulation de rivière simple mais réaliste via le plugin Houdini pour UE4, je n'y ai même pas pensé et l'ai rapidement traduit.

Prologue


  • Téléchargez les actifs Unreal et Houdini. La vidéo d'installation est ici .
  • La plupart du projet, j'ai suivi les tutoriels de Ben Shriver et Andreas Glad .
  • N'ayez pas peur des nœuds et des scripts. Ce n'est pas aussi difficile que cela puisse paraître.
  • Pour l'eau, j'ai utilisé la carte normale du contenu Unreal Starter.

Présentation


Je m'appelle Simon. J'ai commencé à programmer sur QBasic et Pascal quand j'étais jeune (voici des exemples ), j'ai tout de suite réalisé que le codage est difficile, et je suis passé à l'art 3D. En même temps, j'ai toujours gardé un intérêt pour le côté technique de la création de jeux - il s'est avéré que je suis devenu un artiste VFX. Ce métier allie bien art et technologie.

J'ai travaillé comme artiste 3D sur Sacred 2 et X: Rebirth , et artiste VFX sur RiME , The Invisible Hours . Maintenant, je travaille sur WiLD .



J'ai également plusieurs projets personnels liés au développement de jeux: le blog Game Art Trick , le German Game Dev Podcast et les chaînes YouTube avec des tutoriels Unreal et Houdini .

Présentation de Houdini


Je me suis lié d'amitié avec Houdini en travaillant sur The Invisible Hours. Ensuite, j'ai fait un petit simulateur de fluide qui pouvait être mis en pause, déployé et joué à l'envers en temps réel. Le résultat était comme ceci:


Source: Simulation fluide à partir des heures invisibles

Je ne savais pas comment ajouter une modélisation fluide à Unreal. Heureusement, une technologie incroyable appelée Vertex-Count-Agnostic Morph Target-Based Fluid Animation a été implémentée dans Houdini, et j'ai donc pu ajouter ma simulation de fluide au jeu. La technologie a été initialement développée par Norman Shaar .


Source: Vertex-Count-Agnostic Morph cibles dans UE4 Norman Shaar

Si vous voulez en savoir plus sur la mise en œuvre, consultez cette section de mon discours Cool Stuff with Textures:


L'effet de la rivière: le début du projet


Je voulais apprendre à créer une rivière générée de manière procédurale pour le Realtime VFX River Challenge , mais je ne savais pas par où commencer. Par chance, je suis tombé sur un excellent tutoriel de Ben Shriver , où il parle des rivières dans Horizon Zero Dawn. J'étais accro et j'ai décidé de l'essayer!


À propos, il y a un autre tutoriel très cool sur les rivières Houdini d' Andreas Glad :


Ces vidéos m'ont vraiment aidé au début et sont devenues la fondation.

Une façon très difficile de construire des paysages


Le soulagement était très complexe. Je vais illustrer le processus de création pour que tout le monde comprenne:


Source: Création de terrain à Houdini

Je plaisante. C'est trop facile.

Effet rivière


Les premières étapes sont copiées à 100% à partir du tutoriel de Ben, et elles sont cool. Vous créez d'abord une spline et la laissez «tomber» sur le sol. Cela se fait en lisant la hauteur du relief aux points de la spline, puis en déplaçant les points à cette hauteur:



Ensuite, vous laissez les points de spline «glisser» le long de la pente pour mieux intégrer la rivière au terrain:



En fait, ils ne roulent pas de manière physique. Au lieu de cela, la normale de base de la surface et la normale du point sont utilisées pour calculer l'axe local pour chaque point (qui se déplace de la spline vers le bas de la pente). Ensuite, vous déplacez les points un peu le long de l'axe calculé (ce processus est très bien montré dans la vidéo de Ben).

L'étape suivante consiste à s'assurer que la rivière ne coule pas en amont en raison du paysage (car il y a une petite colline où la rivière longe).



Un petit script Python garantit que le point de spline dans l'espace 3D n'est jamais plus élevé que le précédent:



Une autre astuce pour ajouter du naturel est d'éviter les pentes continues. Au lieu de cela, laissez la rivière couler par étapes (pour une meilleure visualisation, je montre ici la géométrie de la rivière, mais en réalité nous travaillons toujours avec une seule spline).



Enfin, nous arrivons à l'étape où j'introduis mes propres idées: ajoutez des couleurs à la spline pour marquer où la pente est (verte), où elle commence (turquoise) et où elle se termine (rouge). Cela m'aidera plus tard à mélanger différentes textures d'eau et à placer des systèmes de particules.



Passons à la création plus rapide de la géométrie de la rivière, car tout cela est parfaitement expliqué dans la vidéo de Ben. Le point le plus important est que seuls les bords extérieurs de la rivière sont à nouveau alignés avec le relief (comme nous l'avons fait avec la spline en premier lieu):



Déformation du terrain en fonction de l'écoulement


Encore une fois, il s'agit du flux de travail à 100% de Ben, en commençant par déplacer le relief sous la géométrie de la rivière afin qu'ils ne se coupent en aucune façon:



Ensuite, pour chaque point du terrain, vous dessinez des rayons vers le haut. S'ils tombent dans la géométrie de la rivière, ces points se déplaceront jusqu'au lieu de l'impact:



Chaque point qui n'a touché aucun endroit recevra sa hauteur d'origine.



Ce gif montre ce qui se passe lorsque la spline change:



Ensuite, la région de hauteur du paysage est convertie en polygones et remélangée. Maintenant, il est prêt à être utilisé dans Unreal:



Parlons maintenant de la conversion UV, des matériaux, des cartes de flux, etc.

Géométrie fluviale


La géométrie de la rivière, que vous avez vue plus tôt, n'a été utilisée que pour découper la zone. La vraie rivière est un peu plus mince, a des UV et a été fendue (notez que mes couleurs de pente sont toujours là):



Génération UV


Comme la spline varie toujours en longueur, les UV doivent s'y adapter. Heureusement, c'est très facile à Houdini. Créez d'abord un UV dans l'espace 0-1-UV, puis mesurez la longueur de la spline. Cette valeur peut être utilisée pour mettre à l'échelle les UV. Ici, vous voyez comment je change la spline, et en bas - comment les UV s'adaptent automatiquement. Croyez-moi, si vous avez essayé une fois, vous ne voudrez plus jamais créer UV manuellement.



Chaîne


Autre détail: je voulais rendre le canal plus sombre et humide. Pour ce faire, je dessine quelques rayons de chaque polygone du paysage, et si j'entre dans la rivière, j'attribue une couleur à tous les points de ce polygone. Le masque créé est le suivant:



Et voici un exemple d'utilisation d'un masque dans un matériau pour attribuer différentes valeurs d'imprécision et de rugosité:



Organigramme


Créer une carte de débit fluvial avec Houdini est très simple. Vous venez de dire au nœud spécial "ceci est ma géométrie de rivière, et ceci est une spline qui indique la direction de la rivière" et la flèche, la géométrie obtient soudainement les couleurs des pics représentant le débit de la rivière:



Vous pouvez ajouter un autre nœud pour que la carte de flux réponde aux obstacles. Maintenant, l'eau coulera autour d'eux:



Et la chose la plus cool: vous pouvez provoquer la cuisson de la carte de flux dans Unreal! Pas besoin de basculer entre Unreal et Houdini. Définissez simplement le bouton Render dans Houdini comme paramètre. Ici, vous voyez comment je change d'obstacles, puis je visualise une nouvelle carte de flux (notez que la cuisson prend plus de temps que sur un GIF):



Masque en mousse


Pour faire de la mousse sur l'eau autour des obstacles, j'utilise le soi-disant nœud isoOffset. Fondamentalement, il stocke la distance à l'objet dans la couleur du haut de la rivière. Ensuite, j'ai ajouté du bruit et le masque est prêt:



Pour rendre le masque en mousse moins statique, j'utilise un simple modèle de nuage Photoshop que je déplace le long de la rivière et le soustrait du masque d'origine:



Et puisque nous parlons de mousse: les cascades ont également une texture de mousse simple, qui n'est représentée que du côté de la rivière. La structure en mousse défile plus rapidement que l'eau de la rivière:



Systèmes de particules


J'ai noté où se trouvent les parties supérieure et inférieure de ma cascade, afin de pouvoir filtrer ces éléments (des lignes ont été utilisées pour créer la géométrie de la rivière), créer un point en leur centre et y copier la boîte factice. Plus tard, nous le remplaçons par le système de particules dans Unreal:



Pour les particules autour des obstacles, j'utilise un nœud appelé Intersection Analysis pour obtenir l'intersection des obstacles et de la rivière. Ces arêtes d'intersection ont des points. Pour leur nombre aléatoire, je copie à nouveau la boîte factice (qui est ensuite échangée avec le système de particules dans Unreal):



Voici à quoi cela ressemble quand je remplace les boîtes factices dans Unreal:



Exporter un projet vers Unreal


Le soi-disant moteur Houdini est un plug-in pour Unity, Unreal, 3ds Max, Maya et Cinema 4D et exécute un réseau de nœuds que vous créez dans Houdini directement dans ces programmes. J'ai besoin de faire apparaître le terrain et la rivière pour enregistrer le fichier Houdini en tant qu'actif numérique. Il peut être importé et utilisé comme n'importe quelle autre ressource dans Unreal:



Maintenant, je peux changer les paramètres (que j'ai définis dans Houdini) ou changer la spline pour que la rivière coule d'une manière différente:



Les matériaux sont toujours créés et attribués dans Unreal, mais vous pouvez les affecter à l'avance (ci-dessous mon tutoriel à ce sujet).



Faut-il également étudier les workflows Houdini?


Houdini a beaucoup à apprendre. De plus, ce sont de nouveaux outils de développement, donc des inexactitudes se produiront dans la documentation.

Mais c'est une situation courante pour les développeurs de jeux. Nous travaillons constamment avec des technologies avancées qui doivent être apprivoisées en premier. Plus important encore: vous n'êtes pas seul. Penser la discorde procédurale est plein de gars sympas qui aideront et enseigneront. Dans ces chats, vous pouvez même trouver des développeurs SideFX!

Les références


Source: https://habr.com/ru/post/fr430144/


All Articles