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

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 tambahan .mtl file pendamping untuk material.

Memuat File OBJ

Pendekatan paling sederhana adalah 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 direktif), 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 direktif.

Menyimpan sebagai OBJ

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

Kasus Penggunaan OBJ

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

STL: Stereolithography

STL adalah format standar untuk pencetakan 3D. Ini mewakili geometri triangulasi mentah tanpa material, warna, atau hierarki adegan. File STL hadir dalam dua varian: ASCII (dapat dibaca manusia) dan binary (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

  • STL hanya menyimpan geometri segitiga. Material, tekstur, dan hierarki adegan tidak didukung dan akan diabaikan saat diekspor.
  • Ekspor STL tidak tidak melakukan triangulasi secara otomatis. Binary STL menulis hanya 3 vertex pertama dari setiap wajah poligon; wajah quad dan n-gon dipotong secara diam-diam. ASCII STL menulis semua indeks vertex per wajah, menghasilkan output yang rusak untuk wajah non-segitiga. Selalu gunakan mesh yang sudah dipra-triangulasi (semua wajah segitiga) saat mengekspor ke STL.
  • STL binary jauh lebih kecil dibandingkan STL ASCII untuk model besar.
  • STL adalah format pilihan ketika targetnya adalah printer 3D atau perangkat lunak slicer.

glTF: GL Transmission Format

glTF adalah format modern yang dirancang untuk transmisi dan pemuatan konten 3D yang efisien, terutama di web dan aplikasi real-time. 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. Aspose.3D FOSS untuk Java mendukung FBX untuk hanya impor — ekspor ke FBX tidak tersedia.

Hanya FBX biner. Pengimpor FBX hanya membaca file FBX biner. Mengirim file FBX ASCII akan menyebabkan ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Hierarki node dan ekstraksi material dari FBX belum sepenuhnya diverifikasi; adegan FBX yang kompleks mungkin tidak dimuat sepenuhnya. Animasi dan rigging belum diimplementasikan.

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 mesh statis dari alat Autodesk (Maya, 3ds Max) dan mengonversinya ke format lain.
  • Memuat geometri FBX biner dan mengekspor ulang ke glTF/GLB, OBJ, atau STL.

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 yang diformat rapi, 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.

DariKeGeometriMaterialHirarkiCatatan
OBJSTLDipertahankanHilangN/ASTL tidak mendukung material
OBJglTF/GLBDipertahankanDikonversi ke PBRDatarMaterial MTL dipetakan bila memungkinkan
STLOBJDipertahankanTidak adaN/ATidak ada material di sumber
STLglTF/GLBDipertahankanBawaanDatarMaterial bawaan diterapkan
glTFOBJDipertahankanDisederhanakanDiratakanPBR ke material dasar
glTFSTLDipertahankanHilangDiratakanHanya geometri
FBXOBJDipertahankanDisederhanakanDiratakanPenyederhanaan material
FBXSTLDipertahankanHilangDiratakanHanya geometri
FBXglTF/GLBDipertahankanDikonversi ke PBRDipertahankanFidelitas baik

Pedoman Umum Konversi

  • Geometri umumnya dipertahankan di antara pasangan format, dengan satu pengecualian penting: saat mengekspor ke STL, mesh harus terdiri sepenuhnya dari wajah segitiga. Binary STL secara diam-diam memotong wajah quad dan n-gon menjadi tiga verteks pertama; ASCII STL menghasilkan output yang rusak untuk wajah non-segitiga.
  • Material bertahan paling baik antara scene yang diimpor dari glTF dan FBX yang menyertakan data material. Mengonversi ke STL selalu menghilangkan material. Mengonversi ke OBJ menyederhanakan material menjadi model MTL dasar.
  • Hierarki scene dipertahankan antara file berformat glTF. OBJ dan STL menghasilkan struktur datar. Hierarki FBX dan ekstraksi material belum sepenuhnya diverifikasi dalam versi ini.

Menggabungkan Semua

Berikut contoh lengkap yang memuat file OBJ, memeriksa node‑nya, dan mengekspor ke glTF serta 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 memberikan 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 real-time. Gunakan GltfSaveOptions dengan setContentType(FileContentType.BINARY) untuk output GLB.
  • FBX – hanya untuk 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 membutuhkan kontrol yang sangat detail atas proses impor atau ekspor.

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