개발자 면접 공부/그래픽스

DirectX 깊이 버퍼(Z-Buffer)

chogyujin 2022. 7. 22. 13:57
728x90

DirectX의 깊이 버퍼를 공부하도록 하겠습니다. 


깊이버퍼는 3D프로그래밍을 하는데 있어서는 매우 필수적인 개념입니다. 렌더링 파이프 라인에 투영 단계까지 모두 완료했을경우 NDC공간(클립 공간) 으로 변형됩니다. 이떄에 클립 공간은 x,y,z (-1~1),(-1~1),(0~1) 사이로 변형이 됩니다.

깊이 버퍼 또한 NDC 공간의 Z값과 같은 0~1 의 범위를 가지는 화면에 그려질 각각 픽셀의 깊이 값을 저장하는 버퍼입니다.

 


깊이 버퍼(Z-Buffer)

아래의 사진을 토대로 깊이 버퍼의 작동 원리를 설명합니다.

출처 : https://m.blog.naver.com/hblee4119/221940188597

위 사진을 보면 출력하는 순서에 따라 원형이 삼각형을 가리고 있지만, Z버퍼에 저장된 Z값에 따라 실제 출력에서는 삼각형이 원형을 가리는 형태로 출력합니다.

 

Z버퍼에 저장된 Z값을 비교하여 0.1보다 0.5가 크기 떄문에 0.1의 픽셀을 먼저 그려주고 0.5의 픽셀을 그리지 않는다는 판단을 합니다. 반대로 삼각형을 먼저 그려주었다면 비교판단하여 0.5의 깊이를 갖는 픽셀을 그려지주 않는다는 판단을 합니다. 이것이 Z버퍼의 주된 용도 입니다.


DirectX에서는 이 깊이버퍼에 대한 비교테스트를 수행 할것인지, 하지 않을것인지, 혹은 수행을 하더라도 깊이 버퍼에 값을 기록할것인지에 대해 조건 설정이 가능합니다. 이 깊이 버퍼는 알파 테스트와, 알파 블렌딩, 알파 소팅하고도 연관이 매우 깊습니다.