Unity 검색

Realistic smoke lighting with six-way lighting in VFX Graph | Hero image
Realistic smoke lighting with six-way lighting in VFX Graph | Hero image
공유

Is this article helpful for you?

Thank you for your feedback!

연기와 폭발을 실시간으로 시뮬레이션하고 렌더링하는 작업은 항상 어렵습니다. 연기와 폭발에 적용되는 조명의 상호 작용과 역학이 복잡한 특성을 갖기 때문입니다.

볼류메트릭 유체 시뮬레이션과 렌더링을 도입하는 실시간 기술은 많아지고 있지만, 게임에서 광범위하게 사용하기에는 여전히 지나치게 많은 비용이 드는 편입니다. 다른 많은 렌더링 문제와 마찬가지로, 결국 가장 적은 비용으로 가장 실제와 비슷한 모양을 만들어 내는 것이 무엇보다 중요합니다.

2022.2 테크 스트림에는 DCC에서 Unity까지 아우르는 포괄적이고 완전한 워크플로가 추가되었으며, 이를 사용하면 베이크된 시뮬레이션에서 연기를 사실적으로 렌더링할 수 있습니다. 이 워크플로는 모든 플랫폼과 모든 조명 조건에 맞게 활용할 수 있습니다. 또한 이 솔루션에는 즉시 사용할 수 있는 베이크된 맵 라이브러리가 포함되어 있어 누구나 쉽게 연기 효과의 시각적 정확도를 새로운 단계로 끌어 올릴 수 있습니다.

6방향 조명

다양한 조명 조건에서 6방향 라이트맵을 사용하여 구현한 폭발 장면

게임에서 연기를 렌더링할 때 텍스처가 적용된 스프라이트를 사용하는 경우가 가장 많습니다. 모두 볼류메트릭 조명을 사용하여 계산하려 하면 실시간 렌더링에서 사용하기에는 비용이 너무 많이 들기 때문입니다. 하지만 스프라이트와 관련해서 가장 흔히 하는 질문은 평평한 2D 지오메트리를 기반으로 연기에 빛을 적용하는 방법에 대한 것입니다.

노멀 매핑을 사용하거나 완전히 베이크된 컬러 맵을 사용하는 등 여러 방법이 있습니다. 하지만 이 방법들은 현실성 또는 확장성이 부족하거나 두 가지 모두 부족합니다.

6방향 조명은 이러한 방법의 대안으로, 6개의 서로 다른 방향에서 오는 광원에 대한 연기의 조명 반응이 포함된 라이트맵을 사용합니다. 이 라이트맵은 알파 채널과 추가적인 이미시브 마스크와 함께 두 개의 텍스처로 이루어진 하나의 세트로 베이크됩니다.

 Depiction of six-way lightmaps
6방향 라이트맵 묘사

텍스처를 입힌 연기는 다양한 조명 조건에서 동적으로 셰이딩할 수 있습니다. 이를 사용하면 뒤에서 빛을 비출 때 생기는 연기 내부의 그림자나 라이트 림(rim) 등 다른 기술로는 구현할 수 없는 볼류메트릭 조명 현상을 구현할 수 있습니다.

 A single six-way lightmap with different sun orientations
다양한 태양광 방향이 적용된 하나의 6방향 라이트맵

컬러, 흡수, 이미시브 그레디언트, 라이트맵 리매핑 등 여러 제어 옵션을 사용해 동일한 텍스처 세트를 기반으로 다양한 효과를 만들 수 있습니다. 이러한 방법은 다양한 시나리오에서 에셋을 재사용하는 데 도움이 됩니다.

6방향 조명, 6포인트 조명, 6D 라이트맵, 6포인트 라이트맵, 연기 조명 등 다양한 이름으로 알려진 이 기술은 여러 AAA 게임에서 사용되고 있습니다. 경력 있는 게임 VFX 테크 디렉터가 작성한 기술 관련 개요를 확인해 보세요.

이 기술을 사용할 때의 주요 장점은 다음과 같습니다.

  • 시뮬레이션을 라이트맵으로 바로 베이크할 수 있으므로, 여러 번 반사되는 산란과 같이 실시간으로는 렌더링하기 어려운 복잡한 광원 상호 작용을 렌더링할 수 있습니다.
  • 향상된 조명 덕분에 연기 효과를 월드에 더 자연스럽게 녹아들도록 구현할 수 있어서 시각적 품질을 향상할 수 있습니다. 예를 들어 연기를 씬에 추가하면 연기가 프로브 등의 간접 조명이나 주변광뿐만 아니라 그 수와 상관없이 모든 유형의 동적 광원(방향 광원, 점 광원, 면 광원)에 반응합니다. 따라서 같은 에셋을 여러 위치에 배치한 경우라도, 각 인스턴스가 주변 환경에 자연스럽게 어울리도록 표현할 수 있습니다.
  • 매우 높은 시각적 품질에 비해 오버헤드는 낮습니다. 실제로 연기 효과의 렌더링은 기존의 릿(lit) 스프라이트에 비견될 정도로 매우 비용 효율적입니다.
  • 디스크와 텍스처 메모리를 줄일 수 있습니다. 플립북 텍스처는 항상 많은 메모리를 사용하지만, 6방향 조명을 사용하면 여러 위치에서 같은 텍스처를 다시 사용할 수 있습니다. 결과적으로 연기의 실제 모습은 컬러, 흡수 등 적용된 배리에이션과 배치된 위치의 조명 조건에 따라 매우 다릅니다. 베이크된 모션 벡터를 활용하여 필요한 프레임 수를 줄이면 더 많은 양의 메모리를 절약할 수 있습니다. Unity 에셋 스토어에 있는 Tuatara의 TFlow가 이 작업에 매우 유용한 툴입니다.
Six-way lighting used for all smokes and near clouds with many instances of only four VFX graph assets
단 4개의 VFX 그래프 에셋으로 구성된 여러 인스턴스로 만든 모든 연기와 주변 구름에 6방향 조명을 사용한 모습

한 가지 단점은 이 방법을 사용하면 효과가 밋밋해 보인다는 점입니다. 이 기술은 높은 정확도의 조명 덕분에 매우 뛰어난 볼륨감을 구현하지만, 여전히 텍스처 시트일 뿐이며, 3D 볼류메트릭 효과가 아닙니다. 따라서 배경용 증기, 폭발 등의 장식 효과에 가장 적합합니다. 깊이감을 더하려면 더 많은 파티클에 이 효과를 사용하거나, 로컬 볼류메트릭 포그 또는 HDRP의 볼류메트릭 머티리얼과 같은 볼류메트릭 효과와 결합해야 합니다.

다음은 일반적인 사용 사례입니다.

  • 낮: 연기를 통해 퍼져 나가는 햇빛과 하늘 조명 시뮬레이션
  • 밤: 연기에 빛을 비출 수 있는 고정된 점 광원 또는 이동하는 점 광원, 스포트라이트
  • 정확도 높은 연기
  • 먼지
  • 증기
  • 볼류메트릭 클라우드: 주요 구름에 대한 6방향 조명
  • 포털, 모래 폭풍, 토네이도 등의 고급 효과
여러 개의 6방향 라이트맵을 사용한 고급 포털 효과

6방향 조명 맵 구축 및 프로세싱

익스포터

유니티는 몇 가지 유용한 라이트맵 생성 툴을 제공합니다. VFXToolbox 저장소에는 6방향 라이트맵 플립북을 재압축하거나 컬러 강도를 조정하는 데 사용할 수 있는 Image Sequencer 등의 툴과 함께 Houdini 및 Blender용 익스포터가 있습니다.

SideFX Houdini용 HDA

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

Unity의 VFX 그래프를 위한 Houdini 6방향 라이트맵 익스포터 소개

툴 설치에 관한 모든 지침은 Readme.txt에서 확인할 수 있습니다. 툴에 두 가지 배리언트가 있는데, 첫 번째 배리언트는 오브젝트 컨텍스트에 있습니다. OpenGL 렌더 노드를 기반으로 하며 매우 빠릅니다.

두 번째 배리언트는 스테이지 컨텍스트 내에 있으며, Karma 렌더러를 기반입니다. 두 가지 모두 라이트맵 렌더링, 이미시브, 플립북 익스포트를 지원합니다.

Blender용 애드온

Blender exporter collapsed menu
축소된 상태의 Blender 익스포터 메뉴

애드온을 설치하려면 Blender의 표준 절차를 따르세요. Preferences 메뉴에서 unity_6way.py 파일을 설치하고, 애드온을 활성화합니다. 그러면 Unity 카테고리에 있는 3D 뷰에서 패널을 확인할 수 있습니다.

애드온을 사용하면 라이트맵을 렌더링하고, 이미시브 채널을 렌더링하고, 기본적인 합성 작업을 수행하고, 라이트맵 시퀀스에서 플립북을 만들 수 있습니다. 모든 작업을 한 번에 또는 따로 할 수 있으며, 각 단계에는 최종 결과물을 제어하는 개별 설정이 있습니다.

Blender exporter stages settings
Blender 익스포터 단계별 설정

기타 툴

EmberGen sample setup
EmberGen 샘플 설정

일부 툴은 이미 공식 옵션이나 사용자가 제작한 옵션과 플러그인을 통해 6방향 라이트맵 익스포트를 지원합니다.

예를 들어 EmberGen에서는 Render 노드에서 'Six Point'라는 옵션을 사용할 수 있습니다. 이 워크플로의 경우 Unity에서 라이트맵의 빛 강도를 제어할 수 없기 때문에 Unity에서 공식 지원되지는 않습니다. 그러나 빛 강도를 직접 조정한다면 유용하게 사용할 수 있습니다.

자체 툴을 사용해 6방향 조명 맵을 구축할 수도 있습니다. 자체 툴을 사용하려는 경우에는 아래에 설명된 단계와 패킹 형식을 따르면 됩니다.

라이트맵 베이킹

라이트맵을 베이크하려면 서로 다른 조명 설정으로 오브젝트를 6번 렌더링해야 합니다.

각 렌더링에는 카메라를 기준으로 위쪽, 아래쪽, 왼쪽, 오른쪽, 앞쪽, 뒤쪽에서 방향이 다른 백색 방향 광원을 사용합니다.

화염과 같은 이미시브 정보는 라이트맵의 일부가 아니며, 나중에 별도의 텍스처로 렌더링하거나 라이트맵의 추가 채널로 패킹하면 됩니다.

라이트맵 텍스처 형식

6방향 조명 맵의 데이터는 두 개의 RGBA 텍스처로 패킹됩니다. 6개의 라이트맵 방향은 각각 두 텍스처의 컬러 채널(빨강, 초록, 파랑)에 저장됩니다.

또한 첫 번째 텍스처의 알파 채널에는 투명도가 있습니다. 따라서 두 번째 텍스처의 알파 채널을 추가 채널로 활용할 수 있습니다. 현재 워크플로에서는 해당 추가 채널에 이미시브 컴포넌트를 패킹할 수 있습니다.

Lightmap A: Right, Top and Back lightmaps + Transparency
라이트맵 A: 오른쪽, 위쪽, 뒤쪽 라이트맵 + 투명도
Lightmap B: Left, Bottom and Front lightmaps + Extra channel
라이트맵 B: 왼쪽, 아래쪽, 앞쪽 라이트맵 + 추가 채널

텍스처를 선택하면 Unity 에디터의 Preview 창에서 각 채널을 살펴볼 수 있습니다.

다른 툴로 만든 라이트맵의 경우 채널을 다른 순서로 패킹할 수 있습니다. Unity 내에서 인스펙터를 사용해 채널 순서를 다시 정렬하는 기본 기능이 있지만, 한 텍스처에서 다른 텍스처로 채널을 옮겨야 하는 경우에는 이미지 에디터가 필요할 수 있습니다.

연기 조명 렌더링

Still of sample explosion at night
야간 폭발 장면 스틸 이미지 샘플

연기의 조명은 HDRP 광원 루프에서 직접 통합되며, 따라서 연기에 영향을 주는 광원의 수에는 별다른 제한이 없습니다. 물론 광원이 많을수록 더 많은 연산이 필요하지만, 광원 레이어를 활용하면 연산량을 조금 줄일 수 있습니다.

방향 광원, 점 광원, 스폿 광원, 사각 광원, 선형 광원 등 모든 유형의 직접 광원을 처리할 수 있습니다. 또한 번개, 전기 스파크, 조명탄, 반딧불이 등을 연출하는 연기 효과 내부의 광원에 매우 뛰어난 결과를 얻을 수 있습니다.

Dynamic lights inside six-way smoke
6방향 연기 내부의 동적 광원

먼저 파티클을 기준으로 각 광원의 방향을 정하고 이 방향을 사용하여 서로 다른 라이트맵을 블렌딩하는 것이 중요합니다. 면 광원의 경우, MRP(Most Representative Point) 방식을 사용하여 조명에서 가장 가까운 점을 파악해서 방향을 계산합니다.

Same smoke effect under different lighting conditions – top left: directional light and ambient; top right: ambient, probe volumes and directional light; bottom left: ambient and probes; and, bottom right: spot light and probes
다양한 조명 조건에서의 똑같은 연기 효과 - 왼쪽 상단: 방향 광원과 주변광. 오른쪽 상단: 주변광, 프로브 볼륨, 방향 광원. 왼쪽 하단: 주변광, 프로브. 오른쪽 하단: 스폿 광원, 프로브

파티클은 간접 조명, 특히 씬에서 활성화한 유형에 따라 라이트 프로브, APV(Adaptive Probe Volume), 앰비언트 프로브, LPPV(Light Probe Proxy Volume)의 영향도 받습니다. 최상의 성능을 발휘하려면 앰비언트 전용 모드를 사용해 광원 루프를 완전히 건너뛰고 리소스 사용이 매우 적은 조명 계산만 수행하면 됩니다.

Adaptive Probe Volumes and six-way smoke lighting
APV와 6방향 연기 조명

성능을 고려하여 프로브 기여는 버텍스 셰이더에서 평가한 다음 픽셀 셰이더에 보간됩니다. 다시 말해서, 쿼드 출력을 사용하는 경우 프로브는 쿼드의 네 코너에서만 평가됩니다. APV와 같이 공간적으로 다양한 프로브의 경우, 하나 이상의 버텍스가 한쪽 벽에 있고 나머지 파티클은 다른 쪽에 있을 수 있습니다. 이 경우, 프로브 기여가 잘못되어 시각적 결함이 발생할 수 있습니다. 이를 해결하는 한 가지 방법은 더 테셀레이션되고 더 많은 버텍스가 있는 메시를 사용하는 것입니다. 야외 씬의 경우에는 보통 이러한 점이 문제가 되지 않습니다.

연기는 모델에서 완전히 확산되는 것으로 간주되므로, 스페큘러 간접 기여는 평가되지 않습니다. 예를 들어, 반사 프로브는 6방향 연기 조명을 받는 파티클에 영향을 주지 않습니다.

또한 Unity는 연기에 컬러를 적용하는 두 가지 방법을 제공합니다. 라이트맵에서 컬러 컴포넌트별 광원 흡수를 도출하여 컬러 연기의 움직임을 더 사실적으로 구현하거나, 간단한 곱하기를 통해 리소스 사용을 최소한으로 줄이는 방식으로 컬러를 적용할 수 있습니다.

Comparing multiply and absorption modes to apply color to smoke
곱하기와 흡수 모드를 사용해 컬러를 적용한 연기의 비교
Evaluation of six-way light scattering aka Bidirectional Scattering Distribution Function (BSDF)
6방향 광원 산란 평가 즉, BSDF(양방향 산란 분포 함수)

VFX 그래프의 6방향 조명 렌더링 출력은 효과의 모습을 커스터마이징하고 같은 라이트맵을 다시 사용하여 다른 효과를 만들 수 있는 여러 제어 옵션을 제공합니다.

1. 컬러 및 흡수

Create smoke, steam, or clouds with the same lightmaps using color and absorption strength controls
컬러, 흡수 강도 제어를 사용하여 같은 라이트맵으로 연기, 증기, 구름 생성

2. 라이트맵 리매핑

Create more or less dense or stylized effects, remapping the lightmaps
라이트맵을 리매핑하여 밀도를 조정하거나 스타일라이즈드 효과 생성

3. 이미시브

Transform smoke into explosions using different emissive gradients
다양한 이미시브 그레디언트를 사용하여 연기를 폭발로 변환

시작하기

단 몇 분이면 프로젝트에 아름다운 6방향 연기를 추가할 수 있습니다. 단, Unity 2022.2 이상 버전에서 VFX 그래프와 HDRP를 사용해야 합니다.

이 기술을 빠르게 익히실 수 있도록 즉시 사용 가능한 맵 라이브러리를 만들었습니다. VFX 툴박스 등을 사용하여 원하는 대로 처리하고 패킹할 수 있는 정확도 높은 에셋뿐만 아니라 가볍고 게임에 바로 사용할 수 있는 컴팩트한 버전을 모두 제공합니다.

An example of a free six-way sample that is now available
현재 사용할 수 있는 무료 6방향 샘플 예시

이러한 맵과 6방향 조명을 사용하여 효과를 만드는 방법은 다음과 같습니다.

  • Unity의 Asset 폴더에 맵을 드래그 앤 드롭합니다.
  • 새로운 VFX 그래프 에셋을 만들어서 엽니다.
  • 새로운 Particle Lit Output을 만들고 선택합니다.
  • 인스펙터에서 Material Type 드롭다운에 있는 Six Way Smoke Lit을 선택합니다.
Inspector view with “Six Way Smoke Lit” selected
Six Way Smoke Lit이 선택된 인스펙터 창의 모습
  • 출력 컨텍스트에서 임포트한 맵으로 Positive Axes Lightmap과 Negative Axes Lightmap을 설정합니다.
  • 여러 조명 조건에서 테스트합니다. 

VFX 그래프의 전반적인 기능에 대해 자세히 알아보려면, 유니티 웹사이트를 방문하여 전자책 집중 탐구 가이드: Unity에서 고급 시각 효과 제작(영문)을 읽어 보세요.

향후 계획

6방향 조명에 관한 다음 편에서는 셰이더 그래프 통합과 URP(유니버설 렌더 파이프라인) 지원을 집중적으로 살펴봅니다. 또한 그림자를 받을 때 밋밋해 보이는 문제, 파티클에 국한된 라이트맵, 주변 오클루전을 고려하지 않는 문제 등 이 기술의 본질적인 한계를 개선할 아이디어도 소개할 예정입니다.

또한 시각 효과로 볼류메트릭 포그를 생성하도록 VFX 그래프에 볼류메트릭 포그 출력을 추가하는 작업도 진행 중입니다. 이 기능을 6방향 조명과 함께 사용하여 더 다양한 연기 효과를 구현할 수 있을 것입니다. 이미 2023.1.a25 알파 버전에서 이 기능을 사용할 수 있습니다.

물론 실제 볼류메트릭 유체 시뮬레이션, 재생, 렌더링도 연구하고 있습니다. 이를 통해 타겟 플랫폼과 예산에 따라 사실적이고 아름다운 연기 효과를 렌더링할 수 있는 다양한 기술을 제공할 것입니다.

전용 Unity 포럼 스레드를 통해 피드백이나 질문을 공유해 주세요. 새로운 기능을 제안하고 출시 예정인 후보 기능에 투표하려면 공개 렌더링 로드맵을 확인하세요.

Is this article helpful for you?

Thank you for your feedback!

포럼에서 토론에 참여하기
관련 게시물