GPU와 렌더링파이프라인 개요
<GPU의 필요성>
일반영화와 다르게 화면을 직접 만들어야한다.
대부분 삼각형 단위로 만들어져있다. 엔진에서 와이어프레임으로 보면 볼 수 있다.
배치되어있는 오브젝트들의 위치와 색상을 알아야한다. 이를 연산해서 보여주는것
배치되어 있는 오브젝트들을 어떻게 카메라에 보여줄지 연산하는 방법을 알았다고 해도 실시간으로 변하는 화면을
나타내기는 쉽지 않다. 삼각형들을 계속해서 좌표계산해..?노우..불가능.. 오브젝트의 이동, 카메라의 시점변화, 사라지는 오브젝트, 길찾기를 계속해서 일일이 연산으로 나타내는것은 힘들다.
결국 영화 감독에 해당하는 규칙을 정하고 연산을 하는 핵심적인 역할은 CPU이고 그래픽과 관련된 노가다를 작업을 담당하고 가상환경에서 카메라로 넘어가도록 변환 연산을 외주로 하는게 GPU라고 할수 있다.
옛날게임처럼 정점이 별로없어서 CPU에 부담이 많이 없는 게임은 CPU만으로 가능하나 요즘 게임은 쫌 힘들지..
<GPU와 렌더링 파이프라인>
GPU는 적절한 외주의 일을 하고 CPU가 모든 게임세상의 연산을 하기는 힘드니깐..
CPU와 GPU의 차이
CPU는 고급인재. 어려운 계산을 잘하고 기억도 잘하는 만능형 인재이나 그러나 실제 계산을 하는 ALU는 많이 없다.
반면 GPU는 ALU가 많아서 단순계산은 정말 빠르다. 값싼 인력들이 많아서 복잡한 연산을 때거지로하는 느낌.
CPU는 범용의 모든 연산을 하는 반면 GPU는 "독립적인 일들을 병렬적으로 처리할 때" 즉, 암호학(어떤 암호를 풀기위해 여러가지 수를 대입해 풀어볼 수 있다.그런데 대입하는 수만 다를 뿐이지 각 연산은 독립적이다.), 인공지능은 여러가지 경우를 탐색할 때 그 탐색은 독립적인 일을 하고 있다. 반면 연산이 이어져야하면 CPU가 유용하다. GPU는 외주에 적합한것.
하나의 오브젝트가 화면에 어떻게 보일지 연산하는것은 다른 오브젝트 연산과 관련없는 각각의 독립적인 연산이다. 각 픽셀마다 돌아가면서 하는게 아니라 GPU가 한번에 쫙 계산하면 되는것이다. 그 대신 계산하는 정해진 규칙이 있어야하니깐 그것이 바로 렌더링 파이프라인이다.
모든 렌더링 파이프라인을 다 거치는게 아니라 버텍스쉐이더빼고는 옵션이다.
1.Input Assembler Stage
정점 정보를 전달하는 단계. 어떤 정점들이 어떻게 연결되어 있는지. 예)큐브가 삼각형이 어떤식으로 이루어져 있는지 전달하는 단계
2.Vertex Shader Stage(VS)
넘겨받은 정점을 대상으로 연산을 하는 부분이 들어간다. 정점에 좌표이동, 변환, 스키닝, 모핑, 조명 등 기법이 들어간다.
정점변환
3.Tessellation Stage
DX11에서 추가된 개념
3-1.Hull Shader Stage
3-2.Tessellator Stage
3-3.Domain Shader Stage
4.Geometry Shader Stage
DX10에서 추가된 개념
*3과 4둘 다 정점이 추가될 때 사용된다. 정점 개수가 늘어날 때(예) MMO에서 오픈월드의 지형이 멀리잇는건 대충 만들고 가까운건 자세히 만드는데 더 면밀히 만들기 위해 Tessllation이 필요하다. Tessellation은 좀더 거시적인 관점(지형 등)에서 유용하고 Geometry는 좀더 작은 단위(삼각형 하나 단위 등)에 적합하다.
5.Rasterizer Stage✍중요🌟
이전까지는 정점에 대한 계산으로 화면의 어떤 정점에 어떤 색으로 나타내야지 알수있게된다.
그러나 세부적으로 모든 점으로 한게 아니라 대략적인 형태(예를들면 삼각형이라면 그 꼭짓점에 대한 정보와 그 색만 알게된다.)를 알고 잇는것으로 이를 적절하게 섞는 단계이다. 즉, 정점을 정보로 픽셀 단위로 변환하여 좀 부드럽게 만들고 그 내부의 정보를 보관한다.
6.Pixel Shader
최종적으로 색상을 입히는 단계
7.Output-Merger Stage
받은 결과를 조합하는 단계
CPU가 연산을 요청하면 GPU가 이를 해주는 것. GPU 제조사마다 사양이 다르므로 요청 방법이 다를 수 있다. 그래서 DirecX는 MS에서 만든 표준 외주 라이브러리라고 할 수 있다. 이를 따라서 외주를 맡기는 것이다. GPU제조사들은 MS와 협력해 DirectX의 스펙에 맡게 제조한다.
즉,,메모리에서만 들고 있는 정보를 화면에 출력하는 것을 우리는 배워볼 것이다.( ̄y▽, ̄)╭ 기대되지..?
https://nearly0.dev/DirectX/DirectX-Rendering-Pipeline/
DirectX 11의 렌더링 파이프라인
⚠️ 아래의 내용은 공부하면서 계속 추가될 예정이다. 1. Input-Assembler Stage 정점 정보를 전달하는 단계. 정점들이 어떻게 연결되어 있는지 전달한다. 2. Vertex Shader Stage 1 단계에서 넘겨준 정점들
nearly0.dev
'[DirectX12]' 카테고리의 다른 글
게임 수학 6. World 변환 행렬, View 변환 행렬, Projection 변환 행렬 (0) | 2024.04.21 |
---|---|
게임수학 5. 좌표계 변환 행렬 (0) | 2022.08.03 |
게임수학 4. Scale, Rotation, Translation 변환행렬 (0) | 2022.08.03 |
프로젝트 설정 (0) | 2021.12.11 |