Загрузка буфера вершин и индексов в графический процессор - PullRequest
2 голосов
/ 09 июня 2011

Я создаю движок terrain, и в настоящее время я загружаю весь VB ландшафта (Vertex Buffer) и IB (Index Buffer) одновременно в графический процессор, так как ландшафт не очень большой.Сейчас он 256x256.

Теперь, скажем, я хочу создать процедурный ландшафт, который использует перлин-шум для генерации карты высот.

Конечно, я мог бы генерировать «патчи» и загружать все VB и IB патчей одновременно в GPU, но, поскольку игрок отходит далеко и нужно создавать новые патчи, я бысоздавать новые патчи и загружать их в графический процессор.У меня возникла путаница или проблемы:

  1. Медленно ли загружать VB и IB в GPU?Заметит ли проигрыватель мерцание при загрузке данных в графический процессор?

  2. Будет ли производительность лучше, если я постепенно загрузлю VB и IB исправлений в GPU вместо всех них?однажды?По сути, я спрашиваю, имеет ли значение размер VB и IB.

Любая информация по этой концепции будет принята с благодарностью.

Спасибо!

1 Ответ

2 голосов
/ 09 июня 2011

Обычно вы делите свою местность на несколько небольших участков, которые вы будете передавать по мере продвижения игрока.В моем механизме ландшафта я никогда не помещал буфер индекса в объекты буфера, так как механизм LOD постоянно изменяет, какие вершины прорисовываются, и порядок того, что рисуется для улучшения раннего Z. 256 × 256 - это разумный размер патча, особенно если вы используетеструктура, подобная квадродеревам.

Итак, вы можете загрузить 9 участков местности, размер каждого участка которых выбирается таким образом, чтобы видимый диапазон заканчивался где-то около границ вокруг центрального участка.

   |   |
---+---+---
   | C |
---+---+---
   |   |

Когда игрок перемещается в патче C, диапазон видимости гарантирует, что он не может смотреть за пределы загруженной области.Как только игрок перейдет в другой патч, оберните патчи с другой стороны, то есть

 A |   |
---+---+---
 B | X-> C
---+---+---
 C |   |

переназначит плитки A, B, C на

       |   | A'
    ---+---+---
       ->C | B'
    ---+---+---
       |   | C'

Где A ',B ', C' перезаписывают память A, B, C, но наполняют ее новым содержанием.Поскольку игрок переходит в новый патч C с дальнего конца, то есть просто может видеть более близкие части новых патчей, вы можете загрузить содержимое A ', B', C 'в несколько кадров.

Toответьте на два вопроса:

  1. загрузка геометрии на самом деле довольно быстрый процесс, так что это не остановка для показа.Вы не увидите мерцания, поскольку загрузка данных происходит между кадрами рендеринга, и только после обновления данных начнутся команды рисования.

  2. Способ загрузки материала не влияет напроизводительность рендеринга.Однако это влияет на то, сколько времени потребуется для загрузки самой карты.Если вы хотите, чтобы игроки могли проходить через большие миры без раздражающих промежуточных фаз загрузки, вам придется загружать небольшие патчи по требованию.

...