vertex shader → rasterizer → fragment shader → output merger의 과정 거침
GPU 렌더링 파이프라인
→ 한 단계의 결과물이 다음 단계 입력으로 사용되는 일련 데이터 처리 단계
vertex normals = n
[L|t]n = Ln+t로 변환
여기서 n은 벡터. t 무시 가능
삼각형 normal 이용해 월드 변환 적용
(a) non-uniform scaling
빨간 선분은 xy 평면에 수직인 삼각형 단면, n은 삼각형의 노멀 나타냄.
초록 선 - 노멀에 수직이 아닌 예기치 않은 결과가 나옴.
L = 아핀 변환 행렬에서 좌측 상단 누적된 선형 변환 행렬 의미함.
(b) L의 역전치 행렬 적용.
삼각형과 수직 이룸
반드시 정규화 과정을 거쳐야 단위 벡터가 된다.
View Transform
- EYE: 카메라의 위치
- AT: 카메라가 바라보는 기준점
- UP: 카메라 상단이 가리키는 방향
카메라 공간: {u, v, n, EYE}
월드 공간: {e1, e2, e3, 0} (0은 원점)
EYE의 월드 공간 좌표: (18, 8, 0)
AT의 월드 공간 좌표: (10, 2, 0)
AT, EYE 사이 거리: 10 이고 AT은 카메라 공간 -n축 위에 있으므로
카메라 공간 AT 좌표는 (0, 0, -10)
뷰 변환(카메라 변환): 월드 공간에서 카메라 공간으로의 이전
변위 벡터 0-EYE로 정의 후 이동이 끝나면 월드 공간, 카메라 공간 원점 공유함.
회전 행렬 R을 사용함.
오른손 좌표계 vs 왼손 좌표계
- 오른손 좌표계 - 정방향
- 왼손 좌표계 - 반대 방향 (z좌표 방향 반대로 해서 해결)
View Frustum
- EYE, AT 및 UP은 카메라의 외부 매개변수를 정의
- 무한 피라미드는 fovy, aspect로 정의됨
- 정점은 원점에 있고 축은 -z축.
컬링(가시성 선별 기법) : 실시간 렌더링 방식의 3D 게임 내에서 렌더링 할 필요가 없는 요소들을 선별해 제외하여 렌더링 시 부하 줄여 주는 방법.
시각 절두체 선별(Frustrum Culling): 카메라 시야 범위 외 개체들 선별해 이들을 렌더링에서 제외시키는 기법.
한 폴리곤이 뷰 프러스텀과 교차 시, 폴리곤은 잘라져 프러스텀 안쪽에 놓인 부분만 GPU 파이프라인 다음 단계로 넘어감. 폴리곤을 이렇게 자르는 작업이 클리핑이며, 이는 래스터라이저에 의해 수행된다.
폴리곤을 쉽게 자르기 위해 뷰 프러스텀을 222 크기 정육면체로 변형시키는 것을 투영 변환이라고 함. 카메라 공간 물체는 이렇게 투영 변환을 거친 후 정육면체 뷰 볼륨에 대해 클리핑 된다. 뷰 프러스텀은 원점에 위치한 카메라로 수영하는 투영선(Project Lines)의 집합이다.
이미지 출처
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]
'컴퓨터 그래픽스' 카테고리의 다른 글
2024.7.8(월) 7장 - 래스터라이저 (1) | 2024.07.14 |
---|---|
2024.7.6(토) 6장 OpenGL ES와 쉐이더 (0) | 2024.07.12 |
6.30 4장 - 좌표계와 변환 (3) | 2024.06.30 |
6.29 3장 - 모델링 (0) | 2024.06.30 |
6.27 2장 - 수학 기초 (1) | 2024.06.30 |