early z
Early Z :
- Z Test(Depth Test, 깊이 판정)를 미리 해서 비싼 Pixel연산을 피하자
- 일종의 픽셀단위 Culling 기법.
Z Test :
- 깊이 판정은 픽셀의 깊이 값을 깊이 버퍼의 깊이 값과 비교해서 픽셀의 가시성을 판단한다.
- 현재 픽셀이 다른 픽셀의 뒤에 있는지를 판단하여 뒤에 있다면 픽셀을 폐기하고,
앞에 있다면 그 픽셀을 다음 단계로 넘겨 값을 z버퍼에 기록한다.
그렇다면 기존 Z Test의 순서는?
- 간단하게 말하자면 pixel shader(fragment shader) 다음.
자세하게 말하자면 파이프 라인 참고.
- 왜 깊이판정을 ps 이후로 했을까?
- ps 연산에 따라 depth가 변경될 수 있기 때문에 ps 앞에서 하지 않음.
Early Z를 위해서는?
- 기존 하드웨어 동작방식이 바뀌는 거기 때문에 하드웨어에서 지원해 줘야 한다.
- Coarse-grained Z Culling vs Fine-grained Z Culling
- Depth Stencil buffer를 사용
- Early Z 비활성화 (Z buffer Optimization, 10page)
- 그래서 ps에서 depth 값을 write(갱신)한다면 비활성화 된다.
(ps에서는 원하는 depth을 저장해야 하니)
- ps에서 discard 하면 비활성화 된다.
(ps에서는 버리려는데 write 할 수 있으니)
- alpha-test을 쓸 경우 비활성화 된다.
(discard와 마찬가지)
- 결국 ps에서 depth는 왠만하면 건들지 마라.
Early Z의 구현은?
- 하드웨어적으로 지원하고 적용될 수 있는 상황이라면 하드웨어에서
내부적으로 사용되며 다른 멀티패스 기술(z pass 후 color pass)과 관련이 없다.
- OpenGL 이나 D3D 어디에서도 early z 작업을 지정하지 않는다.
이 모든 작업은 하드웨어 관련 작업이며 사용 또는 미사용 설정은 할 필요 없이
하드웨어에서 자동으로 처리된다.
즉, early z 는 실행가능한 조건만 충족하면 하드웨어가 알아서 지원한다.
- Depth/ Stencil buffer 사용
- Early Z를 하드웨어가 실행하는 조건을 충족시켜 주기 위해 사용하는 Early-Z Pass
- 1st pass에서 depth rendering, 2st pass에서 depth write 비활성화 하고 rendering.
Reference Link
- early-z를 이용한 pixel shader 최적화
- early z visibility test (early-z)
- why discard pixel take a noticeable performance hit?
- Applications of Explicit Early-Z culling, pdf
- Hierarchical Z-Buffer Visiblility
- Saving the Z-Cull Optimization
- Early Fragment Tests, Hi Z, Depth, Stencil and other benchmarks
- You Can Never Have a Custom Z Buffer Distribution and Early Z at the Same Time
- Early-Z
'Study > Graphics ' 카테고리의 다른 글
Specular Showdown in the Wild West (0) | 2019.08.16 |
---|---|
Clipmaps (0) | 2019.06.15 |
hlod (0) | 2018.07.20 |
What is Texture (0) | 2018.03.10 |
texture format (0) | 2018.02.21 |