2012-01-16 3 views
5

У меня есть дерево BSP, загруженное в память. Сначала я выясню, на каком листе я нахожусь. Затем я декодирую PVS. Затем я просматриваю каждую область в этом PVS и вижу, лежит ли она в моем усечении.Я неправильно рисую деревья BSP?

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

Например, рендеринг Quake 3 BSP говорит: Пройдите BSP, чтобы определить, на каком листе расположена камера. Извлеките и декомпрессируйте PVS для этого листа, выполните итерацию через PVS и отметьте листья в BSP. Пройдите мимо BSP рядом с далеко Если узел не отмечен, пропустите его. Протестируйте узловую шкатулу с камерой. Добавить текущий лист в список представлений

Это все еще стандартный способ, которым это делается сегодня или, по крайней мере, для более простых игр.

+0

Передний - предпочтительный рендеринг в настоящее время; назад к фронту было необходимо только для алгоритма художника (т. е. перед сжатием, z-буферы с высокой пропускной способностью сделали их предпочтительными). front-to-back позволяет ранние z-браки (все, что вы нарисовали, будет отклонено в современном оборудовании, прежде чем будет выполнена большая работа, отличная от определения и проверки его значения z). Я еще раз прокомментирую, когда получу немного больше. –

ответ

1

Как OrgnlDave сказал:

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

Однако, если вы используете объект blend, вам нужно будет нарисовать это после каждого твердого объекта и сделать это спереди назад. Потому что вам нужно смешать цвет с объектом, размещенным сразу после.

+0

@ OrgnlDave Хорошо сказано. Пиксельная заливка стоит дорого. Это одна из точек конвейера, где требуется доступ на запись к общему ресурсу. Вершинные шейдеры могут работать параллельно и генерировать списки геометрии одновременно, однако, когда пиксельный шейдер записывает в буфер цвета или буфер Z, только одна программа может одновременно получать доступ к одной и той же памяти. Отметьте непрозрачную геометрию спереди назад, чтобы исключить заполнение пикселей на закрытых объектах, а затем визуализировать геометрию непрозрачности с обратной стороны, так что затененная геометрия будет иметь вес в альфа-смеси. – Dan

 Смежные вопросы

  • Нет связанных вопросов^_^