볼류메트릭 안개
볼류메트릭 안개는 고해상도 렌더 파이프라인(HDRP)에서 이용할 수 있는 가장 뛰어난 안개 구현입니다. 광원과 안개의 상호작용을 실감 나게 시뮬레이션하여 글로우와 부채살 빛(태양 빛줄기처럼 중앙 지점에서 구름과 나무 등의 물체 사이를 통과하는 광선)을 현실적인 모습으로 렌더링할 수 있습니다.
씬에 안개 추가
씬에 볼류메트릭 안개를 사용하려면 씬 설정 게임 오브젝트(메뉴: GameObject > Rendering > Scene Settings)를 생성합니다. 여기에는 HDRP의 기본 환경 설정을 오버라이드하는 데 사용하는 Visual Environment 오버라이드가 들어 있는 Volume 컴포넌트가 있습니다.
Volumetric Fog 를 Fog Type 으로 사용하도록 시각 환경 오버라이드를 설정합니다.
이제 볼륨에 Volumetric Fog 오버라이드를 추가합니다. Add Override 를 클릭한 후 Volumetric Fog 를 클릭합니다.
씬 내에는 일반적으로 단일 볼륨이 Visual Environment 오버라이드가 들어 있는 IsGlobal 로 설정되어 있습니다. 단일 전역 시각 환경을 보유하면 Unity가 씬의 모든 지점에서 동일한 Sky Type 과 Fog Type 을 사용합니다. 다른 Sky Types 및 Fog Types 의 로컬 볼륨을 계속 사용할 수도 있지만, 서로 간의 전환이 분명하고 즉각적입니다. 씬의 다양한 볼륨에서 다양한 시각 환경을 사용하고 싶다면 카메라 컷에서 전환을 수행하는 것이 가장 좋습니다.
이 지점에서 씬은 전역 볼류메트릭 안개를 포함합니다 .하지만 기본 전역 안개 밀도가 매우 낮아서 효과가 보이지는 않습니다. 기본 프로퍼티를 자체적으로 선택한 값으로 오버라이드하려면 전역 볼류메트릭 안개 커스터마이즈 섹션의 단계를 따르십시오.
전역 볼류메트릭 안개 커스터마이즈
로컬 안개가 아니라, 최고의 성능과 최고의 품질을 제공하는 전역 안개를 사용하십시오.
전역 안개는 높이 안개입니다. 여기에는 두 가지 논리 컴포넌트가 있습니다. Base Height 보다 카메라에 더 가까이 있는 영역은 상수형(균일형) 안개이고, Base Height 보다 더 멀리 있는 영역은 지수형 안개입니다.
액티브 볼륨의 Volumetric Fog 컴포넌트는 전역 안개의 형상을 제어합니다.
Volumetric Fog 프로퍼티:
프로퍼티 | 기능 |
---|---|
Single Scattering Albedo | 안개 컬러를 설정합니다. 볼류메트릭 안개는 조명에 색조를 적용하므로 안개가 이 컬러로 광원을 산란시킵니다. 안개 뒤 또는 안개 안에 있는 광원에서 방출하는 조명에만 색조를 적용합니다. 즉 안개 뒤 또는 안개 안에서 게임 오브젝트에 반사되는 조명에는 색조를 적용하지 않기 때문에 반사된 조명은 안개 밀도가 증가할수록 어두워집니다(검은색으로 페이드). 예를 들어 빨간색 단일 산란 알베도가 있는 흰색 벽에 광원을 비춘 후 안개 반대쪽에서 보면 안개가 광원을 어둡게 만들지만 붉은 색조를 적용하지는 않습니다. |
Base Fog Distance | 안개의 아래쪽 부분의 밀도를 제어하고, Unity 단위로 안개를 통해 얼마나 멀리 볼 수 있는지 결정합니다. 이 거리에서 안개는 배경 광원을 흡수하고 63%를 외부로 산란합니다. |
Base Height | 상수형(균일형) 안개와 지수형 안개 간의 경계 높이입니다. |
Mean Height | Unity 단위로 높이 안개의 감쇠율을 제어합니다. 값이 높을수록 안개가 세로로 늘어납니다. 이 높이에서 감쇠는 초기 기본 밀도를 63% 감소시킵니다. |
Global Anisotropy | 산란광의 각도 분포를 제어합니다. 0은 등방성, 1은 전방 산란, -1은 후방 산란입니다. 0이 아닌 값은 성능에 중간 정도의 영향을 미칩니다. 값이 높으면 Enable Reprojection for Volumetrics Frame Setting과의 호환성 문제가 있을 수 있습니다. 이는 HDRP가 전역 안개와 로컬 안개 모두에 적용되는 실험적인 프로퍼티입니다. |
Global Light Probe Dimmer | 하늘이 생성하는 전역 광원 프로브의 강도를 줄입니다. |
Max Fog Distance | 스카이박스나 배경에 안개를 적용할 때의 거리(Unity 단위)를 제어합니다. 또한 원거리 안개의 범위도 결정합니다. 최적의 결과를 얻으려면 이 값을 클리핑 평면에 대한 카메라의 원거리 값보다 크게 설정하십시오. 그렇지 않으면 씬 내 게임 오브젝트의 안개와 스카이박스의 안개 간에 불일치가 발생합니다. 카메라의 원거리 클리핑 평면은 평평한 반면, HDRP는 카메라 주변 구체 내에 안개를 적용합니다. |
Distant Fog | 카메라 절두체의 볼류메트릭 섹션 뒤의 미리 계산된 조명으로 안개를 활성화합니다. 안개가 입체 광원 컨트롤러의 최대 거리 범위에서 최대 안개 거리로 연장됩니다. |
Color Mode | HDRP가 원거리 안개의 조명 강도를 설정할 수 있도록 두 가지 방식을 제공합니다. 이 프로퍼티는 Distant Fog 체크박스를 활성화하는 경우에만 표시됩니다. |
- Constant Color | HDRP는 제공된 Color 프로퍼티를 사용하여 원거리 안개에 균일한 조명을 비춥니다. |
- - Color | HDRP가 원거리 안개에 조명을 비출 때 사용하는 컬러입니다. |
- Sky Color | HDRP는 스카이박스, 뷰 방향, 거리에 따라 원거리 안개에 조명을 비춥니다. 하늘의 큐브맵은 모든 조명을 제공합니다. |
-- Mip Fog Near | HDRP가 가장 덜 상세한 밉 레벨을 사용하는 거리(Unity 단위)를 결정합니다. |
- - Mip Fog Far | HDRP가 가장 상세한 밉 레벨을 사용하는 거리(Unity 단위)를 결정합니다. |
- - Mip Fog Max Mip | HDRP가 MIP 안개에 사용하는 가장 상세한 밉 레벨을 결정합니다. |
로컬 안개 추가
전역 안개가 스스로 생성할 수 없는 안개 효과를 씬에 구현해야 할 수 있습니다. 이때 로컬 안개를 사용할 수 있습니다. 로컬 안개를 추가하려면 밀도 볼륨을 사용하십시오. 밀도 볼륨은 방향이 지정된 바운딩 박스로 표현되는 안개의 추가 볼륨입니다. 기본적으로 안개는 상수형(균일형)이지만, Density Mask Texture 섹션에서 Texture 필드에 밀도 마스크 3D 텍스처를 할당하여 변경할 수 있습니다. 현재 HDRP는 32x32x32 해상도의 3D 텍스처를 지원합니다.
HDRP는 성능을 향상하기 위해 밀도 볼륨을 복셀화합니다. 이로 인해 두 가지 제한이 발생합니다.
- 밀도 볼륨이 볼류메트릭 그림자를 지원하지 못합니다. 광원과 표면 간에 밀도 볼륨을 배치하면 볼륨이 표면에 도달하는 광원의 강도를 감소시키지 않습니다.
- 밀도 볼륨이 매우 느린 속도(카메라의 초점 축을 따라 64 또는 128슬라이스)로 복셀화됩니다. 이로 인해 볼륨 경계에서 두드러진 앨리어싱이 발생할 수 있습니다. 가능한 경우 일부 전역 안개와 함께 Density Volumes를 사용하여 앨리어싱을 숨길 수 있습니다. 또한 밀도 마스크와 0이 아닌 블렌딩 거리를 사용하여 가장자리의 경도를 줄일 수도 있습니다.
밀도 볼륨을 생성하려면 계층 구조에서 오른쪽 클릭한 후 Rendering > Density Volume 을 선택하십시오. 또는 화면 상단의 메뉴 바를 사용하여 GameObject > Rendering > Density Volume 으로 이동할 수도 있습니다.
프로퍼티
프로퍼티 | 설명 |
---|---|
Single Scattering Albedo | 안개 컬러를 설정합니다. 볼류메트릭 안개는 조명에 색조를 적용하므로 안개가 이 컬러로 광원을 산란시킵니다. 안개 뒤 또는 안개 안에 있는 광원에서 방출하는 조명에만 색조를 적용합니다. 즉 안개 뒤 또는 안개 안에서 게임 오브젝트에 반사되는 조명에는 색조를 적용하지 않기 때문에 반사된 조명은 안개 밀도가 증가할수록 어두워집니다(검은색으로 페이드). 예를 들어 빨간색 단일 산란 알베도가 있는 흰색 벽에 광원을 비춘 후 안개 반대쪽에서 보면 안개가 광원을 어둡게 만들지만 붉은 색조를 적용하지는 않습니다. |
Fog Distance | 안개의 아래쪽 부분의 밀도를 제어하고, Unity 단위로 안개를 통해 얼마나 멀리 볼 수 있는지 결정합니다. 이 거리에서 안개는 배경 광원을 흡수하고 63%를 외부로 산란합니다. |
Size | 볼륨의 크기를 제어합니다. |
Blend Distance | Blend Distance는 볼륨의 안개 레벨에서 볼륨 외부의 안개 레벨까지의 리니어 페이드를 생성합니다. 이 값은 백분율이 아니고 Size 프로퍼티에서 정의되고 페이드가 시작하는 위치인 볼륨 경계 가장자리부터의 절대 거리입니다. Unity는 이 값을 0과 Size 프로퍼티의 가장 낮은 축 값의 절반 사이로 고정합니다. Normal 탭을 사용하면 모든 방향으로 균일한 페이드를 제공하는 Blend Distance라는 이름의 단일 플로트 값을 수정할 수 있습니다. Advanced 탭을 열면 축당 두 개의 페이드(각 방향마다 하나씩)를 사용할 수 있습니다. 예를 들어 x축에는 왼쪽에서 오른쪽으로 하나, 오른쪽에서 왼쪽으로 하나가 있을 수 있습니다. 거리를 0으로 설정하면 페이드가 가려지고, 거리를 1로 설정하면 페이드가 생성됩니다. |
Invert Blend | 페이드의 방향이 반전됩니다. 각 축의 Blend Distance를 해당하는 최댓값으로 설정하면 안개가 볼륨의 중앙에 유지되고 가장자리가 희미해집니다. 블렌딩을 반전하면 중앙이 희미해지고 가장자리가 유지됩니다. |
Density Mask Texture | 볼륨 내부에 매핑되는 3D 텍스처를 지정합니다. 밀도 볼륨은 텍스처의 알파 채널만 사용합니다. 텍스처의 값은 밀도 멀티플라이어 역할을 합니다. 텍스처 값이 0이면 밀도가 0인 볼륨이 되고, 텍스처 값이 1이면 원래의 상수형(균일형) 볼륨이 됩니다. |
Scroll Speed | 밀도 볼륨이 텍스처를 스크롤하는 속도(축당)를 지정합니다. 모든 축을 0으로 설정하면 밀도 볼륨이 텍스처를 스크롤하지 않고 안개가 고정됩니다. |
Tiling | 텍스처의 축당 타일링 속도를 지정합니다. 예를 들어 x축 컴포넌트를 2로 설정하면 텍스처가 볼륨 내부의 x축에서 2번 반복됩니다. |
밀도 마스크 텍스처 만들기
- 원하는 이미지 편집 소프트웨어에서 값이 0-1이고 크기가 1024x32인 그레이스케일 2D 텍스처를 준비합니다. 이 크기는 32x32x32 크기의 3D 텍스처를 설명하며, 32개의 슬라이스가 차례로 놓여 있습니다.
- 이 텍스처를 Unity 에디터로 임포트하고 Texture Import Settings를 다음과 같이 설정합니다.
2.1. Texture Type 을 Single Channel 로 설정합니다.
2.2. Channel 을 Alpha 로 설정합니다.
2.3 Read/Write Enabled 체크박스를 활성화합니다.
- Window > Rendering > Density Volume Texture Tool 로 이동합니다.
- 텍스처를 Slice Texture 필드에 드래그 앤 드롭한 후 Texture Slice Size 를 32로 설정합니다.
- Create 3D Texture 를 클릭하면, 툴이 밀도 마스크로 사용할 수 있는 다른 포맷의 텍스처를 하나 더 생성합니다.
- Density Volume 컴포넌트를 열고 생성한 텍스처를 Density Mask Texture 섹션의 Texture 필드에 할당합니다.
광원별 프로퍼티
[Light 컴포넌트]에는 입체 광원에 사용할 수 있는 다음과 같은 유용한 프로퍼티들이 있습니다.
- Emission Radius 는 채우기 조명을 시뮬레이션할 때 유용합니다. 이 프로퍼티는 씬에서 광원을 가상으로 "밀어내는" 방식으로 동작합니다. 따라서 펑추얼 광원의 코어가 부드러워집니다. 재투영으로 인한 고스팅 결함을 줄이려면 항상 0이 아닌 값을 사용하십시오.
- Volumetric Dimmer 는 안개에만 영향을 주며, HDRP가 표면에 사용하는 Light Dimmer를 대체합니다.
- Shadow Dimmer 는 안개에만 영향을 주며, HDRP가 표면에 사용하는 Shadow Dimmer를 대체합니다.