본문 바로가기
컴퓨터 그래픽스/Rasterization

Rasterization(6) - 깊이 버퍼(Depth Buffer)

by SL123 2024. 7. 27.

 

Depth란 깊이라는 뜻입니다.
화면으로부터 가상공간으로 얼마나 깊이가 들어갔는가라는 의미에서
깊이버퍼라고 부릅니다.

노란색이 Depth가 더 앞에 있다는 것을 뜻한다.


가상공간으로 들어가는 방향이 z방향이기 때문에 z-buffer라고도 불립니다.
Depth buffer의 기본원리는 Ray Tracing과 동일합니다.
z = 1, z = 2, z = 3 인 3개의 물체가 존재할 때 앞에있는 물체가 그려져야합니다.
뒤에있는 물체는 앞에있는 물체에 가려서 그리지지 않아야 합니다.

정투영에서는 비교적 쉽게 Depth buffer를 구할 수 있습니다.
하지만 원근투영에서는 조금 다르게 구현해야합니다.

깊이 버퍼에서 수정해야하는 것들은
1. Render 시작할 때 Depth buffer 초기화
2. 삼각형 안에 픽셀들의 z값 구하기
3. 깊이 버퍼를 업데이트할 수 있는 조건 추가
가 있습니다.

z = 1, z = 2, z = 3 이기 때문에 3.f 보다 큰 값을 넣어 초기화해줍니다.
이후 vertextBuffer.z 값과 이용해 무게 중심 좌표계를 이용해 depth를 설정합니다.
마지막으로 depth가 depthBuffer보다 작으면 그려져야합니다.
조건을 depth < depthBuffer[index] 로 설정하고
depthBuffer[index] = depth로 설정하면 depthBuffer 설정이 마무리됩니다.


무게 중심 좌표계를 활용해 depth를 저장하면 왜곡이 발생합니다.
이 때문에 이 왜곡을 처리하기 위해 해줘야하는 수정값들이 있습니다.
추후에 왜곡을 처리하는 기법을 알아보겠습니다.