Выбраковка фрустума с помощью VBO

Я планирую написать 3D-игру, в которой для рендеринга будут использоваться VBO. Скажем, например, что ландшафт представляет собой набор плиток, и все их вершины находятся в одном VBO. Игрок должен иметь возможность прокручивать плитки и всегда видеть только их часть.

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


person Bodwin    schedule 31.12.2013    source источник
comment
Можете ли вы описать, как ваша камера будет смотреться на упомянутые вами плитки? это сверху вниз, от третьего лица, от первого лица, эти плитки параллельны камере? В зависимости от этой информации я могу дать вам несколько предложений по реализации.   -  person Vengarioth    schedule 31.12.2013
comment
Камера будет сверху вниз, с наклоном, как в серии Diablo. Угол между направлением взгляда и плитками составит около 45 градусов.   -  person Bodwin    schedule 31.12.2013


Ответы (1)


Учитывая, что ваша камера работает как в Diablo (независимо от того, изометрия или перспектива):

Если у вас есть фиксированный размер карты, вы можете использовать 1 VBO для базовой геометрии вашей карты, предполагая, что вы будете использовать решение на основе карты высот. Невидимые квадраты будут отброшены вашей видеокартой после вершинного шейдера, не влияя на скорость заполнения пикселей. Они не стоят накладных расходов на выбраковку с вашей стороны. Такие детали, как Камни, Дома и т. Д., В любом случае будут иметь свой собственный VBO.

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

О рисовании фрагментов:

Самый простой способ, которого достаточно для большинства игр, - сделать каждый фрагмент своей собственной геометрией, VBO и т. Д. Но вы можете оптимизировать позже, и ваша реализация ландшафта не должна влиять на дизайн API вашего движка (вам придется реализовать множество различных способов рисования вещей в вашем движке, например, частиц, эффектов постобработки и т. Д. ).

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

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

person Vengarioth    schedule 31.12.2013
comment
The Quads not visible will be discarded by your graphics card after the vertex shader Это только для четырехугольников, которые не обращены к камере (отбраковка задней поверхности), или те, которые находятся за пределами усеченной поверхности, также отбраковываются? Кроме того, я хотел проверить фрагменты - каждый фрагмент содержит несколько фрагментов, и каждому фрагменту выделяется один VBO. У каждого фрагмента также есть ограничивающая рамка, которая используется при отсечении усеченной пирамиды. Мои предположения верны? - person Bodwin; 31.12.2013
comment
Да, не только обратные квадраты будут отброшены, но КОГДА на самом деле отличается от реализации к реализации, тем не менее, это одна вещь, для которой вы не должны беспокоиться об оптимизации. И да, ваши предположения верны, но я подробнее остановлюсь на этом в своем ответе. - person Vengarioth; 31.12.2013