2013-09-12 5 views
0

Предположим, что у нас есть разные шейдерные программы для разных объектов в игре. Например, модель игрока имеет шейдер, который управляет скелетной системой (умножение матриц костей и т. Д.), Или частица имеет шейдер для сверкающих эффектов, стена имеет отображение параллакса и т. Д.Есть ли способ использовать GLSL-программы в качестве фильтров?

Но что, если я хочу добавить туман в игра, которая должна затрагивать каждый из этих объектов? Например, у меня есть комната, в которой будет красный туман, следует ли мне изменить КАЖДУЮ программу glsl, чтобы иметь код тумана или есть ли способ сделать глобальные фильтры? Должен ли я менять каждую программу glsl, когда хочу добавить функцию?

+0

Я новичок в GLSL/Open GL, но ... вы не должны использовать фрагмент шейдера в пост процесса и играть с буфером глубины? Я почти уверен в том, что вам не нужно модифицировать существующие шейдеры. –

+0

Но могу ли я использовать разные программы фрагментов одновременно? – deniz

+0

Да, и в первый раз я это сделал ... На следующей неделе ^^ Думаю, вы можете нарисовать невидимый полноэкранный квад, на котором вы применяете шейдеры пост-процесса. (Опять же, я еще не тестировал его сам) –

ответ

1

Типичный процесс для этого типа заключается в использовании полноэкранного шейдера в пост-обработке с использованием буфера глубины из полностью визуализированной сцены или с использованием z-pass, который отображает только буфер глубины. Вы можете связать их вместе и создать любое количество эффектов. Обычно это связано с некоторой работой рендеринга-текстуры и не является реальной тривиальной задачей (слишком много для отправки кода здесь), но это тоже не сложно.

Если вы хотите взглянуть на приличную систему пост-обработки, посмотрите на систему PostFx в Torque3D:

https://github.com/GarageGames/Torque3D

А вот пример создания тумана с GLSL в пост :

http://isnippets.blogspot.com/2010/10/real-time-fog-using-post-processing-in.html

+0

Спасибо за ответ после обработки – deniz

+0

Просто хочу отметить, что подход рендеринга к текстуре означает еще один шаг шейдера, который может иметь производительность/мощность. – doron

+0

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

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