DirectX11 Техника сглаживания местности

У меня настроена система местности, которая использует четырехугольное дерево и карту высоты в серой шкале для рисования местности. Я создаю одну плоскую триангулированную сетку 64×64, которая затем рисуется в различных масштабах на основе выбора узла четырехугольного дерева. В вершинном шейдере я выбираю текстуру карты высот 2048 x 2048, чтобы получить координату y для сетки сетки. Вот код, используемый для выборки текстуры в градациях серого:

float3 CDLODSample(Texture2D hmText, Texture2D gDetTexture, float3 inPos){
inPos.y = hmText.SampleLevel(gTriLinearSampler,
(inPos.xz*gsamplerWorldToTextureScale.xy)+gquadOffset._m00_m01,0.5f).x;
return inPos;
}

Затем я масштабирую результат этого образца по константе, чтобы определить изменение высоты местности. Проблема заключается в том, что с увеличением размера местности (при увеличении масштаба до 16 384 x 16 384) местность выглядит неровной и низкого качества. Хотя вершин еще много, вершины просто образуют большие видимые многоугольники. Я читал о более изящных поверхностях и алгоритмах повторной выборки, но они кажутся очень дорогостоящими с точки зрения производительности. Есть ли хороший способ динамического повторного сэмплирования ландшафта для более плавного вывода без значительного снижения производительности? Если да, есть ли в Direct X сэмплер, который будет делать что-то подобное? Как игры, такие как Battlefield 4 и Just Cause, поддерживают большие, гладкие ландшафты с огромным изменением высоты? Они просто передают очень большие карты высот или динамически повторно выбирают карты высот с более низким разрешением по мере необходимости? Любая информация и советы очень ценятся.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]