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.
| Format | Ekstensi | Impor | Ekspor | Dukungan Material | Hierarki Adegan |
|---|---|---|---|---|---|
| OBJ | .obj | Ya | Ya | Dasar (file MTL) | Datar |
| STL | .stl | Ya | Ya | Tidak ada | Datar |
| glTF 2.0 | .gltf | Ya | Ya | PBR | Penuh |
| GLB | .glb | Ya | Ya | PBR | Penuh |
| FBX | .fbx | Ya | Tidak | Kaya | Lengkap |
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
| Metode | Tujuan |
|---|---|
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.
| Dari | Ke | Geometri | Material | Hierarki | Catatan |
|---|---|---|---|---|---|
| OBJ | STL | Terjaga | Hilang | N/A | STL tidak memiliki dukungan material |
| OBJ | glTF/GLB | Dipertahankan | Dikonversi ke PBR | Datar | Material MTL dipetakan bila memungkinkan |
| STL | OBJ | Dipertahankan | Tidak ada | N/A | Tidak ada material dalam sumber |
| STL | glTF/GLB | Dipertahankan | Bawaan | Datar | Material bawaan diterapkan |
| glTF | OBJ | Dipertahankan | Disederhanakan | Diratakan | PBR ke material dasar |
| glTF | STL | Dipertahankan | Hilang | Diratakan | Hanya geometri |
| FBX | OBJ | Dipertahankan | Disederhanakan | Diratakan | Penyederhanaan material |
| FBX | STL | Dipertahankan | Hilang | Diratakan | Hanya geometri |
| FBX | glTF/GLB | Dipertahankan | Dikonversi ke PBR | Dipertahankan | Fidelitas 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
GltfSaveOptionsdengansetContentType(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.