발삼 에셋 임포트 툴

Balsam 툴은 Qt Quick 3D 의 에셋 컨디셔닝 파이프라인의 일부인 명령줄 애플리케이션입니다. 이 툴의 목적은 Maya, 3ds Max 또는 Blender와 같은 디지털 콘텐츠 제작 툴에서 생성된 에셋을 효율적인 런타임 포맷으로 변환하여 Qt Quick 3D 에서 사용할 수 있도록 하는 것입니다. 실시간 렌더링에 사용하기 전에 에셋의 콘텐츠를 파싱하고 컨디셔닝하는 데 많은 리소스가 필요하므로 애플리케이션에서 직접 인터체인지 포맷을 참조하는 것은 불가능하며, 이치에 맞지 않기도 합니다. 대신 Balsam 툴을 통해 인터체인지 포맷을 QML 컴포넌트와 지오메트리 및 텍스처와 같은 리소스로 변환할 수 있습니다.

사용법:

balsam [options] sourceFilename

사용 예

testModel.fbx 파일에 포함된 3D 에셋을 balsam 으로 변환하려면 다음 명령을 사용합니다:

balsam testModel.fbx

그러면 다음과 같은 파일이 생성됩니다:

  • meshes/testModel.mesh
  • TestModel.qml

그런 다음 해당 QML 컴포넌트를 사용하여 Qt Quick 3D 프로젝트에서 사용할 수 있습니다:

import QtQuick3D

TestModel {
   id: modelInstance
}

지원되는 3D 에셋 유형

  • 웨이브프론트 (.obj)
  • COLLADA (.dae)
  • FBX (.fbx)
  • STL (.stl)
  • PLY (.ply)
  • GLTF2 (.gltf, .glb)

지원되는 포맷 중 일부는 텍스처 에셋을 임베드하거나 참조할 수 있는 포맷도 있습니다. 이러한 에셋도 Qt에서 지원하는 경우 지원됩니다.

이미지 기반 조명을 위한 베이킹

발삼은 .hdr 파일에서 사전 필터링된 큐브맵 이미지를 생성하는 기능도 지원합니다. 확장자가 .hdr인 파일을 입력으로 지정하면 이름은 같지만 확장자가 .ktx인 파일이 생성됩니다. 그런 다음 애플리케이션은 결과 .ktx 파일을 전송하고 SceneEnvironment::lightProbe 과 연결된 Texture 에서 참조할 수 있습니다. 이렇게 하면 이미지 기반 조명에 필요한 비용이 많이 드는 런타임 처리를 피할 수 있습니다. 자세한 내용은 IBL 큐브맵 사전 생성을 참조하세요.

지원되는 옵션

다음 표에는 에셋 파일을 변환할 때 balsam 에서 인식하는 명령줄 옵션이 나열되어 있습니다:

참고: 각 부울 옵션에 대해 --disable-<option-name> 을 사용할 수 있습니다.

옵션설명
--outputPath, -o <outputPath>생성된 파일을 저장할 위치를 설정합니다. 기본값은 현재 디렉토리입니다.
--calculateTangentSpace임포트된 메시의 탄젠트와 비탄젠트를 계산합니다.
--joinIdenticalVertices임포트한 모든 메시 내에서 동일한 버텍스 데이터 세트를 식별하고 조인합니다.
--generateNormals모든 메시의 모든 면에 대한 노멀을 생성합니다.
--generateSmoothNormals메쉬의 모든 정점에 대해 부드러운 노멀을 생성합니다.
--splitLargeMeshes큰 메쉬를 작은 하위 메쉬로 분할합니다.
--preTransformVertices노드 그래프를 제거하고 모든 정점을 해당 노드의 로컬 변환 행렬로 사전 변환합니다.
--improveCacheLocality정점 캐시 로컬리티를 개선하기 위해 트라이앵글을 재정렬합니다.
--removeRedundantMaterials중복되거나 참조되지 않는 머티리얼을 검색하여 제거합니다.
--fixInfacingNormals안쪽을 향하는 노멀 벡터를 가진 메시를 찾아 반전시킵니다.
--findDegenerates모든 메시에서 퇴화된 프리미티브가 있는지 검색하여 적절한 선 또는 점으로 변환합니다.
--findInvalidData이 단계에서는 모든 메시에서 0이 된 노멀 벡터나 잘못된 UV 좌표 등 잘못된 데이터를 검색하여 제거/수정합니다. 이는 몇 가지 일반적인 익스포터 오류를 제거하기 위한 것입니다.
--transformUVCoordinates이 단계에서는 텍스처별 UV 변환을 적용하여 독립형 텍스처 좌표 채널로 베이크합니다.
--findInstances이 단계에서는 중복된 메시를 검색하여 첫 번째 메시의 레퍼런스로 대체합니다.
--optimizeMeshes메시 수를 줄이기 위한 포스트 프로세싱 단계입니다.
--optimizeGraph씬 계층구조를 최적화하는 포스트 프로세싱 단계입니다.
--useFloatJointIndicesGLES 2.0을 위해 조인트 인덱스를 부동 소수점 숫자로 저장합니다.
--globalScale이 단계에서는 모델의 글로벌 스케일을 수행합니다.
--globalScaleValue <value>글로벌 스케일 계수는 --globalScale 에서 사용합니다.
--dropNormals모든 메시의 모든 면에 대한 노멀을 삭제합니다.
--removeComponentNormals메쉬에서 노멀 성분을 제거합니다.
--removeComponentTangentsAndBitangents메시에서 탄젠트 및 비트탄젠트 컴포넌트를 제거합니다.
--removeComponentColors메쉬에서 모든 컬러 컴포넌트를 제거합니다.
--removeComponentUVs메시에서 UV 컴포넌트를 제거합니다.
--removeComponentBoneWeights메시에서 모든 본 웨이트를 제거합니다.
--removeComponentAnimations메시에서 애니메이션 컴포넌트를 제거합니다.
--removeComponentTextures메시에서 임베디드 텍스처 컴포넌트를 제거합니다.
--fbxPreservePivotsFBX 에셋에 의해 생성된 추가 피벗 노드를 보존합니다(딥 노드 계층구조를 생성할 수 있음).
--generateMipMaps임포트된 모든 텍스처 컴포넌트가 밉 맵 텍스처 필터링을 위한 밉 맵을 생성하도록 강제합니다.
--useBinaryKeyframes키프레임 데이터를 바이너리 파일로 기록
--generateLightmapUV라이트맵 UV 언래핑을 수행하고 메시를 위한 추가 UV 채널을 생성합니다. 이 UV 데이터는 라이트맵 베이커와 런타임 라이트매핑 중에 사용됩니다.
--generateMeshLevelsOfDetail가능하면 소스 메시를 자동으로 단순화하여 메시 레벨 오브 디테일을 생성합니다.
--recalculateLodNormals생성된 메시 레벨 오브 디테일에 필요한 경우 새 노멀을 계산합니다.
--recalculateLodNormalsMergeAngle <value>생성된 메시 레벨 오브 디테일에 대한 노멀을 다시 계산할 때 노멀 스무딩/병합에 고려할 최대 각도(도)입니다.
--recalculateLodNormalsSplitAngle <value>생성된 메시 레벨 오브 디테일의 노멀을 재계산할 때 노멀 분할에 고려할 최대 각도(도)입니다.

© 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.