2017/08/15
by
Ani
- 1:19 AM
스터디 준비
출처 블로그 http://chulin28ho.egloos.com/5267860
Z Buffer
Z buffer는 3차원에 뿌려질 내부 픽셀의 깊이값을 보관하는 역활이다.
픽셀의 깊이값을 Z 값이라고 한다.
물체는 그려질때 z버퍼에 자신의 픽셀 위치값을 쓰고, 자신보다 앞 부분의 z버퍼에 값이 씌여있으면 그 픽셀은 그리지 않는다.
Z read -z값이 씌여져 있는 상태를 읽어서,자신이 그려져도 되는지를 확인하는 것.
(혹은 z값을 테스트한다고 Z test라고도 한다.)
Z write -자신이 기존의 z값보다 앞에 있다는 것이 판명이 나면, 자신의 z값을 덮어씌워 기록한다.
즉 모든 오브젝트는 자신보다 앞에 있는 오브젝트가 있는가를 체크하기 위해서 z Read를 해야하고, 자신이 제일 앞에 있을 때에 Z write를 해야한다.
이 깊이 값은 float를 사용하고,0~1사이의 값, 흑백 이미지로도 표현된다.
Alpha Blending
알파 블렌딩은 "반투명"이 있는 물체를 의미한다.
머리카락 끝에만 살짝 알파가 있다고 해도 머리카락 전체가 알파블렌딩이라고 보면 된다.
(ex:이펙트,살짝 뒤가 보이는 UI,물 등)
반투명의 z버퍼 문제는 투명한 물체의 z값이 불투명한 공 오브젝트의 앞인 경우, 공은 자신이 투명한 물체보다 뒤에 있다고 판단하고 찍히지 않게 되는 것이다.이것을 z test를 통과하지 못했다라고 한다.
해결법
불투명을 먼저 그린 후,반투명은 나중에 그린다.
불투명은 순서에 상관없이 마음대로 그리며
반투명은 뒤에서 부터 그린다 (이것을 알파 소팅이라고 한다.)
알파 소팅을 통해서도 해결되지 않는 부분이 발생한다.
상식적으로 우리가 봤을 때는 제일 먼저 그려야할 것은
5,4,3,2,1이지만 카메라로부터 제일 멀리 있는 피봇을 가진 오브젝트는
5번이 아니라 4번이다.
즉 4,5,3,2,1 순으로 그려지게 되는 것이다.
이러한 문제의 해결점
1. 피봇을 정밀하게 만든다. 물체를 여러개로 쪼갠다.
2.알바 부분을 최소화해서 그린다.
3.렌더링 레이어를 사용한다
(그룹화 하여 강제로 그리는 순서를 바꾸는 것, 즉 water 속성의 그룹들은 무조건 제일 먼저 그린다 라는 식의 제어)
4.여러 pass를 이용한다.
(머리카락등에 방향에 따라 여러번 나누어 그리는 것)
5. alpha test와 함께 사용한다.
출처 블로그 http://chulin28ho.egloos.com/5267860
Z Buffer
Z buffer는 3차원에 뿌려질 내부 픽셀의 깊이값을 보관하는 역활이다.
픽셀의 깊이값을 Z 값이라고 한다.
물체는 그려질때 z버퍼에 자신의 픽셀 위치값을 쓰고, 자신보다 앞 부분의 z버퍼에 값이 씌여있으면 그 픽셀은 그리지 않는다.
Z read -z값이 씌여져 있는 상태를 읽어서,자신이 그려져도 되는지를 확인하는 것.
(혹은 z값을 테스트한다고 Z test라고도 한다.)
Z write -자신이 기존의 z값보다 앞에 있다는 것이 판명이 나면, 자신의 z값을 덮어씌워 기록한다.
즉 모든 오브젝트는 자신보다 앞에 있는 오브젝트가 있는가를 체크하기 위해서 z Read를 해야하고, 자신이 제일 앞에 있을 때에 Z write를 해야한다.
이 깊이 값은 float를 사용하고,0~1사이의 값, 흑백 이미지로도 표현된다.
Alpha Blending
알파 블렌딩은 "반투명"이 있는 물체를 의미한다.
머리카락 끝에만 살짝 알파가 있다고 해도 머리카락 전체가 알파블렌딩이라고 보면 된다.
(ex:이펙트,살짝 뒤가 보이는 UI,물 등)
반투명의 z버퍼 문제는 투명한 물체의 z값이 불투명한 공 오브젝트의 앞인 경우, 공은 자신이 투명한 물체보다 뒤에 있다고 판단하고 찍히지 않게 되는 것이다.이것을 z test를 통과하지 못했다라고 한다.
불투명을 먼저 그린 후,반투명은 나중에 그린다.
불투명은 순서에 상관없이 마음대로 그리며
반투명은 뒤에서 부터 그린다 (이것을 알파 소팅이라고 한다.)
알파 소팅을 통해서도 해결되지 않는 부분이 발생한다.
상식적으로 우리가 봤을 때는 제일 먼저 그려야할 것은
5,4,3,2,1이지만 카메라로부터 제일 멀리 있는 피봇을 가진 오브젝트는
5번이 아니라 4번이다.
즉 4,5,3,2,1 순으로 그려지게 되는 것이다.
이러한 문제의 해결점
1. 피봇을 정밀하게 만든다. 물체를 여러개로 쪼갠다.
2.알바 부분을 최소화해서 그린다.
3.렌더링 레이어를 사용한다
(그룹화 하여 강제로 그리는 순서를 바꾸는 것, 즉 water 속성의 그룹들은 무조건 제일 먼저 그린다 라는 식의 제어)
4.여러 pass를 이용한다.
(머리카락등에 방향에 따라 여러번 나누어 그리는 것)
5. alpha test와 함께 사용한다.