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.
Checking the stable version of the documentation...
3D 빛과 그림자
소개
광원은 재료와 혼합되어 눈에 보이는 결과를 생성하는 빛을 방출합니다. 빛은 씬의 여러 유형의 광원에서 나올 수 있습니다.
머티리얼 자체에서 방출 색상의 형태로 나타납니다(베이크된 조명이나 화면 공간 간접 조명이 활성화되지 않는 한 근처 객체에는 영향을 미치지 않습니다).
조명 노드: DirectionalLight3D, OmniLight3D 및 SpotLight3D.
Environment 또는 :ref:`doc_reflection_probes`의 주변광.
전역 조명(LightmapGI, VoxelGI 또는 SDFGI).
방출 색상은 재료 속성입니다. 이에 대한 자세한 내용은 표준 재료 3D 및 ORM 재료 3D 튜토리얼에서 읽을 수 있습니다.
더 보기
이 문서 외에 여러가지 Godot 데모 프로젝트들도 살펴보면 좋습니다.
라이트 노드
조명 노드에는 DirectionalLight3D, OmniLight3D 및 :ref:`class_SpotLight3D`의 세 가지 유형이 있습니다. 조명의 공통 매개변수를 살펴보겠습니다.
각 속성에는 특정 기능이 있습니다.
색상: 방출되는 빛의 기본 색상입니다.
에너지: 에너지 승수. 이는 조명을 포화시키거나 :ref:`doc_high_dynamic_range`로 작업하는 데 유용합니다.
간접 에너지: 간접 조명(빛 반사)과 함께 사용되는 보조 승수입니다. 이는 라이트맵 전역 조명 사용, VoxelGI 또는 SDFGI에서 작동합니다.
볼루메트릭 포그 에너지(Volumetric Fog Energy): 볼륨 포그와 함께 사용되는 보조 승수입니다. 이는 체적 안개가 활성화된 경우에만 효과가 있습니다.
음수: 빛은 더해지는 대신 빼기가 됩니다. 일부 어두운 모서리를 수동으로 보정하는 것이 유용한 경우가 있습니다.
반사광: 이 조명의 영향을 받는 개체의 반사광 얼룩의 강도에 영향을 줍니다. 0이면 이 빛은 순수한 확산광이 됩니다.
베이크 모드: 조명의 베이킹 모드를 설정합니다. :ref:`doc_using_lightmap_gi`를 참조하세요.
컬 마스크: 아래 선택된 레이어에 있는 개체는 이 조명의 영향을 받습니다. 이 컬 마스크를 통해 비활성화된 객체는 여전히 그림자를 투사한다는 점에 유의하세요. 비활성화된 개체가 그림자를 투사하는 것을 원하지 않으면 GeometryInstance3D의 Cast Shadow 속성을 원하는 값으로 조정합니다.
더 보기
실제 단위를 사용하여 조명의 강도와 색온도를 구성하려면 :ref:`doc_physical_light_and_camera_units`를 참조하세요.
조명 수 제한
Forward+ 렌더러를 사용할 때 Godot는 실시간 조명을 위해 클러스터링 접근 방식을 사용합니다. 원하는 만큼 많은 조명을 추가할 수 있습니다(성능이 허용하는 한). 그러나 현재 카메라 뷰에 표시될 수 있는 *클러스터 요소*는 기본적으로 512개로 제한됩니다. 클러스터된 요소는 옴니 라이트, 스포트 라이트, decal 또는 :ref:`반사 프로브 <doc_reflection_probes>`입니다. **프로젝트 설정 > 렌더링 > 제한 > 클러스터 빌더**에서 :ref:`Max Clustered Elements<class_ProjectSettings_property_rendering/limits/cluster_builder/max_clustered_elements>`를 조정하여 이 제한을 늘릴 수 있습니다.
모바일 렌더러를 사용하는 경우, 메시 리소스당 8개의 OmniLight + 8개의 SpotLight의 제한이 있습니다. 현재 카메라 뷰에서 렌더링할 수 있는 256개의 OmniLight + 256개의 SpotLight의 제한도 있습니다. 이러한 제한은 현재 변경할 수 없습니다.
호환성 렌더러를 사용하는 경우, 메시 리소스당 최대 8개의 OmniLight + 8개의 SpotLight가 렌더링될 수 있습니다. 이 제한은 고급 프로젝트 설정의 렌더링 > 제한 > OpenGL에서 최대 렌더링 가능 요소 및/또는 오브젝트당 최대 조명 수를 조정하여 늘릴 수 있지만, 성능이 희생되고 셰이더 컴파일 시간이 길어집니다. 셰이더 컴파일 시간을 줄이고 성능을 약간 개선시키기 위해 제한을 낮출 수도 있습니다.
모든 렌더링 방법을 사용하면 한 번에 최대 8개의 DirectionalLight를 볼 수 있습니다. 그러나 그림자가 활성화된 추가 DirectionalLight는 각 DirectionalLight의 효과적인 그림자 해상도를 감소시킵니다. 이는 방향성 그림자 아틀라스가 모든 조명 간에 공유되기 때문입니다.
렌더링 제한을 초과하면 카메라가 움직이는 동안 조명이 튀어나오기 시작하여 주의가 산만해질 수 있습니다. 라이트 노드에서 **거리 페이드**를 활성화하면 이 문제를 줄이는 동시에 성능도 향상시킬 수 있습니다. 메시를 더 작은 부분으로 분할하는 것도 도움이 될 수 있습니다. 특히 레벨 지오메트리의 경우(컬링 효율성도 향상됨)
특정 렌더러에서 가능한 것보다 더 많은 조명을 렌더링해야 하는 경우 조명 베이크 모드를 **정적**으로 설정한 베이크된 라이트맵 사용을 고려해 보세요. 이를 통해 조명을 완전히 베이킹할 수 있으며 렌더링 속도도 훨씬 빨라집니다. 넓은 영역에 빛을 방출하는 빛 노드를 대체하기 위해 global Illumination 기술과 함께 방출 재료를 사용할 수도 있습니다.
그림자 매핑
조명은 선택적으로 그림자를 투사할 수 있습니다. 이렇게 하면 현실감이 더 커지지만(빛이 폐색된 영역에 도달하지 않음) 성능 비용이 더 커질 수 있습니다. 일반적인 섀도우 매개변수 목록이 있으며, 각 매개변수에는 특정 기능도 있습니다:
활성화됨: 이 조명에서 그림자 매핑을 활성화하려면 선택하세요.
불투명도: 가려진 영역은 이 불투명도 요소에 의해 어두워집니다. 그림자는 기본적으로 완전 불투명이지만 특정 조명에 대해 그림자를 반투명하게 만들 수 있도록 변경할 수 있습니다.
바이어스: 이 매개변수가 너무 낮으면 셀프 섀도잉이 발생합니다. 너무 높으면 그림자가 바퀴에서 분리됩니다. 귀하에게 가장 적합한 것을 조정하십시오.
노멀 바이어스: 이 매개변수가 너무 낮으면 셀프 섀도잉이 발생합니다. 너무 높으면 그림자가 바퀴에서 잘못 정렬되어 나타납니다. 귀하에게 가장 적합한 것을 조정하십시오.
투과율 바이어스: 이 매개변수가 너무 낮으면 투과율이 활성화된 재질에서 자체 그림자가 발생합니다. 너무 높으면 그림자는 투과율이 일관되게 활성화된 재질에 영향을 미치지 않습니다. 귀하에게 가장 적합한 것을 조정하십시오.
역 컬링 페이스(Reverse Cull Face): 페이스 컬링을 반전시켜 섀도우 매핑을 렌더링할 때 일부 장면이 더 잘 작동합니다.
흐림: 이 조명의 그림자 흐림 반경을 곱합니다. 이는 기존 그림자 매핑과 접촉 경화 그림자(각거리 또는 ``0.0``보다 큰 **크기**를 갖는 조명) 모두에서 작동합니다. 값이 높을수록 그림자가 더 부드러워지고 움직이는 객체에 대해 시간적으로 더 안정된 것처럼 보입니다. 그림자 흐림을 늘리면 필터링에 사용되는 거친 패턴이 더 눈에 띄게 된다는 단점이 있습니다. :ref:`doc_lights_and_shadows_shadow_filter_mode`도 참조하세요.
캐스터 마스크: 그림자는 이 레이어의 개체에 의해서만 투사됩니다. 이 마스크는 그림자가 위에 드리워지는 객체에 영향을 미치지 않는다는 점에 유의하십시오.
메시(mesh) 설정하기
아래는 편향 조정이 어떤 모습인지 보여주는 이미지입니다. 기본값은 대부분의 경우 작동하지만 일반적으로 형상의 크기와 복잡성에 따라 달라집니다.
특정 조명에 대해 Shadow Bias 또는 **Shadow Normal Bias**가 너무 낮게 설정된 경우 그림자가 개체에 "번짐"됩니다. 이로 인해 조명의 의도된 모양이 어두워지게 되며 이를 *그림자 여드름*이라고 합니다.
반면에 Shadow Bias 또는 **Shadow Normal Bias**가 특정 조명에 대해 너무 높게 설정되면 그림자가 개체에서 분리된 것처럼 보일 수 있습니다. 이를 *피터 패닝*이라고 합니다.
일반적으로 섀도우 바이어스**를 늘리는 것보다 **섀도우 법선 바이어스**를 늘리는 것이 좋습니다. **Shadow Normal Bias**를 늘리면 **Shadow Bias**를 늘리는 것만큼 피터 패닝이 발생하지 않지만 여전히 대부분의 Shadow Acne 문제를 효율적으로 해결할 수 있습니다. **그림자 법선 바이어스 증가의 단점은 특정 개체의 그림자가 더 얇아 보일 수 있다는 것입니다.
모든 종류의 편향 문제는 :ref:`섀도우 맵 해상도 증가 <doc_lights_and_shadows_balancing_performance_and_quality>`를 통해 성능 저하를 희생하여 해결할 수 있습니다.
참고
그림자 매핑 설정을 조정하는 것은 예술입니다. "모든 것에 맞는 단일 크기" 설정은 없습니다. 최상의 시각적 효과를 얻으려면 조명별로 서로 다른 그림자 바이어스 값을 사용해야 할 수도 있습니다.
모양 변경에 대한 참고 사항: 조명에 그림자를 활성화할 때 호환성 렌더러에서 그림자 없이 렌더링할 때와 비교하여 조명의 모양이 변경될 수 있다는 점에 유의하세요. 구형 모바일 장치의 제한으로 인해 그림자는 다중 패스 렌더링 접근 방식을 사용하여 구현되므로 그림자가 있는 조명은 선형 공간 대신 sRGB 공간에서 렌더링됩니다. 렌더링 공간의 이러한 변화는 때때로 라이트의 모양을 크게 변경할 수 있습니다. 그림자가 없는 라이트와 비슷한 모양을 얻으려면 라이트의 에너지 설정을 조정해야 할 수도 있습니다.
방향성 조명
이것은 가장 일반적인 유형의 빛이며 매우 멀리 있는 광원(예: 태양)을 나타냅니다. 또한 계산하는 데 가장 저렴한 조명이므로 가능할 때마다 사용해야 합니다(계산하는 데 가장 저렴한 그림자 맵은 아니지만 나중에 자세히 설명합니다).
방향성 조명은 전체 씬을 덮는 무한한 수의 평행 광선을 모델링합니다. 방향광 노드는 광선의 방향을 나타내는 큰 화살표로 표시됩니다. 그러나 노드의 위치는 조명에 전혀 영향을 미치지 않으며 어디에나 있을 수 있습니다.
앞면이 광선에 닿는 모든 면은 빛을 받고 나머지 면은 어둡게 유지됩니다. 대부분의 다른 조명 유형과 달리 방향 조명에는 특정 매개변수가 없습니다.
방향 조명은 조명의 각도 크기를 도 단위로 결정하는 Angular Distance 속성도 제공합니다. 이 값을 0.0 이상으로 늘리면 시전자로부터 먼 거리에서 그림자가 더 부드러워지며 절차적 하늘 재질의 태양 모양에도 영향을 줍니다. 이를 접촉 경화 그림자(PCSS라고도 함)라고 합니다.
참고로 지구에서 본 태양의 각도 거리는 약 ``0.5``입니다. 이런 종류의 그림자는 비용이 많이 들기 때문에 그림자가 활성화된 조명에서 이 값을 ``0.0``보다 높게 설정하는 경우 :ref:`doc_lights_and_shadows_pcss_recommendations`의 권장 사항을 확인하세요.
방향성 그림자 매핑
섀도우 맵을 계산하기 위해 씬는 전체 씬(또는 최대 거리까지)를 포괄하는 직교 관점에서 렌더링됩니다(깊이만). 그러나 카메라에 더 가까운 물체는 블록처럼 보일 수 있는 저해상도 그림자를 수신하기 때문에 이 접근 방식에는 문제가 있습니다.
이 문제를 해결하기 위해 PSSM(Parallel Split Shadow Maps)이라는 기술이 사용됩니다. 이는 뷰 절두체를 2개 또는 4개 영역으로 분할합니다. 각 영역에는 고유한 그림자 맵이 있습니다. 이를 통해 관찰자에게 가까운 작은 영역이 멀리 있는 거대한 영역과 동일한 그림자 해상도를 가질 수 있습니다. DirectionalLight3D에 대해 그림자가 활성화되면 기본 그림자 모드는 4개의 분할이 있는 PSSM입니다. 개체가 4개 분할 모두에 나타날 만큼 큰 시나리오에서는 그리기 호출이 증가합니다. 구체적으로 이러한 개체는 총 5번 렌더링됩니다. 즉, 4개의 그림자 분할에 대해 한 번, 최종 씬 렌더링에 한 번입니다. 이는 성능에 영향을 미칠 수 있으므로 씬을 최적화하고 성능 기대치를 관리하려면 이 동작을 이해하는 것이 중요합니다.
이를 통해 그림자가 더욱 상세해집니다.
PSSM을 제어하기 위해 여러 매개변수가 노출됩니다.
각 분할 거리는 카메라 원거리(또는 ``0.0``보다 큰 경우 그림자 최대 거리)를 기준으로 제어됩니다. ``0.0``는 눈 위치이고 ``1.0``는 그림자가 멀리서 끝나는 위치입니다. 분할이 중간에 있습니다. 기본값은 일반적으로 잘 작동하지만, 가까운 개체(예: 3인칭 게임의 캐릭터)에 더 많은 세부 정보를 제공하려면 첫 번째 분할을 약간 조정하는 것이 일반적입니다.
씬에 필요한 사항에 따라 항상 그림자 **최대 거리**를 설정하십시오. 최대 거리가 낮을수록 그림자 렌더링에 포함되어야 하는 객체 수가 줄어들기 때문에 그림자가 더 보기 좋고 성능이 향상됩니다. **페이드 시작**을 조정하여 멀리서 그림자 페이드 아웃이 얼마나 공격적인지 제어할 수도 있습니다. **최대 거리**가 특정 카메라 위치에서 씬을 완전히 덮는 장면의 경우 **페이드 시작**을 ``1.0``로 늘려 그림자가 멀리서 사라지는 것을 방지할 수 있습니다. **Max Distance**가 씬을 완전히 덮지 않는 장면에서는 그림자가 멀리서 갑자기 잘리는 것처럼 나타나므로 이 작업을 수행하면 안 됩니다.
때로는 분할과 다음 분할 사이의 전환이 나빠 보일 수 있습니다. 이 문제를 해결하려면 Blend Splits 옵션을 켜면 됩니다. 이 옵션은 보다 부드러운 전환을 위해 디테일과 성능을 희생합니다.
Shadow > Normal Bias 매개변수는 객체가 라이트에 수직일 때 셀프 섀도잉의 특별한 경우를 수정하는 데 사용할 수 있습니다. 유일한 단점은 그림자가 조금 더 얇아진다는 것입니다. 대부분의 상황에서는 **Shadow > Bias**를 높이기 전에 **Shadow > Normal Bias**를 높이는 것이 좋습니다.
마지막으로 **팬케이크 크기**는 분할되지 않은 메시가 있는 큰 개체를 사용할 때 누락된 그림자를 수정하기 위해 조정할 수 있는 속성입니다. 그림자 바이어스 문제와 관련되지 않은 그림자 누락이 발견된 경우에만 이 값을 변경하십시오.
옴니라이트
옴니라이트(Omni Light)는 주어진 반경까지 모든 방향으로 빛을 구형으로 방출하는 점광원입니다.
실제 생활에서 빛 감쇠는 역함수입니다. 즉, 옴니 라이트에는 반경이 없습니다. 이는 여러 개의 옴니 라이트를 계산하는 것이 까다로워지기 때문에 문제가 됩니다.
이 문제를 해결하기 위해 감쇠 기능과 함께 Range 매개변수가 도입되었습니다.
이 두 매개변수를 사용하면 미학적으로 만족스러운 결과를 찾기 위해 시각적으로 작동하는 방식을 조정할 수 있습니다.
크기 매개변수는 OmniLight3D에서도 사용할 수 있습니다. 이 값을 늘리면 조명이 더 느리게 페이드 아웃되고 시전자로부터 멀리 떨어져 있을 때 그림자가 더 흐릿하게 나타납니다. 이는 영역 조명을 어느 정도 시뮬레이션하는 데 사용할 수 있습니다. 이를 접촉 경화 그림자(PCSS라고도 함)라고 합니다. 이런 종류의 그림자는 비용이 많이 들기 때문에 그림자가 활성화된 조명에서 이 값을 ``0.0``보다 높게 설정하는 경우 :ref:`doc_lights_and_shadows_pcss_recommendations`의 권장 사항을 확인하세요.
옴니 섀도우 매핑
옴니 라이트 섀도우 매핑은 비교적 간단합니다. 고려해야 할 주요 문제는 렌더링에 사용되는 알고리즘입니다.
옴니 섀도우는 이중 포물면 또는 큐브 매핑으로 렌더링될 수 있습니다. **이중 포물면**은 빠르게 렌더링되지만 변형이 발생할 수 있는 반면 **큐브**는 더 정확하지만 속도가 느립니다. 기본값은 **큐브**이지만 시각적인 차이가 크지 않은 조명의 경우 **이중 포물면**으로 변경하는 것이 좋습니다.
렌더링되는 객체가 대부분 불규칙하고 세분화된 경우 일반적으로 Dual Paraboloid로 충분합니다. 어쨌든 이러한 그림자는 그림자 아틀라스에 캐시되므로(자세한 내용은 마지막에 설명) 대부분의 장면에서 성능에 차이가 없을 수 있습니다.
그림자가 활성화된 옴니 라이트는 프로젝터를 활용할 수 있습니다. 프로젝터 텍스처는 조명의 색상에 텍스처의 특정 지점의 색상을 곱합니다. 결과적으로, 프로젝터 텍스처가 할당되면 조명은 일반적으로 더 어두워집니다. 이를 보상하기 위해 **에너지**를 늘릴 수 있습니다.
옴니 라이트 프로젝터 텍스처에는 PanoramaSkyMaterial 텍스처와 유사한 특수 360° 파노라마 매핑이 필요합니다.
아래의 프로젝터 텍스처를 사용하면 다음과 같은 결과가 얻어집니다.
팁
큐브맵 이미지 형태의 옴니 프로젝터를 획득한 경우 `이 웹 기반 변환 도구 <https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/cubemap_to_panorama.html>`__를 사용하여 단일 파노라마 이미지로 변환할 수 있습니다.
스포트라이트
스포트라이트는 원뿔(또는 "컷오프")로만 빛을 방출한다는 점을 제외하면 옴니라이트와 유사합니다. 손전등, 자동차 조명, 반사경, 반점 등을 시뮬레이션하는 데 유용합니다. 이 유형의 빛은 가리키는 반대 방향으로 감쇠됩니다.
스포트라이트는 OmniLight3D와 동일한 범위, 감쇠 및 **크기**를 공유하고 두 개의 추가 매개변수를 추가합니다.
각도: 빛의 조리개 각도입니다.
각도 감쇠: 원뿔 경계를 부드럽게 만드는 데 도움이 되는 원뿔 감쇠입니다.
스팟 섀도우 매핑
스폿은 그림자 매핑을 위한 옴니 라이트와 동일한 매개변수를 제공합니다. 스팟 그림자 맵 렌더링은 옴니 라이트에 비해 훨씬 빠릅니다. 그림자 텍스처 하나만 렌더링하면 됩니다(6면 또는 이중 포물면 모드에서 2면을 렌더링하는 대신).
그림자가 활성화된 스포트라이트는 프로젝터를 사용할 수 있습니다. 프로젝터 텍스처는 조명의 색상에 텍스처의 특정 지점의 색상을 곱합니다. 결과적으로, 프로젝터 텍스처가 할당되면 조명은 일반적으로 더 어두워집니다. 이를 보상하기 위해 **에너지**를 늘릴 수 있습니다.
옴니 라이트 프로젝터와 달리 스포트 라이트 프로젝터 텍스처는 올바르게 보이기 위해 특별한 형식을 따를 필요가 없습니다. :ref:`decal <doc_using_decals>`과 유사한 방식으로 매핑됩니다.
아래의 프로젝터 텍스처를 사용하면 다음과 같은 결과가 얻어집니다.
참고
각도가 넓은 스포트라이트는 그림자 맵이 더 넓은 표면에 퍼지기 때문에 각도가 좁은 스포트라이트보다 그림자 품질이 낮습니다. 89도보다 넓은 각도에서는 스포트라이트 그림자가 완전히 작동하지 않습니다. 더 넓은 조명을 위해 그림자가 필요한 경우 대신 옴니 라이트를 사용하세요.
Area light
Sometimes, you want lighting to come from a large area instead of a single point. Area lights are useful for simulating soft, diffuse lighting, such as light coming from a window or a lit billboard. This type of light is expensive to render in real-time, so it should be used sparingly, especially when shadows are enabled.
Godot provides the AreaLight3D node for this purpose, which emits light from a rectangular area. The node only emits light and has no other visual representation in the scene. The screenshots below use a Sprite3D node as a child of the area light for visualization purposes.
Area lights can also cast shadows, with variable penumbra simulated using
PCSS by default. The size
of this penumbra can be controlled with the Light3D Size property. This
effect can be quite demanding, so it can be turned off by setting Size to
0.0.
참고
Shadows cast by an area light may look incorrect if the object casting shadows doesn't have enough subdivisions and it's very close to the area light. This is the same limitation as Dual Paraboloid shadow mode on an omni light.
참고
Since area lights are difficult to simulate in a real-time rasterized renderer, they come with a number of limitations.
For small light sources, you will likely get better results when using point lights. Shadows from area lights are crude approximations, as they are calculated as if they were point lights, and may appear to be distorted at the edges. To get a better result, make sure the meshes in the light's range are sufficiently subdivided.
Area lights suffer from light leaking on the backside of geometry closely in front of them at grazing angles, so be careful with where you place them.
Lastly, not all material features are fully supported; area lights are practically limited to Lambertian diffuse and GGX specular shading, while anisotropic materials will appear as if isotropic. Vertex shading is also not implemented for area lights.
Area lights emit light in a rectangular area defined by the Area > Size
property (not to be confused with the generic Light3D Size property). To get
a physically accurate result, you should resize this area to match the size of
the real-life light source you are trying to simulate. For example, if you are
simulating a 1-meter neon tube that is 10 centimeters wide, set the area
size to (1, 0.1) and adjust the energy accordingly.
By default, the light's energy is normalized: the larger the area, the weaker the light. This allows you to change the area size without needing to adjust the energy to compensate, which is useful for animation. You can disable this behavior by unchecking Area > Normalize Energy if you want the energy to be independent of the area size.
The rectangular area can optionally be textured. This can be effectively used to change the light's shape into any 2D shape, or tint it in different colors. The texture's alpha channel is treated as black (no light coming through). The area light's texture will be visible in reflections according to the surface's roughness. This behavior is different from omni/spot projectors, as it does not project the texture directly onto all diffuse lighting.
When using a textures that are transparent or black toward the edges, you might want to leave a gap of a few pixels to make sure the texture is blurred smoothly.
참고
Changing the area light's texture at runtime can be expensive, especially if the texture is large.
To reduce the performance impact of switching textures at runtime, make sure each dimension of an area texture is either a multiple of 128 pixels, or a power of two. This removes the need for a scaling pass, which slows down texture changes. The textures don't necessarily have to be square to be optimal. Examples of optimal texture sizes include 32×64, 128×128, and 256×384.
Textured area lights are not supported in the Compatibility renderer.
섀도우 아틀라스
자체 그림자 텍스처가 있는 방향 조명과 달리 옴니 조명과 스포트 조명은 그림자 아틀라스의 슬롯에 할당됩니다. 이 아틀라스는 고급 프로젝트 설정(렌더링 > 조명과 그림자 > 위치 그림자)에서 구성할 수 있습니다.
해상도는 전체 섀도우 아틀라스에 적용됩니다. 이 아틀라스는 4개의 사분면으로 나뉩니다.
각 사분면을 세분화하여 원하는 수의 섀도우 맵을 할당할 수 있습니다. 다음은 기본 하위 구분입니다.
가장 일반적인 사용 케이스는 다음과 같습니다:
가장 큰 섀도우 맵 크기(세분화가 사용되지 않은 경우)는 화면 크기(또는 더 큰)의 조명을 나타냅니다.
세분화(더 작은 맵)는 보기에서 더 멀리 떨어져 있고 비례적으로 더 작은 조명의 그림자를 나타냅니다.
모든 프레임마다 모든 조명에 대해 다음 절차가 수행됩니다.
조명이 올바른 크기의 슬롯에 있는지 확인하십시오. 그렇지 않은 경우 다시 렌더링하여 더 크거나 작은 슬롯으로 옮깁니다.
섀도우 맵에 영향을 미치는 객체가 변경되었는지 확인하세요. 그렇다면 조명을 다시 렌더링하십시오.
위의 어느 것도 발생하지 않으면 아무 작업도 수행되지 않으며 그림자는 그대로 유지됩니다.
사분면의 슬롯이 가득 차면 조명은 크기와 거리에 따라 더 작은 슬롯으로 밀려납니다. 모든 사분면의 모든 슬롯이 가득 찬 경우 일부 조명은 그림자가 활성화되어 있어도 그림자를 렌더링할 수 없습니다.
기본 그림자 할당 전략을 사용하면 카메라 절두체(4 + 4 + 16 + 64)에서 그림자가 활성화된 최대 88개의 조명을 렌더링할 수 있습니다.
첫 번째이자 가장 상세한 사분면에는 4개의 그림자를 저장할 수 있습니다.
두 번째 사분면에는 4개의 다른 그림자를 저장할 수 있습니다.
세 번째 사분면에는 16개의 그림자를 저장할 수 있으며 세부 묘사는 더 적습니다.
네 번째이자 가장 덜 상세한 사분면은 훨씬 더 적은 디테일로 64개의 그림자를 저장할 수 있습니다.
사분면당 더 많은 수의 그림자를 사용하면 그림자가 활성화된 상태에서 더 많은 양의 전체 조명을 지원할 수 있으며 성능도 향상됩니다(그림자는 각 조명에 대해 더 낮은 해상도로 렌더링되므로). 그러나 사분면당 그림자 수를 늘리면 그림자 품질이 낮아집니다.
경우에 따라 다른 할당 전략을 사용할 수도 있습니다. 예를 들어, 모든 조명의 크기가 거의 같은 하향식 게임에서는 모든 조명이 비슷한 품질 수준의 그림자를 갖도록 모든 사분면이 동일한 세분화를 갖도록 설정할 수 있습니다.
성능과 품질의 균형
그림자 렌더링은 3D 렌더링 성능에 있어서 중요한 주제입니다. 병목 현상이 발생하지 않도록 하려면 여기서 올바른 선택을 하는 것이 중요합니다.
방향성 그림자 품질 설정은 적절한 RenderingServer 메서드를 호출하여 런타임에 변경할 수 있습니다.
위치(옴니/스폿) 그림자 품질 설정은 루트 :ref:`class_Viewport`에서 런타임 시 변경될 수 있습니다.
그림자 매핑
그림자 해상도가 높으면 그림자가 더 선명해지지만 성능 비용이 많이 듭니다. 그림자가 더 선명하다고 해서 항상 더 사실적인 것은 아닙니다. 대부분의 경우 기본값인 ``4096``로 유지하거나 저사양 GPU의 경우 ``2048``로 줄여야 합니다.
그림자 맵 크기를 줄인 후 위치 그림자가 너무 흐려지면 shadow atlas 사분면을 조정하여 더 적은 수의 그림자를 포함함으로써 이에 대응할 수 있습니다. 이렇게 하면 각 그림자를 더 높은 해상도로 렌더링할 수 있습니다.
섀도우 필터 모드
여기에서 여러 그림자 맵 품질 설정을 선택할 수 있습니다. 기본 **Soft Low**는 텍스처 디테일이 디더링 패턴을 덜 눈에 띄게 만드는 데 도움이 되므로 디테일한 텍스처가 있는 장면의 성능과 품질 간의 적절한 균형을 유지합니다.
그러나 덜 상세한 텍스처를 사용하는 프로젝트에서는 그림자 디더링 패턴이 더 잘 보일 수 있습니다. 이 패턴을 숨기려면 다중 샘플링 안티앨리어싱 (MSAA)., AMD FidelityFX 초고해상도 2.2(FSR2), :ref:`doc_3d_antialiasing_fxaa`를 활성화하거나 섀도우 필터 품질을 Soft Medium 이상으로 높일 수 있습니다.
부드러움 매우 낮음 설정은 그림자 흐림을 자동으로 줄여 낮은 샘플 수의 아티팩트가 덜 눈에 띄게 만듭니다. 반대로 Soft High 및 Soft Ultra 설정은 증가된 샘플 수를 더 잘 활용하기 위해 자동으로 그림자 흐림을 증가시킵니다.
16비트 대 32비트
기본적으로 Godot는 그림자 맵 렌더링에 16비트 깊이 텍스처를 사용합니다. 이는 눈에 띄는 품질 차이 없이 더 나은 성능을 발휘하므로 대부분의 경우 권장됩니다.
**16비트**가 비활성화되면 32비트 심도 텍스처가 대신 사용됩니다. 이렇게 하면 큰 장면과 그림자가 활성화된 큰 조명에서 아티팩트가 줄어들 수 있습니다. 그러나 차이점은 거의 눈에 띄지 않는 경우가 많지만 이로 인해 상당한 성능 비용이 발생할 수 있습니다.
빛/그림자 거리 페이드
OmniLight3D 및 SpotLight3D는 원거리 조명을 숨기는 여러 가지 속성을 제공합니다. 이는 수십 개 이상의 조명이 있는 대규모 장면에서 성능을 크게 향상시킬 수 있습니다.
활성화됨: 거리 페이드(LOD 형식)의 활성화 여부를 제어합니다. **Begin + Length**에 걸쳐 빛이 희미해지고, 그 후에는 선별되어 셰이더로 전혀 전송되지 않습니다. 이를 사용하여 씬의 활성 표시등 수를 줄여 성능을 향상시킵니다.
시작: 빛이 희미해지기 시작하는 카메라로부터의 거리입니다(3D 단위).
그림자: 그림자가 사라지기 시작하는 카메라로부터의 거리입니다(3D 단위). 이는 빛에 비해 그림자를 더 빨리 페이드 아웃하는 데 사용되어 성능을 더욱 향상시킬 수 있습니다. 라이트에 그림자가 활성화된 경우에만 사용할 수 있습니다.
길이: 빛과 그림자가 희미해지는 거리입니다(3D 단위). 빛은 이 거리에 걸쳐 점차 투명해지며 마지막에는 완전히 보이지 않게 됩니다. 값이 높을수록 페이드아웃 전환이 더 부드러워지며, 이는 카메라가 빠르게 움직일 때 더 적합합니다.
기타 고려 사항
백분율에 가까운 부드러운 그림자(PCSS)는 캐스터와 그림자를 받는 표면 사이의 거리에 따라 반그림자 크기가 달라지는 보다 사실적인 그림자 매핑 모양을 제공합니다. 이는 특히 방향성 조명의 경우 고성능 비용이 발생합니다.
성능 문제를 방지하려면 다음을 수행하는 것이 좋습니다.
주어진 시간에 PCSS 그림자가 활성화된 소수의 조명만 사용하십시오. 이 효과는 일반적으로 크고 밝은 조명에서 가장 잘 나타납니다. 더 희미한 보조 광원은 일반적으로 PCSS 그림자를 사용해도 큰 이점을 얻지 못합니다.
사용자가 PCSS 섀도우를 비활성화할 수 있는 설정을 제공합니다. 방향성 조명에서는 스크립트에서 DirectionalLight3D의
light_angular_distance속성을0.0``로 설정하면 됩니다. 위치 조명에서는 스크립트에서 OmniLight3D 또는 SpotLight3D의 ``light_size속성을 ``0.0``로 설정하여 이를 수행할 수 있습니다.
프로젝트 워크플로
프로젝터가 렌더링되는 방식도 성능에 영향을 미칩니다. 렌더링 > 텍스처 > 라이트 프로젝터 > 필터 고급 프로젝트 설정을 사용하면 프로젝터 텍스처를 필터링하는 방법을 제어할 수 있습니다. **가장 가까운/선형**은 밉맵을 사용하지 않으므로 렌더링 속도가 더 빨라집니다. 그러나 프로젝터는 멀리서 보면 거칠게 보입니다. **가장 가까운/선형 밉맵**은 멀리서 보면 더 부드럽게 보이지만 비스듬한 각도에서 보면 프로젝터가 흐릿하게 보입니다. 이 문제는 최고 품질 모드이지만 가장 비용이 많이 드는 **Nearest/Linear Mipmaps Anisotropic**을 사용하여 해결할 수 있습니다.
프로젝트에 픽셀 아트 스타일이 있는 경우 프로젝터가 최근접 이웃 필터링을 사용할 수 있도록 필터를 가장 가까운 값 중 하나로 설정하는 것이 좋습니다. 그렇지 않으면 **선형**을 고수하세요.