Python içinde 3D Modelleri Nasıl Optimize Edilir

Python içinde 3D Modelleri Nasıl Optimize Edilir

Sorun

Büyük 3D model dosyaları yüklenmesi ve aktarılması yavaş olabilir. Python içinde Aspose.3D ile çalışırken, dosya boyutunu küçültmek ve gereksiz sahne verilerini kaldırmak için uygulayabileceğiniz pratik adımlar vardır; öncelikle sıkıştırılmış ikili bir formata dışa aktararak ve sahne grafiğinden kullanılmayan düğümleri budayarak.

Önkoşullar

  • Python 3.7 veya daha yeni sürüm
  • aspose-3d-foss paket … aracılığıyla yüklendi pip install aspose-3d-foss
  • Bir 3D giriş dosyası (OBJ, STL, FBX, glTF veya 3MF)

Optimizasyon Teknikleri

Kompakt Bir İkili Formata Dönüştür

Dosya boyutunu azaltmanın en etkili yollarından biri, sahneyi glTF ikili formatına (.glb). GLB formatı, geometriyi ve malzemeleri tek bir ikili dosyada paketler; bu, OBJ veya ASCII FBX gibi metin tabanlı formatlardan çok daha küçük ve daha hızlı yüklenir.

from aspose.threed import Scene, FileFormat

scene = Scene.from_file("model.obj")
scene.save("model.glb", FileFormat.GLTF2_BINARY)

Mesh’leri İncele ve Say

İşleme başlamadan önce, sahnenin kaç mesh düğümü içerdiğini anlamak faydalıdır. Bu, beklenmedik şekilde büyük veya karmaşık sahneleri belirlemeye yardımcı olur.

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}")

Kullanılmayan (Hariç Tutulan) Düğümleri Kaldır

Hariç olarak işaretlenen düğümler render edilmez. Bu düğümleri dışa aktarma sırasında tanımlamak ve atlamak, sahnenin ayak izini azaltır. The excluded attribute, … üzerinde bir özelliktir Entity, bir metod çağrısı değildir.

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}")

Kod Örneği

Bu örnek bir sahneyi yükler, ağ istatistiklerini raporlar ve kompakt GLB formatına kaydeder: Aspose.3D aracılığıyla mevcut olan ana pratik optimizasyon.

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)")

Optimizasyon Kapsamı Notları

Aspose.3D, ağ azaltma veya çokgen küçültme algoritmaları sağlamaz. Dosya boyutu küçültme öncelikle şunlarla elde edilir:

  • İkili formatlara dışa aktarma (OBJ yerine GLB veya ASCII FBX yerine)
  • Kendi işleme mantığınız sırasında dışarıda bırakılan veya boş düğümleri atlama

Belirli yüzde hız artışı veya bellek tasarrufu iddiaları, girdi verilerinize bağlıdır ve genel olarak garanti edilemez.

Ayrıca Bakınız

 Türkçe