2016-08-10 2 views
3

У меня и у друга есть постоянный аргумент о буфере трафарета. Короче говоря, мне не удалось найти ситуацию, когда буфер трафарета предоставит любое преимущество над программируемыми инструментами конвейера в OpenGL 3.2+. Существуют ли какие-либо применения в буфере трафарета в современном OpenGL?Является ли буфером трафарета по-прежнему актуальным в современном OpenGL?

[EDIT]

Спасибо всем для всех входов на эту тему.

+2

[Тест раннего фрагмента] (https://www.opengl.org/wiki/Early_Fragment_Test), чтобы избежать использования дорогостоящих шейдеров фрагментов? – genpfault

+0

Я думал, эта ссылка связана http://gamedev.stackexchange.com/questions/105667/stencil-buffer-vs-conditional-discard-in-fragment-shader – Harish

+2

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

ответ

11

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

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

7

Чтобы добавить недавний пример ответа Андона, GTA V использует буфер трафарета, подобный буферу идентификатора, чтобы отметить игрока характер, автомобили, растительность и т. д.

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

Смотрите GTA V Graphics Study (настоятельно рекомендуется, это больше читать!)

Edit: что вы можете сделать это в программном обеспечении. Но вы можете делать растеризацию или тесселяцию в программном обеспечении так же хорошо ... В конце концов, речь идет о производительности, я думаю. С depth24stencil8 у вас хороший формат, поддерживаемый аппаратным обеспечением, и тест трафарета, скорее всего, быстрее, чем отбрасывание в шейдере фрагмента.

+0

спасибо за исследование, его очень интересное чтение и одно, чего я раньше не видел. Я оставляю это открытым еще на несколько дней, чтобы собрать больше идей и мнений, но это очень надежный ответ. Благодарю. – claudehenry

+1

@claudehenry: Есть интересная техника для независимой прозрачности заказа, называемая [трафаретная A-буферизация] (http://www.humus.name/index.php?page=3D&ID=76), которая использует буфер трафарета для отсрочки сортировки фрагменты до окончательного разрешения в многодисковом фреймбуфере. _ Это то, что вы не можете сделать в программном обеспечении, которое дополняет пример кариона присваивания тождеств пикселам. –

+0

@ AndonM.Coleman очень круто, не обращайте внимания, спасибо. – claudehenry

-1

Просто, чтобы обеспечить еще один случай использования, теневые объемы (так называемой «трафаретная тень») по-прежнему очень актуальны: https://en.wikipedia.org/wiki/Shadow_volume

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

Это правда, что карты теней более распространены, но я подозреваю, что тени с трафаретом будут возвращены после того, как патч для создания мёртвого мозга/3DLabs истечет по методу zfail.

+1

Это не патент - это чрезмерная заполняемость, которую они требуют. Карты теней просто масштабируются лучше, а четкие тени в любом случае не являются фотореалистичными. – ybungalobill

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