Cara Mengoptimalkan Model 3D di Python
Masalah
File model 3D yang besar dapat lambat dimuat dan ditransfer. Saat bekerja dengan Aspose.3D di Python, ada langkah praktis yang dapat Anda ambil untuk mengurangi ukuran file dan menghapus data adegan yang tidak diperlukan; terutama dengan mengekspor ke format biner yang kompak dan memangkas node yang tidak terpakai dari grafik adegan.
Prasyarat
- Python 3.7 atau lebih baru
aspose-3d-fosspaket diinstal melaluipip install aspose-3d-foss- File input 3D (OBJ, STL, FBX, glTF, atau 3MF)
Teknik Optimasi
Konversi ke Format Biner Ringkas
Salah satu cara paling efektif untuk mengurangi ukuran file adalah mengekspor adegan ke glTF biner (.glb). Format GLB mengemas geometri dan material ke dalam satu file biner, yang secara signifikan lebih kecil dan lebih cepat dimuat dibandingkan format berbasis 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 Hitung Mesh
Sebelum memproses, berguna untuk memahami berapa banyak node mesh yang terdapat dalam adegan. Hal ini membantu mengidentifikasi adegan yang secara tak terduga 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}")Hapus Node yang Tidak Digunakan (Dikecualikan)
Node yang ditandai sebagai dikecualikan tidak dirender. Mengidentifikasi dan melewatkan node-node ini selama ekspor mengurangi jejak adegan. The excluded atribut adalah properti pada Entity, bukan panggilan 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}")Contoh Kode
Contoh ini memuat sebuah adegan, melaporkan statistik mesh, dan menyimpan ke format GLB yang kompak: optimasi praktis 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)")Catatan tentang Lingkup Optimasi
Aspose.3D tidak menyediakan algoritma decimasi mesh atau pengurangan poligon. Pengurangan ukuran file dicapai terutama melalui:
- Mengekspor ke format biner (GLB alih-alih OBJ atau FBX ASCII)
- Melewati node yang dikecualikan atau kosong selama logika pemrosesan Anda sendiri
Klaim tentang percepatan persentase tertentu atau pengurangan memori bergantung pada data masukan Anda dan tidak dapat dijamin secara umum.