Qt Quick 3D 세부 표현 수준
세부 표현 수준(LoD)
세부 수준(LoD)이란 카메라와의 거리에 따라 3D 모델의 대체 버전을 사용하는 기법을 말합니다. 이를 통해 모델이 멀리 있거나 화면에서 차지하는 비율이 작을 때는 더 단순한 버전의 모델을 사용하고, 가까이 있거나 화면에서 차지하는 비율이 클 때는 더 상세한 버전을 사용함으로써 리소스 사용을 최적화하는 것이 목표입니다. 이 접근 방식을 통해 시각적 충실도를 유지하면서 GPU 리소스를 효율적으로 사용할 수 있습니다.
Qt Quick 3D 는 자동 및 명시적 디테일 레벨 시스템을 모두 제공합니다. 자동 시스템은 메쉬 파일에 저장된 여러 디테일 레벨을 가진 단일 메쉬를 사용하는 방식을 기반으로 합니다. 명시적 시스템은 디테일 레벨 구성 요소( LodManager )를 사용하여 서로 다른 디테일 레벨을 자식 모델로 지정하는 방식을 기반으로 합니다.
자동 디테일 레벨
자동 디테일 레벨 기능을 사용하는 주된 방법은 Balsam 자산 임포트 툴을 통해 콘텐츠를 임포트하는 것입니다. 자산 임포트 시 ‘ --generateMeshLevelsOfDetail ’ 플래그를 사용하면, 툴은 가능한 경우 각 메시마다 디테일 레벨을 생성합니다. 이는 원본 메시의 전체적인 특징을 유지하면서 지오메트리를 단순화함으로써 이루어집니다. 그 결과, 각 추가 디테일 레벨에 대한 새로운 인덱스 값과 추가 지오메트리가 생성되며, 주어진 렌더링 크기에 어떤 메쉬를 사용할지 결정하는 데 사용되는 거리 계수도 함께 생성됩니다. 이 거리 계수는 렌더링되는 오브젝트와 카메라 사이의 거리와 관련이 있지만, 가장 중요한 것은 픽셀당 지오메트리의 비율이 적절해야 한다는 점입니다. 이 데이터는 .mesh 파일에 기록되며, 모델에서 사용될 때 자동으로 적용됩니다.

이 자동 시스템의 단점이자 기본적으로 활성화되어 있지 않은 이유는, 지오메트리가 축소될 때 시각적 아티팩트가 발생할 가능성이 있기 때문입니다. 사용되는 지오메트리 단순화 알고리즘은 모델의 특징을 보존하려고 시도하지만, 경우에 따라 의도된 시각적 외관을 유지하기 위해 메시의 노멀을 재계산해야 할 수도 있습니다. 이는 에셋을 임포트할 때 ` --recalculateLodNormals ` 플래그를 사용하여 수행할 수 있습니다. 법선 재계산 과정은 --recalculateLodNormalsMergeAngle 및 --recalculateLodNormalsSplitAngle 인자에 오일러 각도 값을 전달하여, 법선이 합쳐지거나 분할되는 각도를 각각 제어함으로써 더욱 세밀하게 조정할 수 있습니다.
자동 시스템의 주요 장점은 적절한 설정으로 에셋을 임포트한 후에는 사용이 간편하다는 점입니다. 자동 시스템을 사용하기 위해 추가 코드가 필요하지 않으며, 디테일 레벨 지오메트리가 포함된 생성된 메시 파일을 참조하는 모든 모델은 화면에서 모델이 차지하는 픽셀 수에 따라 적절한 지오메트리를 자동으로 선택합니다.
global level 또는 per-model level 에서 Camera 또는 Model 의 levelOfDetailBias 속성을 사용하여 자동 LOD 선택 동작을 미세 조정할 수 있습니다. 이 편향(bias) 속성들의 기본값인 1.0은 자동 시스템이 계산한 값을 신뢰함을 의미합니다. 이 값은 이상적인 값에 대한 편차로, 1.0보다 작은 값일수록 더 낮은 디테일 레벨로 전환되기 전에 렌더링 크기가 더 작아져야 합니다. 1.0보다 큰 값일수록 더 낮은 디테일 레벨이 더 빨리 사용됩니다. 값을 0.0으로 설정하면 디테일 레벨 기능이 완전히 비활성화되고 항상 원본 메쉬 지오메트리가 사용됩니다.
자동 시스템은 명시적 시스템만큼 유연하지 않습니다. 예를 들어, 자동 시스템은 모든 디테일 레벨에 항상 동일한 재질을 사용하는데, 이는 항상 바람직한 것은 아닙니다. 또 다른 잠재적 단점은 서로 다른 디테일 레벨 간에 전환이 없다는 점입니다. 이는 자동 디테일 레벨에서는 원칙적으로 필요하지 않을 수 있지만, 특정 사용 사례에서는 바람직할 수 있습니다.
명시적 디테일 레벨
명시적 LOD 시스템은 자동 시스템보다 유연하지만, 사용하려면 더 많은 작업이 필요합니다. 명시적 시스템은 ` LodManager ` 컴포넌트를 사용하여 서로 다른 상세 수준을 자식 ` Model ` 컴포넌트로 지정하는 방식을 기반으로 합니다. ` LodManager `의 자식 중 `Model` 인스턴스인 모든 요소는 상세 수준으로 간주됩니다. 이는 각 상세 수준이 고유한 지오메트리와 재질을 가진 완전히 사용자 정의된 모델이 될 수 있으므로 매우 강력한 기능입니다.
LodManager 컴포넌트에는 어떤 자식 Model 을 사용할지 결정하는 데 사용되는 distances 속성도 있습니다. 카메라 거리가 각 거리 경계에 접근함에 따라 LodManager 노드는 다음 자식 Model 으로 전환됩니다. fadeDistance 속성을 사용하면 거리 경계 주변에서 크로스 페이드 전환이 시작되고 끝나는 거리를 설정할 수 있습니다.
다음은 명시적 디테일 레벨(LED) 시스템을 사용하는 예시입니다:

참조된 예제에서는 LodManager 를 사용하여 대리석 흉상의 각 디테일 레벨에 대해 서로 다른 메쉬 파일을 명시적으로 지정하고 있습니다.
LodManager {
camera: camera
distances: [100, 140, 180]
fadeDistance: 10
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_0.mesh"
materials: [ marbleMaterial ]
}
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_1.mesh"
materials: [ marbleMaterial ]
}
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_2.mesh"
materials: [ marbleMaterial ]
}
Model {
scale: Qt.vector3d(100, 100, 100);
source: "meshes/marble_bust_01_LOD_3.mesh"
materials: [ marbleMaterial ]
}
}이 코드에 대해 정의된 내용을 보여주는 다이어그램으로, 거리 목록을 사용하여 서로 다른 디테일 레벨 간의 경계를 정의하는 방법과, 크로스 페이드 전환을 정의하는 데 사용되는 fadeDistance 속성을 설명합니다.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.