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.
Para crear piscinas, portales, estanques, ríos lineales. Pequeños medianos o largos.
Para simular tanto agua como barro, crema y líquidos más densos.
Para interactuar con objetos dinámicos y estáticos de la escena.
Para añadir elementos decorativos que añadan más realismo a tus escenas.
Aplicando nuestro propio material podemos ocultar partes dándole la forma que queramos y creando diferentes efectos visuales.
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.
Efectos aerodinámicos (viento, remolinos, etc)
Efectos de costa o playa.
Comportamiento diferente del fluido según la profundidad del agua.
Los interactuadores no pueden usar MeshColliders. La simulación actualmente sería muy lenta.
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.0
Soporte para Unity 2018, 2019, 2020, 2021. Requiere paquetes Jobs, Burst, Mathematics y Collections.
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.
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.
Para metros para cambiar la velocidad de las olas, duración y suavizado. Substepping para evitar inestabilidades.
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.
Fuerzas de flotación (Buoyancy) y de deriva (Drifting)
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.
Código completamente 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.
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.
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.
Objetos que flotan lentamente a la deriva generan ruido y pequeñas olas alrededor: Esto se debe al aliasing de la superficie (división discreta en celdas).
Ya que al flotar estamos usando interacción basada en ocupación de volúmen, si un objeto hundido entra en una nueva celda, el cambio de ocupación es violento y un pequeño
salto en la simulación ocurre. Para suavizar la superficie, usa el parámetro "smooth". Para reducir el ruido es posible aumentar la resolución, o activar el Supersampling
de la superficie a un valor cada vez mayor, que es mucho más barato, aunque aumenta considerablemente el número de raycasts lanzados en la detección.
Esto permite ser más preciso en la detección de objetos y disminuye el tamaño de los picos.
Este problema es importante y será mejorado en versiones futuras.
Colliders sin interactor en la misma capa se detectan igualmente en la interacción basada en ocupación. Dado que estoy utilizando de momento el sistema nativo de Unity
para lanzar cientos de miles de raycasts en paralelo, se detecta cualquier objeto, ya sean interactors de WaveMaker o colliders normales, dentro del volúmen de agua.
Introduje un parámetro llamado "Num. Max of Overlapped Interactors", que es el número de Interactors de waveMaker en vertical que puede haber unos sobre otros, para optimizar el número de choques permitidos.
Adicionalmente, perdiendo eficiencia, añado al contador unos cuantos más objetos para que colliders normales se puedan detectar e ignorar y no confundan con el resultado esperado.
Es preferible tratar de separar en una layer diferente los objetos relacionados con WaveMaker o la física para evitar esto.
Es posible ver en el Scene View los objetos que se detectan añadiendo el componente "WaveMaker Debugger" a la superficie y activando la visualización de "Hitting rays" en el mismo.
Habrá mejores soluciones para esto en futuras versiones.
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
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