Geometry Shader
카테고리: Graphics
태그: DirectX
홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.
🐥 Geometry Shader
Geometry Shader | Subdivision |
---|---|
Geometry Shader는 Vertex Shader와 Pixel Shader 중간에 존재하는 shader이다. 기존의 vertex로 새로운 vertex를 생성하는 작업을 수행하는데, 대표적으로 subdivision과 같은 역할을 한다. GPU의 성능이 좋아지면서 CPU의 작업을 GPU로 끌어왔다고 생각하면 된다. CPU에서 적정 수준의 vertex들을 보내주면, 세세한 디테일들은 GPU에서 구하는 것이다.
[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 Shader의 default topology는 TranlgeStrip
- 만약 TrangleList로 vertex들을 추가하고 싶다면 3개씩 append하고, RestartStrip()으로 끊어주어야 함
댓글 남기기