Aspose.3D FOSS для 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 (через mtllib директиву), бібліотека спробує автоматично завантажити визначення матеріалів з нього. Файл MTL має знаходитися в тому ж каталозі, що й файл OBJ, або за шляхом, вказаним у директиві.

Збереження у формат OBJ

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

Випадки використання OBJ

  • Обмін даними сітки між різними 3D‑інструментами.
  • Імпорт моделей з бібліотек ресурсів, які розповсюджують у форматі OBJ.
  • Швидка перевірка геометрії без складних ієрархій сцени.

STL: стереолітографія

STL — це стандартний формат для 3D‑друку. Він представляє необроблену трикутну геометрію без матеріалів, кольорів або ієрархії сцени. Файли STL існують у двох варіантах: ASCII (людсько‑читабельний) і бінарний (компактний).

Завантаження файлів 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 Transmission Format

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 для 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 файл у каталозі, конвертує кожен у glTF з красиво відформатованим виводом і зберігає результати. Ви можете адаптувати цей шаблон для будь‑якої комбінації вихідного та цільового формату.

Довідник щодо крос‑форматного перетворення

У наведеній таблиці показано, чого очікувати при перетворенні між форматами.

ВідДоГеометріяМатеріалиІєрархіяПримітки
OBJSTLЗбереженоВтраченоN/ASTL не підтримує матеріали
OBJglTF/GLBЗбереженоПеретворено у PBRПлоскийМатеріали MTL зіставлені, де це можливо
STLOBJЗбереженоНемаєN/AУ джерелі немає матеріалів
STLglTF/GLBЗбереженоЗа замовчуваннямПлоскийЗастосовано матеріал за замовчуванням
glTFOBJЗбереженоСпрощеноЗгладженоPBR у базовий матеріал
glTFSTLЗбереженоВтраченоСплющеноТільки геометрія
FBXOBJЗбереженоСпрощеноСплющеноСпрощення матеріалу
FBXSTLЗбереженоВтраченоСплющеноЛише геометрія
FBXglTF/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 – лише для імпорту; багатий формат для завантаження ресурсів з ігрових движків та DCC‑інструментів.

Використовуйте класи параметрів завантаження та збереження, специфічні для формату (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) коли потрібен детальний контроль над процесом імпорту чи експорту.

Для отримання докладнішої інформації відвідайте Aspose.3D документація або перегляньте вихідний код на GitHub.