Game Dev/Unity Shader

03. 코드 없이 쉐이더를 다룰 수 있는 Shader Graph - 다니엘 릿 쉐이더 프로젝트

Septentrions 2025. 10. 9. 00:07
Node 기반의 Shader Graph 기능은 본래 언리얼 엔진에서 시작된 것으로 안다.
Visual Scripting으로 불리며, 프로그래밍을 모르는 사람들을 위해 최대한 시각적으로 표현하는 기능들인데..
많은 사람들에게 개발의 진입장벽을 낮추는데 큰 도움이 되었다.
하지만, 만능은 아니므로 언젠가 코드를 들여다봐야 할 때가 올 것이다.

 

 

 

Shader Graph

 

 

Shader Graph는 Node 연결 방식을 이용하여, 코드 없이도 쉽게 쉐이더를 다룰 수 있도록 한다.

쉐이더를 다루는 업무는 대부분 수학적인 능력과 아트적인 능력을 동시에 요구하기 때문에

프로그래밍을 못하는 아트, 아트를 못하는 프로그래밍에게는 참 힘든 부분이라고 생각 할 수 있다.

 

현 시점에서는 대부분에서 게임에서 사용되는 쉐이더들은 Shader Graph만 이용해도 별 무리 없이 멋있는 연출을 만들 수 있을 것이다. 코딩을 좋아하는 본인이지만, 코드 없는 (without Code) 쉐이더는 상당히 매력적이다.

물론, Compute Shader나 Geometry Shader, Shader의 커스터마이징 영역에 들어간다면.. HLSL 코딩은 필수일 것이다.

 

6버전 시점에서 지원되는 Shader Graph

 


01. 변수 (Properties) 추가하기

 

HLSL 코드에서 Properties에 해당하는 부분은 좌측 상단의 + 버튼을 눌러서 추가할 수 있다.

진짜 매우 간편하다. 

Property 추가

 

생성된 Property, 노드 정보는 우측 상단의 Graph Inspector에서 확인 할 수 있다.

 


02. Property Options

노드 정보 확인

 

눈여겨 보아야 할 건, Name / Reference 부분이다.

Name은 마음대로 지어도 괜찮지만, Reference 부분은 유니티가 자동으로 생성하는 이름이고

항상 언더스코어 "_"가 컨벤션으로 들어가야 한다.

 

레퍼런스는 HLSL 코드에서 실제로 사용될 네이밍으로 바꾸고 싶다면, Properties Blackboard 안에서 우클릭을 눌러 Reset Reference를 클릭하자.

 

레퍼런스 이름은 코드에서 읽히는 이름이므로 주의하자.

 

Propery Scope

Scope는 구버전에서는 Override Property Declaration 부분이다.

 

Scope 부분에서 변경 가능하다.

 

(1) Per Material : 기본 옵션이다. 이 Property의 값은 이 셰이더를 사용하는 Material 인스턴스마다 다른 값을 가질 수 있게 한다는 뜻이다.

 

(2) Global : 값을 글로벌로 사용하는 옵션이다. SRP Batcher Compatiablity가 깨질 위험이 있으니 필요한 순간에 사용해야 한다.

 

(3) Hybrid Per Instance : DOTS Hybrid Renderer와 관련된 옵션이다. DOTS에서 Shader를 사용하는 방법이 일반적인 방법과 다르므로 주의하자..

 

Property 마다 특정 옵션이 있고 없고 차이가 있을 수 있다.  직접 눌러보면서 확인해보자.

 

03. Property 그래프에 추가하기

Node 생성을 통해 추가하기

 

 

추가한 Property는 좌측 상단의 Blackboard 에서 원하는 Property를 드래그하거나, 빈 공간을 우클릭하여 Create Node - Properties에서 찾아서 추가 할 수 있다.

 


04. Graph Feature 사용하기

 

Shader Graph에서는 편의성을 위한 기능들이 몇가지 있다.

 

(1) Redirect Node

Node 선을 더블 클릭하면, Redirect Node를 추가 할 수 있다.

Redirect Node

 

(2) Preview Node

일종의 디버깅용 노드라고 생각하면 된다.

Shader 과정 중 잘 나오는 지 체크하기 위함이다.

 

(3) Color Mode

일종의 라벨링 기능이다.

복잡한 Shader에서 태깅을 함으로써 쉽게 원하는 걸 찾을 수 있게 도와준다.

User Defined로 커스텀도 가능하다.

 

(4) Group Selection

원하는 기능별로 묶을 수 있는 방법이다.

(5) Sticky Note

말그대로 스티커 메모 기능이다.

주석 기능이라고 생각하자.

 

(6) SubGraph

 

Shader Graph 안에 SubGraph를 가져와서 사용 할 수 있다.

작업중이던 노드들을 우클 릭 - Convert To - SubGraph 버튼을 누르면

파일을 생선 한 뒤에, 자동으로 SubGraph 연결을 해줄 수 있다.

반복 사용 가능한 Shader Graph들을 편하게 가져와 사용 할 수 있다.

SubGraph로 변환 시, 바로 반영 된다.

 

 

추가로 SubGraph 안으로 들어가보면, Input/Output Node를 확인 할 수 있다.

 


05. 마치며

Shader Graph에서도 Custom Function을 사용 할 수 있다.

Input / Output를 확실하게 정의하고, 자신만의 코드를 Shader Graph에서 쓸 수 있는 경지에 이르도록 노력해보자.