چگونه مدلهای 3D را در Python بهینهسازی کنیم
مشکل
فایلهای بزرگ مدلهای 3D میتوانند بارگذاری و انتقالشان کند باشد. هنگام کار با Aspose.3D در Python، گامهای عملی وجود دارد که میتوانید برای کاهش اندازه فایل و حذف دادههای غیرضروری صحنه انجام دهید؛ عمدتاً با خروجی به یک فرمت باینری فشرده و حذف گرههای استفادهنشده از گراف صحنه.
پیشنیازها
- Python 3.7 یا بالاتر
aspose-3d-fossپکیج نصب شده از طریقpip install aspose-3d-foss- یک فایل ورودی 3D (OBJ, STL, FBX, glTF یا 3MF)
تکنیکهای بهینهسازی
تبدیل به یک قالب باینری فشرده
یکی از مؤثرترین روشها برای کاهش حجم فایل، صادر کردن صحنه به باینری glTF (.glb). فرمت GLB هندسه و مواد را در یک فایل باینری واحد بستهبندی میکند که بهمراتب کوچکتر و سریعتر از فرمتهای مبتنی بر متن مانند OBJ یا ASCII FBX بارگذاری میشود.
from aspose.threed import Scene, FileFormat
scene = Scene.from_file("model.obj")
scene.save("model.glb", FileFormat.GLTF2_BINARY)بازرسی و شمارش مشها
قبل از پردازش، مفید است که تعداد گرههای مش موجود در صحنه را درک کنید. این کار به شناسایی صحنههای غیرمنتظره بزرگ یا پیچیده کمک میکند.
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, 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)")یادداشتها دربارهٔ دامنه بهینهسازی
Aspose.3D الگوریتمهای کاهش مش یا کاهش چندضلعی را فراهم نمیکند. کاهش حجم فایل عمدتاً از طریق موارد زیر حاصل میشود:
- صادرات به فرمتهای باینری (GLB به جای OBJ یا FBX متنی)
- رد کردن گرههای مستثنی یا خالی در منطق پردازش خودتان
ادعاهای مربوط به درصد خاصی از افزایش سرعت یا کاهش حافظه به دادههای ورودی شما بستگی دارد و به طور کلی نمیتوان آن را تضمین کرد.