Position Based Fluids (PBF)

Anuncio
Programación Avanzada sobre Tarjetas Gráficas
Ingeniería Multimedia
Curso 2014-2015
Daniel Sales Álvarez
Conocimientos previos
 PBD: Position Based Dynamics
 Basado en restricciones
 Convergencia de restricciones mediante método
iterativo
 SPH: Smoothed-Particle Hydrodinamics
 Las diferencias de densidad provocan fuerzas de
atracción-repulsión entre las partículas.
Position Based Fluids
2
Position Based Fluids (PBF)
 Comportamiento
 Predecir posición
 Ordenación
 Encontrar vecinos
 Solver iterativo


Calcular lambda
Calcular delta
 Render
 Textura de profundidad

Aplicar Curvature Flow
 Textura de espesor
 Render final
 Cálculo de normales
 Actualizar posición y
velocidad
 Calcular vorticity
Position Based Fluids
3
1.
2.
3.
4.
Predecir posición
Ordenación
Encontrar vecinos
Solver iterativo
1. Calcular lambda
2. Calcular delta
Position Based Fluids
5. Actualizar posición y velocidad
6. Calcular viscosidad
7. Calcular vorticity (opcional)
4
1-Predecir posición
 Predecir posición:

Igual que en PBD:
Position Based Fluids
5
2-Ordenar las partículas
 Necesidad de ordenar la partículas:
 Aprovechar la memoria compartida de la GPU
Position Based Fluids
6
2-Ordenar las partículas
 CountSort:
 Basado en scan (prefix sum).
Prefix sum
Position Based Fluids
7
3-Encontrar vecinos
 Se fija un radio de ‘visibilidad’ para cada partícula. Suele
coincidir con el ancho de celda del grid.

Hace un ‘filtro’ pro radio de todas las partículas de la celda del
grid en que se encuentra y de las otras 26 celdas vecinas.
 Por eficiencia, se hace sólo una vez por frame, aunque
el solver modifique la posición de las partículas (y por
tanto debieran cambiar los vecinos).
Position Based Fluids
8
4-Solver iterativo
 Cálculo de lambda (λ):

Forma genérica de PBD

Restricción:
 La densidad 𝜌𝑖 se calcula de igual forma que en SPH

Gradiente de la restricción:

Parámetro epsilon (e)
 Para evitar inestabilidad cuando
Position Based Fluids
9
4-Solver iterativo
 Cálculo de nueva posición Δ𝑝:

Fórmula:

Corrección de posición:

Actualizar la posición predicha:
Position Based Fluids
10
5-Actualizar posición y velocidad
 Actualizar velocidad

Método de derivada numérica:
 Actualizar posición

Igualar a la posición predicha
Position Based Fluids
11
6-Viscosidad
 Aplicar viscosidad

Amortiguamos la velocidad
Position Based Fluids
12
7-Vorticity
 Los métodos de PBD introducen un damping adicional.
 Usaremos la fuerza vorticity para evitar la pérdida de
energía en el sistema.
Position Based Fluids
13
Screen Space Fluid Rendering with Curvature Flow
1. Textura de profundidad (depth texture)
•
•
Renderizar partículas
Aplicar Curvature Flow
2. Textura de espesor (thickness texture)
3. Render final
•
Cálculo de normales
Position Based Fluids
14
Render
 Screen Space Fluid Rendering with Curvature
Flow
 En el espacio de la pantalla. Sólo genera la superficie del
fluido vista desde la posición de la cámara.
 Sin creación de mesh (ej: marching cubes). Demasiado
coste para tiempo real incluso en GPU.
Position Based Fluids
15
Render
 Screen Space Fluid Rendering with Curvature
Flow
Position Based Fluids
16
Render
Position Based Fluids
17
Renderizar partículas
 Renderizamos las partículas como point sprites (quads
orientados).
 Vertex shader:

Calculamos el tamaño del quad
 Fragment shader:



Calcular las normales
Calcular profundidad (depth)
Descartar (discard) píxels fuera del círculo
Position Based Fluids
18
Renderizar partículas
 Textura de profundidad
Position Based Fluids
19
Curvature Flow
 Es un tipo de blur
 Definición de blur
 Desenfoque gaussiano o blur
 Filtro paso-bajo (low-pass filter)
 Suaviza las formas
 Queremos que no se noten las esferas
 Usaremos Curvature Flow
 Similar al Gaussian blur bilateral (preserva los bordes)
 Suaviza las curvaturas
 Efecto de la tensión superficial en fluidos reales
 El resultado final puede parecer artificial
 Solución: añadir ruido de Perlin (añade detalles de alta frecuencia)
en el cálculo de las normales.
Position Based Fluids
20
Curvature Flow
 Profundidad con blur aplicado:
 Aparecen algunos artefactos pero que apenas se aprecian
en el resultado final.
Position Based Fluids
21
Espesor
 Regular la transparencia del fluido en función de la
cantidad de fluido.
 Utilizaremos una textura de espesor (thickness).
 A más fluido, más espesor, más opaco.

Cada esfera aporta una cierta cantidad de espesor a la textura
(normalmente constante), del cual dependerá el alpha final.
 El blending aditivo debe estar activado

Acumular espesor/alpha.
 También el depth test.

Ocultación de partículas traseras.
Position Based Fluids
22
Render final
 Utilizaremos



Textura de profundidad (depth)
Textura de espesor (alpha)
Textura del escenario
 Para la componente especular se usa la aproximación de
Schlick de la ecuación de Fresnel:
Position Based Fluids
23
Cálculo de normales
 Revertir proyección a partir del buffer de profundidad
 Calculamos la normal como el producto vectorial de las
derivadas parciales de P

Se ignoran los términos 𝑊𝑥 y 𝑊𝑦 por eficiencia
Cálculos incompletos.
Más información en el paper de Green

En los bordes obligamos a que la derivada espacial sea 0.
Position Based Fluids
24
Cálculo de normales
 Normales:
Position Based Fluids
25
Bibliografía
 Paper Position Based Fluids. Müller 2013
 Fast fixed-radius nearest neighbors
 Paper Screen Space Fluid Rendering with Curvature
Flow
 Screen Space Fluid Rendering for Games
 Ejemplo PBF
 Para más información, visitad mi página web:
 http://danisales.es/GIM/MAA/pbf
Position Based Fluids
26
Vídeo
VER VÍDEO
Position Based Fluids
27
GRACIAS
POR VUESTRA ATENCIÓN
Position Based Fluids
28
Descargar