Esencialmente quiero eliminar la necesidad de generar ruido coherente de la CPU a la GPU. A partir de ahí, también quiero generar el terreno para un mundo tridimensional utilizando este ruido como densidades en puntos voxel. Después de esto, quiero tomar esas densidades y poligonalizarlas (generar vértices) representando el terreno del mundo.
Esto está bien y todo. Pero también quiero deformar dinámicamente el mundo en tiempo real. Una vez que llego a este punto, tengo un problema al intentar que los vértices vuelvan a la CPU para hacer cosas como la detección de colisiones y todos los cálculos del juego que quiero involucrar en la CPU y no en la GPU.
Entonces, la pregunta es: ¿cómo puedo devolver un subconjunto de los vértices a la CPU para hacer frente a colisiones, entre otras cosas?
Y una pregunta más: ¿hay una manera fácil de tomar un conjunto de vértices y generar índices a partir de ellos en la GPU?
Estoy confundido y también sobre qué tipo de sombreadores debería usar para estas cosas diferentes. Escuché de personas que usan un sombreador de píxeles para reunir densidades y luego usan un sombreador de geometría para tratar la generación del terreno a partir de los vértices y luego incorporan de alguna manera un sombreador de vértices para hacer las deformaciones dinámicas.
Estoy usando C # 4.0, .NET 4.0 y XNA Game Studio 4.0.