Kako optimizirati 3D modele u Python
Problem
Velike 3D model datoteke mogu biti spore za učitavanje i prijenos. Kada radite s Aspose.3D u Python, postoje praktični koraci koje možete poduzeti kako biste smanjili veličinu datoteke i uklonili nepotrebne podatke scene; prvenstveno izvođenjem u kompaktan binarni format i uklanjanjem neiskorištenih čvorova iz grafova scene.
Preduvjeti
- Python 3.7 ili noviji
aspose-3d-fosspaket instaliran putempip install aspose-3d-foss- Ulazna 3D datoteka (OBJ, STL, FBX, glTF ili 3MF)
Tehnike optimizacije
Pretvorite u kompaktan binarni format
Jedan od najučinkovitijih načina za smanjenje veličine datoteke je izvoz scene u glTF binarni (.glb). GLB format pakira geometriju i materijale u jednu binarnu datoteku, koja je znatno manja i brža za učitavanje od tekstualnih formata poput OBJ ili 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")Pregledajte i prebrojite mreže
Prije obrade korisno je razumjeti koliko čvorova mreže scena sadrži. To pomaže u otkrivanju neočekivano velikih ili složenih scena.
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}")Uklonite neiskorištene (isključene) čvorove
Čvorovi označeni kao isključeni se ne renderiraju. Identifikacija i preskakanje tih čvorova tijekom izvoza smanjuje otisak scene. The excluded atribut je svojstvo na Entity, a ne poziv metode.
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}")Primjer koda
Ovaj primjer učitava scenu, izvještava o statistikama mreža i sprema u kompaktan GLB format: glavna praktična optimizacija dostupna putem 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)")Napomene o opsegu optimizacije
Aspose.3D ne pruža algoritme za decimaciju mreža ili smanjenje poligona. Smanjenje veličine datoteke postiže se prvenstveno kroz:
- Izvoz u binarne formate (GLB umjesto OBJ ili ASCII FBX)
- Preskakanje isključenih ili praznih čvorova tijekom vaše vlastite logike obrade
Tvrdnje o određenim postotcima ubrzanja ili smanjenju memorije ovise o vašim ulaznim podacima i ne mogu se općenito jamčiti.