Geometry Shader

Date:     Updated:

카테고리:

태그:

홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.


🐥 Geometry Shader

Geometry Shader Subdivision
1 2

Geometry Shader는 Vertex Shader와 Pixel Shader 중간에 존재하는 shader이다. 기존의 vertex로 새로운 vertex를 생성하는 작업을 수행하는데, 대표적으로 subdivision과 같은 역할을 한다. GPU의 성능이 좋아지면서 CPU의 작업을 GPU로 끌어왔다고 생각하면 된다. CPU에서 적정 수준의 vertex들을 보내주면, 세세한 디테일들은 GPU에서 구하는 것이다.


3

[maxvertexcount(100)]
void main(point GeometryShaderInput input[1], uint primID : SV_PrimitiveID, inout PointStream<PixelShaderInput> outputStream)
{
    PixelShaderInput output;

    for (int i=0; i<100; i++>)
    {
        output.pos = input[0].pos + float4(0.0, 0.003, 0.0, 0.0) * float(i);
        output.pos = mul(output.pos, view);
        output.pos = mul(output.pos, proj);
        output.primID = primID;

        outputStream.Append(output);
    }
}
  • 위 코드는 vertex 1개당 100개씩으로 늘리는 Shader
  • maxvertexcount(num) : point 하나를 몇개로 늘릴래?
    • 무한정 늘리지는 못하고 32bit 1024개까지
  • point GeometryShaderInput input[1] : Geometry Shader로 들어오는 input은 point 1개씩이야
  • primID : CPU에서 보내줄 떄 지정한 topology에 따라
    • 포인트 하나 or 선분 하나 or 삼각형 하나 …
  • inout PointStream<PixelShaderInput> outputStream : Shader의 return type을 보면 void이다.
    • inout 한정자를 이용해 outputStream에 직접 append 하는 방식
    • output topology에 따라 PointStream, TriangleStream…


geometry_modes

  • Geometry Shader의 default topology는 TranlgeStrip
  • 만약 TrangleList로 vertex들을 추가하고 싶다면 3개씩 append하고, RestartStrip()으로 끊어주어야 함



맨 위로 이동하기

Graphics 카테고리 내 다른 글 보러가기

댓글 남기기