Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

기본 지식 - 깊이 버퍼링(Depth Buffering) 본문

computer graphics/DirectX11

기본 지식 - 깊이 버퍼링(Depth Buffering)

scarecrow1992 2020. 11. 27. 23:43

깊이 버퍼(Depth Buffer)는 이미지 자료를 담지 않는 텍스처의 한 예이다. 깊이 버퍼는 각 픽셀의 깊이 정보를 담는다. 픽셀의 깊이는 0.0에서 1.0 까지의 값으로, 0.0은 관찰자와 최대한 가까운 픽셀에 해당하고 1.0은 최대한 먼 픽셀에 해당한다. 깊이 버퍼의 원소들과 후면 버퍼의 픽셀들은 일대일로 대응된다. 즉, 깊이 버퍼와 후면버퍼는 같은 해상도를 지닌다.

 

아래 그림처럼 몇몇 물체가 다른 물체들을 가리고 있다고 해보자 한 물체의 픽셀들이 다른 물체보다 앞에 있는지 판정 하기 위해 Direct3D는 깊이 버퍼링 또는 z-버퍼링이라는 기법을 사용한다.깊이 버퍼링을 이용하면 물체들을 그리는 순서에 상관없이 물체들이 제대로 가려진다.

서로를 부분적으로 가리는 물체들

 

깊이 문제를 해결하는 방법은 장면의 물체를 먼것에서 가까운것 순서로 그리는것이다. 얼핏보면 그럴싸해 보이지만 문제점이 있다. 하나는 물체들을 정렬해야 한다는 것이고, 또 하나는 맞 물린 형태의 물체들을 제대로 처리하지 못한다는 것이다. 반면 깊이 버퍼링은 그래픽 하드웨어에서 공짜로 일어나며, 맞물린 물체들도 제대로 처리된다.

 

깊이 버퍼링의 작동방식에 대해 알아보자.

물체를 읽게되는 순서가 $P_3 \rightarrow P_1 \rightarrow P_2$ 라 가정하자. 물체를 읽을때마다 그 거리를 깊이버퍼에 갱신하는데, 물체까지의 거리가 깊이버퍼 값 보다 짧다면 깊이버퍼를 갱신하고, 후면버퍼에는 해당 물체를 새긴다. 하지만 물체까지의 거리가 깊이버퍼의 값 보다 멀다면 해당 물체는 무시하고 넘긴다.

즉, 이미 들어있던것보다 작은 경우에만 후면버퍼와 깊이 버퍼에 기록된다. 이런 방법을 통해 관찰자에 가장 가까운 픽셀이 렌더링되게 되는것이다.

 

 

 

 

 

Comments