Hur man optimerar 3D-modeller i Python
Problemet
När du arbetar med Aspose.3D i Python finns det praktiska steg som du kan ta för att minska filstorleken och ta bort onödiga scenen data; främst genom att exportera till ett kompakt binärt format och skrapa oanvända knappar från scenerna.
Förutsättningar
- Python 3.7 eller senare
aspose-3d-fossPaket installeras viapip install aspose-3d-foss- En 3D-inträdesfil (OBJ, STL, FBX, glTF eller 3MF)
Optimal tekniker
Konvertera till ett kompakt binärt format
Ett av de mest effektiva sätten att minska filstorleken är att exportera scenen till glTF binära (.glbGLB-formatet packar geometri och material i en enda binär fil, som är betydligt mindre och snabbare att ladda än textbaserade format såsom OBJ eller 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")Inspekt och räkna meshes
Innan bearbetningen är det användbart att förstå hur många mesh noder scenen innehåller. Detta hjälper till att identifiera oväntat stora eller komplexa 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}")Ta bort oanvända (uteslutna) noder
Nötter som markeras som uteslutna återges inte. Identifiering och övergång av dessa knappar under export minskar scenföddhet. excluded Attribut är en egendom på Entity,Inte ett metod kall.
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}")Kod Exempel
Detta exempel lader en scen, rapporterar mässtatistik och sparar till det kompakta GLB-formatet: den viktigaste praktiska optimeringen som finns tillgänglig via Aspose.3D.
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)")Noter om optimeringsområdet
Aspose.3D ger inte mesh decimation eller polygon reduction algoritmer. filstorlek minskning uppnås främst genom:
- Export till binära format (GLB istället för OBJ eller ASCII FBX)
- Skjut ut uteslutna eller tomma noder under din egen bearbetningslogik
Krav på specifika procentsatser eller minnesminskningar beror på dina inmatningsuppgifter och kan inte garanteras i allmänhet.