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