Comment optimiser les modèles 3D dans Python

Comment optimiser les modèles 3D dans Python

Problème

Les gros fichiers de modèles 3D peuvent être lents à charger et à transférer. Lorsque vous travaillez avec Aspose.3D dans Python, il existe des étapes pratiques que vous pouvez suivre pour réduire la taille du fichier et supprimer les données de scène inutiles ; principalement en exportant vers un format binaire compact et en éliminant les nœuds inutilisés du graphe de scène.

Prérequis

  • Python 3.7 ou version ultérieure
  • aspose-3d-foss package installé via pip install aspose-3d-foss
  • Un fichier d’entrée 3D (OBJ, STL, FBX, glTF ou 3MF)

Techniques d’optimisation

Convertir en un format binaire compact

L’une des méthodes les plus efficaces pour réduire la taille du fichier consiste à exporter la scène au format binaire glTF (.glb). Le format GLB regroupe la géométrie et les matériaux dans un seul fichier binaire, ce qui est nettement plus petit et plus rapide à charger que les formats basés sur du texte comme OBJ ou FBX ASCII.

from aspose.threed import Scene, FileFormat

scene = Scene.from_file("model.obj")
scene.save("model.glb", FileFormat.GLTF2_BINARY)

Inspecter et compter les maillages

Avant le traitement, il est utile de connaître le nombre de nœuds de maillage que contient la scène. Cela permet d’identifier les scènes inattendue­ment volumineuses ou complexes.

from aspose.threed import Scene
from aspose.threed.entities import Mesh

scene = Scene.from_file("model.obj")

mesh_count = 0
for node in scene.root_node.child_nodes:
    if isinstance(node.entity, Mesh):
        mesh_count += 1
        print(f"  Mesh '{node.name}': {len(node.entity.control_points)} vertices, "
              f"{node.entity.polygon_count} polygons")

print(f"Total meshes: {mesh_count}")

Supprimer les nœuds inutilisés (exclus)

Les nœuds marqués comme exclus ne sont pas rendus. Identifier et ignorer ces nœuds lors de l’exportation réduit l’empreinte de la scène. Le excluded l’attribut est une propriété de Entity, pas un appel de méthode.

from aspose.threed import Scene
from aspose.threed.entities import Mesh

scene = Scene.from_file("model.obj")

active_nodes = []
for node in scene.root_node.child_nodes:
    entity = node.entity
    if entity is not None and not entity.excluded:
        active_nodes.append(node.name)

print(f"Active (non-excluded) nodes: {active_nodes}")

Exemple de code

Cet exemple charge une scène, rapporte les statistiques du maillage et enregistre au format compact GLB : la principale optimisation pratique disponible via Aspose.3D.

from aspose.threed import Scene, FileFormat
from aspose.threed.entities import Mesh

# Load the input model
scene = Scene.from_file("input.obj")

# Inspect mesh count and vertex totals
total_vertices = 0
for node in scene.root_node.child_nodes:
    if isinstance(node.entity, Mesh):
        mesh = node.entity
        total_vertices += len(mesh.control_points)

print(f"Total vertices before export: {total_vertices}")

# Save to compact binary GLB: smaller and faster to load than OBJ
scene.save("output.glb", FileFormat.GLTF2_BINARY)
print("Saved as GLB (binary glTF)")

Notes sur la portée de l’optimisation

Aspose.3D ne fournit pas d’algorithmes de décimation de maillage ou de réduction de polygones. La réduction de la taille du fichier est obtenue principalement grâce à :

  • Exportation vers des formats binaires (GLB au lieu d’OBJ ou de FBX ASCII)
  • Ignorer les nœuds exclus ou vides lors de votre propre logique de traitement

Les affirmations concernant des gains de vitesse ou des réductions de mémoire en pourcentage spécifiques dépendent de vos données d’entrée et ne peuvent pas être garanties de manière générale.

Voir aussi

 Français