Jak optymalizować modele 3D w Pythonie
problemem
Podczas pracy z Aspose.3D w Pythonie, istnieją praktyczne kroki można podjąć, aby zmniejszyć rozmiar pliku i usunąć niepotrzebne dane sceny; przede wszystkim poprzez eksportowanie do kompaktowej formatu binarnego i wyciszenie nieużywanych przycisków z grafiki scény.
Warunki
- Python 3.7 lub później
aspose-3d-fossPakiet zainstalowany przezpip install aspose-3d-foss- Plik wejściowy 3D (OBJ, STL, FBX, glTF lub 3MF)
Techniki optymalizacji
Konwersja na kompaktowy format binarny
Jednym z najskuteczniejszych sposobów na zmniejszenie rozmiaru pliku jest eksportowanie sceny do gtf binary (.glbFormat GLB zawiera geometrii i materiałów w pojedynczy plik binarny, który jest znacznie mniejszy i szybszy do ładowania niż formaty oparte na tekście, takie jak OBJ lub 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")Inspekcja i liczba meczetów
Przed przetwarzaniem, warto zrozumieć, ile węzłów ma miejsce. pomaga to zidentyfikować nieoczekiwane duże lub złożone sceny.
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}")Usunąć nieużywane (wyłączone) węzły
Ustawienia oznaczone jako wykluczane nie są wyświetlane. identyfikacja i przełączanie tych węzłów podczas eksportu zmniejsza stopy sceniczne. excluded Atrakcje to własność na Entity,Nie jest to metoda wezwania.
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 przykładowy
Ten przykład ładuje scenę, informuje o statystykach i oszczędza do kompaktowego formatu GLB: główną optymalizację praktyczną dostępną za pośrednictwem 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)")Informacje o zakresie optymalizacji
Aspose.3D nie zapewnia algorytmów decymalizacji lub redukcji poligonu. zmniejszenie rozmiaru pliku jest osiągnięte głównie poprzez:
- Eksportowanie do formatu binarnego (GLB zamiast OBJ lub ASCII FBX)
- Wyskakowanie wykluczonych lub pustych węzłów podczas własnej logiki przetwarzania
Oświadczenia dotyczące określonych prędkości procentowych lub redukcji pamięci zależą od danych wejściowych i nie mogą być gwarantowane w ogóle.