Jak optymalizować modele 3D w Pythonie

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-foss Pakiet zainstalowany przez pip 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.

Zobacz również

 Polski