Sådan optimeres 3D-modeller i Python
Problem
Store 3D-modelfiler kan være langsomme at indlæse og overføre. Når du arbejder med Aspose.3D i Python, er der praktiske trin, du kan tage for at reducere filstørrelsen og fjerne unødvendige scenedata; primært ved at eksportere til et kompakt binært format og fjerne ubrugte noder fra scenegrafen.
Forudsætninger
- Python 3.7 eller senere
aspose-3d-fosspakke installeret viapip install aspose-3d-foss- En 3D-inddatafil (OBJ, STL, FBX, glTF eller 3MF)
Optimeringsteknikker
Konverter til et kompakt binært format
En af de mest effektive måder at reducere filstørrelsen på er at eksportere scenen til glTF-binær (.glb). GLB-formatet pakker geometri og materialer i en enkelt binær fil, som er betydeligt mindre og hurtigere at indlæse end tekstbaserede formater som OBJ eller ASCII FBX.
from aspose.threed import Scene, FileFormat
scene = Scene.from_file("model.obj")
scene.save("model.glb", FileFormat.GLTF2_BINARY)Undersøg og tæl mesh’er
Før behandlingen er det nyttigt at forstå, hvor mange mesh‑noder scenen indeholder. Dette hjælper med at identificere uventet store eller komplekse scener.
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}")Fjern ubrugte (ekskluderede) noder
Noder markeret som ekskluderet bliver ikke gengivet. Identificering og springning over disse noder under eksport reducerer scenens fodaftryk. Den excluded attribut er en egenskab på Entity, ikke et metodekald.
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}")Kodeeksempel
Dette eksempel indlæser en scene, rapporterer mesh-statistikker og gemmer i det kompakte GLB-format: den primære praktiske optimering, der er tilgængelig 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)")Bemærkninger om optimeringsomfang
Aspose.3D leverer ikke mesh-dekimation eller polygonreduceringsalgoritmer. Filstørrelsesreduktion opnås primært gennem:
- Eksport til binære formater (GLB i stedet for OBJ eller ASCII FBX)
- Spring over ekskluderede eller tomme noder under din egen behandlingslogik
Påstande om specifikke procentvise hastighedsforøgelser eller hukommelsesreduktioner afhænger af dine inputdata og kan generelt ikke garanteres.