Wie man 3D-Modelle in Python optimiert

Wie man 3D-Modelle in Python optimiert

Problem mit der

Bei der Arbeit mit Aspose.3D in Python gibt es praktische Schritte, die Sie ergreifen können, um die Dateigröße zu reduzieren und unnötige Szenendaten zu entfernen; hauptsächlich durch Exportieren in ein kompaktes binäres Format und Beschneiden von ungenutzten Knoten aus dem Scenengraph.

Voraussetzungen für die Durchführung der Maßnahmen

  • Python 3.7 oder neuer
  • aspose-3d-foss über das Paket installiert. pip install aspose-3d-foss
  • Eine 3D-Eingabedatei (OBJ, STL, FBX, glTF oder 3MF)

Optimierungstechniken

Konvertieren in ein kompaktes binäres Format

Eine der effektivsten Möglichkeiten, die Dateigröße zu verringern, ist es, das Bild in glTF-Binärformat (.glbDas GLB-Format packt Geometrie und Materialien in eine einzige binäre Datei, die deutlich kleiner und schneller zu laden ist als textbasierte Formate wie OBJ oder ASCII FBX.

from aspose.threed import Scene

scene = Scene.from_file("model.obj")
# Use the .glb extension for binary GLB auto-detection
# Note: FileFormat.GLTF2_BINARY is a None stub — do not pass it to scene.save()
scene.save("model.glb")

Überprüfen und zählen Sie die Netzmaschen.

Vor der Verarbeitung ist es nützlich zu verstehen, wie viele Mesh-Knoten die Szene enthält. Dies hilft unerwartet große oder komplexe Szenen zu identifizieren.

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

Nicht genutzte (ausgeschlossen) Knoten entfernen

Die Identifizierung und Übersprung dieser Knoten während des Exports reduziert den Szenenabdruck. excluded Attribut ist eine Eigenschaft auf Entity, nicht eine Methode.

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

Beispiel für den Code

Dieses Beispiel lädt eine Szene, berichtet über Mesh-Statistiken und speichert in das kompakte GLB-Format: die wichtigste praktische Optimierung, die durch Aspose.3D verfügbar ist.

from aspose.threed import Scene
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 — use .glb extension for auto-detection
# Note: FileFormat.GLTF2_BINARY is a None stub and must not be passed to scene.save()
scene.save("output.glb")
print("Saved as GLB (binary glTF)")

Hinweise zum Optimierungsumfang

Aspose.3D bietet keine Mesh-Dezimations- oder Polygonreduktionsalgorithmen. Die Dateigrößenreduzierung wird hauptsächlich durch:

  • Export in binäre Formate (GLB statt OBJ oder ASCII FBX)
  • Überspringen von ausgeschlossenen oder leeren Knoten während der eigenen Verarbeitung Logik

Ansprüche auf bestimmte prozentuelle Beschleunigungen oder Speicherreduktionen hängen von den Eingabedaten ab und können im Allgemeinen nicht garantiert werden.

Siehe auch:

 Deutsch