Search

Unity Shader Graph로 URP Lit Shader 구현 및 확장하기

소개

Unity 개발자라면 누구나 한 번쯤 셰이더 커스터마이징에 도전해 봤을 것입니다. 특히 Universal Render Pipeline (URP)의 Lit Shader를 기반으로 추가 효과를 구현하려 할 때, 우리는 종종 예상치 못한 난관에 부딪힙니다. 이 글에서는 제가 최근 경험한 URP Lit Shader 커스터마이징 과정과, Unity에서 제공한 새로운 Shader Graph 샘플을 통해 이 문제를 어떻게 해결했는지 공유하고자 합니다.
이 경험은 게임 그래픽 최적화와 셰이더 프로그래밍의 중요성을 다시 한번 일깨워주었습니다. 독자 여러분은 이 글을 통해 Shader Graph의 활용법, URP Lit Shader의 구조, 그리고 성능을 고려한 셰이더 확장 방법에 대한 인사이트를 얻으실 수 있을 것입니다.

기술적 배경

먼저, 이 글에서 다룰 주요 개념들을 간단히 설명하겠습니다:
1.
Unity Shader Graph: 노드 기반의 비주얼 셰이더 제작 도구로, 복잡한 셰이더 코드 작성 없이 다양한 그래픽 효과를 구현할 수 있게 해줍니다.
2.
Universal Render Pipeline (URP): Unity의 최신 렌더링 파이프라인 중 하나로, 다양한 플랫폼에서 최적화된 그래픽 성능을 제공합니다.
3.
Lit Shader: 빛의 영향을 받는 물체의 표면을 표현하는 기본적인 셰이더 유형입니다. URP에서는 이를 기본 셰이더로 제공합니다.
4.
Cutout 효과: 오브젝트의 일부분을 투명하게 만들어 잘라내는 효과로, 다양한 시각적 표현에 활용됩니다.

문제 상황 설명

URP Lit Shader를 기반으로 추가 효과를 구현하려 할 때, 우리는 종종 다음과 같은 문제에 직면합니다:
1.
기존 Lit Shader의 복잡성으로 인한 커스터마이징의 어려움
2.
추가 효과 구현 시 기존 라이팅 품질 유지의 어려움
3.
성능 최적화와 시각적 품질 사이의 균형 유지 문제
특히 저는 "조명 아래에서 기존 Lit만큼 깔끔하게 생기게 만드는 게 거의 불가능했다"고 느꼈습니다. 이는 많은 개발자들이 공통적으로 겪는 문제로, 온라인 커뮤니티에서도 유사한 고민을 쉽게 발견할 수 있었습니다.
커스텀 Lit Shader 적용 시 나타나는 한계

해결 과정

1. Unity 공식 샘플 발견

문제 해결의 돌파구는 Unity 측에서 제공한 Shader Graph 샘플에서 찾았습니다. URP Lit Shader in Shader Graph 스레드에서 발견한 이 샘플은 기존 Lit Shader의 기능을 Shader Graph로 구현한 것이었습니다.
구체적으로는 Package Manager의 Shader Graph Samples에 Production Ready Assets으로 HDRP and URP Lit Material Shader Graph templates들이 포함되어 있습니다.

2. 샘플 분석 및 적용

샘플을 프로젝트에서 열어본 결과 깔끔하게 정리된 Shader Graph를 분석할 수 있었습니다.
URP Lit Shader의 Shader Graph 구조
샘플을 오브젝트에 적용해본 결과, 예상보다 훨씬 만족스러운 결과를 얻을 수 있었습니다.
Lit 적용 스크린샷
이 그래프의 주요 특징은 다음과 같습니다:
1.
간결한 노드 구조
2.
명확한 섹션 구분 (Base Color, Metallic, Smoothness 등)
3.
최적화를 고려한 노드 배치

3. Cutout 효과 추가

기본 Lit Shader의 기능을 유지하면서 추가 효과를 구현하기 위해, 오브젝트 좌표를 기준으로 일정 거리 이상을 잘라내는 Cutout 효과를 구현했습니다.
// Cutout 효과 의사코드 float distanceFromCenter = length(objectPosition); float cutoutThreshold = 5.0; // 임의의 거리 값 float alpha = step(distanceFromCenter, cutoutThreshold);
GLSL
복사
이를 Shader Graph에 적용한 결과는 다음과 같습니다:
Cutout 효과가 추가된 Shader Graph

결과 및 최적화

최종적으로 구현된 셰이더는 기존 URP Lit Shader의 품질을 유지하면서도 추가적인 Cutout 효과를 성공적으로 구현했습니다.
Cutout 효과가 적용된 최종 결과
성능 측면에서는 추가적인 벤치마킹이 필요하지만, 기존 Lit Shader를 기반으로 하고 있어 큰 성능 저하는 없을 것으로 예상됩니다. 다만, Cutout 효과로 인한 추가적인 계산이 필요하므로, 대규모로 적용 시에는 주의가 필요합니다.

회고 및 향후 계획

이번 경험을 통해 다음과 같은 학습 포인트를 얻을 수 있었습니다:
1.
Shader Graph의 강력함과 유연성
2.
공식 문서와 커뮤니티 자료의 중요성
3.
기존 셰이더를 기반으로 한 확장의 효율성
향후에는 이 셰이더를 기반으로 다양한 시각적 효과 (예: 디졸브, 홀로그램 등)를 구현해볼 계획입니다. 또한, 모바일 환경에서의 최적화 방안도 연구할 예정입니다.