Насколько я понимаю, Pixel Shader работает попиксельно. Но есть такие функции, как ddx
и ddy
, которые вычисляют производные. Но как можно вычислить производные только от координат одного пикселя?? Может ли кто-нибудь помочь мне в этом? Это также вызывает вопросы, как в
tex.Sample(s0, t0);
Означает ли это, что функция Sample рассчитывается для каждого пикселя?? Я думал, что инструкция сэмплера работает на основе поддиапазона.
Пример:
Если у меня есть следующие 16 пикселей:
* * * *
* * * *
* * * *
* * * *
И мой пиксельный шейдер выглядит так:
float4 PS(PS_INPUT input) : SV_Target{
float2 derivX = ddx_fine(input.tex);
float2 derivY = ddx_fine(input.tex);
return tex.SampleGrad(s0, t0, derivX, derivY);
}
Сколько раз приведенный выше код будет вызываться в сетке пиксельных координат 4 x 4? Спасибо.