Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

체적 안개 및 안개 볼륨

참고

볼류메트릭 포그는 Forward+ 렌더러에서만 지원되며 모바일 또는 호환성 렌더러에서는 지원되지 않습니다.

:ref:`doc_environment_and_post_processing`에 설명된 대로 Godot는 두 가지 유형의 안개, 즉 전통적인(비체적) 안개와 체적 안개를 포함한 다양한 시각 효과를 지원합니다. 기존 안개는 전체 씬에 동시에 영향을 미치며 :ref:`doc_fog_shader`로 사용자 정의할 수 없습니다.

원하는 경우 체적 안개를 비체적 안개와 동시에 사용할 수 있습니다.

이 가이드에서 다음 내용을 배울 것입니다:

  • Godot에서 체적 안개를 설정하는 방법.

  • 포그 볼륨은 무엇이며 "전역" 볼륨 포그와 어떻게 다른가요?

더 보기

이 문서 외에 여러가지 Godot 데모 프로젝트들도 살펴보면 좋습니다.

다음은 조명과 상호 작용하지 않는 기존 안개와 조명과 상호 작용할 수 있는 체적 안개를 비교한 것입니다.

../../_images/volumetric_fog_comparison.png

속성 그루핑(Grouping)

WorldEnvironment 노드의 환경 리소스에서 볼류메트릭 안개를 활성화한 후 다음 속성을 편집할 수 있습니다.

  • 밀도: 체적 안개의 기본 지수 밀도입니다. 이를 전역적으로 원하는 가장 낮은 밀도로 설정하십시오. FogVolumes는 특정 영역에서 이 밀도를 더하거나 빼는 데 사용할 수 있습니다. 0.0 값은 전역 체적 안개를 비활성화하는 동시에 FogVolumes가 특정 영역에 체적 안개를 표시하도록 허용합니다. 안개 렌더링은 실제 생활에서와 마찬가지로 기하급수적으로 향상됩니다.

  • 알베도: 조명과 상호작용할 때 체적 안개의 색상입니다. 안개와 안개는 흰색(Color(1, 1, 1, 1))에 가까운 알베도를 갖는 반면 연기는 더 어두운 알베도를 갖습니다.

  • 방출: 체적 안개에서 방출되는 빛입니다. 방출을 하더라도 체적 안개는 다른 표면에 빛을 투사하지 않습니다. 방출은 주변 색상을 설정하는 데 유용합니다. 체적 안개 효과는 단일 산란만 사용하므로 거친 그림자를 부드럽게 하려면 안개에 약간의 방출이 필요한 경향이 있습니다.

  • 방출 에너지: 체적 안개에서 방출되는 빛의 밝기입니다.

  • GI 주입: 체적 안개의 알베도 색상에 사용되는 전역 조명의 강도를 조정합니다. 0.0 값은 전역 조명이 체적 안개에 영향을 주지 않음을 의미합니다. 0.0 이상으로 설정하면 성능 비용이 적습니다.

  • 비등방성: 체적 안개를 통과할 때 빛이 산란되는 방향입니다. ``1.0``에 가까운 값은 거의 모든 빛이 앞으로 분산된다는 의미입니다. ``0.0``에 가까운 값은 빛이 모든 방향으로 균등하게 산란된다는 것을 의미합니다. ``-1.0``에 가까운 값은 빛이 대부분 뒤쪽으로 산란된다는 것을 의미합니다. 안개와 안개는 빛을 약간 앞쪽으로 산란시키는 반면, 연기는 빛을 모든 방향으로 균일하게 산란시킵니다.

  • 길이: 체적 안개가 계산되는 거리입니다. 더 넓은 범위에 걸쳐 안개를 계산하려면 값을 늘리고, 장거리가 필요하지 않을 때 더 많은 세부 정보를 추가하려면 값을 줄이세요. 최상의 안개 품질을 얻으려면 이 값을 최대한 낮게 유지하십시오.

  • 세부 분산: 프록셀 버퍼 길이에 따른 크기 분포입니다. 값이 높을수록 프록셀이 카메라에 더 가깝게 압축되고 더 많은 디테일이 카메라에 더 가깝게 배치됩니다.

  • Ambient Inject: 체적 안개에 사용되는 주변광의 강도를 조정합니다. 0.0 값은 주변광이 체적 안개에 영향을 주지 않음을 의미합니다. 0.0 이상으로 설정하면 성능 비용이 적습니다.

  • 하늘 영향: 배경 하늘에 그려야 하는 체적 안개의 양을 제어합니다. ``0.0``로 설정하면 체적 안개가 하늘 렌더링에 전혀 영향을 미치지 않습니다(FogVolume 포함).

Temporal Reprojection 섹션에는 두 가지 추가 속성이 제공됩니다.

  • 시간적 재투영 > 활성화됨: 볼륨 안개에서 시간적 재투영을 활성화합니다. 시간적 재투영은 현재 프레임의 볼륨 안개를 마지막 프레임의 볼륨 안개와 혼합하여 들쭉날쭉한 가장자리를 부드럽게 만듭니다. 성능 비용은 최소화되지만 FogVolume 및 Light3D의 "고스팅"이 이동하고 흔적이 남게 됩니다. 임시 재투영이 활성화된 경우 FogVolume 또는 Light3D를 너무 빠르게 이동하지 않도록 하십시오. 수명이 짧은 동적 조명 효과에는 고스팅을 방지하기 위해 **Volumetric Fog Energy**가 ``0.0``로 설정되어 있어야 합니다.

  • 시간적 재투영 > 양: 마지막 프레임을 현재 프레임과 혼합할 양입니다. 숫자가 높을수록 체적 안개가 더 부드러워지지만 "고스팅"이 훨씬 더 심해집니다. 값이 낮을수록 고스팅이 줄어들지만 프레임당 시간적 지터가 눈에 띄게 나타날 수 있습니다.

참고

비체적 안개와 달리 체적 안개에는 유한 범위가 있습니다. 이는 체적 안개가 넓은 세계를 완전히 덮을 수 없다는 것을 의미합니다. 결국 먼 곳에서는 렌더링이 중단되기 때문입니다.

플레이어로부터 먼 영역을 숨기려면 비체적 안개와 체적 안개를 동시에 활성화하고 그에 따라 밀도를 조정하는 것이 좋습니다.

체적 안개와의 빛 상호 작용

실제 생활에서 안개광 산란 동작을 시뮬레이션하기 위해 모든 조명 유형은 체적 안개와 상호 작용합니다. 각 조명이 체적 안개에 얼마나 영향을 미치는지는 각 조명의 Volumetric Fog Energy 속성을 사용하여 조정할 수 있습니다. 라이트에 그림자를 활성화하면 해당 그림자가 체적 안개에도 표시됩니다.

예술적인 이유로 안개등 상호 작용이 바람직하지 않은 경우 환경 리소스에서 **Volumetric Fog > Albedo**를 순수한 검정색으로 설정하여 전역적으로 비활성화할 수 있습니다. **Volumetric Fog Energy**를 ``0``로 설정하여 특정 조명에 대해 안개등 상호작용을 비활성화할 수도 있습니다. 이렇게 하면 체적 안개 계산에서 빛을 제외하여 성능도 약간 향상됩니다.

체적 조명 솔루션으로 체적 안개 사용

물리적으로 정확하지는 않지만 체적 조명 솔루션으로 작동하도록 체적 안개의 설정을 조정하는 것이 가능합니다. 즉, 조명이 없는 환경 부분은 더 이상 안개로 인해 어두워지지 않지만, 특정 영역에서는 빛이 여전히 안개를 더 밝게 만들 수 있습니다.

이는 체적 안개 밀도를 허용되는 가장 낮은 값 0보다 큰*(``0.0001``)으로 설정한 다음 조명의 **체적 안개 에너지* 속성을 기본값보다 훨씬 높은 값으로 늘려서 수행할 수 있습니다. 일반적으로 200.0``와 ``5000.0 사이의 값이 이에 적합합니다.

../../_images/volumetric_fog_lighting.png

성능과 품질의 균형

볼류메트릭 포그 성능과 품질을 조정하는 데 사용할 수 있는 몇 가지 프로젝트 설정이 있습니다.

  • 렌더링 > 환경 > 체적 안개 > 볼륨 크기: 카메라 X축 및 Y축에서 froxel 버퍼의 크기를 결정하는 데 사용되는 기본 크기입니다. 최종 크기는 화면 비율에 따라 조정되므로 실제 값은 설정된 값과 다를 수 있습니다. 더 자세한 안개를 얻으려면 더 큰 크기를 설정하고, 더 나은 성능을 얻으려면 더 작은 크기를 설정하십시오.

  • 렌더링 > 환경 > 체적 안개 > 볼륨 깊이: 체적 안개에 대해 프록셀 버퍼의 깊이를 따라 사용할 슬라이스 수입니다. 숫자가 낮을수록 더 효율적이지만 카메라 이동 중에 아티팩트가 나타날 수 있습니다.

  • 렌더링 > 환경 > 체적 안개 > 필터 사용: 통합 전에 체적 안개 효과 필터링을 활성화합니다. 이렇게 하면 안개가 상당히 흐려져 미세한 디테일이 줄어들 뿐만 아니라 거친 가장자리와 앨리어싱 아티팩트도 부드럽게 처리됩니다. 더 자세한 내용이 필요한 경우 비활성화합니다.

참고

체적 안개로 인해 특히 높은 밀도 수준에서 뷰포트에 밴딩이 나타날 수 있습니다. 밴딩 감소에 대한 지침은 :ref:`doc_3d_rendering_limitations_color_banding`를 참조하세요.

로컬 볼륨 안개에 안개 볼륨 사용

때로는 안개가 특정 영역으로 제한되기를 원할 수도 있습니다. 반대로, 전역 볼륨 안개를 원할 수도 있지만 특정 영역에서는 안개를 제외해야 합니다. 두 가지 접근 방식 모두 FogVolume 노드를 사용하여 따를 수 있습니다.

FogVolume 사용에 대한 빠른 시작 가이드는 다음과 같습니다.

  • 환경 속성에서 **Volumetric Fog**가 활성화되어 있는지 확인하세요. 전역 체적 안개가 바람직하지 않은 경우 **밀도**를 ``0.0``로 설정하세요.

  • 커스텀 노드 생성하기

  • FogVolume 노드의 Material 속성에 새로운 FogMaterial을 할당합니다.

  • FogMaterial에서 **Density**를 양수 값으로 설정하여 FogVolume 내의 밀도를 높이거나 음수 값으로 설정하여 전역 체적 안개에서 밀도를 뺍니다.

  • 필요에 따라 FogVolume의 범위와 모양을 구성합니다.

참고

카메라가 움직이거나 회전할 때 얇은 안개 볼륨이 깜박이는 것처럼 보일 수 있습니다. 이는 렌더링 > 환경 > 체적 안개 > 볼륨 깊이 프로젝트 설정을 늘리거나(성능 비용으로) 환경 볼륨 포그 속성에서 **길이**를 줄임으로써(성능 비용은 없지만 안개 범위가 더 낮음) 완화할 수 있습니다. 또는 FogVolume을 더 두껍게 만들고 **Material**에서 더 낮은 밀도를 사용할 수 있습니다.

노드 속성(Node Property)

  • 범위: Shape**가 **Ellipsoid, Cone, Cylinder 또는 Box**일 때 FogVolume의 크기입니다. **모양**이 **원추 또는 원통**인 경우 원추/원통이 범위 내에 맞게 조정됩니다. **Extents 속성을 통한 원뿔/원통 모양의 비균일 크기 조정은 지원되지 않지만 대신 FogVolume 노드 크기를 조정할 수 있습니다.

  • 모양: FogVolume의 모양입니다. Ellipsoid, Cone, Cylinder, Box 또는 **World**(전역 체적 안개 역할을 함)로 설정할 수 있습니다.

  • 재질: FogVolume에 사용되는 재질입니다. 내장 FogMaterial 또는 사용자 정의 ShaderMaterial(셰이더)일 수 있습니다.

Material 속성에서 **New FogMaterial**을 선택한 후 FogMaterial에서 다음 속성을 조정할 수 있습니다.

  • 밀도: FogVolume의 밀도입니다. 밀도가 높은 객체는 더 불투명하지만 줄무늬처럼 보이는 언더샘플링 아티팩트가 발생할 수 있습니다. 음수 값은 다른 FogVolumes 또는 전역 볼륨 안개에서 안개를 빼는 데 사용할 수 있습니다.

  • Albedo: FogVolume의 단일 산란 색상입니다. 내부적으로 멤버 알베도는 단일 산란으로 변환되며, 이는 다른 FogVolume 및 전역 볼륨 포그의 **Albedo**와 추가로 혼합됩니다.

  • 방출: FogVolume에서 방출되는 빛의 색상입니다. 방출된 빛은 다른 객체에 빛이나 그림자를 드리우지 않지만 광원과 독립적으로 FogVolume의 색상을 조절하는 데 유용할 수 있습니다.

  • 높이 감소: 월드 공간에서 높이가 증가함에 따라 높이 기반 안개의 밀도가 감소하는 비율입니다. 폴오프가 높으면 전환이 급격해지고, 폴오프가 낮으면 전환이 더 부드러워집니다. 0.0 값은 균일한 밀도의 안개를 생성합니다. 높이 임계값은 연관된 FogVolume의 높이에 따라 결정됩니다.

  • Edge Fade: FogVolume 가장자리의 경도입니다. 값이 높을수록 가장자리가 부드러워지고, 값이 낮을수록 가장자리가 단단해집니다.

  • 밀도 텍스처: FogVolume의 구성원 밀도를 조정하는 데 사용되는 3D 텍스처입니다. 이는 모든 종류의 정적 패턴으로 FogVolume 내의 안개 밀도를 변경하는 데 사용할 수 있습니다. 애니메이션 효과의 경우 사용자 정의 fog 셰이더 사용을 고려해보세요. :ref:`가져오기 도크 <doc_importing_images_changing_import_type>`에서 가져오기 유형을 변경하여 모든 이미지를 3D 텍스처로 가져올 수 있습니다.

행성 텍스처 만들기

Godot 4.1부터 절차적으로 3D 노이즈를 생성하는 데 사용할 수 있는 NoiseTexture3D 리소스가 있습니다. 이는 FogMaterial 밀도 텍스처에 매우 적합하여 보다 자세한 안개 효과를 얻을 수 있습니다.

FogMaterial 비교(밀도 텍스처가 있거나 없는 경우)

볼륨 크기 프로젝트 설정을 192로 설정하여 촬영한 스크린샷은 안개 속에서 고주파수 디테일을 더 잘 보이게 합니다.

이렇게 하려면 Density Texture 속성을 선택하고 **New NoiseTexture3D**를 선택하세요. 이 NoiseTexture3D를 클릭하여 편집한 다음 NoiseTexture3D 속성 하단에 있는 **Noise**를 클릭하고 **New FastNoiseLite**를 선택합니다. 안개 볼륨의 크기에 따라 노이즈 텍스처의 너비, 높이 및 깊이를 조정합니다.

성능을 향상시키려면 낮은 텍스처 크기(64×64×64 이하)를 사용하는 것이 좋습니다. 왜냐하면 FogVolume에서는 빈도가 높은 디테일을 알아차리기 어렵기 때문입니다. 좀 더 세밀한 밀도 변화를 표현하고 싶다면 프로젝트 설정에서 **렌더링 > 환경 > 볼류메트릭 포그 > 볼륨 크기**를 늘려야 하는데, 이는 성능 비용이 듭니다.

참고

NoiseTexture3D의 **색상 램프**는 FogMaterial 밀도 텍스처에 영향을 미치지만 텍스처의 빨간색 채널만 샘플링되므로 색상 램프의 빨간색 채널만 결과 밀도에 영향을 미칩니다.

그러나 색상 램프를 사용하면 텍스처에 따라 안개 볼륨이 착색되지 않습니다. 이를 달성하려면 Texture3D를 읽는 사용자 정의 셰이더를 사용해야 합니다.

커스텀 FogVolume 셰이더

이 페이지에서는 FogMaterial이 제공하는 내장 설정만 다룹니다. FogVolume 노드 내에서 안개 동작을 사용자 정의해야 하는 경우(예: 애니메이션 안개 생성), FogVolume 노드' 모양은 :ref:`doc_fog_shader`를 사용하여 사용자 정의할 수 있습니다.

쿼드를 사용하여 체적 안개 가짜 만들기

경우에 따라 체적 포그 대신 특별히 구성된 QuadMesh를 사용하는 것이 더 나을 수도 있습니다.

  • 쿼드는 모바일 및 호환성을 포함한 모든 렌더링 방법에서 작동합니다.

  • 쿼드는 부드럽게 보이기 위해 시간적 재투영이 필요하지 않으므로 레이저와 같이 빠르게 움직이는 동적 효과에 적합합니다. 또한 체적 안개가 효율적으로 수행할 수 없는 작은 세부 사항을 나타낼 수도 있습니다.

  • 쿼드는 일반적으로 볼류메트릭 포그보다 성능 비용이 낮습니다.

하지만 몇 가지 차이점은 있습니다:

  • 안개 효과는 특히 카메라가 안개에 들어갈 경우 덜 사실적인 감소를 나타냅니다.

  • 스프라이트가 겹칠 때 투명도 정렬 문제가 발생할 수 있습니다.

  • 카메라 근처에 스프라이트가 많으면 성능이 반드시 볼류메트릭 안개보다 나은 것은 아닙니다.

QuadMesh 기반 안개 스프라이트를 만들려면:

  1. Mesh 속성에 QuadMesh 리소스가 있는 만들기 MeshInstance3D 노드. 원하는 대로 크기를 설정합니다.

  2. 만들기 메시의 Material 속성에 새로운 StandardMaterial3D가 추가되었습니다.

  3. StandardMaterial3D에서 **Shading > Shading Mode**를 **Unshaded**로, **Billboard > Mode**를 **Enabled**로 설정하고, **Proximity Fade**를 활성화하고 **Distance Fade**를 **Pixel Alpha**로 설정합니다.

  4. Albedo > Texture**를 아래 텍스처로 설정합니다(마우스 오른쪽 버튼을 클릭하고 **다른 이름으로 저장… 선택).

    ../../_images/volumetric_fog_quad_mesh_texture.webp
  5. 알베도 텍스처를 설정한 후 Import Dock으로 이동하여 텍스처를 선택한 다음 압축 모드를 **무손실**로 변경하여 품질을 향상시킵니다.

안개의 색상은 Albedo > Color 속성을 사용하여 설정됩니다. 밀도는 색상의 알파 채널을 사용하여 설정됩니다. 최상의 결과를 얻으려면 QuadMesh의 크기에 따라 Proximity Fade > Distance**Distance Fade > Max Distance**를 조정해야 합니다.

선택적으로 모든 모서리가 솔리드 형상에 있는 방식으로 쿼드를 배치하는 경우 빌보드가 비활성화된 상태로 남아 있을 수 있습니다. 이는 바닥이 없는 구덩이와 같이 카메라가 들어갈 수 없는 대형 평면에 안개를 적용하는 데 유용할 수 있습니다.