The Graphics Rendering Pipeline Transforms 저는 그패픽스 렌더링 파이프 라인과 변환에 대하여 발표할겁니다.
순서 그래픽 렌더링 파이프라인에 대한 소개 변환 기본변환 특수한 행렬변환과 연산 Q & A
The Graphics Rendering Pipeline 그래픽 렌더링 파이프라인의 주된 기능! 은 가상 카메라, 3차원 객체, 광원 , 조명 처리 모델, 텍스처 등이 주어졌을때 그것으로 부터 2차원 이미지를 만들어 내는 것, 다시 말해서 렌더링 하는 것이다. 그래서 그래픽 렌더링 파이프라인은 실시간 렌더링의 기반 도구 라고 할 수 있다. 각각의 구현방법에 초점을 맞춘것이 아니라 그 기능에 초점을 맞춰 논의 되고 설명될것이다.
응용 단계 Application Stage Architecture 응용 단계 Application Stage 기하 단계 Geometry Stage 래스터화 단계 Raster Stage 위 구조는 실시간 컴퓨터 그래픽스 응용프로그램에서 활용된다. 아키텍처는 실시간 컴퓨터 그래픽스 응용프로그램에서 활용된다. 또한 각 한나의 단계는 그자체로 또하나의 파이프라인이 된다. 다시말해 하나의 단계가 여러개의 부분 단계들로 구성된다는 것이다. 참고할 것은 ... 구현방법상 두개의 기능적 단계들을 하나의 파이프라인으로 단계단계로 결합할 수도 있고ㅡ 시간이 만ㅇㅎ이 걸리는 기능 단걔ㅖ를 여러 개의 차이츠라인 다계들로 분할 하고나, 심지어 병렬화하는 것도 가능하다.
응용 단계 기하 단계 래스터화 단계 참고할 것은 ... 구현방법상 두개의 기능적 단계들을 하나의 파이프라인으로 단계단계로 결합할 수도 있고ㅡ 시간이 만ㅇㅎ이 걸리는 기능 단걔ㅖ를 여러 개의 차이츠라인 다계들로 분할 하고나, 심지어 병렬화하는 것도 가능하다.
응용 단계 이 단계에서 사용자는 장면에 들어있는 모델들을 조작하고 그것을 마우스로 움직일 수 있다. 이 단계에서 사용자는 장면에 들어있는 모델들을 조작하고 그것을 마우스로 움직일 수 있다. 응용 단계 충돌검출 프로세스, 텍스처애니메이션, 변환을 통한 애니메이션, 기하 모핑 그리고 다른 단계에서는 수행될 수 없는 각종 계산 알고리즘등이 있다. 오직 소프트웨어로만 구현이 되므로 개발자가 구현 방법을 전면적으로 바꾸는것도 가능합니다. 속도를 높이기 위해 이 단계에서 폴리곤의 수를 줄여 전체적인 렌더링 속도를 높이기도 합니다.
응용 단계 소프트웨어로만 실행됨 / 부분 단계들로 분할 불가 동일 단계에서 동시에 여러 가지를 실행시키는 구조 가능 여기서 렌더링될 기하구조가 기하단계로 넘어 간다. ↘점, 선, 삼각형, 렌더링될 기본구조등 충돌검출 프로세스, 텍스처애니메이션, 변환을 통한 애니메이션, 기하 모핑 그리고 다른 단계에서는 수행될 수 없는 각종 계산 알고리즘등이 있다. 오직 소프트웨어로만 구현이 되므로 개발자가 구현 방법을 전면적으로 바꾸는것도 가능합니다. 속도를 높이기 위해 이 단계에서 폴리곤의 수를 줄여 전체적인 렌더링 속도를 높이기도 합니다. 소프트웨어 단계라서 부분단계들로 분할 할 수 없으므로여러개의 프로세서에서 병렬적으로 실행시키는 등의 일은 하지 못합니다. 하지만 동일 단계에서 여러가지를 수행할수 있습니다.
기하 단계 소프트웨어/하드웨어 구현 가능 여기서는 기하변환, 투영, 조명처리 등을 다 룬다. 무엇이 그려질 것인지, 그것이 어떻게 그려질것인지, 어디에 그려질 것인지를 계산한다
기하 단계 모델 변환과 시각변환 조명 처리 투영 클리핑 화면 매핑 다각형 단위의 조작이나 정점 단위의 조작을 주로 담당 한다.
기하 단계 . 모델 변환과 시야 변환 모델 변환에 의해 모델의 정점과 법선 벡터 들이 변형된다. Model → World <모델 변 환> 투영과 클리핑을 위해 카메라와 모든 모델 들은 시야 변환에 의해 변형된다. World → Eye <시야변환> 시야변환 : 카메라를 시야 좌표계의 원점에 위치시킨다. 바라보는 방향의 음의 z축, 위 쪽이 y, 오른쪽이 x축이 되도록 합니다. 그 밖의 다른 정교한 변환들이 이곳에서 나 타날 수 있다. (정점 혼합등..) 바라보는 방샹이 음의 제트축 방향을 위쪽이 와이축 오른쪽이 엑스축 방향.. 모델변환과 시야 변환은 4*4행렬로 나타나는데- 이것은 하나의 행렬로 결합 (concatenation)될 수 있다.이렇게 되면 월드 공간은 의미 없어 지겠지… 물체의 좌표는 모델 자표라고 불리며, 모델변환이 이 좌표들에 적둉되고 나면, 그 모델은 월드 좌표계또는 월드 공간에 위치한다고 말한다. 월드 공간은 유일 하며, 모델들이 고유의 모델 변환에의해 변환되고 나면 모든 모델들은 동일한 공간에 존재하게 된다. 카메라가 볼 수 있는 모델들만 렌더링 된다. 카메라는 월드 공간에서 위치와 방향을 가지는데, 이 것들은 카메라가 놓일 위치를 ㅈㅇ하고 지향하는 방향을 정하는 데 사용된다. 투영과 클리핑을 위해 카메라와 모든 모델들은 시야 변환 에 의해 변환된다. 시야 변환의 목표 카메라를 시야 원점에 위치 시키고, 바라보는 방향이 음의 z축 방향을 , 위쪽이 Y축 방향을, 오른쪽이 x 축을 기리키도록 만드는 것이다. 시야변환이 적용된 후에 실제 위치와 방향은 기반이 되는 응용프로그램 인터패이스에 따라 달라진다. 앞서 묘사한 공간을 camera space 라 부르고 좀더 일반적으로 eye space 라 부른다. 모델 변환과 시야 변환은 4*4 행렬로 구현된다. 효율성을 위해서 이들은 실제 모델에 적용되기 전에 하느의 행렬로 결합(concatenation)된다. 그러나 이런 방법으로 행렬들이 결합되면 한번의 변환에 의해 모델이 직접시야 공간으로 이동하므로 월드공간은 의미가 없어진다. 더 정교한 변환이 이 단계에서 일어날 수 있다. 강체들을 부드럽게 연결하기위해 정점혼합방법을 사용할수 도 있다. 손목과 팔이 매끄럽게 연결하기.. 파이프라인에서 정점 셰이더에 의해 적용되는 변환도 표면의 기하 구조를 바꿀 수 있다. ㅋㅋㅋ
카메라 방향 시각 절두체 x z x z 카메라 위치
기하 단계 . 조명 처리와 셰이딩 광원에 의해 영향을 받게 되는 모델들이 정 해지면 조명 계산식을 이용하여 모델의 각 정점 색 상을 계산한다. 표면의 각 정점에서의 색상은 광원의 위치 와 속성, 정점의 위치와 법선 벡터, 정점을 포함하고 있는 물체의 특성(물성)을 이용하여 계산한다. 조명 계산식 써자.
양끝 모서리 (-1,-1,-1)(1,1,1) 단위 정육면체 = 정규시야영역 기하 단계 . 투영 단위 정육면체를 정규 시야 영역 (Cnonical view volume)이라고 한다 직교투영 에서 시야 영역은 보통 직사각형 상자 모양이고 직교투영에의해 이러한 시야 볼륨은 단위 정육면체로 변환된다. 직교 투영의 주된 특징은 평행선이 변환 후에도 평행을 우ㅠ지 한다는 것이다. 이변환은 평행이동과 크기변환의 조합으로 표현된다. 원든 투영은 좀더 복잡하다.여기서는 물체가 카메라에서 멀어질 수록 투영한 후에 더 작게 보인다. 또한 평행성은 수평선에서 한 점으로 수렴 할 수도 있다. 그러므로 원근 투영 변환은 인간이 물체의 크기를 인지하는 방법을 흉내낸것이라고 할 수 있다. 직교투영과 원근 투영변환은 모두 4차원 행렬로 구성될 수 있으며 변환후에 모델은 정규화 된 장치 좌표계 (nomalized device coordinate)에 놓여있다. 이런방법으로 모델은 3차원에서 2차원으로 투영된다. 직교 투영 원근 투영 양끝 모서리 (-1,-1,-1)(1,1,1) 단위 정육면체 = 정규시야영역
( ) 기하단계 . 투영 . 직교투영 직교 투영의 특성은 평행선이 투영을 한 후 에도 평행성을 유지 한다는 것이다. P0 = z 좌표를 0으로 만드는 간단한 직교투영 행렬 P0 = S(s)T(t) ( 1 ) 다시 말해서 3차원을 2차원으로 축소하며, 축소된 자원을 다시 복원할 방법이 없다. 문제는 양의 z값을 가지는 평면과 음의 z값을 가지는 평면이 하나의 투영면으로 투영된다는 것이다.
기하단계 . 투영 . 직교 투영 정규 시야 영역으로 변환하는 이유는 거기서 클리핑하는것이 훨씬 효율적이기 때문이다. 정규시야 영역으로 변환을 한 수 엔더링될 기하 객체의 정점들은 이 정육면체를 기준으로 클리핑 된다. 정육면체의 안쪽에 있는 기하 구조들은 단위 정사각형을 화면에 매핑함으로서 최종적으로 렌더링 된다.
기하단계 . 투영 . 원근투영 물리 적인 설정헤 비헤 좁은 시야각을 사용하면 원근 투영 효과가 적어진다. 그이유는 관측자가 화면 쪽으로 너무 가까워 지기 대문이다. 시야각을 넓게 하면 가까이 있는 물체가 지나치게 크게 보이는 현상이 나타난다. 시야각이 넓을수록 물체들이 더 크고 인상적이라는 느낌을 주며. 주변상황에 대한 더 많은 정보를 제공 할 수 있다는 장점이 있다.
기하단계 . 클리핑 New Vertexs New Vertex 시야 영역에 포함되는 기하 요소만 래스터화 단계로 보내야 한다. 이전단계에서 투영 변환을 한 후 변환된 기하 요소들은 단위 정육면체를 기준으로 클리핑 된다. 클리핑하기 전에 시야 변화과 투영을 수행하는 것이 좋다. 그이유는 투영의 종류와 무관하게 기하 요소들을 항상 단위 정육면체에 대해 클리핑을 하는것이 쉽기 때문이다. 여기까지 좌표는 아직 2차원임. New Vertex 시야 영역에 포함되는 기하 요소만 래스터화 단계로 보내야 한다.
기하 단계 . 화면 매핑 이 과정에서는 각 기하 요소의 화면상에서 의 좌표를 찾아낸다. (x, y, z) 의 윈도우 좌표계 → (x, y)의 화면좌 표계 크기변환 연산과 평행 이동을 연이어서 하 는 것. window Z좌표는 이 매핑에 영향을 받지 않는다 이 화면 좌표값들은 z좌표와 함께 래스터화단계로 넘어간다.
래스터화 단계 모든 기하 요소들이 래스터화 된다. 즉, 위도우상의 픽셀들로 변환된다. 텍스처와 연관된 기하요소들은 거기에 적용된 텍스처와 함께 렌더링 된다. Z-버퍼 알고리즘으로 검사한다. 이전 단계에서 생성된 데이터들을 이용하여 이미지를 만들어 낸다.
Transform
( ) Translation Translation Matrix T t=(tx, ty, tz ) T(t) = T(tx, ty, tz ) = ( 1 tx ) ty tz 평행 이동 행렬의 역행렬은 T^-1(t) = T(-t)이다.
( ) ( ) ( ) Rotation Rx(∮)= Ry(∮)= Rz(∮)= x , y , z 축으로 ∮라디안 만큼 회전시킨다. Rx(∮), Ry(∮), Rz(∮) Rotation ( 1 ) cos∮ -sin∮ sin∮ Rx(∮)= Pitch ( cos∮ sin∮ ) 1 -sin∮ Ry(∮)= Yaw ( cos∮ -sin∮ ) sin∮ 1 Rz(∮)= Roll
( ) ( ) ( ) scaling S(s)= S = or x , y , z 방향으로 각각 확대/축소한다. S(s)=(Sx, Sy, Sz) scaling ( Sx ) Sy Sz 1 S(s)= Example) 물체를 5배 확대 하기 ( 5 ) 1 ( 1 ) 1/5 S = or 1개 또는 3개의 성분이 음수이면 거울 행렬이라불리는 반사행렬 만들어진다. 반사행렬검사는 위의 3*3의 판별자가 음수인가를 확인.
Concatenation of Transforms 행렬의 결합은 교환 법칙이 성립되지 않는다. 행렬을 결합하는 이유는 효율을 높이기 위해 서다. 결합시 오른쪽부터 이루어 진다. 즉, TRS(p) = T(R(S(p))) 임을 의미한다.
x y Rz(π/6) x y x y S(s) x y x y Rz(π/6) x y S(s)
The Rigid-Body Transform 물체를 이동하거나 회전 시킬때, 물체의 모양 은 영향 받지 않을 경우 강체 변환이라고 한다. 물체의 길이와 각도는 보존된다. 임의의 강체 변환 행렬은 T(t)R의 형태를 가진 다. 이동과 회전 행렬의 결합 X의 역행렬은 X^-1 = (T(t)R)^-1 = R^-1T(t)^-1 = R^T T(-t)로 계 산된다. ( r00 r01 r02 Tx ) r10 r11 r12 Ty r20 r21 r22 tz 1 X = T(t)R =
Normal Transform 법선 벡터? 곡면 위의 한 점을 지나고, 이 점에서의 곡면에 대한 접평면에 수직인 직선이 법선 벡터이다. 법선은 컴퓨터 그래픽에서 평면 그림자를 위한 조명을 향한 표면의 방향을 결정하기도하고. 퐁 쉐이딩으로 각각의 코너의 방향을 곡선인 표면으로 바꾸는데에 사용됩니다. 법선벡터는 3D에서 참으로 중요한데, 조명의 각도와 법선벡터의 각도를 계산하여 빛의 양을 결정하고 그 표면(재질 meterial)이 표현되기도 하고, 또 둥근정도 뽀족한 정도가 표현되기 때문입니다.
삼각형의 정점들이 조명계산을 위한 법선 벡터 정보를 포함하는 경우가 자주 있다. 법선은 컴퓨터 그래픽에서 평면 그림자를 위한 조명을 향한 표면의 방향을 결정하기도하고. 퐁 쉐이딩으로 각각의 코너의 방향을 곡선인 표면으로 바꾸는데에 사용됩니다. 법선벡터는 3D에서 참으로 중요한데, 조명의 각도와 법선벡터의 각도를 계산하여 빛의 양을 결정하고 그 표면(재질 meterial)이 표현되기도 하고, 또 둥근정도 뽀족한 정도가 표현되기 때문입니다. gouraud 쉐이딩은 공유하고있는 각 정점의 법선벡터의 평균치를 정점의 법선벡터로 잡고 면에경우 각 정점사이를 interpolation(보간)하여 부드럽게 표현해줍니다 ㅎㅎ
N=(M ) Normal Transform -1 T 법선이 어떻게 변형 되는가? 하나의 행렬로 점 선 다각형과 같은 다른 기하요소들을 일관되게 변환할 수 있지만 이것으로 표면 법선 벡터를 변환하는데도 이용 할 수 있는 것은 아니다.
Normal Transform 벡터이므로 이동의 경우에는 변할것이 없고 회전의 경우에는 똑같이 회전을 하여주면 된 다. 만약 크기 조정일 경우에는 균등 크기 조정이 라면 크기 조정된 값을 나누어 주면 되지만 비균등 조정일 경우에는 역행렬을 새로 구해 주어야 한다. 비록 완전한 역변환이 필요하다고 하여도 행렬 의 좌측 상당 부분의 adjoint의 전치 행렬만 필 요하다. 어짜피 정규화를 하기 때문에 판별자를 나눌 필요가 없기 때문이다. 조명의 각도와 법선벡터의 각도를 계산하여 빛의 양을 결정하고 그 표면(재질 meterial)이 표현되기도 하고, 또 둥근정도 뽀족한 정도가 표현되기 때문입니다.
역행렬 계산 역행렬은 여러 경우에 있어 필요로 하게 되어진다. 역행렬을 구하는데 있어 크게 3가지가 사용 될 수 있다. 행렬이 단일변환 이거나 일련의 단순 변환을 위한 것일 경 우, M=T(t)R(∮)이면 M^-1=R(-∮)T(-t) 행렬이 직교한다는 사실을 알고 잇으면, M^-1=M^T가 된다. 즉 전치 행렬이 역행렬 Cramer의 법칙, adjoint방법은 branch 연산이 적어 일반적으 로 많이 사용된다. LU분해 ,가우스 소거법 으로 역행렬을 구할 수 있다.