Cara Mengoptimumkan Model 3D dalam Python

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-foss pakej dipasang melalui pip 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.

Lihat Juga

 Bahasa Melayu