개요
Unity ShaderGraph에 Target 인터페이스를 기반으로 Custom Lighting Model 추가 방법을 소개합니다.
- Unity 6000.0.32f1 URP 환경에서 테스트 내용입니다.
- 흔히 알려진 SubGraph 활용 방식이 아닌, ShaderGraph에서 직접 지원할 수 있게 합니다.
ShaderGraph에 Custom Lighting Model을 추가하고 싶은 이유
ShaderGraph 사용 장점은 통일된 라이팅 모델 기반으로 필요한 Shader를 빠르게 제작 가능한 것입니다.
하지만 ShaderGraph는 라이팅 모델 커스텀을 지원하지 않으며 URP Lit 등, 기본적으로 엔진에서 지원하고 있는 Lighting Model만 사용 가능합니다.
만약 PBR이 아닌 카툰 렌더링과 같이 특수한 라이팅 표현을 하고 싶거나 더 최적화된 PBR Lighting Model을 사용하고 싶다면, ShaderGraph를 사용하지 않고 HLSL 코드 기반으로 셰이더를 제작하거나, ShaderGraph에서 Unlit 기반으로 SubGraph를 활용해 어거지로 커스텀 라이팅 모델이 동작하도록 해야합니다.
- 참고 SubGraph Custom Lighting Model : https://nedmakesgames.medium.com/creating-custom-lighting-in-unitys-shader-graph-with-universal-render-pipeline-5ad442c27276
저는 프로젝트 맞춤형 Custom Lighting Model을 사용하며 ShaderGraph의 Shader 생산성을 얻고자 R&D 진행했습니다.
ShaderGraph Target 인터페이스 이용
ShaderGraph에 Target 설정 인터페이스가 있습니다, Target RenderPipline을 의미하는 것으로 추측되며 기본적으로 Universal(URP), Built-In, Custom RenderTexture 3가지 존재합니다.
ShaderGraph 패키지에 Universal을 제외한 다른 Target 구현 자료가 있어 해당 자료를 기반으로 Target을 추가하는 방식으로 진행합니다.
Custom Target & SubTarget 추가
UnityEditor.ShaderGraph.Target 클래스를 상속 받아 내용을 구현하면, 간단하게 ShaderGraph에 Target 추가 가능합니다.
대부분 코드는 기존 패키지 스크립트를 복제해서 제작했기 때문에 설명 생략합니다.
다음 SubTarget를 상속받는 클래스를 제작합니다.
Target은 RenderPipeline 개념이고 SubTarget이 Lighting Model이라고 이해합니다.
SubTarget은 ShaderGraph에서 Material 인터페이스에 추가됩니다.
Shader Generator 로직 연동
ShaderGraph는 제작된 노드 정보를 기반으로 Shader 코드 파일을 조립 생성하는 방식으로 동작합니다.
그래서 추가한 커스텀 Target & SubTarget이 원하는 Shader를 생성하기 위해서 재료가되는 Shader 코드 개발 필요합니다.
쉽게 개발하기 위해 ShaderGraph 패키지의 BuiltIn Target을 기반으로 작업합니다.
Generator는 ShaderPass.template 파일을 기준으로 템플릿 기반 코드 생성과 Define 전처리기 셰이더 코드 조립합니다.
조립되는 셰이더 코드는 복잡하고 오류 추적이 까다로우니, 간단한 Unlit부터 제작하면 편합니다.
또한 URP ShaderLibrary를 이용하기보다는 직접 새로 제작하는 것을 권장합니다.
(URP hlsl Include하면 Define 중복 선언 오류 발생하는데 해결 못함)
위에서 제작한 Pass 구조체와 동일하게 SubShaders 구조체까지 제작하고 SubTarget 클래스 Setup 함수에서 추가되도록 합니다.
위에서 제작한 커스텀 SubTarget은 ShaderGraph Generator 클래스에서 코드 생성 호출됩니다.
결과
Unlit Pass를 기반으로 CustomRP 추가 및 정상작동 됩니다.
'Unity' 카테고리의 다른 글
Unity ShaderGraph Custom Lighting Model 활용 테스트 (0) | 2025.04.15 |
---|---|
Unity GPU Indirect Drawing 구현 가이드 & ISM 시스템 개발 과정 (0) | 2025.01.15 |
URP 2D Sprite FakeShadow for 2.5d (0) | 2024.12.14 |
Unity Screen Space Camera 테스트 (0) | 2024.12.04 |
[Unity6] GPU Resident Drawer 간단 스펙 확인 (4) | 2024.09.23 |
WRITTEN BY
- CatDarkGame
Technical Artist dhwlgn12@gmail.com