본문 바로가기

게임 공부/HLSL3

[HLSL] #include를 통한 다른 셰이더 파일의 상수 버퍼 공유 상수 버퍼(Constant Buffer)를 두 셰이더(VS, PS)에 동시에 설정하여도 모두 정상적으로 사용 가능한지 궁금해서 알아보고 있었다. 위의 답은 가능하다인데, 추가로 #include 기능을 통해 다른 셰이더에 선언된 상수 버퍼를 참조할 수 있다는 것도 알게 되었다. 즉 공유가 가능하다. 이를 위해선 다음과 같은 설정이 필요하다. ## 상수 버퍼 cb를 버텍스 셰이더 vs와 픽셀 셰이더 ps에서 공유하고 싶은 경우 먼저 vs에 평소처럼 cb를 선언한다. 그리고 동일한 레지스터 번호로 ps에도 선언한다. 이때 ps에는 멤버 변수를 선언하지 않는다. 즉 다음과 같이 한다. // vertex shader cbuffer cbMaxtrix : register(b0) { float4x4 World; flo.. 2021. 8. 9.
Geometry Shader Signature Geometry Shader란? GS(Geometry Shader)는 VS, PS와 같은 셰이더의 한 종류이다. 실행 순서는 VS->GS->(Rasterizer)->PS 순이다. VS가 하나의 정점에 대해 어떤 동작을 수행하는 프로그램이였다면, GS는 하나의 프리미티브에 대해 어떤 동작을 수행하는 프로그램이다. 즉 하나의 점(Point)도 입력이 될 수 있고 라인(Line)도 입력이 될 수 있고 삼각형(Triangle)도 입력이 될 수 있다. GS는 입력으로 들어온 프리미티브를 변경(modify) 및 제거(remove) 할 수 있고, 새로운 프리미티브를 생성(create)할 수도 있다. VS, PS와 달리 작성을 하지 않아도 실행하는 데는 문제가 없다. Shader Signature GS를 작성하는 방법.. 2021. 7. 14.
기초적인 라이팅을 위한 정점 및 픽셀 셰이더를 작성해보자 Shader 위 그림은 그래픽스 파이프라인을 간단하게 나타낸 것이다. 그중 1, 3단계인 정점 처리와 프래그먼트 처리 단계가 우리가 직접 작성할 단계이다. 정점 처리를 수행하는 프로그램을 정점 셰이더(vertex shader)라고 하며 프래그먼트 처리를 수행하는 프로그램을 픽셀(프래그먼트) 셰이더(pixel shader)라고 한다. 우리는 3D 오브젝트를 화면에 렌더링하기 위해 정점 셰이더(vertex shader)와 픽셀 셰이더(pixel shader)를 작성해야 한다. 셰이더는 HLSL(High-Level Shading Language)라는 언어로 작성을 하며 C와 거의 비슷한 문법을 가지고 있다. 정점 셰이더 정점 셰이더는 파이프라인의 정점 처리 단계에서 사용자가 작성한 루틴대로 정점을 처리한다. .. 2021. 3. 12.