Shader/이론

스텐실버퍼

소나무꼴 2020. 5. 19. 10:25
Stencil 
{
	Ref 2
	Comp always
	Pass replace
	ZFail decrWrap
}

 

Ref : 참조할 값

(Comp가 always가 아니고 다른 것일 때) 비교하는 값이며/또는 (Pass, Fail이나 ZFail이 replace로 설정된 경우) 버퍼에 써넣을 값. 0-255 정수.

ReadMask : 읽기 마스크 값

0-255 정수 8비트 마스크, 버퍼 안의 값을 참조 값과 비교 할 때 사용합니다. (참조 값 & 읽기 마스크 값) 비교함수 (스텐실 버퍼 값 & 읽기 마스크 값). 기본 255.

WriteMask : 쓰기 마스크 값

0-255 정수 8비트 마스크, 버퍼에 값을 써넣을 때 사용합니다. 다른 쓰기 마스크와 마찬가지로, 쓰기로 인해 스텐실 버퍼의 어느 비트가 영향을 받을지 지정하는 데 사용 한다는 점을 유의 하세요. (예를 들어 WriteMask 0 이 뜻하는 것은 아무 비트도 영향을 받지 않는 다는 것이며 0을 쓴다는 의미가 아닙니다.) 기본 255.

Comp 비교 함수

버퍼 안의 현재 값과 참조 값을 비교할 때 사용할 함수. 기본 always.

Pass 스텐실 작업

스텐실 검사(와 깊이 검사)가 통과한 경우 버퍼 안의 값을 어떻게 할지 정합니다. 기본 keep.

Fail스텐실 작업

스텐실 검사가 실패한 경우 버퍼 안의 값을 어떻게 할지 정합니다. 기본 keep.

ZFail 스텐실 작업

 

 

Comp, Pass, Fail 그리고 ZFail은 Cull Front를 적용하지 않는 이상(하는 경우에는 뒷면 기하), 앞면 기하(geometry)에 적용됩니다. 또한 CompFront, PassFront, FailFront, ZFailFront (앞면 기하의 경우), 그리고 CompBack, PassBack, FailBack, ZFailBack (뒷면 기하의 경우)를 정의하여 명시적으로 양면의 스텐실 상태를 적용할 수 있습니다.

비교 함수

비교 함수는 다음 중 하나를 따릅니다.

Greater 버퍼의 값보다 참조 값이 큰 픽셀만 그립니다.
GEqual 버퍼의 값보다 참조 값이 크거나 같은 픽셀만 그립니다.
Less 버퍼의 값보다 참조 값이 작은 픽셀만 그립니다.
LEqual 버퍼의 값보다 참조 값이 작거나 같은 픽셀만 그립니다.
Equal 버퍼의 값과 참조 값이 같은 픽셀만 그립니다.
NotEqual 버퍼의 값과 참조 값이 다른 픽셀만 그립니다.
Always 스텐실 검사가 무조건 통과됩니다.
Never 스텐실 검사가 무조건 실패합니다.

스텐실 작업

스텐실 작업은 다음 중 하나를 따릅니다.

Keep 버퍼의 현재 값을 유지합니다.
Zero 버퍼에 0을 써넣습니다.
Replace 버퍼에 참조 값을 써넣습니다.
IncrSat 버퍼의 현재 값을 올립니다. 값이 이미 255이면 255를 유지합니다.
DecrSat 버퍼의 현재 값을 내립니다. 값이 이미 0이면 0을 유지합니다.
Invert 모든 비트를 반전합니다.
IncrWarp 버퍼의 현재 값을 올립니다. 값이 이미 255이면 0으로 변합니다.
DecrWarp 버퍼의 현재 값을 내립니다. 값이 이미 0이면 255로 변합니다.

'Shader > 이론' 카테고리의 다른 글

UNITY_UI_CLIP_RECT 란 무엇인가?  (0) 2022.08.03
"Sprites/Default"  (0) 2022.05.18