렌더링 파이프 라인이란?
렌더링 파이프라인은 3D 세계에 대한 기하학적 표현과, 이 세계를 바라보는 관점을
정의하는 가상 카메라를 이용해 2D 이미지를 만들어내는 역할을 담당한다.
과정
1. 로컬 스페이스 -> 2. 월드 스페이스 -> 3. 뷰 스페이스 -> 4. 후면 추려내기 -> 5. 조명
-> 6. 클리핑 -> 7. 투영 -> 8. 뷰포트 -> 9. 래스터라이즈
1. 로컬 스페이스
물체의 삼각형 리스트를 정의하는데 이용하는 좌표 시스템.
위치나 크기 , 월드 내의 다른 물체와의 관계 등을 고려하지 않고도 모델을 구성할 수 있다.
2. 월드 스페이스
로컬 좌표 시스템 내에서 다수의 모델을 구성한 다음에는,
이를 월드 좌표 시스템으로 옮겨, 하나의 장면을 구성해야 한다.
로컬 스페이스의 물체들은 이동 , 회전 ,크기 변형 등을 포함하는 월드 변환이라는 작업을 거쳐
월드 스페이스로 옮겨진다.

3. 뷰 스페이스
월드 스페이스 내에서의 물체와 카메라는 월드 좌표 시스템과 연계되어 정의된다.
한편, 카메라가 월드 내 임의의 위치나 방위를 가진다면 투영이나 그 밖의 작업이 어렵거나 덜 효율적이 된다.
따라서 작업의 수월함을 위해 카메라를 월드 시스템의 원점으로 변환하고,
카메라가 양의 z축을 내려다보도록 회전시켜야 한다.
이때 월드에 대한 관점이 바뀌지 않도록 하기 위해서는 카메라에 맞추어 월드 내의 모든 기하물체를 변환해야 하는데, 이와 같은 변환을 뷰스페이스 변환이라 하며, 이변환을 거친 뒤의 기하물체는 뷰스페이스 내에 위치한다.
(복잡..)

4. 후면 추려내기
일반적으로 폴리곤의 후면은 절대 보여지지 않는다. (장면 내의 물체들이 내부로 카메라를 넣는것이 허용되지 않기 때문)
폴리곤의 후면을 볼 수 있는 경우 후면 추려내기가 작동하지 않는다.
Direct3D는 후면 폴리곤을 추려냄으로서 상당한 이득을 취한다.
카메라 입장에서 후면은 어차피 가려져 보이지 않으므로 동일한 이미지가 만들어진다.


5. 조명
광원은 월드 스페이스 내에서 정의되지만, 뷰 스페이스 변환에 의해 뷰 스페이스로 변환된다.
광원은 물체에 명암을 추가하여 장면에 사실감을 더한다.
6. 클리핑
시야 볼륨 외부의 물체를 추려내는 것이 클리핑이다.

외부 - 클리핑 된다.
내부 - 그대로 보존된다.
부분적 내부(부분적 외부) - 삼각형을 두개의 부분으로 분리한 후, 내부는 보존하고 외부는 클리핑된다.
7. 투영
뷰 스페이스에서 3D 장면의 2D 표현을 얻는 과정이 남아있다.
n 차원에서 n-1 차원을 얻는 과정을 투영이라고 한다.
원근 투영(원근법을 이용하여 물체를 투사)이 가장 적합하며,
카메라에 멀리 떨어진 물체는 가까운 물체에 비해 작게 나타난다.

8. 뷰 포트 변환
프로젝트 윈도우의 좌표를 뷰포트라 불리는 화면의 직사각형으로 변환하는 과정.
게임에서의 뷰포트는 보통 직사각형의 전체 화면이 되지만,
윈도우 모드에서 실행하는 경우에는 클라이언트 영역이나 화면의 일부가 될 수도 있다.

9. 래스터라이즈
스크린 좌표로 버텍스들을 변환한 다음에는 2D 삼각형들의 리스트를 가지게 된다.
래스터라이즈 단계는 각각의 삼각형을 그리는데 필요한 픽셀 컬러들을 계산하는 과정이다.

래스터라이즈 과정은 엄청난 작업량을 필요하기 때문에 , 전용 그래픽 하드웨어에서 처리해야 한다.
래스터라이즈의 결과물은 모니터에 바로 디스플레이 할 수 있는 2D 이미지가 된다.
결론 및 요약
- 3D물체들은 물체의 모양과 외곽을 묘사하는 삼각형들의 리스트인 삼각형 메쉬들로 표현된다.
- 가상 카메라는 *절두체로 모델링 되며 ,절두체 내의 공간이 카메라가 "보는" 것이 된다.
- 3D 물체들은 로컬 스페이스 내에 정의되며 모두 하나의 월드 스페이스 시스템으로 옮겨진다. 투영을 위해 서는 추려내기(클리핑)와 같은 다른 작업이 필요하며, 이어 뷰 스페이스로 물체를 변환하고, 카메라를 원점으로 옮기고 양의 z축을 내려다보도록 하는 과정이 진행된다. 뷰 스페이스 내에 놓여진 물체들은 투영 윈도우로 투영되며, 뷰 포트 변환을 통해 투영 윈도우의 기하물체가 뷰포트로 변환된다. 이제 최종적으로 래스터라이즈를 거쳐 최종 2D 이미지를 구성하는 각각의 픽셀 컬러가 계산된다.
*절두체 - 입체(보통 원뿔이나 각뿔)를 절단하는 하나나 두 평행면 사이의 부분.

ex) 사각뿔 절두체
'공부 > 개념 & 유용한 내용' 카테고리의 다른 글
Call by value & Call by reference (0) | 2020.07.13 |
---|---|
빅오 표기법 (big - O notation) (0) | 2020.07.13 |
배열(Array) & 리스트(List) 차이 (0) | 2020.07.07 |
컴파일 언어 & 인터프리터 언어 (스크립트 언어) (0) | 2020.07.07 |
코루틴 & 쓰레드 차이점 (0) | 2020.07.02 |