스터디 기록 6
스터디 그룹
깊이 버퍼를 이용한 삼각형 래스터화의 기초
3차원 렌더링 과정의 핵심 요약
- 수학적 형태로 표현된 3차원 표면으로 이루어진 가상의 장면 구성
- 가상 카메라를 올바른 위치, 방향에 놔서 장면을 바라보게 함
- 다양한 광원이 정의됨
- 장면에 존재하는 표면들의 시각적 속성 결정
- 상 표면의 각 픽셀에 대해 렌더링 엔진은 가상 카메라의 초점으로 모이는 빛의 색과 강도를 계산
기본 단계를 구현하는 데는 다양한 기법이 쓰임. (포토리얼리즘/스타일라이즈)
리얼리즘 <-> 성능
실시간 렌더링 엔진은 위 단계를 초당 30, 60번씩 보여 줌으로써 움직이는 효과를 냄. 렌더링 외에 다른 연산도 필요하니 1/30, 1/60초를 다 사용할 수는 없음.
장면 구성
고성능 렌더링 프로그램에서 쓰이는 형식
컴퓨터가 임의의 표면을 처리하고 그리려면 단순한 수식으로 표현할 필요가 있음.
매개변수 표면 방적식을 이용해 분석적인 형태로 표현 할 수 있음. 구를 표현하기 위해서는 구의 방정식으로 가능하지만, 임의의 형태는 불가능.
영화 컴퓨터 그래픽에서는 표면을 주로 사각형 패치로 나타내며, 패치는 적은 수의 컨트롤 포인트에 의해 정의되는 2차원 스플라인으로 구성.
삼각형 메시
게임 개발자들은 삼각형 메시를 이용해 표면을 표현.
삼각형을 실시간 렌더링에 주로 사용하는 이유는 다음과 같은 특징 때문
- 가장 단순한 다각형
- 언제나 평평
- 어떠한 변환을 거치더라도 삼각형, 최악은 선분.
- 시중 그래픽 가속 하드웨어의 핵심 개념은 삼각형 래스터화. 삼각형을 사용하게 된 이유는 초기 소프트웨어(울펜슈타인/둠) 래스터화에서 삼각형을 사용하였고, 그대로 견고하게 이어져 온 것.
테셀레이션
테셀레이션이란 표면을 여러 개의 분할된 다각형으로 쪼개는 과정.
게임에 쓰이는 삼각형 메시의 문제점은 테셀레이션이 아티스트에 의해 고정되어 카메라가 가까이 가면 물체가 거칠어져 보임.
해결법 중 하나는 LOD(Level of Detail). 단계별로 테셀레이션 밀도를 줄여서 미리 만들고, 카메라 거리에 따라 단계를 변경.
다른 해결법은 동적으로 테셀레이션을 계산.
삼각형 메시 만들기
감기 순서
삼각형은 위치 Vector 3개로 정의. 각 모서리는 인접한 Vector를 빼면 됨.
\[\begin{align} e_{12} = p_{2} - p_{1} \\ e_{13} = p_{3} - p_{1} \\ e_{23} = p_{3} - p_{2} \\ \end{align}\]이 중 임의의 모서리 2개를 외적한 후 정규화하면 삼각면의 단위 법선 N.
\[N = \frac { e_{12} \times e_{13} }{ \left\vert e_{12} \times e_{13} \right\vert }\]면의 방향을 정하는 것은 감기 순서에 따라 달라짐.
로우레벨 그래픽API에는 감기 순서를 정하는 API를 제공하며 후면 추려내기를 하여 보이지 않는 삼각형은 그리지 않음.
삼각형 리스트
가장 단순한 방법은 삼각형 정점 3개씩 묶어 리스트로 나타내는 것.
인덱스 삼각형 리스트
위의 방식은 중복된 정점이 많음. 정점에는 상당히 많은 메타데이터가 들어가기 때문에 메모리 낭비이며 정점마다 조명 계산을 여러 번 해야하기 때문에 성능도 저하.
각 정점을 나열 후 인덱스로 정점을 선택하여 삼각형 리스트를 구성.
스트립과 팬
인덱스 버퍼를 사용할 필요가 없으며 정점 중복을 어느 정도 줄이는 효과가 있음.
스트립은 첫 정점 3개가 하나의 삼각형을 이룸. 다음에 나오는 정점은 바로 앞 두 정점과 함께 새로운 삼각형 하나를 이룸. 감기 순서를 일관되게 하려면 앞의 두 정점은 다음 삼각형에서 반드시 순서를 서로 바꿔야 함.
팬은 첫 정점 3개가 삼각형 하나를 이룬 후 다음에 나오는 정점은 바로 앞의 정점과 제일 처름 정점으로 새로운 삼각형을 이룸.
정점 캐시 최적화
정점 셰이더를 거친 후 재사용을 위해 캐시에 저장되고 다음 기본단위가 캐시에 있으면 다시 처리하지 않고 캐시것을 사용함.
스트립과 팬을 쓰는 이유는 메모리 절약 뿐만 아니라 캐시 일관성을 향상 시킬 수 있기 때문.
제약이 많은 스트립이나 팬 말고 인덱스 삼각형 리스트로도 캐시 최적화를 얻을 수 있음. 정점 캐시 최적화 도구를 사용하여 캐시 재사용성이 최대가 되도록 삼각형을 재배열 하는 도구를 사용.
특정 GPU의 정점 캐시 크기 및 GPU의 캐시 저장 결정 알고리듬 등 여러 요소를 고려해 처리하는 것이 보통.