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...
메시 세부 수준(LOD)
LOD(레벨 오브 디테일)는 :ref:`doc_occlusion_culling`와 함께 3D 프로젝트에서 렌더링 성능을 최적화하는 가장 중요한 방법 중 하나입니다.
이 가이드에서 다음 내용을 배울 것입니다:
메시 LOD가 3D 프로젝트의 렌더링 성능을 향상시키는 방법.
Godot에서 메시 LOD를 설정하는 방법.
프로젝트에서 메시 LOD의 효율성을 측정하는 방법(및 기대에 미치지 못하는 경우 탐색할 수 있는 대안)
더 보기
이 문서 외에 여러가지 Godot 데모 프로젝트들도 살펴보면 좋습니다.
소개
역사적으로 3D 게임의 세부 수준에는 낮은 지오메트리 밀도로 메시를 수동으로 제작한 다음 이러한 낮은 세부 메시를 그려야 하는 거리 임계값을 구성하는 작업이 포함되었습니다. 이 접근 방식은 오늘날에도 강화된 제어가 필요할 때 사용됩니다.
그러나 상세한 3D 자산이 많은 프로젝트에서 LOD를 수동으로 설정하는 것은 시간이 많이 걸리는 프로세스일 수 있습니다. 결과적으로 자동 메시 제거 및 LOD 구성이 점점 대중화되고 있습니다.
Godot는 임포트 시 LOD 사용을 위해 덜 상세한 메시를 자동으로 생성한 다음 필요할 때 자동으로 해당 LOD 메시를 사용하는 방법을 제공합니다. 이는 사용자에게 완전히 투명합니다. meshoptimizer 라이브러리는 뒤에서 LOD 메시 생성에 사용됩니다.
메시 LOD는 3D 메시를 그리는 모든 노드와 함께 작동합니다. 여기에는 MeshInstance3D, MultiMeshInstance3D, GPUParticles3D 및 CPUParticles3D가 포함됩니다.
시각적 비교
임포트 시 생성된 LOD 메시의 예는 다음과 같습니다. 카메라가 객체에서 멀리 떨어져 있으면 더 낮은 세부 메시가 사용됩니다.
가장 상세한(왼쪽) 것부터 가장 덜 상세한 것(오른쪽)까지, 음영 처리된 뷰
다음은 데시메이션을 더 쉽게 볼 수 있도록 와이어프레임 렌더링이 포함된 동일한 이미지입니다.
가장 상세한(왼쪽) 것부터 가장 덜 상세한 것(오른쪽)까지, 와이어프레임 보기
더 보기
아티스트가 만든 메시의 세부 수준을 수동으로 구성해야 하는 경우 자동 메시 LOD 대신 :ref:`doc_visibility_ranges`를 사용하세요.
메시 LOD 생성하기
기본적으로 메시 LOD 생성은 가져온 3D 장면(glTF, .blend, Collada, FBX)에 대해 자동으로 발생합니다. LOD 메시가 생성되면 씬을 렌더링할 때 자동으로 사용됩니다. 수동으로 아무것도 구성할 필요가 없습니다.
그러나 가져온 3D 메시(OBJ)에 대해서는 메시 LOD 생성이 자동으로 발생하지 않습니다. 이는 OBJ 파일을 기본적으로 전체 3D 장면으로 가져오지 않고 MeshInstance3D 노드(또는 GPUParticles3D, CPUParticles3D, ...)에 로드할 개별 메시 리소스로만 가져오기 때문입니다.
OBJ 파일에 메시 LOD가 생성되도록 하려면 FileSystem 도크에서 해당 파일을 선택하고 가져오기 도크로 이동하여 다른 이름으로 가져오기 옵션을 **씬**로 변경한 다음 **다시 가져오기**를 클릭합니다.
가져오기 도크에서 OBJ 파일의 가져오기 유형 변경
**다시 가져오기**를 클릭한 후 편집기를 다시 시작해야 합니다.
참고
메시 LOD 생성 프로세스는 완벽하지 않으며 때때로 렌더링 문제가 발생할 수 있습니다(특히 스킨이 적용된 메시에서). 복잡한 메시에서는 메시 LOD 생성에 시간이 걸릴 수도 있습니다.
메시 LOD로 인해 특정 메시가 깨져 보이는 경우 Import Dock에서 해당 메시에 대한 LOD 생성을 비활성화할 수 있습니다. 이렇게 하면 리소스 가져오기 속도도 빨라집니다. 이 작업은 3D 씬의 가져오기 옵션에서 전체적으로 수행하거나 고급 가져오기 설정 대화상자를 사용하여 메시별로 수행할 수 있습니다.
자세한 정보는 3D 씬 가져오기를 참조하세요.
메시 LOD 비주얼과 성능 비교
비교 목적으로 에디터에서 메시 LOD를 비활성화하려면 메시 LOD 비활성화 고급 디버그 그리기 모드를 사용하세요. 이 작업은 3D 뷰포트의 왼쪽 상단에 있는 메뉴를 사용하여 수행할 수 있습니다(카메라 모드에 따라 원근 또는 직교 라벨이 지정됨).
3D 뷰포트의 왼쪽 상단 메뉴에서 메시 LOD 비활성화
동일한 메뉴에서 **보기 프레임 시간**을 활성화하면 오른쪽 상단에서 FPS를 볼 수 있습니다. 또한 동일한 메뉴에서 **보기 정보**를 활성화하면 오른쪽 하단에 렌더링된 기본 요소(정점 + 색인) 수를 볼 수 있습니다.
메시 LOD가 씬에서 올바르게 작동하고 카메라가 메시에서 충분히 멀리 떨어져 있는 경우 메시 LOD가 활성화된 상태로 유지되면 그려진 기본 요소 수가 감소하고 FPS가 증가하는 것을 볼 수 있습니다(CPU 병목 현상이 발생하지 않는 한).
메시 LOD 데시메이션이 작동하는 모습을 보려면 위에 지정된 메뉴에서 디버그 그리기 모드를 와이어프레임 표시**로 변경한 다음 **렌더링 > 메시 LOD > LOD 변경 > 임계값 픽셀 프로젝트 설정을 조정하세요.
메시 LOD 성능 및 품질 구성
렌더링 > 메시 LOD > LOD 변경 > 임계값 픽셀 프로젝트 설정을 변경하여 루트 뷰포트에서 메시 LOD 전환이 얼마나 공격적인지 조정할 수 있습니다. 런타임 시 이 값을 변경하려면 루트 뷰포트에서 ``mesh_lod_threshold``를 다음과 같이 설정합니다.
get_tree().root.mesh_lod_threshold = 4.0
GetTree().Root.MeshLodThreshold = 4.0f;
각 뷰포트에는 다른 뷰포트와 독립적으로 설정할 수 있는 자체 mesh_lod_threshold 속성이 있습니다.
1픽셀의 기본 메시 LOD 임계값은 지각적으로 무손실로 보이도록 조정됩니다. 눈에 띄지 않는 품질 손실과 함께 상당한 성능 향상을 제공합니다. 값이 높을수록 카메라가 멀어질 때 LOD 전환이 더 빨리 발생하여 성능은 향상되지만 품질은 낮아집니다.
메시 LOD에 대해 객체별 조정을 수행해야 하는 경우 GeometryInstance3D에서 상속되는 노드의 LOD 바이어스 속성을 조정하여 LOD 전환이 얼마나 공격적인지 조정할 수 있습니다. ``1.0``보다 높은 값을 사용하면 LOD 전환이 평소보다 늦게 발생합니다(품질은 높아지지만 성능은 저하됩니다). *아래 1.0 값을 사용하면 LOD 전환이 평소보다 빨리 발생합니다(품질은 낮아지지만 성능은 높아집니다).
또한 ReflectionProbe 노드에는 반사 프로브가 업데이트될 때 렌더링 성능을 향상시키기 위해 조정할 수 있는 자체 Mesh LOD Threshold 속성이 있습니다. 이는 항상 업데이트 모드를 사용하는 ReflectionProbe의 경우 특히 중요합니다.
참고
씬을 렌더링할 때 메시 LOD 선택은 화면 공간 측정법을 사용합니다. 즉, 카메라 시야각과 뷰포트 해상도를 자동으로 고려합니다. 카메라 FOV가 높고 뷰포트 해상도가 낮을수록 LOD 선택이 더욱 공격적이 됩니다. 카메라가 멀어지면 엔진은 심하게 훼손된 모델을 더 일찍 표시합니다.
결과적으로 :ref:`doc_visibility_ranges`와 달리 카메라 FOV 및 뷰포트 해상도를 고려하기 위해 프로젝트에서 특정한 작업을 수행할 필요가 없습니다.
MultiMesh 및 파티클과 함께 메시 LOD 사용
LOD 선택 시 카메라에 가장 가까운 노드의 AABB 지점을 기준으로 사용합니다. 이는 모든 종류의 메시 LOD(개별 MeshInstance3D 포함)에 적용되지만 MultiMeshInstance3D, GPUParticles3D 및 GPUParticles3D와 같이 여러 메시를 한 번에 표시하는 노드에는 몇 가지 의미가 있습니다. 가장 중요한 점은 모든 인스턴스가 주어진 시간에 동일한 LOD 레벨로 그려진다는 것입니다.
GPUParticles3D에서 잘못된 LOD 선택이 발견된 경우 GPUParticles3D 노드를 선택하고 3D 뷰포트 상단에서 **GPUParticles3D > AABB 생성**을 사용하여 노드의 가시성 AABB가 구성되었는지 확인하세요.
MultiMesh에 서로 멀리 떨어져 있는 인스턴스가 있는 경우 별도의 MultiMeshInstance3D 노드에 배치해야 합니다. 이렇게 하면 절두체 및 폐색 컬링이 개별 노드를 컬링할 수 있으므로 렌더링 성능도 향상됩니다(멀티메시에서 개별 인스턴스를 컬링할 수는 없음).