본문 바로가기
유니티/Shader Study

URP Shader Study #8 - Alpha To Coverage

by witn331ss 2023. 12. 2.

Alpha To Coverage

"Alpha To Coverage"는 MSAA(Multi-Sample Anti-Aliasing)를 사용할 때,

알파 채널을 가진 텍스처에도 안티 앨리어싱(AA)을 적용하는 기술이다.

 

MSAA는 보통 메쉬의 외곽선에만 AA를 적용한다.

즉, 메쉬의 가장자리는 부드럽게 처리되지만, 텍스처 내부의 이미지는 AA 처리가 안 된다.

 

알파 채널을 가진 텍스처의 경우, 그 이미지 내부에도 AA를 적용하고 싶을때 "Alpha To Coverage" 기능을 사용하게 된다. 이를 통해 텍스처 내부의 이미지도 가장자리가 부드럽게 처리된다.

 

MSAA같은 경우는 포워드 렌더링 방식에서만 사용하고

AA처리를 할때 Alpha채널에 있는 텍스쳐는 AA를 먹히질 않는다.

 

AlphaToMask를 키면 Alpha 채널에 있는 값을 AA를 먹인 것 처럼 보여주는 옵션이다.

VR 작업할때 특히나 이 옵션으로 AA를 적용하는 경우가 많다.

 

 

Pass에 이렇게 적용할 수 있다

AlphToMask On

 

 

물론 이것도 토글로 제어가 가능하다

프로퍼티스
[Enum(Off, 0, On, 1)] _Mask ("Alpha to Coverage", Float) = 0

태그
AlphaToMask [_Mask]

 

 

##

 

Q RenderQueue / ZTest / ZWrite의 차이점은 무엇인가?

A

 

RenderQueue: 쉐이더가 렌더링되는 순서를 결정합니다. 낮은 숫자는 먼저 렌더링되고, 높은 숫자는 나중에 렌더링됩니다. 예를 들어, 투명한 객체는 일반 객체보다 나중에 렌더링되어야 합니다.

ZTest: 픽셀이 이미 렌더링된 픽셀보다 앞에 있는지 뒤에 있는지를 결정하는 테스트입니다. 이는 객체가 다른 객체 뒤에 숨어야 하는지, 보여야 하는지를 결정합니다. (끄면 무조건 앞으로 나옴)

ZWrite: 픽셀이 렌더링될 때 깊이 버퍼(Z-버퍼)에 깊이 정보를 쓸 것인지를 결정합니다. 이 설정은 보통 투명한 물체에서 깊이 쓰기를 비활성화하여 다른 객체와 올바르게 깊이가 혼합되도록 합니다. (얘를 끄면 무조건 다그려버림)