2013-06-13 4 views
0

Pixel Shader는 픽셀 단위로 작동합니다. 그러나 유도 물을 계산하는 ddxddy과 같은 함수가 있습니다. 그러나 어떻게 한 픽셀 좌표에서 도함수를 계산할 수 있습니까 ?? 누군가가 이것들을 도울 수 있습니까? 또한 다음과 같은 질문을 제기합니다.DirectX : Pixel Shader 미분 계산

tex.Sample(s0, t0); 

샘플 기능은 픽셀 단위로 계산됩니까? 나는 Sampler Instruction이 Subspan 단위로 작동한다고 생각했다.

예 :

만약 내가이 다음 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 격자? 감사합니다. .

답변

2

pixelshader는 정확히 하나의 조각을위한 프로그램입니다. 그러나 모든 픽셀은 2x2 블록 내에 음영 처리됩니다. 픽셀 쉐이더는이 4 개의 픽셀에 대해 동시에 실행되므로 밉 매핑 등을위한 방산제를 계산할 수 있습니다. tex.Sample을 호출하면 해당 블록의 모든 픽셀을 호출하므로 그래디언트를 결정할 수 있습니다. 이것은 그래디언트 함수가 분기 나 루프에서 사용될 수없는 이유입니다. 프로그램이 프래그먼트 - 쿼드 내에서 달라지기 때문입니다.

가 예를 들어 밉 매핑하는 것은 어떻게 작동하는지 좋은 설명입니다 : 귀하의 편집 @http://www.arcsynthesis.org/gltut/Texturing/Tut15%20How%20Mipmapping%20Works.html

, 내 링크로 답을해야하지만, 어쨌든 : 나는 그것을 구현 얼마나 잘 모르겠지만, 최상의 경우에 셰이더는 16 번 실행됩니다. 픽셀은 2x2 쿼드로 그룹화됩니다. 픽셀을 계산하고 버리는 경우가 있지만 가장자리가 비뚤어져있는 경우가 있습니다.