Aspose.3D FOSS pour Java prend en charge cinq formats de fichiers 3D : OBJ, STL, glTF, GLB, et FBX (import uniquement).

Tous les exemples utilisent le com.aspose.threed.* package :

import com.aspose.threed.*;

Dépendance Maven :

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

Paysage du format

Avant de plonger, voici un aperçu rapide des quatre formats pris en charge et de leurs cas d’utilisation typiques.

FormatExtensionImportationExportationSupport matérielHiérarchie de la scène
OBJ.objOuiOuiBasique (fichiers MTL)Plat
STL.stlOuiOuiAucunPlat
glTF 2.0.gltfOuiOuiPBRComplet
GLB.glbOuiOuiPBRComplet
FBX.fbxOuiNonRicheComplet

OBJ, STL, glTF et GLB prennent en charge à la fois l’importation et l’exportation. FBX est pris en charge pour importation uniquement. GLB (binary glTF) est produit via GltfSaveOptions avec setContentType(FileContentType.BINARY).

OBJ : Wavefront Object

OBJ est l’un des formats de maillage 3D les plus largement pris en charge. Il stocke la géométrie en texte brut, avec un .mtl fichier compagnon pour les matériaux.

Chargement des fichiers OBJ

L’approche la plus simple consiste à passer le chemin du fichier directement :

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

Pour plus de contrôle, utilisez ObjLoadOptions:

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

Lorsque le fichier OBJ référence un fichier MTL (via un mtllib directive), la bibliothèque tentera de charger automatiquement les définitions de matériaux depuis celui‑ci. Le fichier MTL doit se trouver dans le même répertoire que le fichier OBJ ou au chemin indiqué dans la directive.

Enregistrement au format OBJ

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

Cas d’utilisation d’OBJ

  • Échange de données de maillage entre différents outils 3D.
  • Importation de modèles depuis des bibliothèques d’actifs qui distribuent au format OBJ.
  • Inspection rapide de la géométrie sans hiérarchies de scène complexes.

STL : Stéréolithographie

STL est le format standard pour l’impression 3D. Il représente une géométrie triangulée brute sans matériaux, couleurs ou hiérarchie de scène. Les fichiers STL existent en deux variantes : ASCII (lisible par l’homme) et binaire (compact).

Chargement de fichiers STL

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

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

Enregistrement au format STL

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

Pour contrôler la sortie, utilisez StlSaveOptions:

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

Considérations STL

  • Les fichiers STL ne contiennent que de la géométrie triangulée. Les matériaux, les textures et la hiérarchie de la scène sont perdus lors de l’exportation.
  • Le STL binaire est nettement plus petit que le STL ASCII pour les grands modèles.
  • Le STL est le format privilégié lorsque la cible est une imprimante 3D ou un logiciel de découpe.

glTF : GL Transmission Format

glTF est un format moderne conçu pour la transmission et le chargement efficaces de contenu 3D, en particulier sur le web et dans les applications en temps réel. Il prend en charge les matériaux PBR, les hiérarchies de scène et les animations.

Chargement des fichiers glTF

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

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

Enregistrement au format glTF

L’enregistrement de base utilise l’extension de fichier pour déterminer le format :

scene.save("output.gltf");

Pour un contrôle détaillé, utilisez GltfSaveOptions:

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

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

Détails de GltfSaveOptions

MéthodeObjectif
setFlipCoordinateSystem(boolean)Inverser l’axe du système de coordonnées lors de l’exportation. Utile lors de la conversion de Y-up à Z-up ou inversement.
setPrettyPrint(boolean)Formater le JSON de sortie avec une indentation pour une meilleure lisibilité. Définir sur false pour une taille de fichier plus petite en production.

Cas d’utilisation de glTF

  • Visionneuses 3D basées sur le Web (three.js, Babylon.js).
  • Applications en temps réel et moteurs de jeu.
  • Préserver les définitions de matériaux PBR entre les outils.

FBX : Filmbox (Importation uniquement)

FBX est un format propriétaire d’Autodesk largement utilisé dans le développement de jeux et la création de contenu numérique. Il prend en charge des hiérarchies de scène riches, des matériaux et des animations. Aspose.3D FOSS pour Java prend en charge FBX pour importation uniquement – l’exportation vers FBX n’est pas disponible.

Chargement des fichiers FBX

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

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

Conversion de FBX vers d’autres formats

Étant donné que l’exportation FBX n’est pas prise en charge, convertissez les scènes FBX importées en glTF, GLB, OBJ ou STL :

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

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

Cas d’utilisation de FBX

  • Importation d’actifs depuis les outils Autodesk (Maya, 3ds Max) et conversion vers d’autres formats.
  • Chargement des personnages articulés et des scènes animées pour une réexportation vers glTF/GLB.

Conversion par lots

Un flux de travail courant consiste à convertir un répertoire complet de fichiers d’un format à un autre. Voici un modèle pour la conversion par lots :

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

Cela charge chaque .obj fichier d’un répertoire, le convertit en glTF avec une sortie formatée de manière lisible, et enregistre les résultats. Vous pouvez adapter ce modèle à n’importe quelle combinaison de formats source et cible.

Référence de conversion inter‑format

Le tableau suivant montre à quoi s’attendre lors de la conversion entre formats.

DeÀGéométrieMatériauxHiérarchieNotes
OBJSTLConservéPerduN/ASTL ne prend pas en charge les matériaux
OBJglTF/GLBConservéConverti en PBRPlatMatériaux MTL mappés lorsque possible
STLOBJConservéAucunN/AAucun matériau dans la source
STLglTF/GLBConservéPar défautPlatMatériau par défaut appliqué
glTFOBJPréservéSimplifiéAplatiPBR vers matériau de base
glTFSTLConservéPerduAplatiGéométrie uniquement
FBXOBJConservéSimplifiéAplatiSimplification du matériau
FBXSTLConservéPerduAplatiGéométrie uniquement
FBXglTF/GLBConservéConverti en PBRConservéBonne fidélité

Lignes directrices générales de conversion

  • Géométrie est toujours préservé à travers toutes les paires de formats.
  • Matériaux se conservent le mieux entre glTF et FBX, qui prennent tous deux en charge des modèles de matériaux riches. La conversion en STL supprime toujours les matériaux. La conversion en OBJ simplifie les matériaux au modèle MTL de base.
  • Hiérarchie de la scène est préservée entre glTF et FBX. OBJ et STL produisent des structures plates.

Mettre tout ensemble

Voici un exemple complet qui charge un fichier OBJ, inspecte ses nœuds et exporte vers glTF et 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.");
    }
}

Résumé

Aspose.3D FOSS for Java vous offre une API cohérente à travers plusieurs formats. Les points clés :

  • OBJ – échange de maillage simple avec des matériaux de base.
  • STL – format uniquement géométrique pour les pipelines d’impression 3D.
  • glTF / GLB – format moderne compatible PBR pour le web et l’utilisation en temps réel. Utilisez GltfSaveOptions avec setContentType(FileContentType.BINARY) pour la sortie GLB.
  • FBX – import uniquement; format riche pour charger des actifs depuis les moteurs de jeu et les outils DCC.

Utilisez les classes d’options de chargement et d’enregistrement spécifiques au format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) lorsque vous avez besoin d’un contrôle granulaire sur le processus d’importation ou d’exportation.

Pour plus de détails, consultez le documentation Aspose.3D ou parcourez le code source sur GitHub.