안녕하세요. 새벽언덕입니다.
게임개발의 최적화 기법중 하나인 Culling에 대해서 설명드리도록하겠습니다.
- Culling (컬링)
- 단어 뜻 : Culling (도태)
- 목적 : 최적화
: 카메라에 보이는 것만 렌더링하여서 성능을 절약하는것이 목적
- Culling의 종류
Backface Culling, Occlusion Culling, Frustrum Culling, 공간 분할 컬링( BSP, PVS, Portal, QuadTree, OcTree)
- Shader Code의 Culling 설정 (Backface Culling)
CullBack : 뒷면을 컬링합니다. [Default : 아무것도 적지 않으면 CullBack] (뒷면 삭제)
CullFront : 앞면을 컬링합니다. [앞면 삭제 : 뒷면만 그릴때 사용합니다.]
Cull Off : 컬링을 비활성화 합니다. [앞, 뒤 모두 렌더링 : 특수효과에 사용.]
- Culling Depth Test
VertexShader와 FragmentShader사이에 존재함.
Shader에서의 BackFaceCulling은 카메라의 반대 방향을 향하는 폴리곤을 렌더링하지 않는 최적화 방법입니다.
모든 폴리곤에는 앞면, 뒷면이 있습니다.
출처 : https://docs.unity3d.com/kr/530/Manual/SL-CullAndDepth.html
- Culling을 하기 위하여 앞면과 뒷면을 구별하는 기준
(아래 내용을 정확히 이해하기 위해서는 외적계산을 할수있어야합니다. 외적을 통한 간단한 계산 방법도 설명 드립니다.)
최종적으로 레스터라이즈된 삼각형의 정점이 시계 반대방향(CCW)순서면 컬링된다.
CCW란 counter clock wise의 약자입니다.(cw는 시계방향, clock wise) 평면 위에 놓여진 세 점의 방향관계를 구할 수있는 알고리즘.
ccw는 점 A, B, C를 순서대로 봤을때 반시계 방향에 놓여있으면 양수를, 시계방향이면 음수를, 평행하게 놓여있으면 0을 반환하게됩니다.
위와 같이 점 3개가 A, B, C가 있다는 가정하에 진행을 합니다. 점 C를 기준으로 CA와, AB벡터를 먼저 만듭니다.
이후에 CA와 AB의 외적을 진행합니다. 여기서 Z축이 없는 2차원이기때문에 Z값에 0을넣고 외적을 진행합니다.
이후 위에있는 행렬을 사용하여 외적을 진행하면 Z값이 0이기 때문에 (0, 0, ad - bc)가 나오게됩니다.
최종적으로 위와 같은 공식이 성립되고 여기에 벡터 CA와 AB의 값을 넣으면
와 같은 결과가 나오면 양수가 나왔기 때문에 반시계 방향이라는것을 알수 있습니다.
다음에는 Culling의 여러 기법에대해서 간단히 설명드릴수 있도록하겠습니다.
감사합니다.
출처 : https://snowfleur.tistory.com/98
출처 : https://www.youtube.com/watch?v=3GsBaTqxcjM
'유니티엔진' 카테고리의 다른 글
c# Collider 충돌체크로 공튀기기 (0) | 2020.03.08 |
---|---|
C# 유니티 공튀기기 (0) | 2020.03.08 |
Unity Clear Flag(유니티에서 스카이박스가 안보일때) (0) | 2020.03.05 |
유니티 Tag와 Layer (0) | 2020.03.04 |
유니티 Pivot (0) | 2020.03.04 |