컴퓨터 그래픽스

2024.7.4(목) 5장 - 정점 처리

새우급여기 2024. 7. 7. 18:11

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