본문 바로가기
셰이더 (Shader)/유니티 쉐이더 스타트업 - 정종필

[Unity/Shader] 파트16-1 : Z 버퍼

by Minkyu Lee 2023. 8. 23.

매 프레임마다 배경, 캐릭터, 이펙트, UI가 모두 그려지는 과정이 있다.

가장 먼저 그려지는 것은? 먼저 계산이 끝난 녀석부터 그린다.

 

뒤에 있는 물체 앞에 물체가 덧 그려지면

이를 오버드로우라고 한다.

 

그러나 앞에 있는게 먼저 그려지고

뒤에가 그려지면 문제가 생긴다.

그래서 앞에 그려져 있는게 누구인가 라는 정보가 필요하다.

그 정보는 픽셀 단위로 존재한다.

 

앞뒤 판정을 위해, 각 픽셀마다 카메라 기준으로 가장 가까운 오브젝트의 깊이값이 저장되어 있는 데이터 시트가 필요하다.

이 깊이값을 Z 버퍼라고 부른다.

 

그래픽 카드는 여러 버퍼를 렌더링하고 있다.

눈에 보이지 않지만, 그림으로 그려서 가지고 있는 것을 버퍼라고 한다.

 

뒤 오브젝트가 나중에 그려져도

앞 오브젝트가 미리 써놓은 Z 버퍼값을 참조해 해당 부분을 그리지 않는다.

 

추가정보

그래픽 카드에 있는 깊이 버퍼를 가져와 사용하기 쉽지 않다.

쉐이더에서 _CameraDepthTexture를 사용하여 깊이값을 텍스쳐로 받아와 처리할 수 있다.

단, Deferred rendering 모드로 해야 정상작동한다. (포워드 렌더러에서도 만들 수 있지만 생략)

댓글