Можно ли контролировать интерполяцию выходных данных вершинного шейдера по полигону?

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

Предоставляет ли D3D/OpenGL/Cg какой-либо способ контроля как выполняется интерполяция? например Можете ли вы предложить, что интерполированные значения означают, чтобы можно было выполнить некую контекстно-зависимую интерполяцию?


person Mr. Boy    schedule 21.02.2014    source источник
comment
opengl.org/wiki/Определитель_типа_(GLSL)#Interpolation_qualifiers для glsl   -  person Pavel Beliy    schedule 21.02.2014
comment
Спасибо. Похоже, для целей этого вопроса ответ да, но не так, как вы хотите   -  person Mr. Boy    schedule 21.02.2014
comment
Возможно, вы могли бы поделиться, какую интерполяцию вы бы хотели сделать в идеале? Вы на самом деле ищете способы slerp ваших нормалей, или это был просто пример?   -  person Paul-Jan    schedule 28.02.2014
comment
@ Paul-Jan Я думаю, что нормали - единственный конкретный пример, но, полагаю, мне было интересно, можете ли вы сделать что-то вроде написания шейдера для интерполяции. Поскольку пиксельный шейдер не может видеть задействованные вершины, это было бы здорово.   -  person Mr. Boy    schedule 28.02.2014


Ответы (1)


Подобно квалификаторам интерполяции GLSL, упомянутым Павлом Белым, Direct3D (HLSL) имеет ограниченный набор Interpolation Modifiers, которые вы можете установить для каждого члена структур данных или для любых аргументов, которые передаются пиксельному шейдеру. См. раздел примечаний этого MSDN. страница.

Набор поддерживаемых модификаторов ограничен linear, centroid, nointerpolation, noperspective и sample (подробности см. по ссылке).

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

person Paul-Jan    schedule 28.02.2014
comment
Да, это все очень специализированные «настройки», а не возможность внедрить какой-либо интеллект в интерполяцию. - person Mr. Boy; 28.02.2014