본문 바로가기
게임 공부/DirectX

Geometry Shader

by woohyeon 2021. 5. 27.
반응형

지오메트리 셰이더는 버텍스 셰이더와 픽셀 셰이더와 같은 셰이더의 한 종류이다.

버텍스 셰이더가 하나의 정점에 대한 연산을 수행하는 셰이더였다면, 지오메트리 셰이더는 하나의 Primitive에 대한 연산을 수행하는 셰이더이다. 즉 Primitive가 삼각형이라면 정점 3개를 받을 것이고, 라인이라면 2개 단위로 수행하게 된다.

세 개의 셰이더가 실행되는 순서는 다음과 같다.

Vertex Shader -> Geometry Shader -> (Rasterizer) -> Pixel Shader

래스터라이저 전에 실행되므로 지오메트리 셰이더에선 아직 보간되지 않은 정보를 가지고 원하는 작업을 할 수 있다.

예를 들면 큐브를 렌더링 한다고 할 때 6개의 면을 가지게 되는데, 프리미티브 구성 방법을 Triangle List로 하게 되면 정점을 8개만 가지고 큐브를 그릴 수 있다. 하지만 이 경우 큐브의 노멀을 설정할 때, 각 면의 노멀이 올바른 방향을 가지도록 할 수 없게 된다.

이게 가능하려면 각 면에 대한 정점을 별개로 작성해 주어야 한다. 따라서 4x6 = 24개의 정점이 있어야 각 면의 노멀을 원하는 방향으로 만들 수 있다. 하지만 지오메트리 셰이더를 이용하면 정점은 그대로 8개만 사용하고 각 면의 노멀을 올바르게 만들 수 있다.

하나의 삼각형에 대한 정점 v1,v2,v3가 입력으로 들어오면, 시작점이 동일한 벡터 2개를 만들 수 있다. 두 벡터를 외적하면 Up 벡터, 즉 현재 평면에 대한 노멀을 얻을 수 있게 된다. 

 

https://en.wikipedia.org/wiki/Cross_product




댓글