그래픽스 입문 - 정점 처리

Jiyeon Jeong·2022년 1월 4일
0
post-thumbnail

GPU 렌더링 파이프라인


GPU 렌더링은 위와같이 파이프라인 구조로 구현된다. 본 그림에서 쉐이더는 프로그램과 동의어이며, 우리는 GPU 렌더링을 위해 vertex shader와 fragment shader라는 두 가지 프로그램을 작성해야 한다. 반면 래스터라이저와 출력 병합기는 하드외어로 고정된 단계로 연산을 수행한다.

정점 쉐이더가 수행하는 변환의 흐름은 아래의 그림에서 확인할 수 있다.

본 단원에서는 위의 흐름을 기반으로 설명을 진행할 예정이다.


1. 노멀의 월드 변환


(a)에서 L을 노멀에게 적용했을때 문제는 L이 비균등 축소확대였기 때문이다. 만약 L이 비균등 축소확대를 포함하지 않으면 노멀에 L을 적용해도 된다. 하지만 알고리즘을 단순화하기 위해 우리는 L의 역전치행렬을 사용한다. 이해를 위해 위의 그림에서는 삼각형 노멀을 사용했지만 폴리곤 메시 렌더링에 실제로 사용되는 것은 정점 노멀이다.

2. 뷰 변환

월드 변환이 완료돼 모든 물체가 월드 공간에 모아졌다고 가정한다. 월드 공간의 특정 영역을 스크린에 렌더링하기 위해서는 가상 카메라의 위치와 방향을 설정해야 한다. 가상 카메라의 공간을 새로 만들어 월드 공간의 모든 정점들이 카메라 공간으로 재정의되면 렌더링 알고리즘을 설게 구현 하는 것이 간단해진다. 이처럼 하나의 공간에서 정의된 물체를 다른 공간으로 옮기는 것을 공간이전이라고 부른다. 본 개념은 추후 계속 나올 예정이니 반드시 이해하고 넘어가야 한다.

3. 오른손 좌표계와 왼손 좌표계

3차원 카테시안 좌표계는 오른손 좌표계와 왼손 좌표계로 나뉜다.

오른손 좌표계는 OpenGL, OpenGL ES에서 사용하고 왼손 좌표계는 Direct3D에서 사용된다.

4. 투영 변환

카메라의 렌즈를 선택하고 줌인/줌아웃 조절하는 것에 해당하는 내부 파라미터를 정의할 차례이다.


투영 변환은 위의 그림처럼 피라미드 모양의 뷰 프러스텀을 좌표계의 주축에 나란한 2X2X2 크기의 정육면체 뷰 볼륨으로 변경하는 것이다.

profile
기록용입니다.

0개의 댓글