كيفية تحسين النماذج 3D في Python

كيفية تحسين النماذج 3D في Python

مشكلة

عند العمل مع Aspose.3D في Python ، هناك خطوات عملية يمكنك اتخاذها للحد من حجم الملف وإزالة بيانات المشهد غير الضرورية ؛ أساسا عن طريق تصديرها إلى تنسيق ثنائي صغير وتضغط على العقدة غير المستخدمة من الرسم البياني للمشهد.

المعايير

  • Python 3.7 أو أحدث
  • aspose-3d-foss الحزمة التي تم تثبيتها من خلال pip install aspose-3d-foss
  • ملف إدخال 3D (OBJ، STL، FBX، glTF، أو 3MF)

تقنيات التحسين

تحويل إلى شكل ثنائي صغير

واحدة من الطرق الأكثر فعالية للحد من حجم الملف هو تصدير المشهد إلى GST (.glbتنسيق GLB يغلي الهندسة والملفات في ملف ثنائي واحد ، وهو أصغر بكثير وأسرع تحميلًا من تناسقات نصية مثل OBJ أو ASCII FBX.

from aspose.threed import Scene

scene = Scene.from_file("model.obj")
# Use the .glb extension for binary GLB auto-detection
# Note: FileFormat.GLTF2_BINARY is a None stub — do not pass it to scene.save()
scene.save("model.glb")

- مراقبة وتوظيف الماسح الضوئي

قبل المعالجة ، فمن المفيد أن نفهم كم عدد عقدة الشمع في المشهد.هذا يساعد على تحديد المشاهد الكبيرة أو المعقدة بشكل غير متوقع.

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

إزالة النقاط غير المستخدمة (المستبعدة)

لا يتم تسليم العقد المحددة كإعفاء.تحديد وتفريغ هذه العقود أثناء التصدير يقلل من بصمة المشهد. excluded الممتلكات هي ممتلكاتها على Entity,لا طريقة الاتصال.

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

نموذج الرمز

هذا المثال يحمل مشهدًا ، ويبلغ إحصائيات الماسح ، ويتم حفظه إلى تنسيق GLB الصغير: التحسين العملي الرئيسي المتاح من خلال Aspose.3D.

from aspose.threed import Scene
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 — use .glb extension for auto-detection
# Note: FileFormat.GLTF2_BINARY is a None stub and must not be passed to scene.save()
scene.save("output.glb")
print("Saved as GLB (binary glTF)")

ملاحظات حول نطاق التحسين

Aspose.3D لا يوفر الخوارزميات التخفيض أو تقليل البوليغون. يتم تحقيق تخفيف حجم الملف بشكل رئيسي من خلال:

  • تصدير إلى تنسيقات ثنائية (GLB بدلا من OBJ أو ASCII FBX)
  • إزالة العقدة المغلقة أو الفارغة أثناء منطق المعالجة الخاص بك

تعتمد المطالبات المتعلقة بزيادة نسبة معينة أو انخفاض الذاكرة على بيانات الإدخال الخاصة بك ولا يمكن ضمانها بشكل عام.

انظر أيضا

 العربية