Ray Tracing은 방대한 메모리 사용과 높은 계산 비용 요구로 실사용이 거의 불가능 하다. 이런 문제를 해결하기 위해 등장한 것이 Simplified Rendering Pipeline 이다.
Ray Tracing 에서는 모든 Objects의 정보를 메모리에 넣은 후, Light Source 에서 방출된 빛이 Viewer에 도달하는 경로를 역으로 계산한다. 이는 카메라에 도달하는 모든 픽셀들의 광선을 역추적 하기 때문에 높은 계산 비용을 요구한다.
그러나 실제로 Viewer에 도달하는 모든 픽셀들의 광선을 역추적 할 필요는 없다. Simplified Rendering Pipeline에서 우리는 물체의 3차원 Vertex 정보를 카메라 시점의 2차원 데이터로 변환한다. 그리고 Vertex 사이의 공간을 색으로 채운다. 다음의 과정을 통해 상세히 알아보자.
기본적으로 Objects를 표현하기 위해서는 물체의 모양, 크기, 위치 등의 정보를 갖고 있어야 한다. Simplified Rendering Pipeline에서는 이러한 정보들을 3D 모델의 Vertex 정보로 저장한다.
Vertex 는 3차원 상의 점으로 표현되며 점의 좌표, 다름 Vertex 와 연결되는 법선 벡터, 색상 정보 등을 갖는다.
3D 모델의 Vertex 정보를 입력받고, 이를 화면에 그리기 위한 준비를 한다. 이 단계에서는 모델의 각 Vertex가 월드 좌표계에서 카메라 좌표계로 변환(Projection: 사영)된다.
Clipping 단계에서는 카메라의 시야 범위(FOV, Field of View) 밖에 있는 물체나 정점은 렌더링되지 않으므로, 불필요한 부분을 제거한다. 이로 인해 연산을 최소화하여 성능이 향상된다.
만약 Object가 카메라에 보이면 카메라에 표현되는 각 픽셀은 적절한 color 값을 가져야 한다. Rasterization 과정에서는 Vertex 정보를 이용해 화면에 표시될 픽셀을 계산하는데 이를 Fragemnts 정보로 저장한다.
Fragment Processing 단계에서는 각 픽셀(Fragment)에 대해 색상, 텍스쳐, 조명, 반사광 등의 셰이딩 정보를 적용한다.
또한 카메라와 물체와의 거리에 차에 의해 생기는, 다른 Fragments 에 의해 가려지는 Fragment 는 이 단계에서 제거한다. (단, 이 과정은 Rasterization에서 z-버퍼를 추가로 계산하여 Depth Test를 Fragment Processing 단계 이후에 수행한다.)
단계 | 결과 |
---|---|
Vertex Processor | 3D 공간의 정점(Vertex)이 화면(Viewer, Camera)에 투영되는 위치로 변환됨 |
Clipping | 화면에 보이는 부분만 남기고 나머지는 제거됨 |
Rasterization | 3D 모델이 2D 화면에 표시되기 위한 픽셀 기반의 형태(Fragment)로 변환됨 |
Fragment Processor | 각 픽셀이 최종적으로 어떤 색을 가질지 결정됨 |
장점 | 단점 |
---|---|
낮은 계산 비용 | 간접 조명 및 전역 조명 부족 |
적은 메모리 공간 필요 | 비현실적인 조명과 반사 |
실시간 렌더링 |