[Unity] URP 셰이더 Z Buffer와 반투명(Translucent)

2023. 6. 7. 16:11Unity

728x90
반응형

Z Buffer

Z Buffer는 픽셀이 얼마나 멀리 있는지 거리 정보를 기록하는 이미지이다. 가장 가까운 곳은 0으로 완전히 검은색, 가장 멀리 있는 곳은 1로 흰색이다. 반투명 폴리곤은 Sorting(거리 순서로 그리는 방식)이나 Z Buffer로도 해결할 수 없는 문제가 있다.

Z Buffer의 정밀도는 플랫폼에 따라 다르지만 보통 16비트나 32비트 정밀도를 사용한다. 이 정도면 검은색에서 흰색 사이의 그라데이션 계조가 매우 풍부해서 미세한 거리 차이도 색상으로 구분할 수 있다.

 

하지만 구분할 수 없을 정도로 비슷한 거리의 폴리곤이면 Z Fighting이 일어나게 된다.

 

 


 

 

반투명(Translucent)

반투명 재질은 Z Buffer에 기록하는 Z Write를 끄고 렌더링 해야 한다. Z Test는 불투명과 마찬가지로 켠다. 즉, 반투명 재질은 Z Test 거리 검사는 하지만 검사 뒤 Z Buffer에 기록을 남기지 않으니 보이긴 보여도 실제 존재하지 않는 물체인 것이다.

 

 

Forward Rendering은 여러 이슈 때문에 반투명과 불투명을 분리해서 관리하고 모든 불투명 재질을 그린 다음에 반투명 재질을 그리기 시작한다.

 

 

위 메테리얼은 [Surface Type]을 [Transparent]로, [Blending Mode]를 [Alpha]로 설정한 모습이다. 알파 채널 정보가 있는 텍스쳐로 Transparent Alpha를 설정한 것이다. Alpha 방식에서는 Additive나 Multiply처럼 색이 더하거나 곱하는 방식이 아니고 덮어쓰는 방식이라서 그리는 순서에 의해 뭐가 더 위에 보일지 결정된다.

이 문제를 피하려면 재질의 [Surface Type]을 [Opaque]로 하거나 스프라이트 렌더러를 사용해서 그리는 순서를 수동으로 제어해야 한다.

 

 

[Opaque]와 [Alpha Clipping]을 켜면 반투명이 아닌 불투명으로 처리한다. 반투명은 불가능하지만 보이는 영역을 알파 텍스쳐로 제어하면서 그리는 순서도 문제없어서 풀이나 나무 빌보드 표현에 자주 사용된다.

 

 


참고자료

 

아티스트를 위한 유니티 URP 셰이더 입문 - YES24

셰이더(Shader)를 HLSL(High Level Shader Language)로 다루고 싶은 아티스트를 위한 입문서다. 아티스트들의 눈높이에 맞추어 기초 그래픽스 이론과 셰이더 개념을 설명하고, 이를 유니티 엔진에서 활용할

www.yes24.com

 

728x90
반응형