Simulamos un río realista en Houdini y Unreal Engine 4



Cuando la transición de DX9 a DX10 acaba de comenzar, muchos juegos comenzaron a aparecer con agua modelada con los efectos correctos. Entonces la diferencia fue muy notable, especialmente si comparas juegos de generaciones pasadas con el mismo Crysis. Por lo tanto, cuando encontré una guía sobre cómo hacer una simulación fluvial simple pero realista a través del complemento Houdini para UE4, ni siquiera pensé en ello y lo traduje rápidamente.

Prologo


  • Descargue los recursos de Unreal y Houdini. El video de instalación está aquí .
  • La mayor parte del proyecto seguí los tutoriales de Ben Shriver y Andreas Glad .
  • No tengas miedo a los nodos y scripts. No es tan difícil como parece.
  • Para el agua, utilicé el mapa normal del contenido de Unreal Starter.

Introduccion


Mi nombre es simon Comencé a programar en QBasic y Pascal cuando era joven (aquí hay ejemplos ), inmediatamente me di cuenta de que la codificación es difícil y cambié al arte 3D. Al mismo tiempo, siempre retuve el interés en el aspecto técnico de la creación de juegos: resultó que me convertí en un artista de efectos visuales. Esta profesión combina bien el arte y la tecnología.

Trabajé como artista 3D en Sacred 2 y X: Rebirth , y artista de efectos visuales en RiME , The Invisible Hours . Ahora estoy trabajando en WiLD .



También tengo varios proyectos personales relacionados con el desarrollo de juegos: el blog Game Art Trick , el podcast alemán Game Dev y los canales de YouTube con tutoriales de Unreal y Houdini .

Introduciendo Houdini


Me hice amigo de Houdini mientras trabajaba en The Invisible Hours. Luego hice un pequeño simulador de fluidos que se podía pausar, desplegar y reproducir al revés en tiempo real. El resultado fue así:


Fuente: Simulación de fluidos de The Invisible Hours

No tenía idea de cómo agregar modelado fluido a Unreal. Afortunadamente, en Houdini se implementó una tecnología asombrosa llamada Animación de fluidos basada en objetivos con agnóstico de recuento de vértices . La tecnología fue desarrollada originalmente por Norman Shaar .


Fuente: objetivos de Morph agnóstico de recuento de vértices en UE4 Norman Shaar

Si desea obtener más información sobre la implementación, consulte esta sección de mi charla sobre Cool Stuff with Textures:


El efecto del río: el inicio del proyecto.


Quería aprender a hacer un río generado por procedimientos para el Realtime VFX River Challenge , pero no tenía idea de por dónde empezar. Por casualidad, me encontré con un gran tutorial de Ben Shriver , donde habla sobre los ríos en Horizon Zero Dawn. ¡Me enganché y decidí probarlo!


Por cierto, hay otro tutorial muy interesante sobre los ríos Houdini de Andreas Glad :


Estos videos realmente me ayudaron al principio y se convirtieron en la base.

Una forma muy difícil de construir paisajes.


El alivio fue muy complejo. Ilustraré el proceso de creación para que todos entiendan:


Fuente: Creando Terreno en Houdini

Es broma. Es muy fácil

Efecto río


Los primeros pasos se copian al 100% del tutorial de Ben, y son geniales. Primero crea una spline y deja que "caiga" en el suelo. Esto se hace leyendo la altura del relieve en los puntos de la spline, y luego moviendo los puntos a esta altura:



Luego, deja que los puntos de la spline se "deslicen" por la pendiente para integrar mejor el río en el terreno:



De hecho, no ruedan de manera física. En cambio, la base normal de la superficie y la normal del punto se utilizan para calcular el eje local para cada punto (que se mueve desde la spline hacia abajo por la pendiente). Luego mueve los puntos un poco a lo largo del eje calculado (este proceso se muestra muy bien en el video de Ben).

El siguiente paso es asegurarse de que el río no fluya río arriba debido al paisaje (porque hay una pequeña colina donde corre el río).



Un pequeño script de Python asegura que el punto de spline en el espacio 3D nunca sea más alto que el anterior:



Otro truco para agregar naturalidad es evitar pendientes continuas. En cambio, deje que el río fluya por etapas (para una mejor visualización, muestro la geometría del río aquí, pero en realidad todavía estamos trabajando con una sola spline).



Finalmente, llegamos al paso donde presento mis propias ideas: agregar colores a la spline para marcar dónde está la pendiente (verde), dónde comienza (turquesa) y dónde termina (rojo). Esto me ayudará más tarde a mezclar diferentes texturas de agua y colocar sistemas de partículas.



Pasemos a crear la geometría del río más rápido, ya que todo esto se explica perfectamente en el video de Ben. El punto más importante es que solo los bordes exteriores del río están nuevamente alineados con el relieve (como hicimos con la spline en primer lugar):



Deformación del terreno según flujo


Nuevamente, este es el flujo de trabajo del 100% de Ben, comenzando por mover el relieve debajo de la geometría del río para que no se crucen de ninguna manera:



Luego, para cada punto del terreno, dibujas rayos hacia arriba. Si caen en la geometría del río, estos puntos se moverán hasta el lugar del impacto:



Cada punto que no llegó a ningún lado recibirá su altura original.



Este gif muestra lo que sucede cuando cambia la spline:



Luego, la región de altura del paisaje se convierte en polígonos y se vuelve a mezclar. Ahora está listo para usar en Unreal:



Ahora hablemos sobre la conversión UV, materiales, mapas de flujo y más.

Geometría del río


La geometría del río, que viste antes, se usó solo para cortar el área. El río real es un poco más delgado, tiene rayos UV y se dividió (tenga en cuenta que los colores de mi pendiente todavía están allí):



Generación UV


Dado que la spline siempre varía en longitud, la UV debe adaptarse a esto. Afortunadamente, esto es muy fácil en Houdini. Primero crea un UV en 0-1-UV-Space, y luego mide la longitud de la spline. Este valor se puede usar para escalar UV. Aquí puede ver cómo cambio la spline y, en la parte inferior, cómo se adapta automáticamente la radiación UV. Créeme, si alguna vez lo intentaste, nunca más querrás crear UV manualmente.



Canal


Otro detalle: quería hacer el canal más oscuro y húmedo. Para hacer esto, dibujo algunos rayos de cada polígono del paisaje, y si me meto en el río, asigno un color a todos los puntos de este polígono. La máscara creada es la siguiente:



Y aquí hay un ejemplo usando una máscara en un material para asignar diferentes valores de vaguedad y aspereza:



Diagrama de flujo


Crear un mapa de flujo de río con Houdini es muy fácil. Simplemente le dice al nodo especial "esta es la geometría de mi río, y esta es una spline que indica la dirección del río" y el boom, la geometría de repente obtiene los colores de los picos que representan el flujo del río:



Puede agregar otro nodo que haga que el mapa de flujo responda a los obstáculos. Ahora el agua fluirá a su alrededor:



Y lo mejor: ¡puedes crear el mapa de flujo en Unreal! No es necesario cambiar entre Unreal y Houdini. Simplemente configure el botón Renderizar en Houdini como parámetro. Aquí puede ver cómo cambio los obstáculos y luego visualizo un nuevo mapa de flujo (tenga en cuenta que hornear lleva más tiempo que en un GIF):



Máscara de espuma


Para hacer espuma en el agua alrededor de los obstáculos, utilizo el llamado nodo isoOffset. Básicamente, almacena la distancia al objeto en el color de la cima del río. Luego agregué algo de ruido y la máscara está lista:



Para hacer que la máscara de espuma sea menos estática, utilizo una plantilla simple de nube de Photoshop que muevo a lo largo del río y la resta de la máscara original:



Y como estamos hablando de espuma: las cascadas también tienen una textura de espuma simple, que se muestra solo en el lado del río. La estructura de espuma se desplaza más rápido que el agua del río:



Sistemas de partículas


Noté dónde están las partes superior e inferior de mi cascada, para poder filtrar estos elementos (se usaron líneas para crear la geometría del río), crear un punto en su centro y copiar la caja ficticia en él. Más tarde lo reemplazamos con el sistema de partículas en Unreal:



Para las partículas alrededor de los obstáculos, utilizo un nodo llamado Análisis de intersección para obtener la intersección de los obstáculos y el río. Estos bordes de intersección tienen puntos. A su número aleatorio, copio nuevamente la caja ficticia (que luego se intercambia con el sistema de partículas en Unreal):



Esto es lo que parece cuando reemplazo las cajas ficticias en Unreal:



Exportar un proyecto a Unreal


El llamado motor Houdini es un complemento para Unity, Unreal, 3ds Max, Maya y Cinema 4D y ejecuta una red de nodos que crea en Houdini directamente en estos programas. Necesito hacer que el terreno y el río aparezcan para guardar el archivo Houdini como un activo digital. Se puede importar y usar como cualquier otro recurso en Unreal:



Ahora puedo cambiar los parámetros (que configuré en Houdini) o cambiar la spline para que el río fluya de una manera diferente:



Los materiales aún se crean y asignan en Unreal, pero puede asignarlos por adelantado (a continuación se muestra mi tutorial sobre esto).



¿Deberíamos estudiar igualmente los flujos de trabajo de Houdini?


Houdini tiene mucho que aprender. Además, se trata de nuevas herramientas de desarrollo, por lo que se producirán imprecisiones en la documentación.

Pero esta es una situación común para los desarrolladores de juegos. Trabajamos constantemente con tecnologías avanzadas que deben domesticarse primero. Lo más importante: no estás solo. Pensando en la discordia procesal está lleno de tipos geniales que ayudarán y enseñarán. ¡En estos chats, incluso puedes encontrar desarrolladores de SideFX!

Referencias


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


All Articles