물리 기반 하늘
물리 기반 하늘은 고도에 관해 기하급수적으로 밀도가 줄어드는 두 부분의 대기가 있는 구형 행성을 시뮬레이션합니다. 즉 해수면 위로 갈수록 대기의 밀도가 낮아집니다. 이 하늘 타입 구현에 대한 자세한 내용은 구현 세부 정보를 참조하십시오.
시뮬레이션은 선처리로 실행됩니다. 즉 매 프레임마다가 아닌 한 번만 실행됩니다. 시뮬레이션은 모든 광원 조합의 대기 산란과 뷰 각도를 평가한 다음 그 결과를 Unity가 런타임 시 다시 샘플링하는 몇몇 3D 텍스처에 저장합니다. 사전 계산은 씬 애그노스틱이며 물리 기반 하늘의 설정에만 의존합니다.
물리 기반 하늘의 대기는 다음과 같이 두 가지 파티클 타입으로 구성됩니다.
물리 기반 하늘을 사용하여 낮과 밤 동안 하늘을 시뮬레이션할 수 있습니다. 낮은 런타임 시 추가 비용 발생 없이 임의로 변경될 수 있습니다. 다음 이미지는 Unity Fontainebleau 데모의 물리 기반 하늘을 보여줍니다. Fontainebleau 데모에 대한 자세한 내용과 데모를 직접 다운로드하여 사용하는 방법에 대한 지침은 https://github.com/Unity-Technologies/FontainebleauDemo를 참조하십시오. 사용 가능한 Fontainebleau 데모는 2019.3 버전으로 낮 설정을 위한 물리 기반 하늘에만 사용할 수 있습니다.
물리 기반 하늘 사용
물리 기반 하늘은 볼륨 프레임워크를 사용합니다. Physically Based Sky 프로퍼티를 활성화하고 수정하려면 씬의 볼륨에 Physically Based Sky 오버라이드를 추가해야 합니다. 볼륨에 Physically Based Sky를 추가하려면 다음 단계를 따르십시오.
- 씬 또는 계층 구조 뷰에서 Volume 컴포넌트가 포함된 게임 오브젝트를 선택하여 인스펙터에서 확인합니다.
- 인스펙터에서 Add Override > Sky로 이동하여 Physically Based Sky를 선택합니다.
- 씬에 방향 광원이 포함되어 있지 않은 경우 새로 만듭니다(메뉴: GameObject > Light > Directional Light). 물리적으로 정확한 결과를 위해 광원의 강도를 130,000 lux로 설정합니다.
그 다음 Physically Based Sky를 사용하려면 볼륨을 설정해야 합니다. Visual Environment 오버라이드는 볼륨이 사용하는 하늘 타입을 제어합니다. Visual Environment 오버라이드에서 Sky 섹션으로 이동하여 Type을 Physically Based Sky로 설정합니다. 그러면 HDRP는 이 볼륨이 영향을 미치는 모든 카메라에 대해 Physically Based Sky를 렌더링합니다.
대기가 빛을 감쇠하는 양을 변경하려면 대기의 공기와 에어로졸 분자(참여 매체)의 밀도를 변경할 수 있습니다. 또한 에어로졸을 사용하여 실제 오염이나 안개를 시뮬레이션할 수 있습니다.
참고: Unity는 물리 기반 하늘을 초기화할 때 프로젝트의 프레임 속도를 몇 프레임 동안 떨어뜨릴 정도로 리소스를 소모하는 작업을 수행합니다. Unity는 이 작업을 완료하면 다음에 Unity가 이 볼륨을 초기화할 때 액세스할 수 있도록 캐시에 데이터를 저장합니다. 하지만 다른 프로퍼티가 있는 두 가지 물리 기반 하늘 볼륨이 있고 이 둘을 전환하는 경우 이 프레임 속도 저하가 발생할 수도 있습니다.
API
런타임 시 이 오버라이드에 액세스하여 제어하려면 볼륨 스크립팅 API를 사용합니다. 볼륨 시스템이 작동하는 방식으로 인해 표준 Unity 컴포넌트에 다른 방식으로 프로퍼티를 편집합니다. 각 프로퍼티에 오버라이드 상태가 있는 것과 마찬가지로 주의해야 할 다른 미묘한 차이가 있습니다. 이는 설정한 프로퍼티 값을 사용해야 하는지 또는 볼륨 프로파일에 저장된 기본값을 사용해야 하는지 볼륨 시스템에 알려줍니다. API를 올바르게 사용하는 방법에 대한 자세한 내용은 볼륨 스크립팅 API를 참조하십시오.
프로퍼티
모든 Volume 컴포넌트 오버라이드에서 프로퍼티를 편집하려면 프로퍼티 왼쪽에 있는 체크박스를 활성화합니다. 이는 또한 HDRP가 기본값이 아닌 Volume 컴포넌트에 대해 지정한 프로퍼티 값을 사용하도록 지시합니다. 체크박스를 비활성화하는 경우 HDRP는 설정한 프로퍼티를 무시하고, 해당 프로퍼티에 대한 볼륨의 기본값을 대신 사용합니다.
모델
프로퍼티 | 설명 |
---|---|
타입 | HDRP가 인스펙터를 간소화하기 위해 사용하는 프리셋을 나타냅니다. **Earth (Simple)**나 **Earth (Advanced)**를 선택하는 경우 인스펙터는 지구를 시뮬레이션하는 데 적합한 프로퍼티만 보여줍니다. |
행성
프로퍼티 | 설명 |
---|---|
Spherical Mode | Spherical Mode를 활성화합니다. Spherical Mode인 경우 행성의 위치를 지정할 수 있습니다. 그렇지 않으면 행성은 항상 월드 공간 x-z 평면의 카메라 아래에 있습니다. |
Planetary Radius | 행성의 반지름(미터)입니다. 반지름은 행성의 중심에서 해수면까지의 거리입니다. Spherical Mode에서만 사용할 수 있습니다. |
Planet Center Position | 행성 중심의 월드 공간 포지션(미터)입니다. 이는 사전 계산에 영향을 주지 않습니다. Spherical Mode에서만 사용할 수 있습니다. |
Sea Level | 행성 해수면의 월드 공간 y 좌표(미터)입니다. Spherical Mode에서 사용할 수 없습니다. |
Planet Rotation | 행성의 방향입니다. |
Ground Color Texture | 행성 표면을 나타내는 텍스처를 지정합니다. |
Ground Tint | HDRP가 Ground Color Texture에 색조를 정하기 위해 사용하는 컬러를 지정합니다. |
Ground Emission Texture | 행성 표면의 이미시브 영역을 나타내는 텍스처를 지정합니다. |
Ground Emission Multiplier | HDRP가 Ground Emission Texture에 적용하는 멀티플라이어입니다. |
우주
이 섹션을 표시하려면 Type을 Earth (Advanced) 또는 Custom Planet으로 설정합니다.
프로퍼티 | 설명 |
---|---|
Space Rotation | 우주의 방향입니다. |
Space Emission Texture | 우주의 이미시브 영역을 나타내는 텍스처를 지정합니다. |
Space Emission Multiplier | HDRP가 Space Emission Texture에 적용하는 멀티플라이어입니다. |
공기
이 섹션을 표시하려면 Type을 Custom Planet으로 설정합니다.
프로퍼티 | 설명 |
---|---|
Air Maximum Altitude | 해수면에서 대기 레이어의 뎁스(미터 단위)는 공기 파티클로 구성됩니다. 이는 높이 기반 밀도 감쇠 속도를 제어합니다. HDRP는 이 고도에서 공기 밀도가 무시해도 될 정도로 작다고 가정합니다. |
Air Density R | 관찰자 바로 위 하늘(천정) 지점의 공기에 대한 빨강 컬러 채널 불투명도입니다. 이는 천정의 공기 컬러에 바로 영향을 줍니다. |
Air Density G | 관찰자 바로 위 하늘(천정) 지점의 공기에 대한 초록 컬러 채널 불투명도입니다. 이는 천정의 공기 컬러에 바로 영향을 줍니다. |
Air Density B | 관찰자 바로 위 하늘(천정) 지점의 공기에 대한 파랑 컬러 채널 불투명도입니다. 이는 천정의 공기 컬러에 바로 영향을 줍니다. |
Air Tint | 공기 분자(컬러 채널당)의 단일 산란 알베도입니다. 값이 0이면 분자를 흡수하고 값이 1이면 분자를 산란합니다. |
에어로졸
프로퍼티 | 설명 |
---|---|
Aerosol Maximum Altitude | 해수면에서 대기 레이어의 뎁스(미터 단위)는 에어로졸 파티클로 구성됩니다. 이는 높이 기반 밀도 감쇠 속도를 제어합니다. HDRP는 이 고도에서 공기 밀도가 무시해도 될 정도로 작다고 가정합니다. |
Aerosol Density | 관찰자 바로 위 하늘(천정) 지점의 에어로졸에 대한 불투명도입니다. 이는 천정의 에어로졸 컬러에 바로 영향을 줍니다. |
Aerosol Tint | 에어로졸 분자(컬러 채널당)의 단일 산란 알베도입니다. 값이 0이면 분자를 흡수하고 값이 1이면 분자를 산란합니다. |
Aerosol Anisotropy | 이방성 방향을 지정합니다. • 전방 산란의 경우 이 값을 1로 설정합니다. • 이방성을 거의 등방성으로 만들려면 이 값을 0으로 설정합니다. • 후방 산란의 경우 이 값을 -1로 설정합니다. 이방성 값이 높은 경우 다음을 따릅니다. • 광원 경로와 뷰 방향이 정렬되면 밝은 대기/안개 효과가 나타납니다. • 광원 경로와 뷰 방향이 정렬되지 않으면 흐릿한 대기/안개 효과가 나타납니다. • 이방성이 0이면 대기와 안개는 뷰 방향과 관계없이 비슷하게 보입니다. |
예술적 오버라이드
프로퍼티 | 설명 |
---|---|
Color Saturation | 하늘의 컬러에 대한 채도를 제어합니다. |
Alpha Saturation | 하늘의 불투명도에 대한 채도를 제어합니다. |
Alpha Multiplier | HDRP가 하늘의 불투명도에 적용하는 멀티플라이어입니다. |
Horizon Tint | HDRP가 수평선에 있는 하늘의 색조를 정하기 위해 사용하는 컬러를 지정합니다. |
Horizon Zenith Shift | HDRP가 Horizon Tint와 Zenith Tint 간에 블렝딩하는 방법을 제어합니다. 이 값을 -1로 설정하면 Zenith Tint가 수평선 아래로 확장됩니다. 이 값을 1로 설정하면 Horizon Tint가 천정 위로 확장됩니다. |
Zenith Tint | HDRP가 관찰자 바로 위의 하늘(천정)의 지점에 색조를 정하는 데 사용하는 컬러를 지정합니다. |
기타(Miscellaneous)
프로퍼티 | 설명 |
---|---|
Number Of Bounces | 산란 이벤트의 수입니다. 이는 하늘 시각 요소에 대한 품질을 높이지만 또한 사전 계산 시간도 늘립니다. |
Intensity Mode | 드롭다운을 사용하여 HDRP가 하늘 강도를 계산하기 위해 사용하는 방법을 선택합니다. • Exposure: HDRP는 EV100으로 노출 값에서 강도를 계산합니다. • Multiplier: HDRP는 플랫 멀티플라이어에서 강도를 계산합니다. |
- Exposure | HDRP가 씬에 환경 광원으로 적용하는 노출입니다. HDRP는 2를 Exposure 값으로 제곱하여 씬의 환경 광원을 계산합니다. |
- Multiplier | HDRP가 씬에 환경 광원으로 적용하는 멀티플라이어입니다. HDRP는 씬의 환경 광원을 이 값과 곱합니다. 이 프로퍼티를 표시하려면 Intensity Mode를 Multiplier로 설정합니다. |
Update Mode | HDRP가 하늘 환경을 업데이트하는 속도(주변 및 반사 프로브 사용)입니다. • On Changed: HDRP는 하늘 프로퍼티 중 하나가 변경되면 하늘 환경을 업데이트합니다. • On Demand: HDRP는 스크립트에서 하늘 환경 업데이트를 수동으로 호출할 때까지 대기합니다. • Realtime: HDRP는 Update Period가 정의한 일정 간격으로 하늘 환경을 업데이트합니다. |
- Update Period | HDRP가 하늘 환경을 업데이트하는 기간(초 단위)입니다. HDRP가 매 프레임마다 하늘 환경을 업데이트하게 하려면 값을 0으로 설정합니다. 이 프로퍼티는 Update Mode를 Realtime으로 설정하는 경우에만 표시됩니다. |
Include Sun In Baking | 하늘을 위해 생성된 광원과 반사 프로브에 태양면이 포함되어 있는지 여부를 나타냅니다. 이 정보가 유용한 이유에 대해서는 환경 조명을 참조하십시오. |
구현 세부 정보
이 하늘 타입은 논문 Precomputed Atmospheric Scattering (Bruneton과 Neyret 저, 2008)에 서술된 방법의 실제 구현입니다.
이 기술은 항상 행성의 표면 위에서 씬을 본다고 가정합니다. 즉 카메라가 행성의 표면 아래로 가면 하늘은 카메라가 지면에 있는 경우 수행하는 대로 렌더링됩니다. 행성의 표면 위치는 Spherical Mode를 활성화하거나 비활성화하는지에 따라 다릅니다.
- Spherical Mode를 활성화하는 경우 Planetary Radius와 Planet Center Position 프로퍼티는 표면의 위치를 정의합니다. 이 모드에서 표면은 Planet Center Position에 설정된 포지션에서 떨어진 Planetary Radius에 설정된 거리에 있습니다.
- 그렇지 않으면 Sea Level 프로퍼티는 표면의 위치를 정의합니다. 이 모드에서 표면은 xz 평면에서 끝없이 뻗어나가며 Sea Level은 월드 공간 높이를 설정합니다.
각 모드의 기본 값은 행성의 표면이 씬 원점에서 y축 위의 0에 있게 합니다. Spherical Mode에 대한 기본 값이 지구를 시뮬레이션하므로 반지름이 너무 커서 씬 환경을 생성할 때 표면을 평평하게 간주할 수 있습니다. 씬 환경의 일부 영역이 현재 표면 높이 아래에 있도록 하려면 씬 환경을 수직으로 오프셋하여 가장 낮은 영역이 y축의 0 위에 있게 하거나 표면 높이를 줄입니다. 표면 높이를 줄이려면 다음을 따릅니다.
Spherical Mode에 있는 경우 Planetary Radius를 감소하거나 Planet Center Position을 아래로 내립니다.
Spherical Mode에 있지 않은 경우 Sea Level을 감소합니다.
레퍼런스 리스트
- Bruneton, Eric, Fabrice Neyret 저. 2008. “Precomputed Atmospheric Scattering.” Computer Graphics Forum 27권 4호(2008): 1079–86. https://doi.org/10.1111/j.1467-8659.2008.01245.x.