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.

CGS 노드 소개

키네마틱 바디란 무엇인가?

*전역 조명*은 직접광(광원에서 직접 나오는 빛)과 간접광(표면에서 반사되는 빛)을 모두 사용하는 조명 시스템을 설명하는 데 사용되는 포괄적인 용어입니다. 3D 렌더링 엔진에서 전역 조명은 사실적인 조명을 구현하는 데 가장 중요한 요소 중 하나입니다. 전역 조명은 표면에서 반사되는 빛, 발광 물질에서 방출되는 빛과 같이 빛이 실제 생활에서 어떻게 동작하는지 모방하는 것을 목표로 합니다.

아래 예에서 전체 씬는 발광 재료(상단의 흰색 사각형)로 조명됩니다. 뒷면의 흰색 벽과 천장은 벽에 가까운 빨간색과 녹색으로 물들어 있습니다. 색상이 지정된 벽에 반사되는 빛이 씬의 나머지 부분으로 다시 반사되기 때문입니다.

../../../_images/global_illumination_example.webp

전역 조명은 몇 가지 주요 개념으로 구성됩니다.

간접 확산 조명

카메라 각도에 따라 변하지 않는 조명입니다. 간접 확산 조명에는 두 가지 주요 소스가 있습니다.

  • 표면에서 빛이 *반사*됩니다. 이 반사된 조명은 재질의 알베도 색상과 곱해집니다. 반사된 조명은 다른 표면에 반사될 수 있으며 빛 감쇠로 인해 충격이 감소합니다. 실생활에서 빛은 무한한 횟수만큼 반사됩니다. 그러나 성능상의 이유로 게임 엔진에서는 이를 시뮬레이션할 수 없습니다. 대신 바운스 수는 일반적으로 1 또는 2(또는 라이트맵을 베이킹할 경우 최대 16)로 제한됩니다. 바운스 수가 많을수록 성능이 저하되거나 베이킹 시간이 길어지는 대신 음영 처리된 영역에서 더 사실적인 빛 감소가 발생합니다.

  • 발광 재료는 표면에 반사될 수 있는 빛을 방출할 수도 있습니다. 이는 *영역 조명*의 형태로 작동합니다. OmniLight3D 또는 SpotLight3D 노드를 사용하여 무한히 작은 점이 빛을 방출하는 대신, 결정된 크기의 영역이 자체 표면을 사용하여 빛을 방출합니다.

직접 확산 조명은 이미 조명 노드 자체에 의해 처리됩니다. 이는 전역 조명 알고리즘이 간접 조명만 표현하려고 한다는 것을 의미합니다.

다양한 전역 조명 기술은 간접 확산 조명을 표현하기 위해 다양한 수준의 정확도를 제공합니다. 자세한 내용은 이 페이지 하단의 비교표를 참조하세요.

작은 개체에 대해 보다 정확한 주변 폐색을 제공하기 위해 SSAO(화면 공간 주변 폐색)를 environment 설정에서 활성화할 수 있습니다. SSAO는 상당한 성능 비용을 발생시키므로 저사양 하드웨어를 대상으로 하는 경우에는 반드시 비활성화하십시오.

참고

간접 확산 조명은 상세한 텍스처가 없는 장면에서 색상 밴딩의 원인이 될 수 있습니다. 이로 인해 조명 그라데이션이 부드럽지 않고 대신 눈에 띄는 "계단식" 효과가 나타납니다. 이 효과를 줄이는 방법은 3D 렌더링 제한 문서의 컬러 밴딩 섹션을 참조하세요.

스페큘러 조명

반사광 조명은 반사*라고도 합니다. 카메라 각도에 따라 밝기가 달라지는 조명입니다. 이 반사 조명은 *직접 또는 *간접*일 수 있습니다.

대부분의 전역 조명 기술은 반사 조명을 렌더링하는 방법을 제공합니다. 그러나 반사 조명이 렌더링되는 정확도의 정도는 기술마다 크게 다릅니다. 자세한 내용은 이 페이지 하단의 비교표를 참조하세요.

작은 개체에 대해 보다 정확한 반사를 제공하기 위해 environment 설정에서 화면 공간 반사(SSR)를 활성화할 수 있습니다. SSR은 성능 비용이 상당히 높기 때문에(SSAO보다 훨씬 더 높음) 저사양 하드웨어를 대상으로 할 때는 반드시 비활성화하는 것이 좋습니다.

어떤 이동 메서드를 사용해야 할까요?

사용할 전역 조명(GI) 기술을 결정할 때 염두에 두어야 할 몇 가지 기준이 있습니다.

  • 성능. 실시간 GI 기술은 일반적으로 준실시간 또는 베이크된 기술에 비해 비용이 더 많이 듭니다. GI 렌더링 비용의 대부분은 CPU가 아닌 GPU에 소비됩니다.

  • 시각적. 최상의 성능을 발휘하지 못하는 것 외에도 실시간 GI 기술은 일반적으로 최상의 시각적 출력을 제공하지 않습니다. 실시간 GI의 동적 특성을 쉽게 눈에 띄지 않는 대부분 정적 씬의 경우 특히 그렇습니다. 시각적 품질을 극대화하는 것이 목표라면 베이크된 기술을 사용하면 더 좋아 보이고 빛 누출이 줄어드는 경우가 많습니다.

  • 실시간 기능. 일부 GI 기술은 완전히 실시간인 반면 다른 기술은 준실시간이거나 전혀 실시간이 아닙니다. 준실시간 기술에는 완전 실시간 기술에는 없는 제한 사항이 있습니다. 예를 들어 동적 개체는 씬에 발광 조명을 제공하지 않을 수 있습니다. 비실시간 기술은 모든 형태의 동적 GI를 지원하지 않으므로 필요한 경우 다른 기술을 사용하여 위조해야 합니다(예: 발광 표면 근처에 위치 조명 배치). 실시간 능력은 절차적으로 생성된 수준에서 GI 기술의 실행 가능성에도 영향을 미칩니다.

  • 사용자 작업 필요. 일부 GI 기술은 완전 자동인 반면, 다른 기술은 사용자 측에서 신중한 계획과 수동 작업이 필요합니다. 시간 예산에 따라 일부 GI 기술이 다른 기술보다 선호될 수 있습니다.

다음은 Godot에서 사용할 수 있는 모든 전역 조명 기술을 비교한 것입니다:

성능

성능이 가장 빠른 것부터 가장 느린 것 순으로:

  • 반사(Reflections)

    • 업데이트 모드가 항상**으로 설정된 ReflectionProbe는 업데이트 모드가 **한 번**(기본값)로 설정된 프로브보다 훨씬 비쌉니다. **Once 업데이트 모드를 사용할 때 통합 그래픽에 적합합니다. 모든 렌더러에서 사용 가능합니다.

  • 리터럴

    • 조명은 간접 조명으로만 베이킹하거나 조명별로 완전히 베이킹하여 성능을 더욱 향상시킬 수 있습니다. 하이브리드 설정을 사용할 수 있습니다(예: 실시간 방향 조명 및 완전히 구워진 위치 조명 포함). 베이킹하기 전에 방향 정보를 활성화하여 적은 성능 비용(및 더 큰 파일 크기 비용)으로 시각적 효과를 향상할 수 있습니다. 통합 그래픽에 적합합니다. 모든 렌더러에서 사용 가능합니다. 그러나 라이트맵을 베이킹하려면 RenderingDevice를 지원하는 하드웨어가 필요합니다.

  • 복셀GI:

    • 베이킹의 세분화 수는 성능과 품질 간의 균형을 맞추기 위해 조정될 수 있습니다. VoxelGI 렌더링 품질은 프로젝트 설정에서 조정할 수 있습니다. 선택적으로 렌더링을 절반 해상도(그런 다음 선형 크기 조정)로 수행하여 성능을 크게 향상시킬 수 있습니다. 사용할 수 없음 모바일 또는 호환성 렌더러를 사용하는 경우.

  • GLES3: 스크린 스페이스 앰비언트 어클루전(SSAO).

    • SSIL 품질과 블러 패스 수는 프로젝트 설정에서 조정할 수 있습니다. 기본적으로 SSIL 렌더링은 합리적인 성능 수준을 보장하기 위해 절반 해상도(그런 다음 선형 크기 조정)로 수행됩니다. 사용할 수 없음 모바일 또는 호환성 렌더러를 사용하는 경우.

  • SDFGI:

    • 캐스케이드 수는 성능과 품질의 균형을 맞추기 위해 조정될 수 있습니다. 프레임당 투사되는 광선 수는 프로젝트 설정에서 조정할 수 있습니다. 선택적으로 렌더링을 절반 해상도(그런 다음 선형 크기 조정)로 수행하여 성능을 크게 향상시킬 수 있습니다. 사용할 수 없음 모바일 또는 호환성 렌더러를 사용하는 경우.

비주얼

비교를 위해 전역 조명 옵션을 사용하지 않은 3D 씬는 다음과 같습니다.

어떤 형태의 전역 조명도 없는 3D 씬(일정한 환경 조명만 해당) 카메라 근처의 상자와 구는 모두 동적 개체입니다.

어떤 형태의 전역 조명도 없는 3D 씬(일정한 환경 조명만 해당) 카메라 근처의 상자와 구는 모두 동적 개체입니다.

다음은 Godot의 다양한 전역 조명 기술을 비교하는 방법입니다:

  • VoxelGI: 평균 반사와 간접 조명이 좋지만 누출에 주의하세요.

    • VoxelGI는 복셀 기반 특성으로 인해 벽과 바닥이 너무 얇을 경우 빛 누출이 발생합니다. 모든 솔리드 표면의 두께가 적어도 하나의 복셀만큼 두꺼운지 확인하는 것이 좋습니다.

      경사진 표면에서도 줄무늬 아티팩트가 보일 수 있습니다. 이 경우 바이어스 속성을 조정하거나 VoxelGI 노드를 회전하면 이 문제를 해결하는 데 도움이 될 수 있습니다.

      VoxelGI가 작동 중입니다.

      VoxelGI가 작동 중입니다.

  • SDFGI: 평균 반사와 간접 조명이 좋지만 누수와 눈에 보이는 계단식 변화에 주의하세요.

    • GI 디테일 수준은 카메라와 표면 사이의 거리에 따라 달라집니다.

      Use Occlusion 속성을 활성화하면 누출을 크게 줄일 수 있습니다. 이는 성능 비용이 적지만 VoxelGI에 비해 누출이 적은 경우가 많습니다.

      카메라가 빠르게 움직일 때 캐스케이드 시프트가 보일 수 있습니다. 이는 캐스케이드 크기를 조정하거나 안개를 사용하여 눈에 띄지 않게 만들 수 있습니다.

      함수를 정의합니다.

      함수를 정의합니다.

  • SSIL(화면 공간 간접 조명): 평균 간접 조명의 보조 광원이 좋지만 반사는 없습니다.

    • SSIL은 VoxelGI, SDFGI 또는 LightmapGI와 같은 다른 GI 기술을 보완하는 데 사용되도록 설계되었습니다. SSIL은 자체적으로 대형 구조물에 정확한 간접 조명을 제공할 수 없기 때문에 소규모 세부 사항에 가장 적합합니다. SSIL은 다른 GI 기술이 소규모 세부 정보나 동적 개체를 캡처하지 못하는 상황에서 실시간 간접 조명을 제공할 수 있습니다. 화면 공간 특성으로 인해 특히 개체가 화면에 들어오고 나갈 때 일부 아티팩트가 발생합니다. SSIL은 (후처리 전) 마지막 프레임의 색상을 사용하여 작동합니다. 즉, 발광 데칼과 사용자 정의 셰이더가 포함됩니다(화면에 존재하는 한).

      SSIL이 작동 중입니다(다른 GI 기술 없음). 노란색 상자 주변의 발광 조명을 확인하세요.

      SSIL이 작동 중입니다(다른 GI 기술 없음). 노란색 상자 주변의 발광 조명을 확인하세요.

  • LightmapGI: 좋아 탁월한 간접 조명, 적절한 반사(옵션).

    • 이는 빛이 반사되는 횟수를 2 이상(최대 16)으로 늘릴 수 있는 유일한 기술입니다. 방향 정보가 활성화되면 SH(구형 고조파)가 사용되어 흐릿한 반사를 제공합니다.

      LightmapGI가 작동 중입니다. 여기서는 간접 조명만 구웠지만 직접 조명도 구울 수 있습니다.

      LightmapGI가 작동 중입니다. 여기서는 간접 조명만 구웠지만 직접 조명도 구울 수 있습니다.

  • ReflectionProbe: 평균 반사는 좋지만 간접 조명이 좋지 않습니다.

    • 간접 조명을 비활성화하거나, 프로브 전체에 일정한 색상이 퍼지도록 설정하거나, 프로브 환경에서 자동으로 읽을 수 있습니다(그리고 큐브맵으로 적용). 이는 본질적으로 로컬 주변 조명 역할을 합니다. 반사와 간접 조명은 근처의 다른 프로브와 혼합됩니다.

      ReflectionProbe가 작동 중입니다(다른 GI 기술 없음). 반사 구를 주목하세요.

      ReflectionProbe가 작동 중입니다(다른 GI 기술 없음). 반사 구를 주목하세요.

실시간 조명:

  • VoxelGI: 좋아 완전 실시간.

    • 간접 조명과 반사는 완전히 실시간입니다. 동적 객체는 GI를 수신하고 *발광 표면을 통해 GI에 기여할 수 있습니다. 맞춤형 셰이더는 자체 빛을 방출할 수도 있으며, 이는 정확하게 방출됩니다.

      절차적으로 생성된 레벨 *미리 생성된 경우*(게임플레이 도중이 아닌)에 실행 가능합니다. 베이킹을 완료하려면 몇 초 이상이 필요하지만 편집기와 내보낸 프로젝트 모두에서 수행할 수 있습니다.

  • SDFGI: 평균 준실시간.

    • 캐스케이드는 실시간으로 생성되므로 절차적으로 생성된 레벨(게임플레이 중 구조가 생성되는 경우 포함)에 대해 SDFGI를 실행할 수 있습니다.

      동적 객체는 GI를 *수신*할 수 있지만 GI에 *기여*할 수는 없습니다. 방출 조명은 객체가 캐스케이드에 들어갈 때만 업데이트되므로 느리게 움직이는 객체에는 여전히 작동할 수 있습니다.

  • SSIL(화면 공간 간접 조명): 좋아 완전 실시간.

    • SSIL은 정적 조명과 동적 조명 모두에서 작동합니다. 또한 정적 및 동적 차단기(방출 재질 포함)와 함께 작동합니다.

  • LightmapGI: 그리고 베이크되었으므로 실시간이 아닙니다.

    • 간접 조명과 SH 반사는 모두 베이킹되며 런타임 시 변경할 수 없습니다. 실시간 GI는 :ref:`실시간 위치 조명과 같은 다른 수단 <doc_faking_global_illumination>`을 통해 시뮬레이션되어야 합니다. 동적 객체는 사용자가 자동 또는 수동으로 배치할 수 있는 라이트 프로브(LightmapProbe 노드)를 통해 간접 조명을 받습니다. 라이트맵 베이킹은 편집기에서만 가능하므로 절차적으로 생성된 레벨에는 실행 가능하지 않습니다.

  • ReflectionProbe: 평균 선택적으로 실시간.

    • 기본적으로 프로브가 이동되면 반사가 업데이트됩니다. 업데이트 모드가 **항상**(비싼 비용)으로 설정된 경우 가능한 한 자주 업데이트됩니다.

    • 간접 조명은 사용자가 수동으로 구성해야 하지만, 뒤에서 값비싼 계산을 발생시키지 않고 런타임에 변경할 수 있습니다. 이를 통해 절차적으로 생성된 레벨에 대해 ReflectionProbe를 실행할 수 있습니다.

사용자 작업이 필요함

  • VoxelGI: 하나 이상의 VoxelGI 노드를 생성하고 구워야 합니다.

    • 좋은 결과를 얻으려면 범위를 올바르게 조정해야 합니다. 또한 노드를 회전하고 다시 베이킹하면 특정 상황에서 누출이나 줄무늬 아티팩트를 방지하는 데 도움이 될 수 있습니다. 베이킹 시간은 빠릅니다. 보통 복잡도가 중간인 씬의 경우 10초 미만입니다.

  • SDFGI: 아주 적습니다.

    • SDFGI는 완전 자동입니다. 환경 리소스에서만 활성화하면 됩니다. 필요한 유일한 수동 작업은 MeshInstances의 베이킹 모드 속성을 올바르게 설정하는 것입니다. 노드를 생성할 필요가 없으며 베이킹도 필요하지 않습니다.

  • SSIL(화면 공간 간접 조명): 매우 적습니다.

    • SSIL은 완전 자동입니다. 환경 리소스에서만 활성화하면 됩니다. 노드를 생성할 필요가 없으며 베이킹도 필요하지 않습니다.

  • LightmapGI: UV2 설정 및 베이킹이 필요합니다.

    • 정적 메쉬는 UV2 및 라이트맵 생성이 활성화된 상태에서 다시 가져와야 합니다. 전용 GPU에서는 GPU 기반 라이트맵 베이킹 덕분에 베이크 시간이 상대적으로 빠릅니다. 보통 복잡성이 중간 정도인 씬의 경우 1분 미만입니다.

  • ReflectionProbe: 사용자가 수동으로 배치합니다.

요약

어떤 GI 기술을 사용해야 할지 확실하지 않은 경우:

  • 데스크톱 게임의 경우 최소한의 설정이 필요하므로 먼저 :ref:`SDFGI <doc_using_sdfgi>`로 시작하는 것이 좋습니다. 필요한 경우 나중에 다른 GI 기술로 전환하세요. 저사양 GPU 및 통합 그래픽의 성능을 향상하려면 게임 설정에서 SDFGI 또는 :ref:`VoxelGI <doc_using_voxel_gi>`를 비활성화하는 옵션을 추가하는 것이 좋습니다. SDFGI는 환경 리소스에서 비활성화할 수 있으며, VoxelGI는 VoxelGI 노드를 숨겨 비활성화할 수 있습니다. 고급 설정에서 시각적 효과를 더욱 향상하려면 게임 설정에서 SSIL을 활성화하는 옵션을 추가하세요.

  • 모바일 게임의 경우 LightmapGI 및 :ref:`ReflectionProbes <doc_reflection_probes>`가 유일하게 지원되는 옵션입니다. :ref:`doc_introduction_to_global_illumination_alternatives`도 참조하세요.

더 보기

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

메시와 조명에 어떤 전역 조명 모드를 사용해야 합니까?

어떤 전역 조명 기술을 사용하든 일반적으로 "더 나은" 전역 조명 모드는 없습니다. 그래도 메시에 대한 몇 가지 권장 사항은 다음과 같습니다.

  • 정적 레벨 지오메트리의 경우 정적 전역 조명 모드*(기본값)*를 사용합니다.

  • 작은 동적 형상과 플레이어/적의 경우 비활성화 전역 조명 모드를 사용하세요. 작은 동적 지오메트리는 복셀보다 작은 지오메트리로 인해 상당한 양의 간접 조명에 기여할 수 없습니다. 작은 동적 개체에 대한 간접 조명이 필요한 경우 개체의 부모인 OmniLight3D 또는 SpotLight3D 노드를 사용하여 시뮬레이션할 수 있습니다.

  • 대형 동적 레벨 지오메트리(예: 움직이는 기차)의 경우 동적 전역 조명 모드를 사용하세요. SDFGI와 LightmapGI는 동적 객체에 대한 전역 조명을 지원하지 않으므로 이는 VoxelGI에만 영향을 미칩니다.

라이트 베이크 모드에 대한 몇 가지 권장 사항은 다음과 같습니다.

  • 정적 레벨 조명의 경우 Static 베이킹 모드를 사용하세요. 정적 모드는 깜박이는 횃불과 같이 게임플레이 중에 많이 변하지 않는 동적 조명에도 적합합니다.

  • 수명이 짧은 동적 효과(예: 무기)의 경우 비활성화 베이킹 모드를 사용하여 성능을 향상하세요.

  • 오래 지속되는 동적 효과(예: 회전하는 알람 조명)의 경우 동적 베이킹 모드를 사용하여 품질을 향상*(기본값)*하세요. LightmapGI는 동적 조명이 포함된 전역 조명을 지원하지 않기 때문에 이는 VoxelGI 및 SDFGI에만 영향을 미칩니다.

GI 기술의 대안

위에서 언급한 GI 기술 중 어느 것도 적합하지 않은 경우 추가 조명을 수동으로 배치하여 GI를 시뮬레이션하는 것이 가능합니다. 이를 위해서는 더 많은 수동 작업이 필요하지만 올바르게 수행하면 좋은 성능과* 좋은 시각적 효과를 제공할 수 있습니다. 이 접근 방식은 오늘날까지도 많은 현대 게임에서 여전히 사용되고 있습니다.

LightmapGI를 사용할 수 없는 상황(예: 절차적으로 생성된 레벨)에서 저사양 하드웨어를 대상으로 하는 경우 환경 조명만 사용하거나 일정한 주변광 요소에 의존하는 것이 필요할 수 있습니다. 이렇게 하면 시각적으로 더 평탄해질 수 있지만 주변광 색상과 하늘 기여도를 조정하면 대부분의 경우 허용 가능한 결과를 얻을 수 있습니다.