2010-11-24 13 views
0

Не мог бы кто-нибудь объяснить мне симпатичные основы взаимодействия пиксельных и вершинных шейдеров.Вопрос оптимизации шейдера C++

Очевидные вещи, которые вершинные шейдеры получают основные свойства вершин, а затем снова проходить некоторые из них к фактической пиксельных шейдеров.

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

И насколько я понимаю, те же интерполированное (не совсем уверен, что этот момент, что-то слышал о сложной УФ производной по математике, но я полагаю, что мы можем сказать, , что их интерполяция).


Итак, вот некоторые «целевые» вопросы.

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

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

Кроме того, если кто-то может указать статьи/тезисы на эту тему, я был бы очень признателен.

спасибо.


UPDATE

Я думал, что это на самом деле не имеет значения, потому что взаимодействие должно быть достаточно везде одинаково. Я разрабатываю приложения для визуализации и игры для настольных компьютеров, используя HLSL/GLSL/Nvidia CG для шейдеров и в основном C++ в качестве базового языка.

+0

Вы можете получить лучше ответ, если вы объясните, что платформа/API вы пытаетесь использовать. Вероятно, вам не хватает тега темы или двух. Как бы то ни было, я даже не знаю, о чем вы говорите. – 2010-11-24 20:03:26

+0

@Noah См. Обновление – 2010-11-24 20:07:51

ответ

3

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

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

И учитывая эти положения, растеризатор определяет, какие пиксели покрыты треугольником, натянутым на эти три вершины.

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

А это значит, что все, что вы делаете в пиксельный шейдер выполняется один раз на пиксель, охваченного примитивного будучи растровый

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