첫째, GPU는 항상 한 번에 2x2 픽셀 블록에서 조각 / 픽셀 쉐이더를 평가한다는 것을 아는 데 도움이됩니다. (이러한 픽셀 중 일부만 최종적으로 그려야하지만 다른 픽셀은 다각형 외부에 있거나 폐색 된 경우에도 필요하지 않은 조각은 끝에 쓰지 않고 마스크 처리됩니다.)
v
셰이더에서 변수 (또는 표현식)의 화면 공간 파생은 v
이 2x2 픽셀 쿼드의 한 쪽에서 다른쪽으로 (코드의 해당 시점에서) 값의 차이입니다 . 즉. ddx
의 값은 v
우측 화소에 마이너스의 값을 v
왼쪽에, 그리고 마찬가지로위한 ddy
수직 켜짐.
이것은 " v
화면에서 가로 (ddx) 또는 세로 (ddy)로 움직일 때 얼마나 빨리 증가 또는 감소합니까?" -즉 미적분학 용어로 변수 의 부분 미분 값을 근사합니다 (함수의 무한한 동작을 수학적으로 평가하는 대신 각 조각에서 개별 샘플을 사용하기 때문에 근사)
스칼라 수량의 경우 이를 화면 공간 방향을 따라 가장 빠르게 증가 하는 그래디언트 벡터 로 볼 수도 있습니다 .∇v = float2(ddx(v), ddy(v))
v
이 유형의 정보는 종종 텍스처 조회를 위해 적절한 밉맵 또는 이방성 필터링 커널 을 선택하기 위해 내부적으로 사용됩니다 . 예를 들어, 카메라가 uv
질감이있는 바닥면 의 수직 방향과 거의 평행 해 보이는 경우에 ddy(uv.y)
비해 ddx(uv.x)
(수직 축이 화면에서 단축되기 때문에-한 픽셀이 수직으로 길게 늘어난 질감 공간을 차지하므로) 텍스처 샘플링 하드웨어에 앨리어싱 아티팩트를 피하기 위해 수평보다 수직 질감 방향을 흐리게하기 위해 이방성 필터링이 필요하다고 알려줍니다.
기본적인 2D 텍스처 샘플링 방법이이를 처리하므로 대부분의 간단한 효과의 경우 이러한 파생물을 사용할 필요가 없습니다. 그러나 Le Comte du Merde-fou가 위의 설명에서 언급했듯이 텍스처 조회를 왜곡 할 때 하드웨어가 적절한 필터링을 선택하도록 돕기 위해 사용할 스크린 스페이스 파생물을 수동으로 검색 및 / 또는 마사지해야 할 수도 있습니다. tex2Dlod
HLSL에서)
스크린 스페이스 데칼은 하나의 2x2 블록이 계산 된 텍스처 좌표에서 큰 점프 불연속을 커버 할 수 있으며, 시스템이 필터링 레벨을 순진하게 계산하게하면 가장자리가 번지거나 앨리어싱 될 수 있습니다. 이 기사는이 아티팩트에 대해 자세히 설명하고이를 완화하기 위해 접근합니다 .
이 파생물은 절차 적 텍스처 생성에서 노이즈 함수를 사용할 때도 유용 할 수 있습니다. 예를 들어, 절차 적 노이즈를 노멀 맵으로 바꾸고 자한다면 ddx & ddy는 현재 프래그먼트 주변에서 노이즈 값이 어떻게 변하고 어떻게 기울어 지는지 계산할 수있는 간단하고 근사한 방법을 제공합니다. 적절한 법선을 구성 할 수 있습니다.
앤티 앨리어싱 된 선 또는 교차로 강조 표시 를 렌더링하는 기술은 화면 공간 파생을 사용하여 두께 / 폴 오프가 일관되고 지오메트리 또는 뷰 각도에 의존하지 않도록 할 수 있습니다.
Journey의 모래 렌더링에 관한이 강연에서 , 스피커는 이러한 파생 함수를 사용하여 모래가 반짝이는 가장자리를 따라 얼마나 반짝이는지를 제어 할 수 있다고 언급했습니다. 후드 아래에서 이런 종류의 파생물에 의해 구동됩니다)
알아 두어야 할 마지막 참고 사항 : 화면 공간 파생물은 "거친"/ 낮은 정밀도 (한 쌍의 파생물이 전체 쿼드에 의해 공유됨을 의미 함) 또는 "미세"/ 높은 정밀도로 계산 될 수 있음 쿼드에 이웃 한 4 개의 파생 된 파생 쌍을 제공 할 수 있음). 일반적으로 거칠기는 많지만 효과에 2x2 블록이 표시되는 경우 미세 / 고 정도로 전환하는 것이 좋습니다. ;)
(위의 다이어그램에서 나는 고급 파생 상품에 대한 계산을 사용했지만 ddx / ddy만이 기본적으로 파생 파생 상품 일 수 있음에 유의하십시오)