| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- dx12
- WinAPI
- directx12 그리기 연산2
- 백준
- 11286번
- BFS
- lis응용
- 랜더링 파이프라인
- 백준 1260 c++
- 4134번
- 다음소수
- C++
- Perforce
- 24779
- 바이토닉 수열
- 2075번
- dx12 정리
- 그리기 연산
- 2565번
- 드래곤플라이트 모작
- 2d 박스충돌
- 애니메이션
- 백준 24444 c++
- 루트서명
- 다익스트라
- 백준 c++ 24479번
- Unreal
- DirectX12
- 뱀과사다리게임
- unrealengine
- Today
- Total
game-1 님의 블로그
[DirectX12] 렌더링 파이프 라인 1-2 (정점 셰이더 단계) 본문
정점 셰이더를 왜 사용하는가?
정점 셰이더를 사용하면 GPU에서 정점 변환을 빠르게 수행할 수 있습니다.
CPU가 아닌 GPU에서 정점 변환을 수행할 수 있기 때문에 성능이 향상될 수 있기때문에 사용합니다.
또한, 화면에 그려지는 모든 정점들은 이 정점 쉐이더를 거쳐가기 때문에,
다양한 효과를 정점에 적용할 수 있다는 이점이 있습니다.
DirectX12 study
정점 셰이더
입력 조립기에서 기본 도형들의 정보를 만든 후에
-> 정점들의 정보가 정점 셰이더 단계로 넘어갑니다.
이때 받은 정점들의 정보들을 바탕으로
지역 좌표를 실제 정점을 렌더링하는 월드 위에 좌표로 변환해주는 작업을 해줍니다.
1. 국소 공간과 세계 공간
국소공간은 모델이 처음 정의된 좌표 공간으로 개별 객체 기준의 좌표계를 의미합니다.
이를 씬 전체에서 모델이 배치된 공간으로 변환시키기 위해 월드 변환 행렬이라는 과정을 거칩니다.
[변환 과정]
국소 공간 -> 월드 변환 행렬(월드 행렬) -> 세계 공간

이렇게 하는 이유
1) 국소 공간에서 작업을하면 좌표계 원점을 물체의 중심 가까이에 둘 수 있고 좌표축들을 물체에 맞게
정렬할 수 있어서 편하다는 이점이 있습니다.
2) 한 물체가 다른 여러 장면에 재사용될 때, 물체의 좌표들을 특정 장면을 기준으로 고정시키는 것보다, 하나의 국소 좌표계를 기준으로 저장하고, 각 장면마다 국소 좌표계를 해당 세계 좌표계로 변환하는 좌표변경 행렬을 정의해서 적용하는 것이 낫기 때문입니다.
3) 한 물체를 하나의 장면 안에 위치나 방향, 비례를 달리해서 여러 번 그리기도 하는데
인스턴스마다 물체의 정점 및 색인 자료를 중복해서 지정한다면 낭비가 심하기때문입니다.

세계 변환(world transform)
이렇게 국소 좌표계에 상대적인 좌표를 전역 장면 좌표계에 상대적인 좌표로 바꾸는 것을 "월드 변환"이라고 부릅니다.
2. 시야 공간
카메라를 원점으로 하는 공간을 의미합니다.

변환 과정:
시야 공간 → 투영 변환 행렬(투영 행렬, Projection Matrix) → 투영과 동차 절단 공간(Clip Space)
3차원 장면의 2차원 이미지를 만들어 내려면 결국 장면에 가상의 카메라를 배치해야하는데
그 카메라는 세계에서 관찰자에게 보이는 영역을 결정합니다.
일반적으로 세계 좌표계와 시야 좌표계는 위치와 방향만 다르므로, W = RT 라고 둘 수 습니다.
3. 투영과 동차 절단 공간
3차원 장면을 2차원 이미지로 표현하려면 절두체 안에 있는 3차원 기하구조를 2차원 투영 창으로 투영해야 합니다.
3차원 기하구조의 한 정점에서 시점으로의 직선을 정점의 투영선이라고 부릅니다.
원근 투영 변환
원근 투영 변환은 3D 공간에서 가까운 객체는 크게, 먼 객체는 작게 보이도록 변환하는 과정입니다.

'DirectX' 카테고리의 다른 글
| [DirectX12] 렌더링 파이프 라인 1-3 (테셀레이션 단계) (0) | 2025.03.15 |
|---|---|
| DX12 문제 내기 (0) | 2025.03.14 |
| [DirectX12] 렌더링 파이프라인 1-1 (0) | 2025.03.11 |
| [DirectX12] CPU와 GPU의 상호작용 , Direct3D초기화 (1-2) (0) | 2025.03.03 |
| [DirectX12] Direct3D초기화 (1-1) (0) | 2025.02.28 |