Matrix 및 Rendering 파이프라인 2017/04/28 박진호
Matrix 정의 및 연산 직사각형 모양으로 배열하여 괄호로 묶어놓은 것 표기방법 𝑞 11 𝑞 12 𝑞 13 𝑞 21 𝑞 22 𝑞 23 𝑞 31 𝑞 32 𝑞 33 N차 정사각행렬 → 행과 열의 수가 n개로 같은 행렬 상등 → 두 행렬의 모양이 같고, element가 동일 역행렬 →𝐴𝐵=𝐵𝐴=𝐸, 𝐴= 𝐵 −1 , 𝐵= 𝐴 −1 행렬 곱셈
Rendering 파이프라인 Vertex Shader Model Transformation View Transformation Fixed Pipeline → shader가 없는 상태에서 3D를 2D로 projection하는 과정 𝑥 𝑦 1 = 𝑀 𝑃𝑟𝑜𝑗𝑒𝑐𝑡𝑖𝑜𝑛 𝑀 𝑉𝑖𝑒𝑤 𝑀 𝑀𝑜𝑑𝑒𝑙 𝑥 𝑦 𝑧 1 Model Transformation → 로컬 좌표계를 월드 좌표계로 변환 View Transformation → 카메라 설정 및 카메라를 월드 좌표계의 원점으로 이동 Projection Tranformation → projection효과에 따른 변환( perspective, orthogonal ) Clipping → Viewing Frustum Culling, Back-face culling Viewport Tranfromation → 버퍼 정규화 Rasterization → Pixel 생성 Vertex Shader Model Transformation View Transformation Projection Transformation Clipping Viewport Transformation Rasterization Fragment Shader
Model Transformation 로컬 좌표계인 모델, primitive의 vertex를 월드 좌표계로 변환 검은색은 월드 좌표계 주황색은 로컬좌표계 Translation Matrix Scaling Matrix Rotation Matrix
View Transformation 𝑛= (𝑓−𝑒) |𝑓−𝑒| 카메라를 월드 좌표계의 원점으로 이동 후 각 모델과 primitive의 vertex를 camera 좌표계로 변환 ( 실제 계산은 월드좌표계의 원점을 카메라 원점으로 이동 ) 𝑉= 𝑊 −1 = ( 𝑇 𝑤 𝑅 𝑤 ) −1 = 𝑅 𝑤 −1 𝑇 𝑤 −1 e = camera의 위치, f = camera가 바라보는 위치 n = camera가 바라보는 방향, u = camer의 up 벡터 𝑛= (𝑓−𝑒) |𝑓−𝑒| 𝑣= 𝑣 0 |𝑣 0| , 𝑣 0 =𝑢−𝛼𝑛, 𝛼= (𝑢∙𝑛) |𝑛| 𝑤=𝑛×𝑣 𝑅 𝑤 = 𝑊 𝑥 𝑊 𝑦 𝑉 𝑥 𝑉 𝑦 −𝑛 𝑥 −𝑛 𝑦 0 0 𝑊 𝑧 0 𝑉 𝑧 0 −𝑛 𝑧 0 0 1 𝑇 𝑤 = 0 0 0 0 0 0 𝑒 𝑥 𝑒 𝑦 0 0 0 0 0 0 𝑒 𝑧 1
Projection Transformation 3D 오브젝트를 2D공간으로 투영 𝑀 𝑝 = −1 0 0 1 0 0 0 0 0 0 0 0 0 −1 1 𝑓𝑜𝑐𝑢𝑠 0 𝑓𝑜𝑐𝑢𝑠=𝑐𝑎𝑚𝑒𝑟𝑎에서 view plane까지 거리 𝑀 𝑝 𝑃= 𝑥 𝑦 −1 𝑧 𝑓𝑜𝑐𝑢𝑠 = 𝑥∙( 𝑓𝑜𝑐𝑢𝑠 𝑧 ) 𝑦∙( 𝑓𝑜𝑐𝑢𝑠 𝑧 ) − 𝑓𝑜𝑐𝑢𝑠 𝑧 1
Clipping Viewing frustum 밖이나 보이지 않아도 되는 triangle을 제외 - back face culling, view frustum culling, Occlusion Culling back face culling - 각 triangle의 normal vector가 camera방향이 아니면 그리지 않음 . View frustum culling - View frustum밖의 triangle은 그리지 않음. - 표시할 object를 하나의 트리 구조로 만들어 각 node의 bounding volume이 view frustum에 포함되지 않으면 하위 node도 포함되지 않음. Occlusion Culling - 벽 뒤의 object들은 view frustum에 포함되어 있더라도 많은 경우 그릴 필요 없음 - 실외의 경우 Occlusion Culling의 계산량과 그려질 triangle의 축소가 비슷비슷하여 크게 필요치 않음 - 실내의 경우 창문, 문에서 보이는 object가 전체가 아니므로 미리 PVS( potential visible set )을 계산하여 보여지지 않는 부분 을 제거한 후 사용. ( portal rendering )
Viewport Transformation & Rasterization View volume 계산 - culling이 완료된 후 view frustum을 3축이 -1에서 1사이의 cube로 변환 Rasterization - device의 좌표계( 윈도우 기준 화면 가운데가 0, 0 )로 변환 및 frame buffer( color buffer )에 저장