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.

복셀 전역 조명 사용

VoxelGI는 완전 실시간 전역 조명의 형태로 중소 규모 3D 장면에 사용하도록 고안되었습니다. VoxelGI는 GPU를 상당히 요구하므로 전용 그래픽 카드를 대상으로 할 때 사용하는 것이 가장 좋습니다.

중요

VoxelGI는 Forward+ 렌더러를 사용할 때만 지원되며 모바일 또는 호환성 렌더러는 지원되지 않습니다.

더 보기

VoxelGI가 귀하의 요구 사항에 적합한지 확실하지 않습니까? Godot 4에서 사용할 수 있는 GI 기술 비교는 :ref:`doc_introduction_to_global_illumination_comparison`를 참조하세요.

시각적 비교

VoxelGI가 비활성화되었습니다.

VoxelGI가 비활성화되었습니다.

VoxelGI가 활성화되었습니다.

VoxelGI가 활성화되었습니다.

설정하기

  1. Import Dock에서 Light Baking 옵션을 Static 또는 Static Lightmaps**로 설정하여 정적 레벨 지오메트리를 가져왔는지 확인하세요. 수동으로 추가된 MeshInstance3D 노드의 경우 검사기에서 **Global Illumination > Mode 속성이 **Static**으로 설정되어 있는지 확인하세요.

  2. 스크립트를 씬 독의 노드로 드래그 앤 드롭하기.

  3. 3D 뷰포트의 조작 기즈모를 드래그하여 VoxelGI 노드를 덮으려는 영역의 중앙으로 이동합니다. 그런 다음 3D 뷰포트의 빨간색 점을 드래그하여 VoxelGI의 범위를 조정합니다(또는 검사기에 값을 입력). VoxelGI의 범위가 불필요하게 크지 않은지 확인하세요. 그렇지 않으면 품질이 저하됩니다.

  4. VoxelGI 노드를 선택하고 3D 편집기 뷰포트 상단의 **Bake**를 클릭합니다. 이 작업을 완료하는 데 최소 몇 초가 걸립니다(VoxelGI 세분화 수 및 씬 복잡성에 따라 다름).

VoxelGI 범위 내에 포함된 메시 중 하나 이상이 전역 조명 모드가 **정적**으로 설정된 경우 씬 내에 간접 조명이 나타나는 것을 볼 수 있습니다.

참고

대량의 바이너리 데이터가 포함된 텍스트 기반 씬 파일이 부풀어오르는 것을 방지하려면 VoxelGIData 리소스가 항상 외부 바이너리 파일에 저장되어 있는지 확인하세요. 이 파일은 ``.tres``(텍스트 기반 리소스) 대신 ``.res``(바이너리 리소스) 확장자로 저장해야 합니다. VoxelGIData에 외부 바이너리 리소스를 사용하면 텍스트 기반 씬을 작게 유지하면서 빠르게 로드하고 저장할 수 있습니다.

노드 속성(Node Property)

베이킹하기 전에 VoxelGI 노드 검사기에서 다음 속성을 조정할 수 있습니다.

  • Subdiv: 값이 높을수록 간접 조명이 더욱 정확해지고 성능은 낮아지고 베이킹 시간은 길어지며 저장 공간 요구 사항은 늘어납니다.

  • 범위: 간접 조명이 구워져야 할 상자의 크기를 나타냅니다. 범위는 VoxelGI 노드의 원을 중심으로 배치됩니다.

다음 속성은 VoxelGI 노드가 구운 후 포함된 VoxelGIData *리소스*에서 조정될 수 있습니다.

  • 다이내믹 레인지(Dynamic Range): 간접조명에서 표현할 수 있는 최대 밝기입니다. 값이 높을수록 정밀도는 낮아지지만 간접광은 더 밝게 표현할 수 있습니다(밴딩 현상이 나타날 수 있음). 의심스러우면 변경하지 말고 그대로 두세요.

  • 에너지: 간접 조명의 전체 에너지입니다. 이는 발광 재료가 포함된 메시에서 방출되는 직접 조명 에너지에도 영향을 줍니다.

  • 편향: 런타임 시 복셀 버퍼 조회에 선택적인 편향이 추가되었습니다. 이는 자체 폐색 아티팩트를 방지하는 데 도움이 됩니다.

  • 일반 바이어스: **바이어스**와 비슷하지만 표면 법선을 기준으로 복셀 버퍼에 대한 조회를 오프셋합니다. 이는 또한 자체 폐색 아티팩트를 방지하는 데 도움이 됩니다. 값이 높을수록 거친 재질이 아닌 재질에서 보이는 자체 반사가 줄어들지만 가시광선 누출이 늘어나고 간접 조명이 더 밋밋해 보입니다. 조명 품질보다 자체 반사 숨기기를 우선시하려면 **바이어스**를 0.0``로 설정하고 **일반 바이어스**를 ``1.0``에서 ``2.0 사이의 값으로 설정하세요.

  • 전파: 반사된 간접 조명에 사용할 에너지 요소입니다. 값이 높을수록 조명이 더 밝고 확산됩니다(너무 밋밋해 보일 수 있음). **두 개의 바운스 사용**이 활성화되면 **전파**를 줄여 전체적으로 더 밝은 간접 조명을 보상할 수 있습니다.

  • 두 개의 바운스 사용: 활성화하면 조명이 한 번이 아닌 두 번 바운스됩니다. 그 결과 더욱 사실적으로 보이는 간접 조명이 만들어지고 반사에서도 간접 조명이 보이게 됩니다. 이를 활성화하면 일반적으로 눈에 띄는 성능 비용이 발생하지 않습니다.

  • 인테리어: 활성화되면 VoxelGI는 환경 하늘 조명을 고려하지 않습니다. 환경에서 빛이 새는 것을 방지하려면 실내 장면에서 활성화해야 합니다.

쿼터니언(quaternions) 으로 보간하기

VoxelGI를 사용할 때 올바른 시각적 효과를 보장하려면 씬(정적 또는 동적)의 *목적*에 따라 메시 및 조명의 전역 조명 속성을 구성해야 합니다.

이렇게 하고 싶어하는 몇 가지 이유가 있습니다:

  • 비활성화됨: VoxelGI 베이킹 시 메시가 고려되지 않습니다. 메시는 씬로부터 간접 조명을 *수신*하지만 씬에 간접 조명을 *기여*하지는 않습니다.

  • 정적(기본값): VoxelGI 베이킹 시 메쉬가 고려됩니다. 메시는 씬에 대한 간접 조명을 수신하고 *제공*합니다. 베이킹 후 메시가 어떤 방식으로든 변경되면 VoxelGI 노드를 다시 베이킹해야 합니다. 그렇지 않으면 간접 조명이 올바르지 않게 보입니다.

  • 동적: 메시는 VoxelGI 베이킹에 고려되지 않지만 여전히 실시간으로 씬에 간접 조명을 수신하고 제공*합니다. 이 옵션은 **정적**에 비해 훨씬 느립니다. 게임플레이 중에 크게 변경되는 대형 메시에는 **동적* 전역 조명 모드만 사용하세요.

참고

정적 베이킹 모드가 있는 메시의 경우 VoxelGI 베이킹 시스템은 사용자 정의 셰이더(ShaderMaterial)를 사용할 수 없습니다. 이러한 메쉬는 순수한 검은색으로 간주되며 빛을 차단하는 역할만 합니다. 이러한 개체에 대해 동적 베이킹 모드를 사용하여 VoxelGI가 사용자 정의 셰이더를 고려하도록 만들 수 있지만 이로 인해 성능 비용이 발생합니다.

:ref:`class_BaseMaterial3D`의 경우 현재 베이킹 중에 일부 속성이 무시됩니다. 재질의 알베도 또는 방출 텍스처가 특정 UV 매핑을 사용하여 디자인된 경우 시각적인 영향을 미칠 수 있습니다.

  • UV1 > 오프셋

  • 속도 배수

  • UV1 > 삼면

  • 방출 > UV2에서

또한 조명에 사용할 수 있는 베이크 모드는 3가지입니다(DirectionalLight3D, OmniLight3D 및 SpotLight3D).

  • 비활성화됨: VoxelGI 베이킹 시 조명이 고려되지 않습니다. 조명은 씬에 간접 조명을 제공하지 않습니다.

  • 정적: VoxelGI 베이킹 시 조명이 고려됩니다. 조명은 씬에 간접 조명을 제공합니다. 베이킹 후 조명이 어떤 방식으로든 변경되면 VoxelGI 노드를 다시 베이킹해야 합니다. 그렇지 않으면 간접 조명이 올바르지 않게 보입니다. 확실하지 않은 경우 레벨 조명에 이 모드를 사용하십시오.

  • 동적(기본값): VoxelGI 베이킹 시 조명은 고려되지 않지만 여전히 실시간으로 씬에 간접 조명을 제공합니다. 이 옵션은 정적**에 비해 속도가 느립니다. 게임플레이 중에 크게 변하는 조명에는 **동적 전역 조명 모드만 사용하세요.

참고

빛이 방출하는 간접 에너지의 양은 색상, 에너지 간접 에너지 특성에 따라 달라집니다. 특정 조명이 방출하는 직접광의 양에 영향을 주지 않고 간접 에너지를 다소간 방출하게 하려면 Light3D 검사기에서 간접 에너지 속성을 조정하세요.

더 보기

일반적인 사용 권장 사항은 :ref:`doc_introduction_to_global_illumination_gi_mode_recommendations`를 참조하세요.

VoxelGI 성능 및 품질 조정

VoxelGI는 상대적으로 까다롭기 때문에 최신 전용 GPU가 장착된 시스템에서 최고의 성능을 발휘합니다. 구형 전용 GPU 및 통합 그래픽에서는 합리적인 성능을 얻으려면 설정을 조정해야 합니다.

프로젝트 설정' Rendering > Global Illumination 섹션에서 VoxelGI 품질은 두 가지 방법으로 조정할 수도 있습니다.

  • 복셀 Gi > 품질: 높음 대신 **낮음**으로 설정하면 복셀 원뿔 추적은 6탭 대신 4탭만 사용합니다. 이렇게 하면 주변 폐색이 덜 뚜렷해지는 대신 렌더링 속도가 빨라집니다.

  • Gi > 절반 해상도 사용: 활성화되면 VoxelGI와 SDFGI 모두 GI 버퍼 렌더링이 절반 해상도로 사용됩니다. 예를 들어 3840×2160으로 렌더링할 때 GI 버퍼는 1920×1080 해상도로 계산됩니다. 이 옵션을 활성화하면 GPU 시간이 많이 절약되지만 얇은 디테일 주변에 눈에 띄는 앨리어싱이 발생할 수 있습니다.

위 설정을 보려면 프로젝트 설정 대화 상자에서 고급 토글을 활성화해야 합니다.

또한 VoxelGI 노드를 숨겨 VoxelGI를 완전히 비활성화할 수 있습니다. 이는 비교 목적으로 사용되거나 저사양 시스템의 성능을 향상시키는 데 사용될 수 있습니다.

VoxelGI 빛 누출 및 아티팩트 감소

VoxelGI를 베이킹한 후 레벨 지오메트리의 일부 지점에서 간접광이 새는 것을 볼 수 있습니다. 이 문제는 여러 가지 방법으로 해결할 수 있습니다.

  • 빛 누출과 아티팩트 모두 VoxelGI 노드를 이동하거나 회전한 다음 다시 구워보세요.

  • 일반적으로 빛 누출을 방지하려면 레벨 지오메트리가 완전히 밀봉되었는지 확인하세요. 이는 레벨을 디자인하는 데 사용되는 3D 모델링 소프트웨어에서 가장 잘 수행되지만 전역 조명 모드가 **정적**으로 설정된 원시 MeshInstance3D 노드도 사용할 수 있습니다.

  • 얇은 형상으로 인한 빛 누출을 방지하려면 문제의 형상을 더 두껍게 만드는 것이 좋습니다. 이것이 불가능할 경우 전역 조명 모드가 **정적**으로 설정된 기본 MeshInstance3D 노드를 추가합니다. VoxelGI를 다시 구운 다음 기본 MeshInstance3D 노드를 숨깁니다(VoxelGI에서는 계속 고려됩니다). 최적의 결과를 얻으려면 MeshInstance3D에 원래의 얇은 형상과 색상이 일치하는 재질이 있어야 합니다.

  • 반사 표면에 나타날 수 있는 아티팩트를 방지하려면 위에서 설명한 대로 VoxelGIData 리소스에서 바이어스 및/또는 **노멀 바이어스**를 늘려보세요. 이 값을 너무 높이지 마십시오. 그렇지 않으면 빛 누출이 더욱 두드러집니다.

카메라가 움직일 때 VoxelGI 노드가 나타났다가 사라지는 것을 발견했다면 이는 엔진이 한 번에 너무 많은 VoxelGI 인스턴스를 렌더링하기 때문일 가능성이 높습니다. Godot는 한 번에 8개의 VoxelGI 노드를 렌더링하도록 제한되어 있으며, 이는 일부 인스턴스가 깜박이기 시작하기 전에 최대 8개의 인스턴스가 카메라 뷰에 있을 수 있음을 의미합니다.

추가적으로, 성능상의 이유로 Godot는 화면의 주어진 픽셀에서 2개의 VoxelGI 노드 사이만 블렌딩할 수 있습니다. 2개 이상의 VoxelGI 노드가 겹치는 경우 카메라가 이동하거나 회전할 때 전역 조명이 깜박이는 것처럼 보일 수 있습니다.