반응형
지오메트리 셰이더는 버텍스 셰이더와 픽셀 셰이더와 같은 셰이더의 한 종류이다.
버텍스 셰이더가 하나의 정점에 대한 연산을 수행하는 셰이더였다면, 지오메트리 셰이더는 하나의 Primitive에 대한 연산을 수행하는 셰이더이다. 즉 Primitive가 삼각형이라면 정점 3개를 받을 것이고, 라인이라면 2개 단위로 수행하게 된다.
세 개의 셰이더가 실행되는 순서는 다음과 같다.
Vertex Shader -> Geometry Shader -> (Rasterizer) -> Pixel Shader
래스터라이저 전에 실행되므로 지오메트리 셰이더에선 아직 보간되지 않은 정보를 가지고 원하는 작업을 할 수 있다.
예를 들면 큐브를 렌더링 한다고 할 때 6개의 면을 가지게 되는데, 프리미티브 구성 방법을 Triangle List로 하게 되면 정점을 8개만 가지고 큐브를 그릴 수 있다. 하지만 이 경우 큐브의 노멀을 설정할 때, 각 면의 노멀이 올바른 방향을 가지도록 할 수 없게 된다.
이게 가능하려면 각 면에 대한 정점을 별개로 작성해 주어야 한다. 따라서 4x6 = 24개의 정점이 있어야 각 면의 노멀을 원하는 방향으로 만들 수 있다. 하지만 지오메트리 셰이더를 이용하면 정점은 그대로 8개만 사용하고 각 면의 노멀을 올바르게 만들 수 있다.
하나의 삼각형에 대한 정점 v1,v2,v3가 입력으로 들어오면, 시작점이 동일한 벡터 2개를 만들 수 있다. 두 벡터를 외적하면 Up 벡터, 즉 현재 평면에 대한 노멀을 얻을 수 있게 된다.
'게임 공부 > DirectX' 카테고리의 다른 글
쿼터니언 사용 가이드 (0) | 2021.08.18 |
---|---|
셰이더로 행렬을 전달하기 전에 전치를 취해야 하는 이유는? (1) | 2021.05.07 |
XMMatrixLookAtLH과 XMMatrixLookToLH 차이 (0) | 2021.05.04 |
[DX11] UpdateSubresource 와 map은 각각 언제? (0) | 2021.04.18 |
Blend state (0) | 2021.04.03 |
댓글