랜더링 파이프라인
-렌더링 파이프인은 3D 세계에 대한 기하학적 표현과 이 세계를 바라보는 관점을 정의 하는 가상 카메라를 이용해 2D 이미지를 만들어내는 역할을 담당한다.
-3D물체를 표현하는 방법을 배운다.
-가상 타메라를 모델링하는 방법을 배운다.
-렌더링 파이프라인에 대해 이해한다(3D장면의 기하학적 표현으로 2D 이미지를 만들어 내는 과정을 배운다.)
모델 표현
장면은 물체나 모델의 모음이다. 물체는 삼각형 메쉬의 묘사로 이루어지는데. 메쉬의 삼각형은 우리가 모델링하는 문테의 기본적인 구성 성분이 되며, 우리는 메쉬 삼각형을 참조하는 용어로 다각형, 기본형 그리고 메쉬 기하물체를 상호 교환적으로 이용한다.
버텍스(꼭지점)
-다각형에서 두개의 변이 만나는 점을 버텍스라 한다. 하난의 삼각형을 만들기 위해서 삼각형의 세 버텍스에 해당하는 세 개의 포인트 위치를 지정해야 하며 이 삼각형을 지정하여 물체를 묘사한다.
버텍스 포멧
-버텍스의 속성을 정의 할 수 있도록 해준다.
커스텀 버테스 포맷을 만들기 위해서는 먼저 우리가 선택한 버텍스 데이터를 포함할 구조체를 만들어야 한다. 버텍스 포맷과 대응되는 버텍스 구조체는 위치와 법선, 텍스처 좌표 특성을 포함한다.
-기억해야 할 점 : 버텍스 구조체에 정의된 데이터의 순서와 FVF(버텍스 포맷)의 정의된 수서는 반드시 일치해야 한다는 것이다.
삼각형
삼각형은 3D 물체의 기본 요소로서, 물체를 구성하기 위해서는 물체의 모양과 외형을 묘사하는 삼각형 리스트는 그리고자 하는 각각의 삼각형에 대한 데이터를 포함하는데, 예를 들어, 사각형을 만들기 위해서는 두개의 삼각형으로 나누고 각각의 삼각형을 구성하는 버텍스를 지정해야 한다.
인덱스
3D물체를 구성하는 삼각형들은 동일한 버텍스들을 공유하는 경우가 많다. 모델의 복잡성과 세밀함이 증가할수록 중복되는 버텍스의 수 역시 증가한다. 이러한 문제를 해결하기 위해서 인덱스의 개념을 이용한다. 먼저 버텍스 리스트와 인덱스 리스트를 구성한다. 버텍스 리스트는 모든 독특한 버텍스들을 포함하며, 인덱스 리스트는 삼각형을 구성하기 위한 버텍스 리스트로의 인텍스 값을 포함한다.
가상 카메라
-카메라는 관찰자가 볼 수 있는 세계의 부분을 지정하는 것으로, 2D 이미지를 생성하기 위해 세계의 어떤 부분이 필요한지를 결정하며, 세계 내에 위치하며 보여질 공강의 부피를 정의 한다.
공간의 부피는 절두체(frustum)이며, 시야각과 가까운 평면, 먼 평면에 의해 정의 된다. 사각 원뿔을 이용하는 이유는 모니터 스크린이 사각형인 것을 생각하면 쉽게 이해 할 수 있을 것이다. 이 공간에 포함되지 않는 물체들은 보여지지 않으며 이후의 처리에서 제외되어야 한다. 이와 같은 데이터의 제외 처리를 클리핑(clipping)이라 부른다.
렌더링 파이프라인 사용
기하학적으로 3D 장면을 구성하고 가상 카메라를 설정한 뒤에는 모니터에 2D 표현을 만들어 내는 과정을 수행해야 한다. 이와 같은 일련의 과정을 렌더링 파이프라인 이라 한다.
<요약된 렌더린 파이프라인>
파이프라인 내에서의 몇 가지 단계에 의해 하나의 좌표 시스템에서 다른 시스템으로 기하물테를 변환하는 과정이 이루어진다.
로컬 스페이스
모델링 스페이스라고도 불리는 로컬 스페이스는 우리가 물체의 삼각형 리스트를 저의 하는 데 이용하는 좌표 시스템이다. 로컬 좌표 시스템을 이용하는 것이 월드에서 직접 모델을 구성하는 것보다 훨씬 쉽다. 예를 들어, 로컬 스페이스를 이용하면 위치나 크기, 월드 내의 다른 물체와의 관계 등을 고려하지 않고도 모델을 구성 할 수 있다.
월드 스페이스
자체의 로컬 좌표 시스템 내에 다수의 모델을 구성한 다음에는 이를 전역(월드) 좌표 시스템으로 옮겨 하나의 장면을 구성해야 한다. 로컬 스페이스의 물체들은 이동, 회전, 크기 변형 등의 포함하는 월드 변환이라는 작업을 거쳐 월드 스페이스로 옮겨 진다. 월드 변환은 위티와 크기, 방위를 포함하는 각 물체 간의 관계를 정의 함으로써 이루어진다. 월드 변환은 하나의 행렬 표현된다.
뷰 스페이스
월드 스페이스 내에서 기하물체와 카메라는 월드 좌표 시스템과 연계되어 정의 된다. 한편, 카메라가 월드 내 임의의 위치나 방위를 가진다면 투영이나 그 밖의 작업이 어렵거나 덜 효율적이 된다. 따라서 작업을 수월함을 위해 카메라를 월드 시스템의 원점으로 변환하고 카메라가 양의 z축을 내려다 보도록 회전 시켜야 한다. 이때 월드에 대한 관점이 바뀌지 않도록 하기 위해서는 카메라에 맞추어 월드 내의 모든 기하물체를 변환해야 하는데, 이와 같은 변환을 뷰스페이스 변환이라하며, 이 변환을 거친 뒤의 기하물체는 뷰 스페이스 내에 위치한다고 말할 수 있다.
후면 추려내기
폴리곤은 두개의 면을 가지고 있으며 하나의 면을 전면, 다른 면을 후면이라 부른다. 일반적으로 폴리곤의 후면은 절대 보여지지 않는데, 이는 장면 내의 물체들이 대부분 박스나 원기둥, 탱크, 케릭턱 들과 같은 채워진 볼륨이며, 채워진 물체의 내부로 카메라를 넣는 것이 허용되지 않기 때문이다. 즉, 카메라는 절대로 폴리곤의 후면을 보지 못한다. 이와 같은 사실은 매우 중요하다 이유는 폴리곤의 후면을 볼 수 있는 경우에는 후면 추려내기가 작동하지 않기 때문이다.
전면 폴리곤과 후면 폴리곤이 있다.
조명
광원은 물체에 명함을 추가하여 장면에 사실감을 더해준다.
클리핑
시야 볼륨 외부의 기하 물체를 추려내는 것을 클리핑이라 한다. 시야 절두체에서의 삼각형 위치는 다음가 같이 세 가지를 분류할 수 있다.
완전한 내부 – 삼각형이 완전히 절두체 내부에 위치하면 그래도 보전되어 다음 단계로 진행한다.
완전한 외부 – 삼각형이 완전히 절두체 외부에 위치하면 추려내어진다.
부분적 내부(부분적 외부) – 삼각형이 부분적으로 절두체 내부에 위치하여 삼각형을 두개의 부분으로 분리한다. 절두체 내부의 부분은 보존되며, 나무지는 추려내어진다.
투영
n차원에서 n-1차원을 얻는 과정을 투영(projection)이라 한다.
-원근 투영은 원근 법을 이용하여 기하물체를 투사한다. 즉, 카메라에서 멀리 떨어진 물체는 가까운 물체에 비해 작게 나타난다. 이와 같은 타입의 투영은 3D에서 2D 이미지로 표현하는 데 가장 적합한다.
뷰포트 변환
뷰포트 변환은 프로젝트 윈도우의 좌표를 뷰포트라 불리는 화면의 직사각형으로 변환하는 과정을 말한다.
레스터라이즈
스트린 좌표로 버텍스들을 변환 한 다음에 2D 삼각형들의 리스트를 가지게 된다. 래스터라이즈 단계는 각각의 삼각형을 그리는 데 필요한 픽셀 컬러들을 계산하는 과정이다.
요약
-3D 물체들은 물체의 모양과 외각을 묘사하는 삼각형들의 리스트인 삼각형 메쉬들로 표현된다.
-가상 카메라는 절두체로 모델링 되며 절두체 내의 공간이 카메라가 “보는” 것이 된다.
-3D 물체들은 로컬 스페이스 내에 정의 되며 모두 하나의 월드 스페이스 시스템으로 옮겨진다. 투영을 위해 서는 추려내기와 같은 다른 작업이 필요하며, 이어 뷰 스페이스로 물체를 변환하고, 카메라를 원점으로 옮기고 양의 z축을 내려다보도록 하는 과정이 진행된다. 뷰 스페이스 내에 놓여진 물체들은 투영되며 뷰 포트 변환을 통해 기하물체가 뷰포트로 변환된다. 이제 최종걱으로 래스터라이즈를 거쳐 최종 2D 이미지를 구성하는 각각의 픽셀 컬러가 계산된다.