Unity Urp Render Feature를 이용한 2D Global Illumination (GiLight2D)
요약
Unity의 URP Render Feature를 활용하여 2D 환경에 글로벌 일루미네이션(Global Illumination)을 구현하는 방법을 소개합니다. 이 기능은 광선 기반 접근 방식을 사용하여 자연스러운 빛과 그림자를 생성하며, 다양한 옵션 제어가 가능해 스타일화된 시각 효과 제작에 유용합니다.
핵심 포인트
- Unity URP Render Feature를 이용한 2D GI 구현 방법 제시
- 광원 개수 제한 없이 자연스러운 빛과 그림자 생성 가능
- 픽셀 아트 고정 해상도, 포스트 프로세스 볼륨 제어 등 다양한 옵션 제공
- PackageManager로 설치 후 Urp Renderer에 GiLight2DFeature 추가하여 사용
GiLight2D
Dev by NullTale<br>
Unity Urp Render Feature를 이용한 2D Global Illumination입니다.<br>GiLight는 일반적인 조명뿐만 아니라 스타일화된 시각 효과를 만드는 데에도 사용될 수 있습니다 ✨
- Unity 2021, 2022 Web에서 테스트됨
WebGl TechArt Sandbox
• https://nulltale.itch.io/light-room <br>
무엇인가요?
실제로는 광선(rays)을 이용한 조명 접근 방식으로, 빛과 그림자가 자연스럽게 생성되며 광원 개수에 제한이 없습니다.<br>Unity 2022로 테스트되었으며 충분히 많은 옵션이 구현되었습니다.<br>
일부 옵션
- 픽셀 아트를 위한 고정 해상도.
- 포스트 프로세스 볼륨(post process volume)을 통한 제어.
- 렌더 텍스처 출력.
- 카메라 외부의 객체를 표시하기 위한 화면 테두리 패딩.
- 다양한 노이즈 설정 및 해상도.
- 등.
볼륨 제어
다양한 조명 구성을 혼합하여 특정 종류의 장면 효과를 만들 수 있습니다.
설치 및 사용법
PackageManager를 통해 https://github.com/NullTale/GiLight2D.git로 설치하세요.<br>
Urp Renderer에 GiLight2DFeature를 추가하세요 (urp가 구성되어야 함).<br>장면이 비어 있다면 이만으로도 효과를 볼 수 있어야 합니다.
<img src="https://user-images.githubusercontent.com/1497430/213907330-64d37b07-2833-4f8e-8b62-88455c05d604.png"><br>
<sup>빈 장면에 세 개의 스프라이트가 있습니다.</sup>
그런 다음 오브젝트 마스크와 출력 텍스처를 구성할 수 있으며, 이는 셰이더에서 사용될 수 있습니다 (이름이 일치해야 함).

이제 이 텍스처는 셰이더에서 사용할 수 있습니다.<br> > UrpRenderer가 마스크에 의해 Gi 객체를 그리지 않도록 구성되었습니다.<br> > Exposed 텍스처 체크박스는 해제되어야 합니다.

<sup>사각형 스프라이트는 화면 좌표에서 Gi 텍스처를 사용합니다.</sup>
작동 원리
전반적인 아이디어는 각 픽셀에서 모든 방향으로 광선(ray)을 방출하고, 이 광선들이 빛 소스에 부딪히면서 합산된 값이 해당 픽셀의 최종 색상이 된다는 것입니다.<Br> 결국 조명 텍스처(lighting texture)를 계산해야 하며, 이는 이후에 사용될 수 있습니다.<Br> 이 접근 방식으로는 글로우와 그림자가 자연스럽게 형성됩니다.

광선을 효과적으로 계산하기 위해 SDF 맵(SDF map)이 생성되는데, 사실상 가장 가까운 광원까지의 거리 맵(distance map)입니다. 이 맵은 광원을 검색할 때 광선의 오프셋 거리(offset distance)를 얻는 데 사용됩니다.
따라서 전체 렌더링 과정은 세 단계로 구성됩니다: 객체를 버퍼에 렌더링하고, JFA 알고리즘을 사용하여 거리 맵을 생성하며, GI 셰이더를 적용하는 것입니다.광선 반사(Ray bounces)는 객체의 경계면(border)에 있는 픽셀들의 조명을 계산함으로써 카운트됩니다.

거의 모든 계산은 프래그먼트 셰이더(fragment shader)에서 수행되므로, 처리해야 할 객체의 수에는 성능에 영향을 미치지 않지만, 해상도(resolution)에 크게 의존합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub GameDev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기