Aspose.3D FOSS for Java은 다섯 가지 3D 파일 형식을 지원합니다: OBJ, STL, glTF, GLB, 및 FBX (가져오기 전용).
모든 예제는 com.aspose.threed.* 패키지:
import com.aspose.threed.*;
Maven 의존성:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
포맷 개요
본격적으로 시작하기 전에, 지원되는 네 가지 포맷과 일반적인 사용 사례에 대한 간략한 개요를 제공합니다.
| 형식 | 확장자 | 가져오기 | 내보내기 | 재질 지원 | 씬 계층 구조 |
|---|---|---|---|---|---|
| OBJ | .obj | 예 | 예 | 기본 (MTL 파일) | 플랫 |
| STL | .stl | 예 | 예 | 없음 | 평평한 |
| glTF 2.0 | .gltf | 예 | 예 | PBR | 전체 |
| GLB | .glb | 예 | 예 | PBR | 전체 |
| FBX | .fbx | 예 | 아니오 | 풍부한 | 전체 |
OBJ, STL, glTF, 및 GLB는 가져오기와 내보내기를 모두 지원합니다. FBX는 지원됩니다 가져오기 전용. GLB (binary glTF)는 다음을 통해 생성됩니다 GltfSaveOptions 와 함께 setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ는 가장 널리 지원되는 3D 메시 형식 중 하나입니다. 기하학 정보를 일반 텍스트로 저장하며, 선택적으로 .mtl 재료용 동반 파일.
OBJ 파일 로드
가장 간단한 방법은 파일 경로를 직접 전달하는 것입니다:
Scene scene = Scene.fromFile("model.obj");
더 많은 제어를 위해 사용하세요. ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
OBJ 파일이 MTL 파일을 (via a mtllib 지시문), 라이브러리는 자동으로 해당 파일에서 재료 정의를 로드하려고 시도합니다. MTL 파일은 OBJ 파일과 동일한 디렉터리에 있거나 지시문에 지정된 경로에 있어야 합니다.
OBJ로 저장
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
OBJ 사용 사례
- 다양한 3D 툴 간에 메시 데이터를 교환합니다.
- OBJ 형식으로 배포되는 에셋 라이브러리에서 모델을 가져오기.
- 복잡한 씬 계층 구조 없이 기하학을 빠르게 확인.
STL: 스테레오리소그래피
STL은 3D 프린팅을 위한 표준 포맷입니다. 재료, 색상, 씬 계층 구조 없이 순수한 삼각형 기하학을 나타냅니다. STL 파일은 두 가지 변형이 있습니다: ASCII(사람이 읽을 수 있는)와 binary(압축된).
STL 파일 로드
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
STL로 저장하기
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
출력을 제어하려면 사용하십시오 StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL 고려 사항
- STL 파일에는 삼각형 형태의 기하학만 포함됩니다. 재질, 텍스처 및 씬 계층 구조는 내보내기 과정에서 손실됩니다.
- 대형 모델의 경우 바이너리 STL이 ASCII STL보다 훨씬 작습니다.
- STL은 대상이 3D 프린터나 슬라이서 소프트웨어일 때 선호되는 포맷입니다.
glTF: GL 전송 포맷
glTF는 3D 콘텐츠를 효율적으로 전송하고 로드하도록 설계된 최신 포맷으로, 특히 웹 및 실시간 애플리케이션에서 사용됩니다. PBR 재질, 씬 계층 구조 및 애니메이션을 지원합니다.
glTF 파일 로드
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
glTF 로 저장
기본 저장은 파일 확장자를 사용하여 형식을 결정합니다:
scene.save("output.gltf");
자세한 제어를 위해 사용하십시오 GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
GltfSaveOptions 세부 정보
| 방법 | 목적 |
|---|---|
setFlipCoordinateSystem(boolean) | 내보내기 중에 좌표계 축을 뒤집습니다. Y‑up에서 Z‑up으로 또는 그 반대로 변환할 때 유용합니다. |
setPrettyPrint(boolean) | 가독성을 위해 출력 JSON을 들여쓰기 형식으로 포맷합니다. 다음으로 설정하십시오 false 프로덕션 환경에서 파일 크기를 줄이기 위해. |
glTF 사용 사례
- 웹 기반 3D 뷰어(three.js, Babylon.js).
- 실시간 애플리케이션 및 게임 엔진.
- 도구 간에 PBR 재질 정의를 보존합니다.
FBX: Filmbox (수입 전용)
FBX는 Autodesk에서 만든 독점 포맷으로, 게임 개발 및 디지털 콘텐츠 제작에 널리 사용됩니다. 풍부한 씬 계층 구조, 재질 및 애니메이션을 지원합니다. Aspose.3D FOSS for Java는 FBX를 지원합니다 가져오기만 – FBX로 내보내기가 지원되지 않습니다.
FBX 파일 로드
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
FBX를 다른 포맷으로 변환
FBX 내보내기가 지원되지 않으므로, 가져온 FBX 씬을 glTF, GLB, OBJ 또는 STL로 변환하십시오:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
FBX 사용 사례
- Autodesk 도구(Maya, 3ds Max)에서 자산을 가져와 다른 포맷으로 변환합니다.
- 리깅된 캐릭터와 애니메이션 씬을 glTF/GLB로 다시 내보내기 위해 로드 중입니다.
일괄 변환
일반적인 워크플로는 전체 디렉터리의 파일을 한 형식에서 다른 형식으로 변환하는 것입니다. 다음은 일괄 변환을 위한 패턴입니다:
import com.aspose.threed.*;
import java.io.File;
public class BatchConvert {
public static void main(String[] args) throws Exception {
File inputDir = new File("models/obj");
File outputDir = new File("models/gltf");
outputDir.mkdirs();
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setPrettyPrint(true);
File[] objFiles = inputDir.listFiles(
(dir, name) -> name.toLowerCase().endsWith(".obj")
);
if (objFiles == null) return;
for (File objFile : objFiles) {
String baseName = objFile.getName()
.replaceFirst("\\.obj$", "");
Scene scene = Scene.fromFile(objFile.getAbsolutePath());
String outPath = new File(outputDir, baseName + ".gltf")
.getAbsolutePath();
scene.save(outPath, saveOpts);
System.out.println("Converted: " + objFile.getName()
+ " -> " + baseName + ".gltf");
}
}
}
이것은 모든 .obj 디렉터리의 파일을 로드하고, 각각을 pretty-printed 출력으로 glTF로 변환한 뒤 결과를 저장합니다. 이 패턴을 모든 소스 및 대상 포맷 조합에 맞게 적용할 수 있습니다.
크로스 포맷 변환 레퍼런스
다음 표는 형식 간 변환 시 기대할 수 있는 내용을 보여줍니다.
| 출발 | 도착 | 기하학 | 재질 | 계층 구조 | 메모 |
|---|---|---|---|---|---|
| OBJ | STL | 보존된 | 손실된 | N/A | STL은 재질 지원이 없습니다 |
| OBJ | glTF/GLB | 보존됨 | PBR로 변환됨 | 플랫 | 가능한 경우 MTL 재질을 매핑함 |
| STL | OBJ | 보존됨 | 없음 | N/A | 소스에 재질이 없습니다 |
| STL | glTF/GLB | 보존됨 | 기본 | 플랫 | 기본 재질이 적용되었습니다 |
| glTF | OBJ | 보존됨 | 단순화 | 평탄화 | PBR을 기본 재질로 |
| glTF | STL | 보존됨 | 손실된 | 평탄화된 | 기하학만 |
| FBX | OBJ | 보존됨 | 단순화된 | 평탄화된 | 재료 단순화 |
| FBX | STL | 보존됨 | 손실됨 | 평탄화됨 | 기하학만 |
| FBX | glTF/GLB | 보존됨 | PBR로 변환됨 | 보존됨 | 우수한 충실도 |
일반 변환 가이드라인
- 기하학 모든 포맷 쌍에서 항상 보존됩니다.
- 재료 glTF와 FBX 중에서 더 잘 유지됩니다. 두 형식 모두 풍부한 재질 모델을 지원합니다. STL로 변환하면 항상 재질이 사라집니다. OBJ로 변환하면 재질이 기본 MTL 모델로 단순화됩니다.
- 씬 계층 구조 glTF와 FBX 사이에서 보존됩니다. OBJ와 STL은 평면 구조를 생성합니다.
전체 정리
다음은 OBJ 파일을 로드하고, 노드를 검사한 뒤 glTF와 GLB 모두로 내보내는 완전한 예제입니다:
import com.aspose.threed.*;
public class FormatWorkflow {
public static void main(String[] args) throws Exception {
// Load
Scene scene = Scene.fromFile("input.obj");
// Inspect
System.out.println("Nodes in scene:");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println(" " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: "
+ t.getTranslation());
}
// Export to glTF with options
GltfSaveOptions gltfOpts = new GltfSaveOptions();
gltfOpts.setPrettyPrint(true);
scene.save("output.gltf", gltfOpts);
// Export to GLB (binary glTF)
GltfSaveOptions glbOpts = new GltfSaveOptions();
glbOpts.setContentType(FileContentType.BINARY);
scene.save("output.glb", glbOpts);
System.out.println("Export complete.");
}
}
요약
Aspose.3D FOSS for Java은(는) 여러 형식에 걸쳐 일관된 API를 제공합니다. 핵심 포인트:
- OBJ – 기본 재질을 가진 간단한 메시 교환.
- STL – 3D 프린팅 파이프라인을 위한 기하학 전용 포맷.
- glTF / GLB – 웹 및 실시간 사용을 위한 최신 PBR 지원 포맷. 사용
GltfSaveOptions와 함께setContentType(FileContentType.BINARY)GLB 출력용. - FBX – import only; 게임 엔진 및 DCC 툴에서 에셋을 로드하기 위한 풍부한 포맷.
포맷별 로드 및 저장 옵션 클래스 사용 (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) 필요에 따라 가져오기 또는 내보내기 프로세스를 세밀하게 제어해야 할 때.
자세한 내용은 다음을 방문하십시오 Aspose.3D 문서 또는 소스를 다음에서 찾아보세요 GitHub.