우리는 사용 가능성을 발표하게 되어 기쁩니다. Aspose.3D FOSS for Java – Java 애플리케이션에서 3D 파일 형식을 다루기 위한 무료 오픈소스 라이브러리입니다. 순수 Java 솔루션으로 네이티브 종속성이 없으며, 라이브러리는 Java 21 이상에서 실행되어 다양한 프로젝트와 환경에서 활용할 수 있습니다.

이 게시물에서는 라이브러리가 제공하는 내용, 시작 방법, 그리고 앞으로 나아갈 방향을 살펴봅니다.

Aspose.3D FOSS for Java란 무엇인가요?

Aspose.3D FOSS for Java은(는) 경량 3D 파일 처리 라이브러리로, 다음 라이선스 하에 배포됩니다. MIT license. 이 라이브러리는 여러 널리 사용되는 포맷에 걸쳐 3D 모델을 로드, 검사, 변환 및 저장할 수 있는 씬 그래프 API를 제공합니다. 라이브러리는 Java로 완전히 작성되었으며 외부 네이티브 바이너리나 플랫폼별 구성 없이도 사용할 수 있습니다.

소스 코드는 GitHub에서 확인할 수 있습니다: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

주요 하이라이트

  • 순수한 Java – JNI 없음, 네이티브 라이브러리 없음, 플랫폼 제한 없음.
  • Java 21+ 호환됩니다.
  • MIT 라이선스 – 제한 없이 개인, 상업, 또는 독점 프로젝트에 사용할 수 있습니다.
  • 씬 그래프 아키텍처 – 노드, 메쉬, 카메라 및 재질의 친숙한 트리 구조.
  • 다중 포맷 지원 – OBJ, STL, glTF 2.0 및 GLB 파일을 읽고 쓸 수 있으며; FBX 파일을 읽을 수 있습니다.

빠른 시작

Maven 설치

다음 종속성을 추가하세요 pom.xml:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

첫 번째 변환

가장 간단한 사용 사례는 한 형식의 3D 파일을 로드하고 다른 형식으로 저장하는 것입니다. 다음은 OBJ를 STL로 변환하는 두 줄 코드입니다:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

Scene 클래스는 중앙 진입점입니다. 호출 Scene.fromFile() 파일 경로를 사용하여 모델을 로드하고, 그 다음 호출 save() 대상 경로와 함께 사용합니다. 라이브러리는 파일 확장자에서 형식을 추론합니다.

처음부터 Scene 구축

프로그래밍 방식으로 씬을 구성할 수도 있습니다:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

새로운 씬을 생성하고, 루트 아래에 “Box"라는 이름의 자식 노드를 추가한 뒤, 좌표 (1, 2, 3) 에 위치시키며, 결과를 glTF 파일로 내보냅니다.

포맷별 옵션으로 로드하기

로드 과정에 대해 더 세밀한 제어가 필요할 때, 각 포맷은 전용 옵션 클래스를 제공합니다. 예를 들어, 명시적인 옵션을 사용해 STL 파일을 로드하는 경우:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

Scene.fromFile() static 메서드는 로드 옵션 유형 중 어느 것이든 허용합니다: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, 또는 FbxLoadOptions.

씬 그래프 순회하기

씬이 로드되면, 노드 트리를 순회하여 내용물을 검사하거나 수정할 수 있습니다:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

이 패턴은 디버깅, 모델 내용에 대한 보고서 생성, 혹은 재내보내기 전에 씬의 일부를 선택적으로 수정할 때 유용합니다.

변환 적용하기

3D 공간에서 노드를 배치하는 것은 Transform 각각에 객체 Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

변환은 표준 부모-자식 상속 모델을 따릅니다: 자식의 월드 공간 위치는 로컬 변환과 루트까지의 모든 조상 변환을 결합한 것입니다.

포함 내용

이 라이브러리는 3D 씬 그래프 모델을 중심으로 설계된 집중된 기능 세트를 제공합니다.

씬 그래프

씬 그래프는 API의 핵심입니다. 모든 3D 파일은 트리 구조로 표현됩니다:

클래스역할
Scene최상위 컨테이너; 씬 그래프의 루트
Node트리 내의 명명된 위치; 변환과 자식 노드를 보유함
Entity노드에 연결된 시각 객체를 위한 추상 기반
Mesh다각형 기하학 – 정점, 면, 법선
Camera가상 카메라 정의
Transform노드의 로컬 변환(이동), 회전 및 스케일
GlobalTransform계산된 월드 공간 변환

재질

이 라이브러리는 PBR(Physically Based Rendering) 재질 모델을 제공합니다:

  • PbrMaterial – 물리 기반 렌더링 재질(알베도, 메탈니스, 러프니스, 방출 색상 및 투명도 포함). 이는 Java 에디션에서 사용할 수 있는 유일한 구체적인 재질 클래스입니다.

수학 유틸리티

com.aspose.threed 패키지에는 필수 수학 기본형이 포함됩니다:

  • Vector3 – 위치, 방향 및 색상을 위한 3요소 벡터.
  • Matrix4 – 4x4 변환 행렬.
  • Quaternion – 회전 표현.
  • BoundingBox – 공간 쿼리를 위한 축 정렬 경계 상자.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

로드 및 저장 옵션

각 형식에는 가져오기 및 내보내기 동작을 제어할 수 있는 전용 옵션 클래스가 있습니다:

포맷로드 옵션저장 옵션
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (가져오기 전용)

예를 들어, pretty-printed JSON과 뒤집힌 좌표계로 glTF를 내보내려면:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

지원 포맷

다음 표는 Aspose.3D FOSS for Java가 읽고 쓸 수 있는 포맷을 요약합니다.

포맷확장가져오기내보내기노트
OBJ.objMTL 재료와 함께
STL.stlBinary + ASCII
glTF 2.0.gltfJSON 형식
GLB.glbGltfSaveOptions를 통한 바이너리 glTF
FBX.fbx아니오가져오기만

OBJ, STL, glTF, 및 GLB는 로드와 저장을 모두 지원합니다. FBX는 가져오기 전용으로 지원됩니다.

포맷 선택 가이드

올바른 포맷을 선택하는 것은 사용 사례에 따라 달라집니다:

  • OBJ 3D 툴 전반에 걸쳐 최대 호환성이 필요할 때 이상적입니다. 거의 모든 모델링 애플리케이션이 OBJ를 읽고 쓸 수 있습니다. 메쉬 데이터 교환에 잘 작동하지만, 동반되는 MTL 파일을 통해 기본적인 재질 정보만 전달합니다.
  • STL 3D 프린팅 워크플로우에 가장 적합한 포맷입니다. 재질이나 씬 계층 구조 없이 원시 삼각형 형태의 기하 정보를 저장하는데, 이는 슬라이서 소프트웨어가 정확히 기대하는 형태입니다. 파이프라인이 3D 프린터에서 끝난다면 STL이 가장 직관적인 선택입니다.
  • glTF 은 웹 및 실시간 3D의 최신 표준입니다. PBR 재질, 전체 씬 계층 구조를 지원하며 효율적인 전송을 위해 설계되었습니다. 웹 기반 뷰어를 구축하거나 three.js 또는 Babylon.js와 작업할 때, 혹은 실시간 렌더링 파이프라인을 목표로 할 때 glTF를 사용하십시오.
  • FBX 은 게임 개발 및 디지털 콘텐츠 제작 워크플로에 깊이 통합되어 있습니다. 계층 구조와 재질을 포함한 풍부한 씬 데이터를 지원합니다. Aspose.3D FOSS for Java는 FBX를 지원합니다. 가져오기 전용 – FBX 자산을 로드하고 다른 형식으로 변환하는 데 사용하십시오.

알려진 제한 사항

다음 사항을 유념하는 것이 중요합니다. Scene.render()지원되지 않음 FOSS 에디션에서는 지원되지 않습니다. 이 메서드를 호출하면 예외가 발생합니다. UnsupportedOperationException. 이 라이브러리는 파일 기반 3D 처리 – 로드, 조작, 변환 및 모델 저장 – 를 위해 설계되었으며, 실시간 디스플레이 렌더링을 위한 것이 아닙니다.

오픈 소스 및 라이선스

Aspose.3D FOSS for Java는 다음 라이선스에 따라 배포됩니다 MIT 라이선스. 이는 다음을 자유롭게 할 수 있음을 의미합니다:

  • 상업용 및 독점 애플리케이션에서 라이브러리를 사용할 수 있습니다.
  • 필요에 맞게 소스 코드를 수정할 수 있습니다.
  • 라이브러리를 귀하의 소프트웨어에 포함하여 배포하십시오.

MIT 라이선스가 명시한 것 외에 로열티 비용, 사용 제한, 그리고 저작자 표시 요구사항이 없습니다.

전체 소스 코드는 GitHub에 호스팅되어 있으며, 기여를 환영합니다: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

시스템 요구 사항

요구 사항세부 정보
Java 버전21 or later
종속성없음 (순수 Java)
플랫폼JVM을 실행하는 모든 플랫폼
빌드 도구Maven (권장)

시작하기

시작하고 실행하는 데 도움이 되는 리소스는 다음과 같습니다:

  • 문서 – 포괄적인 가이드와 API 워크스루를 다음에서 확인할 수 있습니다 Aspose.3D 문서 사이트.
  • 지식 베이스 – 실용적인 방법 안내 기사와 문제 해결 팁을 Aspose.3D KB.
  • API 레퍼런스 – 자세한 클래스 및 메서드 레퍼런스는 Aspose.3D API Reference.
  • 소스 코드 – 탐색하고 기여하기 GitHub.
  • Maven Central – 패키지는 다음과 같이 게시됩니다 com.aspose:aspose-3d-foss Maven Central에.

일반적인 사용 사례

다음은 Aspose.3D FOSS for Java가 잘 맞는 실용적인 시나리오 몇 가지입니다:

포맷 변환 파이프라인

많은 팀이 한 형식으로 3D 자산을 받지만 다른 형식이 필요합니다. 디자인 팀은 FBX를 사용하고 웹 팀은 glTF를 필요로 할 수 있습니다. 이 라이브러리를 사용하면 자동 변환 파이프라인을 구축할 수 있습니다:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

3D 자산을 애플리케이션에 통합하기 전에, 내용물을 검증하고 싶을 수 있습니다 — 노드 수 확인, 기하학 검증, 혹은 예상 요소가 존재하는지 확인하기:

Scene scene = Scene.fromFile("model.obj");

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

씬 어셈블리

여러 모델을 로드하고 하나의 씬으로 결합할 수 있습니다:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

다음은

다음 포스트에서는 다음 내용을 다룰 예정입니다:

  • 씬 그래프 API, 머티리얼, 그리고 수학 유틸리티의 핵심 기능을 깊이 파헤칩니다.
  • 지원되는 각 3D 포맷 — OBJ, STL, glTF, 그리고 FBX — 을 다루는 실용적인 가이드로, 로드/저장 옵션 및 배치 변환 패턴을 포함합니다.

계속 지켜봐 주세요, 그리고 자유롭게 라이브러리를 탐색하고 GitHub에 피드백을 공유해 주세요.