Estoy tratando de implementar una escena oceánica con C ++ y DirectX11. Actualmente tengo una grilla proyectada, ondas de Gerstner y un sombreado básico. Mi problema es que cuando apunto mi cámara horizontalmente, para poder ver el horizonte del agua, en la distancia, la cuadrícula proyectada se vuelve insuficiente, incluso con números de vértices altos. Estas capturas de pantalla ilustran el problema:
Sé que la causa del problema está en el concepto de la cuadrícula proyectada (la cuadrícula se detalla cerca de la cámara, más o menos lejos de ella), pero debe haber una mejor práctica para resolver esto.
¿Algunas ideas?
Puedes ser realista y en tiempo real. el secreto es cambiar la representación cada vez que la información se encuentra bajo la escala de Shannon-Nyquist (es decir, la cuadrícula): de la geometría a los mapas normales a los modelos de sombreado. Este documento está hecho para usted: http://maverick.inria.fr/Publications/2010/BNH10/index.php (vea también los videos de Yoube)
fuente
Algunos softwares como Maya resuelven esto usando un polar (o en realidad cartesiano que se vuelve polar a distancia) de la misma manera que la cuadrícula centrada en la posición de la cámara. Esta configuración agrega más detalles donde más cuenta. Luego confían en el procesamiento normal de los sombreadores en otros rangos. Hay espacio para mejorar la salida de red. Modifica un poco este enfoque en frío y tiene cualquier otra forma que aumente la densidad de la malla hacia la cámara. El beneficio de esto es que puede estirar el efecto hasta el horizonte sin preocuparse por la costura.
El truco para no confundir el desplazamiento en este caso es que reduce gradualmente el desplazamiento a medida que se aleja. Luego, solo usa la modificación normal en el sombreador de píxeles a medida que avanza. Esto es más fácil de filtrar que tener que filtrar un borde de shiluette preciso. Además, si puede ver tan lejos, sus vasijas probablemente sean lo suficientemente planas de todos modos.
fuente
La técnica que mencionó Benedikt se explica en la Sección 2.4.1 de esta tesis.
http://fileadmin.cs.lth.se/graphics/theses/projects/projgrid/projgrid-lq.pdf
Implementar esto debería resolver su problema.
fuente