Computer Graphics/Graphics Pipeline
Geometry Processing - Vertex Shading
Banjosh
2024. 11. 29. 13:44
Geometry Processing의 첫 단계: Vertex Shading
이번에는 Geometry Processing의 첫 번째 단계인 Vertex Shading에 대해 알아보자. Vertex Shading은 Application 단계에서 준비된 Local 좌표계의 Object 정점 정보를 Clip 좌표계로 변환하는 역할을 한다. 보통 vertex shader를 통해 이 단계를 구현한다.
변환 행렬
Vertex Shading 과정에서 보통 Model-View-Projection (MVP) Matrix 변환을 적용하며, 각 행렬의 역할은 다음과 같다:
- Model Matrix
- Local 좌표계 정보를 World 좌표계로 변환해준다.
- 물체의 이동(Translate), 회전(Rotate), 크기(Scale) 변환을 반영.
- View Matrix
- World 좌표계를 Camera 좌표계(View Space)로 변환해준다.
- 카메라의 위치를 원점으로 옮기고, 카메라의 Front, Up, Right 벡터를 기준으로 좌표축을 설정.
- Projection Matrix
- Camera 좌표계를 Clip 좌표계로 변환해준다.
- 카메라에서 바라보는 3D 공간을 원근 투영(Perspective Projection) 또는 직교 투영(Orthographic Projection)을 적용해 2D로 표현.
벡터의 변환
벡터(특히 Normal Vector)의 변환에는 단순히 MVP 변환을 사용하는 것이 아니라, Model-View-Projection 행렬의 역행렬의 전치(Inverse Transpose)를 적용해야 한다.
이 행렬은 M이 MVP 행렬일 때 다음과 같이 정의된다:
정점 정보
Vertex Shading 단계에서 변환되는 정점 정보들은 다음과 같다:
- Position
- 정점의 위치 정보를 나타낸다.
- Local 좌표계로 주어지며, Model-View-Projection 변환 M을 통해 Clip 좌표계로 변환된다.
- Normal
- 정점에서의 법선 벡터를 나타낸다.
- Normal은 벡터이기 때문에 M의 역행렬의 전치행렬 N을 적용해야 한다.
- Texcoord
- 텍스처 맵핑에서 사용하는 텍스처 좌표다.
- 변환이 필요하지 않으며, 그대로 다음 단계로 전달된다.
- Tangent
- 주로 Normal Map을 사용할 때 필요하다.
- 프리미티브의 Local 좌표계에서 TBN(Tangent, Binormal, Normal) 좌표계를 구성하며, Normal과 마찬가지로 N 변환을 적용해야 한다.
- 이를 통해 프리미티브의 표면 방향을 계산할 수 있다.
- Normal Map을 사용하는 경우 Normal map texture 값에 TBN 행렬을 곱해 world 좌표계의 벡터로 변환해 사용할 수 있다.
애니메이션 및 변형
Vertex Shading에서는 정점 속성에 애니메이션이나 물리적 효과를 적용할 수도 있다. 대표적인 예시는 다음과 같다:
- 스키닝 (Skinning)
- 스켈레탈 애니메이션에서 관절 주변 피부의 자연스러운 움직임을 구현하기 위해 사용된다.
- 정점마다 영향을 주는 뼈(Bone)와 그 가중치를 이용해 변환을 적용하여 자연스럽게 동작한다.
- 물결 효과
- 물체에 사인파(Sine Wave)를 적용하여 물결 효과를 구현할 수 있다.
- 정점의 위치를 시간에 따라 주기적으로 변화시켜 애니메이션 효과를 준다.
- 바람 효과
- 바람의 세기와 방향을 이용해 정점의 위치를 변화시켜 바람에 흔들리는 효과를 낼 수 있다.
이 외에도 다양한 물리적 효과를 Vertex Shader 단계에서 적용할 수 있다.
Vertex Shading의 역할
위 과정들을 통해 변환된 정점 정보들은 다음 단계로 전달된다. Vertex Shading은 정점의 위치, 법선, 텍스처 좌표, 그리고 기타 필요한 정보를 Clip 좌표계로 변환하여 Geometry Processing의 후속 작업이 가능하도록 준비하는 핵심 단계이다.