Study/Etc.

Computer Graphics (Real-Time Rendering - chapter 2: The Graphics Rendering Pipeline)

빨간당무 2011. 4. 27. 01:48
이 문서는 개인적인 공부를 위해 정리된 내용입니다. 다소 오류가 존재할 수 있습니다.



= 목차 
- 그래픽 렌더링 파이프라인 (Graphics Rendering Pipeline)
- 아키텍처 (Architecture)
-- 렌더링 속도 (Rendering Speed)
-- 응용 단계 (The Application Stage)
-- 기하 단계 (The Geometry Stage)
--- 모델 변환과 시야 변환 (Model and View Transform)
--- 조명 처리와 셰이딩 (Lighting and Shading)
--- 투영 (Projection)
--- 클리핑 (Clipping)
--- 화면 매핑 (Screen Mapping)
-- 래스터화 단계 (The Rasterizer Stage)
- 파이프라인에 대한 정리 (Summary)

= 그래픽 렌더링 파이프라인
- 주어진 가상 카메라, 3차원 객체, 광원, 조명처리 모델, 텍스처 등으로부터 2차원 이미지를 만들어내는 것
- MCS → WCS → VCS → NDCS → DCS or SCS

= 아키텍처
- 개념적 단계 (응용 단계 → 기하 단계 → 래스터화 단계)

= 렌더링 속도 (or throughput) : 이미지를 갱신하는 속도
- 단위 : frame per second (fps) - 초당 렌더링되는 이미지 개수, Hz : frequency, 1/sccond
- 렌더링 속도는 병목(bottleneck) 단계에 의해서 결정
- example
- 조건 : 출력 장치의 최대 주파수 : 60 Hz
            렌더링 파이프라인에서 병목단계 수행시간 : 62.5 ms
- 결과 : 출력 장치를 무시할 때 최대 렌더링 속도 = 1/0.0625 = 16 Hz
            출력 장치의 주파수를 고려한 렌더링 속도 = 15 Hz
            (60 Hz는 렌더링 속도가 60/1=60Hz, 60/2=30Hz, 60/3=20Hz, 60/4=15Hz인 것을 의미하고,
            출력장치의 주파수 < 최대 렌더링 속도이므로)

= 응용 단계
- 응용 프로그램에 의해 동작됨 / 소프트웨어로 구현, 병렬실행
- 기능 : 충돌 검출 (Collision detection), 소스로 부터 입력된 값 처리, 다른 단계에서 구현 될 수 없는 계산 프로세서, 가속화 알고리즘 구현

= 기하단계
- 소프트웨어 또는 하드웨어로 구현
- 다각형별 연산(Per-Polygon Operation) 또는 정점별 연산(Per-Vertex Operation) 수행
- 모델 변환과 시각 변환 → 조명 처리 → 투영 → 클리핑 → 화면 매핑

= 모델 변환과 시야 변환 (Model and View Transform)
- 모델 변환 (Model transform) : 모델(공간, 좌표) → 모델의 정점과 법선벡터 → 보편(공간, 좌표)
-- 모델 공간, 좌표 : 개별 물체의 좌표
-- 보편 공간, 좌표 : 모든 물체들에 대해 공통적인 유일 좌표계, 모든 모델들은 동일 공간에 존재
- 시야 변환 (View transform) : 보편(공간, 좌표) → 카메라 공간, 시야 공간
-- 관측 위치와 관측 방향(negative z-axis)을 정함
- 모델변환과 시야변환은 4X4 행렬로 구현
- 효율성을 위해, 모델이 변환되기 전에 두개의 행렬을 하나로 결합함

= 조명 처리
- 빛과 물체 사이에 일어나는 물리적 현상을 모사
- 조명 계산식 (lighting equation)
-- 모델의 각 장점 색상을 계산
-- 색상은 광원의 특성, 정점의 위치와 법선벡터, 정점의 물리적 특성을 이용하여 계산
- 색상 = 주변광 + 난반사광 + 정반사광 + 감쇄인자

= 투영
- 시야 볼륨 - 단위 입방체
- 평행 투영 (직교 투영)
-- rectangular box → unit cube
-- 평행성이 변환 후에도 평행
-- 평행이동과 크기조정 변환의 결합
- 투시 투영 (원근 투영)
-- frustum → unit cube
-- 물체가 카메라에서 멀어질수록 더 작게 보임 (원근효과)
-- 수평선에서 한 점으로 수렴
- 4X4 행렬로 구성 가능
- normalized device coordinates
- Hierarchy of Planar geometric projection
---- Plane geometric projections
---- ---- parallel
---- ---- ---- orthographic
---- ---- ---- axonometric
---- ---- ---- ---- trimetric
---- ---- ---- ---- dimetric
---- ---- ---- ---- isomtric
---- ---- ---- oblique
---- ---- ---- ---- cavalier
---- ---- ---- ---- cabinet
---- ---- perspective
---- ---- ---- Single point
---- ---- ---- Two point
---- ---- ---- Three point

= 클리핑
- View volume 바깥쪽의 primitive를 버림
- View volume 안쪽에 부분적으로 존재하는 primitive를 클리핑

= 화면 매핑
- 화면 좌표 (screen coordinates) : 각 primitive의 화면상 좌표
- 크기 조정, 평행이동 변환
- Z-좌표는 이 mapping에 영향을 받지 않음

= 래스터화 단계
- 하드웨어로 구현, 픽셀별 연산 (Per-Pixel Operation), 가시성 (Visibility) 결정, 텍스처 처리
- 주요 기능
-- 정확한 이미지를 rendering 하기 위해 각 픽셀에 정확한 색상을 지정
-- rasterization or scan conversion.
- Frame buffer
-- 색상 버퍼 (Color buffer) : 픽셀 정보 저장, 색상정보를 저장하는 2차원 배열
-- 후면 버퍼와 전면 버퍼 (Back and front buffer) : double buffering
-- 깊이 버퍼 (Z-buffer) : 카메라로부터 현재 가장 가까이에 있는 primitive 까지의 깊이 값인 z-value 저장. Visibility 결정에 활용
- 알파 채널 (Alpha channel) : color buffer와 관련이 있고, 각 픽셀의 opacity value를 저장
- 스텐실 버퍼 (Stencil buffer) : 픽셀당 1~8 비트 정보를 가짐
- 누적 버퍼 (Accumulation buffer) : 이미지들은 여러 operation을 통해 누적될 수 있다. motion blur, antialiasing, soft shadow.

= 요약
- 응용단계
-- 사용자는 모델과 상호작용 할 수 있다.
-- 응용 단계의 끝에서 기하 요소들은 다음 단계로 보내어진다.
- 기하 단계
-- 모델 변환과 시야 변환
-- 조명처리와 셰이딩
-- 투영
-- 클리핑
-- 화면 매핑
- 래스터화 단계
-- 기하 요소들이 픽셀로 변환
-- 텍스처를 이용한 렌더링
-- Z-buffer 알고리즘을 통해서 가시성 검사

referece : 리얼-타임 렌더링 2판 (Real-Time Rendering), 신병석, 오경수 공역, 정보문화사