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
속성을 사용하여 자동 세부 수준 선택 동작을 조정할 수 있습니다. 이러한 각 바이어스 속성의 기본 수준인 1.0은 자동 시스템에서 계산한 값을 신뢰한다는 의미입니다. 이 값은 이상적인 값에 대한 바이어스로서 1.0보다 작은 값은 더 낮은 세부 수준으로 전환하기 전에 더 작은 렌더링 크기를 필요로 합니다. 1.0보다 큰 값은 더 낮은 디테일 레벨이 더 빨리 사용되도록 합니다. 0.0 값은 디테일 레벨 사용을 완전히 비활성화하고 항상 원본 메시 지오메트리를 사용합니다.
자동 시스템은 명시적 시스템만큼 유연하지 않습니다. 예를 들어 자동 시스템은 모든 레벨 오브 디테일에 항상 동일한 머티리얼을 사용하므로 항상 바람직하지 않을 수 있습니다. 또 다른 잠재적 단점은 자동 레벨 오브 디테일에서는 이상적으로는 필요하지 않지만 특정 사용 사례에서는 바람직할 수 있는 여러 레벨 간의 전환이 없다는 것입니다.
명시적 세부 수준
명시적 세부 수준 시스템은 자동 시스템보다 유연하지만 사용하려면 더 많은 작업이 필요합니다. 명시적 시스템은 LodManager 컴포넌트를 사용하여 다양한 세부 수준을 하위 Model 컴포넌트로 지정하는 것을 기반으로 합니다. Model의 인스턴스인 LodManager 의 자식은 모두 세부 수준으로 간주됩니다. 각 세부 수준은 자체 지오메트리와 머티리얼을 사용하여 완전히 사용자 정의된 모델이 될 수 있기 때문에 매우 강력합니다.
LodManager 컴포넌트에는 사용할 하위 Model 를 결정하는 데 사용되는 distances 속성도 있습니다. LodManager 노드는 카메라 거리가 각 거리 경계에 가까워지면 다음 자식 Model 노드로 전환됩니다. fadeDistance 프로퍼티를 사용하여 거리 경계에서 크로스 페이드 전환이 시작되고 끝나는 거리를 설정할 수 있습니다.
다음은 명시적 세부 수준 시스템을 사용하는 방법의 예시입니다:
참조된 예제에서는 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 프로퍼티를 정의하는 방법을 보여주는 다이어그램을 볼 수 있습니다.
© 2025 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.