티스토리 뷰
고려대학교 정보대학 컴퓨터학과 2019년 1학기 <컴퓨터그래픽스> 5강 정점 처리(1)
강의영상 플레이리스트 [Link]
강의자료 [Link]
컴퓨터그래픽스 정점 처리(1) - Vertex Processing
Keywords
- GPU Rendering Pipeline
- Vertex Shader
- Rasterization
- Fragment Shader
- Output Merger
- World transform
- \(L^{-T}\)
- View transform
- Camera pose = position + orientation : \(\mathbf{EYE}, \mathbf{TOP}, \mathbf{AT}\)
- Camera space \(\{u,v,n,\mathbf{EYE}\}\)
- Space change
- Origin Translation
- Basis Change
GPU Rendering Pipeline
* 셰이더(shader) = '프로그램(program)'의 동의어
* 렌더링 파이프라인은 개별 작성되어야 할 vertex shader, fragment shader와 함께, 고정된 함수 기능을 수행하는 rasterizeer, output merger가 포함됨
Vertex shader
* Vertex array에 저장된 입력 vertex 모두에 대하여 다양한 operation을 수행하는 프로그램
** Vertex = mesh vertex, 곡면(smooth surface)을 샘플링한 꼭지점(point)
*** Vertex array = 폴리곤 메쉬의 정보를 수치 형태로 컴퓨터 메모리에 저장하기 위한 데이터 포맷
Rasterizer
* Vertices로부터 삼각형을 모두 모아서 각 삼각형을 fragments라는 단위로 변환
* fragment는 각 삼각형이 갖는 화면 상의 픽셀 위치(pixel location of the triangle on the screen)로 정의되며, 색상을 결정하기 위한 데이터셋을 참고함
Fragment shader
* fragment color 계산
Output merger
* 최종적으로 픽셀 색상을 결정하기 위하여 fragment color를 사용, 취합
Vertex shader 핵심 = 일련의 vertex 변환작업 수행 (world transform, view transform, projection transform)
*[object space] -> world transform -> [world space] -> view transform -> [camera space] -> projection transform -> [clip space]
(what is world transform?)
World Transform (Revisited)
* world transform은 vertex array에 저장 기록된 vertex poistion에 대해 수행, 그렇다면 vertex normal은?
* world transform이 \([L|t]\)로 표현될 때, vertex normal은 \(L\)에 의해서만 영향을 받는다
* \(L\) = combined linear transformation
* \(t\) = combined translation
만약 \(L\)이 non-uniform scaling을 포함할 경우 surface normal에 적용할 수 없다
* 평면이 향하는 방향의 각도가 틀어짐 -> NOT orthogonal (자기 자신과의 내적 != 1)
non-uniform scaling이 적용되었을 때, \(L\) 대신 \( (L^{-1})^{T}\)를 사용한다 (역 트랜스포즈)
* \(L\)에 non-uniform scaling이 포함되지 않았다면, \(n\)은 \(L\)에 의해 변환 가능하다.
* 그러나 \(Ln\)과 \(L^{-T}n\)은 강도(magnitude)가 다를 뿐 같은 방향값을 갖는다
* 따라서 우리는 \(L\)의 non-uniform scaling 포함 여부와 상관없이 \(n\)을 \(L^{-T}\)으로 일관적으로 변환할 수 있다.
* 정점 노말(vertex normal)은 \(L^{-T}\)으로 변환한다.
* \(L^{-T}\)으로 변환한 vertex normal은 최종적으로 normalize 처리된다는 것에 유의하자.
View Transform
* Camera pose = position + orientation
\(\mathbf{EYE}\) : 카메라 위치
\(\mathbf{AT}\) : 카메라가 향하고 있는 reference point
\(\mathbf{UP}\) : 카메라 top이 가리키고 있는 방향을 표현하는 view up vector (대부분 UP은 world space의 vertical axis로 세팅)
* Camera space = \(\{u,v,n,\mathbf{EYE}\}\)
* \(\{u,v,n\}\) = object-space basis = orthonormal basis
$$u \cdot u=v \cdot v = n \cdot n = 1$$
$$u \cdot v= v \cdot n = n \cdot u = 0$$
Camera 정보를 기반으로 공간을 구성하는 축을 재정의(변환) = space change (from world to camera)
Initially object space = world space = \(\{ e_1, e_2, e_3\} \)
$$ n = \frac{\mathbf{EYE}-\mathbf{AT}}{||\mathbf{EYE}-\mathbf{AT}||} $$
$$ u = \frac{\mathbf{UP} \times n}{||\mathbf{UP} \times n||} $$
$$ v = n \times u = \frac{\mathbf{EYE}-\mathbf{AT}}{||\mathbf{EYE}-\mathbf{AT}||} \times \frac{\mathbf{UP} \times n}{||\mathbf{UP} \times n||} $$
"World-space objects can be newly defined in terms of the camera space in the manner of the teapot's mouth end -> EASIER TO CALCULATE"
$$\{e_1,e_2,e_3,\mathbf{O}\} \rightarrow \{u,v,n,\mathbf{EYE}\}$$
Let's set \(\mathbf{O}\)(origin, \((0,0,0)\)) in world space to \(\mathbf{EYE}\) in camera space!
* Space change described intuitively: superimposing \(\{u,v,n,\mathbf{EYE}\}\) onto the world space \(\{e_1,e_2,e_3,\mathbf{O}\}\)
* 첫번째로 수행할 작업은 \(\mathbf{EYE}\)를 world space origin으로 translate
\(\mathbf{EYE} \rightarrow \mathbf{O}\) by translation \(T\)
$$T=\begin{pmatrix} 1 & 0 & 0 & -\mathbf{EYE}_{x} \\ 0 & 1 & 0 & -\mathbf{EYE}_{y} \\ 0 & 0 & 1 & -\mathbf{EYE}_{z} \\ 0 & 0 & 0 & 1 \end{pmatrix}$$
* scene object와 camera space를 연결하는 보이지 않는 가상의 직선축을 생각해 보자 (이미지 점선)
Space change (tranlsation)을 통해서 world space와 camera space는 동일한 origin을 갖게 된 상태
* 두번째로 basis change 수행 : \(\{u,v,n\}\)을 \(\{e_1,e_2,e_3\}\)으로 변환하는 회전변환 \(R\)
\(\{u,v,n\} \rightarrow \{e_1,e_2,e_3\}\) by rotation \(R\)
$$R_{u}=\begin{pmatrix} u_x & u_y & u_z & 0 \\ v_x & v_y & v_z & 0 \\ n_x & n_y & n_z & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}\begin{pmatrix} u_x \\ u_y \\ u_z \\ 0\end{pmatrix}=\begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \end{pmatrix}=e_1$$
world space - camera space를 동일 origin으로 맞춰 주었으므로, 변환된 object의 world space position은 camera space position과 동일하다고 생각할 수 있다.
basis change에서 사용된 변환행렬의 형태와 관련 : 이전 학습했던 역 회전변환 참고 (=되돌린다)!
View Transform
공간이전(space change)은 translation과 rotation(basis change)의 조합으로 구성되며, 계속적으로 언급될 매우 중요한 개념. 특히, 3D 그래픽스 뿐 아니라 computer vision, robotics, AR/VR 분야에서도 space change는 매우 중요하다.
3차원을 다루는 모든 공학분야에서 space change는 매우 중요함!!
Space change (origin translation, \(T\) -> basis change, \(R\)) 시각화
'3D Computer Graphics > Learnings' 카테고리의 다른 글
컴퓨터그래픽스_OpenGL ES와 셰이더 (0) | 2022.04.26 |
---|---|
컴퓨터그래픽스_정점 처리(2) (0) | 2022.04.26 |
컴퓨터그래픽스_좌표계와 변환(3) (0) | 2022.04.23 |
컴퓨터그래픽스_좌표계와 변환(2) (0) | 2022.04.22 |
컴퓨터그래픽스_좌표계와 변환(1) (0) | 2022.04.21 |
- Total
- Today
- Yesterday
- 메타버스
- tensorflow.js
- 고려대학교 한정현
- 컴퓨터그래픽스 강의
- PoseNet
- 컴퓨터그래픽스 좌표계와 변환
- 3d affine transform
- vertex shader
- 원유로필터
- 컴퓨터그래픽스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |