Kā optimizēt 3D modeļus Python
Problēma
Lieli 3D modeļu faili var būt lēni ielādēties un pārsūtīties. Strādājot ar Aspose.3D Python, ir praktiski soļi, ko var veikt, lai samazinātu faila lielumu un noņemtu nevajadzīgos ainas datus; galvenokārt, eksportējot uz kompakto bināro formātu un izgriežot neizmantotos mezglus ainas grafā.
Priekšnosacījumi
- Python 3.7 vai jaunāks
aspose-3d-fosspakete instalēta caurpip install aspose-3d-foss- 3D ievades fails (OBJ, STL, FBX, glTF, vai 3MF)
Optimizācijas metodes
Pārveidot uz kompakto bināro formātu
Viens no visefektīvākajiem veidiem, kā samazināt faila lielumu, ir eksportēt ainu uz glTF bināro (.glb). GLB formāts iepako ģeometriju un materiālus vienā binārajā failā, kas ir ievērojami mazāks un ātrāk ielādējams nekā teksta formāti, piemēram, OBJ vai ASCII FBX.
from aspose.threed import Scene, FileFormat
scene = Scene.from_file("model.obj")
scene.save("model.glb", FileFormat.GLTF2_BINARY)Pārbaudīt un saskaitīt režģus
Pirms apstrādes ir noderīgi saprast, cik daudz mesh mezglu aina satur. Tas palīdz identificēt negaidīti lielas vai sarežģītas ainas.
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}")Noņemt neizmantotos (izslēgtos) mezglus
Mezgli, kas ir atzīmēti kā izslēgti, netiek renderēti. Šo mezglu identificēšana un izlaide eksportēšanas laikā samazina ainas pēdas nospiedumu. The excluded atribūts ir īpašība uz Entity, nevis metodes izsaukums.
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}")Koda piemērs
Šis piemērs ielādē ainu, ziņo par režģa statistiku un saglabā kompaktā GLB formātā: galvenā praktiskā optimizācija, kas pieejama caur 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)")Piezīmes par optimizācijas apjomu
Aspose.3D nenodrošina režģa decimācijas vai daudzstūru samazināšanas algoritmus. Faila izmēra samazināšana tiek sasniegta galvenokārt, izmantojot:
- Eksportēšana uz bināriem formātiem (GLB nevis OBJ vai ASCII FBX)
- Izlaist izslēgtos vai tukšos mezglus jūsu pašas apstrādes loģikā
Apgalvojumi par konkrētām procentuālām paātrinājuma vai atmiņas samazinājuma izmaiņām ir atkarīgi no jūsu ievades datiem un vispārīgi nevar tikt garantēti.