DirectX12 렌더링 파이프라인: 버텍스 셰이더(VS)

렌더링 파이프라인은 3D 장면의 기하학적 설명과 가상 이미지의 위치 및 방향을 사용하여 가상 카메라에서 3D 장면의 현재 보기를 기반으로 2D 이미지를 생성하는 데 필요한 일련의 전체 단계를 나타내는 용어입니다. 카메라가 주어진다. 오전.

렌더링 파이프라인은

1. 입력 어셈블러(LA) 단계

2. 버텍스 셰이더(VS)

3. 커버 셰이더(HS)

4. 테셀레이터

5. 영역 셰이더(DS)

6. 지오메트리 셰이더(GS)

7. 하프톤

8. 픽셀 셰이더(PS)

9. 출력 병합기(OS)로 구성됩니다.

이 기사에서는 버텍스 셰이더에 대해 설명합니다.

꼭짓점 셰이더는 입력 어셈블러에서 꼭짓점 버퍼와 인덱스 버퍼를 받고 꼭짓점에서 작업을 수행합니다.

버텍스 셰이더는 수신된 버텍스 버퍼를 기반으로 장면의 형상에 대한 매트릭스 변환을 수행합니다.

즉, 변형, 조명 및 변위 매핑과 같은 수많은 특수 효과를 버텍스 셰이더에 내장할 수 있습니다.

정점 셰이더는 GPU가 각 정점에 대한 계산을 수행하기 때문에 매우 빠르다고 합니다. (이유를 잘 모르겠습니다)

버텍스 쉐이더에서 무슨 일이 일어나고 있는지 알기 위해

1. 로컬 공간과 외부 공간

2. 시각적 공간

3. 프로젝션과 균일한 편집 공간

에 대한 이해가 필요하다


“국지공간과 외부공간”

간단히 말해서 공간은 전역적이고 절대적인 좌표계로 볼 수 있습니다. 실제로 위도와 경도는 공간으로 볼 수 있습니다.

로컬 공간은 개체를 기준으로 측정된 좌표계입니다.

로컬 공간은 객체를 기준으로 다른 객체를 배열할 때 유용합니다.

이쯤 되면 로컬 공간과 외부 공간을 연관시키고 서로 변환해야 할 때가 있다.

로컬 좌표계를 월드 좌표로 변환하는 것을 월드 변환이라고 하고 변환을 수행하는 매트릭스가 필요하며 이 매트릭스를 월드 매트릭스라고 합니다.

이러한 월드 매트릭스를 생성하려면 로컬 공간 원점과 축의 공간에 대한 좌표를 알아야 합니다.

이 프로세스는 종종 W가 행렬일 때 W를 일련의 변환으로 정의합니다. 예를 들어 W = SRT.

즉, Scale -> Rotate -> Transform 순서의 곱셈이 월드 매트릭스로 사용됩니다.


“비주얼 스페이스”

게임을 플레이하려면 3D 공간에 가상 카메라를 배치해야 합니다. 그리고 카메라는 2차원 이미지를 생성합니다. 화면에 2차원 이미지가 표시되는 영역입니다. 로컬 좌표계가 이 가상 카메라와 연결된 경우 이 좌표계는 눈 공간 또는 카메라 공간이라고도 하는 보기 공간을 정의합니다.

때로는 공간이 아닌 뷰 공간에서 카메라가 보는 정점을 설명하는 것이 편리합니다. 이때 사용되는 행렬을 View Transform이라고 하고 이때 사용되는 행렬을 View Matrix라고 합니다.


“돌출 및 균일 절단 공간”

보는 공간이 공간에서 카메라의 위치와 방향을 기술한다면, 카메라가 보는 공간에 대한 좌표계도 필요하다.

카메라가 보는 공간은 잘린 원뿔로 정의됩니다.

3D 장면을 2D 이미지로 표현하려면 다이의 3D 형상을 2D 창에 투영해야 합니다. 그것은 당신이 그것을해야한다는 것을 의미합니다.

이 시점에서 그루터기에서 감지된 3D 기하학적 구조는 거리가 증가함에 따라 더 작은 투영을 가져야 합니다. 구현에 필요한 개념은 투시 투영 방식입니다.


두 개의 원 A와 B는 같은 물체이지만 3차원 공간에서 서로 다른 거리에 놓여 있습니다. 즉, 프로젝션 창에서 A가 B보다 크게 나타나야 합니다.

위 그림에서 3차원 기하 구조의 유한점에서 원뿔대 안의 시점까지의 직선을 꼭지점 투영선이라고 합니다. 투시 투영 변환은 3차원 정점 v를 투영선이 2차원 투영 평면과 교차하는 지점 v’로 변환합니다.

월드 변환, 비전 변환, 원뿔대 투영 변환 계산은 현재 다루지 않습니다(그만큼 외우지 않아서…)

일단 컨셉을 정리하고 나중에 기회가 되면 수정해볼 생각입니다.