* 3차원 데이터가 화면상에 출력되기 위해서 거치는 일련의 단계
= 렌더링 파이프라인
* 렌더링 파이프라인의 구분
1. 고정 렌더링 파이프라인
= 그래픽스 API에서 제공해주는 옵션으로 렌더링, 제어하는데 많은 제한이 있어 현재는 사용되지 않음
2. 프로그래머블 렌더링 파이프라인
= 렌더링 파이프라인의 특정단계를 직접 제어할 수 있음, 해당 연산은 쉐이더에 의해 처리
* 렌더링 파이프라인 연산 단계
1. 정점연산
= 3차원 > 2차원 정점으로 변환, 정점 쉐이더에 의해서 처리, 즉 3차원 데이터가 2차원 데이터로 변환
= 정점연산은 투영 변환까지 처리, 나머지 변환은 자동으로 처리
1-1. 3차원 데이터 > 2차원 데이터 변환 과정 (6가지)
= 로컬변환(자기중점을 가지고 있음), 월드변환(같은 중점을 가지게 됨), 뷰 변환(위치에 따라 다르게 보임), 투영변환( 3차원 -> 2차원 데이터로 변환), // 정규변환, 화면변환 (렌더링파이프라인에서 gpu가 작업)
2. 레스터라이즈 연산
= 2차원 데이터를 표현하기 위해 픽셀을 계산, GPU가 처리
3. 픽셀 연산
= 레스터라이즈 연산을 거친 픽셀의 색상을 계산하는 연산, 픽셀 쉐이더에 의해 처리
= 픽셀 연산을 거치고 나면 화면상에 출력되는 픽셀의 색상이 결정
= 물체의 재질을 표현함으로써 그래픽의 품질이 결정
* 정점 버퍼
= 렌더링 과정에서 cpu에 전달, 정점정보를 담고 있는 버퍼
= 위치정보및 다양한 데이터 설정가능, 위치데이터는 필수
* 인덱스 버퍼
= 정점의 인덱스 정보를 설정 할 수 있는 버퍼
= gpu에 전달되는 정점 정보는 순서를 기반으로 폴리곤을 구성
* 행렬 연산
= 변환을 수행하기 위해 행렬 연산을 수행, 이동 및 모든 움직임을 행렬을 통해 이루어짐
= 위치 3차원 + 방향 1차원 > 4 * 4 행렬 사용
* 기본 변환 종류
1. 이동 변환
= 위치 변경
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ Px Py Pz 1 ]
2. 척도 변환
= 비율 전환
[ Sx 0 0 0 ]
[ 0 Sy 0 0 ]
[ 0 0 Sz 0 ]
[ 0 0 0 1 ]
3. 회전 변환
= 바라보는 방향이 변경
= 단순한 회전은 오일러방식 사용, 복잡하면 사원수 회전 방식을 사용하는 것이 유리
3-1. 오일러 회전 방식
= x,y,z 각축으로 분리 후 회전 행렬 계산
= Y(Yaw), P(Pitch), R(Roll)회전 순서대로 회전. 각 축에 대한 행렬을 연산하는 순서에 따라 결과가 달라짐
3-2. 사원수 회전 방식
= 4개의 요소로 회전을 표현 > 최종적으로 회전 행렬로 변환 해야함
* 계층구조 행렬 계산 방법
= 자식변환 행렬 * 부모 변환 행렬
* 메쉬
= 폴리곤의 집합 (정점버퍼 + 인덱스 버퍼)
* 카메라
= 3차원 공간에서의 시야, 카메라에 보여지지 않은 영역은 렌더링 되지 않음
= 직교행렬의 역행렬 == 전치행렬 (행 > 열)
[ Rx Ux Fx 0 ]
[ Ry Uy Fy 0 ]
[ Rz Uz Fz 0 ]
[ -Px -Py -Pz 1 ]
* 투영변환( 3차원 -> 2차원 데이터로 변환)
1. 직교투영
= 원근감이 없음, 거리에 상관없이 크기가 같음
2. 원근투영
= 원근감이 있음, 거리에따라 크기가 달라짐
* 절두체 컬링
= 카메라에 보여지는 부분을 제외
* 법선
= 면이 바라보고 있는 정보
= 여러가지 연산을 할 수 있음, 백페이스 추리기 할 수 있음
* GPU 보간기
= 정점에 있는 색상 정보를 분석해 면의 색상정보를 제공
* 텍스처
= GPU 상에서 사용되는 데이터를 의미
* UV 좌표 * wh
= 텍스처의 좌표정보
----
dx12 윈도우
vulkan 안드로이드
metal 애플