3D Плиточный ландшафт - PullRequest
2 голосов
/ 21 января 2012

Я пытаюсь создать плиточный ландшафт в 3D с помощью XNA. Я проверил учебники о том, как это сделать
(Римерс и Алленс ). Урок Аллена дает точный результат, которого я хочу достичь,
однако я не уверен насчет производительности - кажется, он использует один четырехугольник, чтобы нарисовать
всю местность и обработать ее с помощью пиксельного шейдера, это значит - вся местность будет быть
обработано каждый кадр.
В настоящее время я рисую четырехугольник для каждой плитки ( Пример ) - она ​​позволяет рисовать только 1010 * видимых плиток, но это также означает, что в каждом кадре
необходимо обрабатывать гораздо больше вершин и вызывается много «DrawIndexedPrimitives».
Я делаю это правильно или Алленс быстрее? Есть ли способ сделать мозаичный ландшафт лучше?
Спасибо.

1 Ответ

3 голосов
/ 21 января 2012

Полностью зависит от вашей сложности и размера местности. Как правило, у вас будут плитки ландшафта с более чем одним квадом / плиткой (например, плитка может состоять из 4096 треугольников), а затем сместите вершины, чтобы получить желаемую местность. Тем не менее, каждый тайл будет индексированным примитивом, но один вызов отрисовки приведет к множеству треугольников и большей части ландшафта. Развивая эту идею, вы можете сделать плитки на расстоянии больше, чтобы не получить слишком много деталей (ищите подходы ландшафта на основе квад-дерева / клип-карты; вы получите что-то вроде этого: http://twitpic.com/89y5kn.)

В качестве альтернативы, если вы можете сместить в вершинном шейдере, вы можете использовать инстансинг для дальнейшего уменьшения количества вызовов отрисовки. В каждом случае вы передаете координаты UV в свое высотное поле и положение в мировом пространстве, а затем снова визуализируете плитки высокого разрешения, но теперь вы можете получить один вызов для всей местности.

В небольшой игре вам может потребоваться сгенерировать только несколько плиток с высоким разрешением (65 000 треугольников или около того), а затем их отбросить. Это дает вам большой ландшафт легко и по-прежнему управляемым; но это определенно не слишком хорошо масштабируется :) Зависит от ваших потребностей.

Для текстурных плиток вы также можете использовать индексную текстуру низкого разрешения и выполнять поиск в атласе на пиксель или просто сохранять индексы в буфере вершин и интерполировать их (это очень распространено: хранить 4 веса на вершина и использовать его для поиска четырех различных текстур.)

...