كيفية تحسين النماذج ثلاثية الأبعاد في بايثون
مشكلة
يمكن أن تكون ملفات النماذج ثلاثية الأبعاد الكبيرة بطيئة في التحميل والنقل. عند العمل مع Aspose.3D في Python، هناك خطوات عملية يمكنك اتخاذها لتقليل حجم الملف وإزالة بيانات المشهد غير الضرورية؛ أساسًا عن طريق التصدير إلى تنسيق ثنائي مضغوط وتقليم العقد غير المستخدمة من مخطط المشهد.
المتطلبات المسبقة
- Python 3.7 أو أحدث
- حزمة
aspose-3d-fossمثبتة عبرpip install aspose-3d-foss - ملف إدخال ثلاثي الأبعاد (OBJ، STL، FBX، glTF، أو 3MF)
تقنيات التحسين
تحويل إلى تنسيق ثنائي مضغوط
إحدى أكثر الطرق فعالية لتقليل حجم الملف هي تصدير المشهد إلى ثنائي glTF (.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)
- تخطي العقد المستبعدة أو الفارغة أثناء منطق المعالجة الخاص بك
الادعاءات المتعلقة بزيادات السرعة بنسبة مئوية محددة أو تقليل الذاكرة تعتمد على بيانات الإدخال الخاصة بك ولا يمكن ضمانها بشكل عام.