Come ottimizzare i modelli 3D in Python

Come ottimizzare i modelli 3D in Python

Problema

I file di modelli 3D di grandi dimensioni possono essere lenti da caricare e trasferire. Quando si lavora con Aspose.3D in Python, ci sono passaggi pratici che puoi eseguire per ridurre le dimensioni del file e rimuovere i dati di scena non necessari; principalmente esportando in un formato binario compatto e potando i nodi inutilizzati dal grafo della scena.

Prerequisiti

  • Python 3.7 o versioni successive
  • aspose-3d-foss pacchetto installato tramite pip install aspose-3d-foss
  • Un file di input 3D (OBJ, STL, FBX, glTF o 3MF)

Tecniche di Ottimizzazione

Converti in un Formato Binario Compatto

Uno dei modi più efficaci per ridurre le dimensioni del file è esportare la scena in glTF binario (.glb). Il formato GLB raggruppa geometria e materiali in un unico file binario, che è significativamente più piccolo e più veloce da caricare rispetto ai formati basati su testo come OBJ o ASCII FBX.

from aspose.threed import Scene, FileFormat

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

Ispeziona e Conta le Mesh

Prima dell’elaborazione, è utile capire quanti nodi mesh contiene la scena. Questo aiuta a identificare scene inaspettatamente grandi o complesse.

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

Rimuovi i Nodi Non Utilizzati (Esclusi)

I nodi contrassegnati come esclusi non vengono renderizzati. Identificare e saltare questi nodi durante l’esportazione riduce l’impronta della scena. Il excluded l’attributo è una proprietà di Entity, non è una chiamata di metodo.

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

Esempio di Codice

Questo esempio carica una scena, riporta le statistiche della mesh e salva nel formato compatto GLB: la principale ottimizzazione pratica disponibile tramite 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)")

Note sull’ambito dell’ottimizzazione

Aspose.3D non fornisce algoritmi di decimazione della mesh o di riduzione dei poligoni. La riduzione delle dimensioni del file è ottenuta principalmente tramite:

  • Esportazione in formati binari (GLB invece di OBJ o FBX ASCII)
  • Ignorare i nodi esclusi o vuoti durante la tua logica di elaborazione

Le affermazioni su specifici aumenti percentuali di velocità o riduzioni di memoria dipendono dai tuoi dati di input e non possono essere garantite in generale.

Vedi anche

 Italiano