Cara Mengoptimalkan Model 3D di Python

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-foss paket diinstal melalui pip 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.

Lihat Juga

 Bahasa Indonesia