본문 바로가기
게임 개발/C++

DirectX에서 사용되는 용어

by 럭키봇 2024. 10. 13.

* 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 애플