Aspose.3D FOSS untuk Java mendukung lima format file 3D: OBJ, STL, glTF, GLB, dan FBX (hanya impor).

Semua contoh menggunakan com.aspose.threed.* paket:

import com.aspose.threed.*;

Dependensi Maven:

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

Lanskap Format

Sebelum menyelam lebih dalam, berikut ikhtisar singkat tentang empat format yang didukung dan kasus penggunaan tipikalnya.

FormatEkstensiImporEksporDukungan MaterialHierarki Adegan
OBJ.objYaYaDasar (file MTL)Datar
STL.stlYaYaTidak adaDatar
glTF 2.0.gltfYaYaPBRPenuh
GLB.glbYaYaPBRPenuh
FBX.fbxYaTidakKayaLengkap

OBJ, STL, glTF, dan GLB mendukung impor dan ekspor. FBX didukung untuk hanya impor. GLB (binary glTF) dihasilkan melalui GltfSaveOptions dengan setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ adalah salah satu format mesh 3D yang paling banyak didukung. Ia menyimpan geometri sebagai teks biasa, dengan opsi .mtl file pendamping untuk material.

Memuat File OBJ

Pendekatan paling sederhana adalah dengan memberikan jalur file secara langsung:

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

Untuk kontrol lebih, gunakan ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

Ketika file OBJ merujuk ke file MTL (melalui sebuah mtllib directive), perpustakaan akan berusaha memuat definisi material darinya secara otomatis. File MTL harus berada di direktori yang sama dengan file OBJ atau pada jalur yang ditentukan dalam directive.

Menyimpan sebagai OBJ

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

Kasus Penggunaan OBJ

  • Menukar data mesh antara berbagai alat 3D.
  • Mengimpor model dari perpustakaan aset yang mendistribusikan dalam format OBJ.
  • Pemeriksaan cepat geometri tanpa hierarki adegan yang kompleks.

STL: Stereolithography

STL adalah format standar untuk pencetakan 3D. Ini mewakili geometri segitiga mentah tanpa material, warna, atau hierarki adegan. File STL hadir dalam dua varian: ASCII (dapat dibaca manusia) dan biner (kompak).

Memuat File STL

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

Menyimpan sebagai STL

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

Untuk mengontrol output, gunakan StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

Pertimbangan STL

  • File STL hanya berisi geometri yang ditriangulasi. Material, tekstur, dan hierarki adegan hilang selama ekspor.
  • Binary STL jauh lebih kecil dibandingkan ASCII STL untuk model besar.
  • STL adalah format pilihan ketika targetnya adalah printer 3D atau perangkat lunak slicer.

glTF: Format Transmisi GL

glTF adalah format modern yang dirancang untuk transmisi dan pemuatan konten 3D yang efisien, terutama di web dan dalam aplikasi waktu nyata. Format ini mendukung material PBR, hierarki adegan, dan animasi.

Memuat File glTF

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

Menyimpan sebagai glTF

Penyimpanan dasar menggunakan ekstensi file untuk menentukan format:

scene.save("output.gltf");

Untuk kontrol yang lebih detail, gunakan GltfSaveOptions:

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

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

Detail GltfSaveOptions

MetodeTujuan
setFlipCoordinateSystem(boolean)Balikkan sumbu sistem koordinat saat mengekspor. Berguna saat mengonversi dari Y-up ke Z-up atau sebaliknya.
setPrettyPrint(boolean)Format JSON output dengan indentasi untuk keterbacaan. Atur ke false untuk ukuran file yang lebih kecil dalam produksi.

Kasus Penggunaan glTF

  • Penampil 3D berbasis web (three.js, Babylon.js).
  • Aplikasi waktu nyata dan mesin game.
  • Mempertahankan definisi material PBR di seluruh alat.

FBX: Filmbox (Hanya Impor)

FBX adalah format proprietari oleh Autodesk yang banyak digunakan dalam pengembangan game dan pembuatan konten digital. Format ini mendukung hierarki adegan yang kaya, material, dan animasi. Aspose.3D FOSS untuk Java mendukung FBX untuk hanya impor – ekspor ke FBX tidak tersedia.

Memuat File FBX

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

Mengonversi FBX ke Format Lain

Karena ekspor FBX tidak didukung, konversikan adegan FBX yang diimpor ke glTF, GLB, OBJ, atau STL:

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

Kasus Penggunaan FBX

  • Mengimpor aset dari alat Autodesk (Maya, 3ds Max) dan mengonversinya ke format lain.
  • Memuat karakter berrig dan adegan beranimasi untuk diekspor ulang ke glTF/GLB.

Konversi Batch

Alur kerja umum adalah mengonversi seluruh direktori file dari satu format ke format lain. Berikut adalah pola untuk konversi batch:

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");
        }
    }
}

Ini memuat setiap .obj file dalam sebuah direktori, mengonversi masing-masing ke glTF dengan output pretty-printed, dan menyimpan hasilnya. Anda dapat menyesuaikan pola ini untuk kombinasi format sumber dan target apa pun.

Referensi Konversi Lintas Format

Tabel berikut menunjukkan apa yang dapat diharapkan saat mengonversi antar format.

DariKeGeometriMaterialHierarkiCatatan
OBJSTLTerjagaHilangN/ASTL tidak memiliki dukungan material
OBJglTF/GLBDipertahankanDikonversi ke PBRDatarMaterial MTL dipetakan bila memungkinkan
STLOBJDipertahankanTidak adaN/ATidak ada material dalam sumber
STLglTF/GLBDipertahankanBawaanDatarMaterial bawaan diterapkan
glTFOBJDipertahankanDisederhanakanDiratakanPBR ke material dasar
glTFSTLDipertahankanHilangDiratakanHanya geometri
FBXOBJDipertahankanDisederhanakanDiratakanPenyederhanaan material
FBXSTLDipertahankanHilangDiratakanHanya geometri
FBXglTF/GLBDipertahankanDikonversi ke PBRDipertahankanFidelitas yang baik

Pedoman Umum Konversi

  • Geometri selalu dipertahankan di semua pasangan format.
  • Material berkinerja paling baik antara glTF dan FBX, yang keduanya mendukung model material yang kaya. Mengonversi ke STL selalu menghilangkan material. Mengonversi ke OBJ menyederhanakan material ke model MTL dasar.
  • Hierarki adegan dipertahankan antara glTF dan FBX. OBJ dan STL menghasilkan struktur datar.

Menggabungkan Semua

Berikut contoh lengkap yang memuat file OBJ, memeriksa node-nya, dan mengekspor ke glTF dan 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.");
    }
}

Ringkasan

Aspose.3D FOSS untuk Java memberi Anda API yang konsisten di berbagai format. Poin-poin utama:

  • OBJ – pertukaran mesh sederhana dengan material dasar.
  • STL – format hanya geometri untuk alur kerja pencetakan 3D.
  • glTF / GLB – format modern yang mendukung PBR untuk penggunaan web dan waktu nyata. Use GltfSaveOptions dengan setContentType(FileContentType.BINARY) untuk output GLB.
  • FBX – hanya impor; format kaya untuk memuat aset dari mesin game dan alat DCC.

Gunakan kelas opsi muat dan simpan yang spesifik format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) ketika Anda memerlukan kontrol yang sangat detail atas proses impor atau ekspor.

Untuk detail lebih lanjut, kunjungi Aspose.3D documentation atau telusuri sumbernya di GitHub.