Essencialmente, quero remover a necessidade de gerar ruído coerente da CPU para a GPU. A partir daí, também quero gerar o terreno para um mundo tridimensional usando esse ruído como densidades nos pontos voxel. Depois disso, quero pegar essas densidades e poligonizá-las (gerar vértices), representando o terreno do mundo.
Tudo bem e tudo. Mas também quero deformar dinamicamente o mundo em tempo real. Quando chego a esse ponto, tenho um problema ao tentar obter os vértices de volta à CPU para fazer coisas como detecção de colisão e todos os cálculos de jogos que quero envolver na CPU e não na GPU.
Portanto, a pergunta é: como posso obter um subconjunto dos vértices de volta à CPU para lidar com colisões, entre outras coisas?
E mais uma pergunta: existe uma maneira fácil de pegar um conjunto de vértices e gerar índices a partir deles na GPU?
Estou confuso e com que tipos de shaders devo usar para essas coisas diferentes. Eu ouço pessoas usando um sombreador de pixel para coletar densidades e, em seguida, usando um sombreador de geometria para lidar com a geração de terreno a partir dos vértices e, de alguma forma, incorporando um sombreador de vértice para fazer as deformações dinâmicas.
Estou usando C # 4.0, .NET 4.0 e XNA Game Studio 4.0.