WaveMaker es un asset de simulación de olas que crea una malla rectangular que se modifica en tiempo real para parecer líquido al interactuar con ella. Su forma de mostrarse es responsabilidad del usuario.
Crear piscinas, portales, estanques, ríos lineales. Pequeños, medianos o largos.
Generar olas reaccionando a ciertos colliders
Crear olas que parecen tanto agua como barro, crema y líquidos más densos.
Reaccionar a objetos estáticos al dibujar áreas de la superficie que queremos fijas
Afectar ciertos rigidbodies y hacerlos flotar en vertical y a la deriva
Funciona como cualquier otra malla con tu propio material (ocultar partes con transparencia, cambiar el aspecto usando shaders, usando el API para generar tus propios efectos)
Lo que NO puede hacer en la versión actual...
Las olas no rompen.
No está pensado para grandes superficies como océanos, formas de río complicadas y cascadas.
No es un shader de fluido, es un modificador de malla. Debes utilizar tus propios materiales y shaders.
No hay salpicaduras, espuma ni otros FXs. Pero puedes usar los datos de la malla y el API para aplicarlos por tu cuenta
Efectos aerodinámicos (viento, remolinos, etc), efectos de costa o playa
Comportamiento diferente del fluido según la profundidad del agua
Los Interactors no pueden usar MeshColliders. Hay que utilizar colliders más sencillos
Algunas de estas características serán añadidas poco a poco en el futuro. Por favor, visita el tracker de sugerencias y bugs. to know what's coming up.
Características actuales de la v2.1
Soporte para Unity 2019, 2020, 2021 y todos los pipelines de rendering (2018 aún tiene soporte, pero necesita instalación manual de los paquetes necesarios)
Simulación en tiempo real de fluidos en CPU basada en campos de altura.
Las propiedades de la malla se actualizan en tiempo real para reaccionar correctamente a la iluminación.
Independiente de la jerarquía en la escena.
Para metros para cambiar la velocidad de las olas, duración y suavizado. Substepping para evitar inestabilidades.
Modo simple de interacción basado en la velocidad relativa para cualquier orientación de la superficie.
Modo avanzado de interacción basado en ocupación de volúmen de líquido para capacidades más avanzadas en superficies horizontales como flotación y deriva (Buoyancy y Drifting)
Posición, rotación, longitud y ancho de la superficie arbitrario.
Es posible fijar zonas de la superficie manualmente o automáticamente para ignorarlas y generar choques en ellas.
Independiente del timestep.
Código de calidad, completamente documentado con un API de acceso y todas las fuentes en c# incluidas. Assemblies y namespaces propios.
El código saca partido al completo de multihilo usando Jobs y Burst, con un coste en CPU muy pequeño.
Estado de reposo en superficies para reducir la computación al mínimo.
Incluidas muchas escenas de ejemplo y menús de creación automáticos.
Cómo instalar, documentación, tutoriales y demos
Limitaciones conocidas
Las olas no rompen. (a menos que alguno tengamos alguna idea que lo resuelva): Este método está basado en campos de altura, lo que significa que solo hay una altura
por posición en la superficie. Una ola que rompa tendría varias alturas en la misma posición. Esto requeriría utilizar algún truco para añadirlas aparte y sería un proceso costoso de momento.
Las fronteras abiertas son todavía imperfectas. Incluso cuando no están fijados los bordes de una superficie, un porcentaje de la onda es devuelto. Todavía estoy tratando de resolverlo.
No hay soporte para Mesh Colliders. Dado que tengo que crear mis propios colliders para algunas operaciones, este tipo de collider es el más complejo y sería demasiado lento para el actual estado del sistema.
Varias superficies no pueden combinarse. La forma de la superficie es rectangular y tiene una resolución máxima que permita 56 mil vértices. Esta característica nos permitiría
ser más creativos pero actualmente la única forma de conseguir esto es crear una superficie mucho mayor, ocultar partes de ella usando nuestros propios materiales transparentes y fijar las celdas que no
queremos simular, haciendo que sea más eficiente.
En el modo de interacción basada en velocidad, aparecen pequeñas olas incluso cuando interactor y superficie giran juntos: El movimiento relativo entre ambos
se utiliza para generar olas. Trasladar ambos juntos no debería generar olas. Sin embargo, si ambos se rotan juntos bajo el mismo padre se generan pequeñas inestabilidades.
Lamentablemente esto es debido a la falta de precisión en el cálculo de la velocidad angular de ambos objetos.
Una solución sería hacer el sistema más flexible asociando cada interactor a cada superficie y calcular la velocidad del interactor respecto a la superficie,
pero no merece la pena cambiar todo a menos que haya una razón de peso que alguien quiera compartir conmigo.
Sigue las novedades
Para ser notificado sobre nuevas versiones, sigue el asset en el Asset Store, o bien mi cuenta de twitter o mi blog (twitter,
linkedin, blog).
Para información más frecuente, es preferible el hilo del foro.
Change Log
Detalles Técnicos y de Implementación
Los paquetes Jobs, Burst, Mathematics and Collections son necesarios. Una lista detallada se encuentra en el Portal de Aprendizaje.
Código de calidad, completamente documentado con su API para obtener alturas, gradientes y otra información de la superficie e interactors. Más datos estarán disponibles pronto.
Incluidas todas las fuentes C#. Código encapsulado en Assemblies y Namespaces.
Código completamente multihilo usando Jobs y Burst, con un bajo coste en CPU.
Simulación Two-way Coupling (acoplado de dos vías) : Olas afectan a los objetos y los objetos generan olas al mismo tiempo.
Las normales de la malla se actualizan en tiempo real para funcionar correctamente con la iluminación.
Posibilidad de activar el substepping para evitar inestabilidades
Arbitrary surface position and rotation, length and width. It works in local space
Un archivo detallando la resolución y los datos iniciales de cada celda se almacena y puede compartirse entre superficies.
Independiente del paso temporal (Timestep)
El tiempo de la simulación en el Fixed Update depende del tipo de interacción elegida. Puede ir desde 0.01ms hasta 4ms en el peor de los casos (muchos objetos flotando ocupando la superficie completamente). Generalmente, sin embargo, permanece entre 0.2ms y 1ms como mucho.
Soporte y Contacto
Si necesitas ayuda o estás interesado en alguna nueva característica que no está en esa lista, por favor escríbeme directamente a unitysupport (at) lidia-martinez.com