Cara Mengoptimumkan Model 3D dalam Python
Masalah
Fail model 3D yang besar boleh menjadi perlahan untuk dimuatkan dan dipindahkan. Apabila bekerja dengan Aspose.3D dalam Python, terdapat langkah praktikal yang boleh anda ambil untuk mengurangkan saiz fail dan membuang data adegan yang tidak diperlukan; terutamanya dengan mengeksport ke format binari yang padat dan memangkas nod yang tidak digunakan dari graf adegan.
Prasyarat
- Python 3.7 atau lebih baru
aspose-3d-fosspakej dipasang melaluipip install aspose-3d-foss- Fail input 3D (OBJ, STL, FBX, glTF, atau 3MF)
Teknik Pengoptimuman
Tukar kepada Format Binari Kompak
Salah satu cara yang paling berkesan untuk mengurangkan saiz fail ialah mengeksport adegan ke glTF binari (.glb). Format GLB membungkus geometri dan bahan ke dalam satu fail binari, yang secara signifikan lebih kecil dan lebih cepat dimuatkan berbanding format berasaskan teks seperti OBJ atau ASCII FBX.
from aspose.threed import Scene, FileFormat
scene = Scene.from_file("model.obj")
scene.save("model.glb", FileFormat.GLTF2_BINARY)Periksa dan Kira Meshes
Sebelum memproses, adalah berguna untuk memahami berapa banyak nod mesh yang terdapat dalam adegan. Ini membantu mengenal pasti adegan yang secara tidak dijangka besar atau kompleks.
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}")Buang Nod yang Tidak Digunakan (Dikecualikan)
Node yang ditandakan sebagai dikecualikan tidak akan dirender. Mengenal pasti dan melangkau node-node ini semasa eksport mengurangkan jejak adegan. The excluded atribut adalah sifat pada Entity, bukan panggilan kaedah.
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}")Contoh Kod
Contoh ini memuatkan satu adegan, melaporkan statistik mesh, dan menyimpan ke format GLB yang padat: pengoptimuman praktikal utama yang tersedia melalui 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)")Nota mengenai Skop Pengoptimuman
Aspose.3D tidak menyediakan algoritma pengurangan mesh atau pengurangan poligon. Pengurangan saiz fail dicapai terutamanya melalui:
- Mengeksport ke format binari (GLB dan bukannya OBJ atau FBX ASCII)
- Melepaskan nod yang dikecualikan atau kosong semasa logik pemprosesan anda sendiri
Tuntutan mengenai peningkatan kelajuan atau pengurangan memori dalam peratusan tertentu bergantung pada data input anda dan tidak dapat dijamin secara umum.