Hvordan optimalisere 3D-modeller i Python

Hvordan optimalisere 3D-modeller i Python

Problem

Store 3D-modellfiler kan være trege å laste inn og overføre. Når du arbeider med Aspose.3D i Python, finnes det praktiske trinn du kan ta for å redusere filstørrelsen og fjerne unødvendige scenedata; hovedsakelig ved å eksportere til et kompakt binært format og fjerne ubrukte noder fra scenegrafen.

Forutsetninger

  • Python 3.7 eller nyere
  • aspose-3d-foss pakke installert via pip install aspose-3d-foss
  • En 3D-inndatafil (OBJ, STL, FBX, glTF eller 3MF)

Optimaliseringsteknikker

Konverter til et kompakt binært format

En av de mest effektive måtene å redusere filstørrelsen på er å eksportere scenen til glTF-binær (.glb). GLB-formatet pakker geometri og materialer inn i en enkelt binærfil, som er betydelig mindre og raskere å laste enn tekstbaserte formater som OBJ eller ASCII FBX.

from aspose.threed import Scene, FileFormat

scene = Scene.from_file("model.obj")
scene.save("model.glb", FileFormat.GLTF2_BINARY)

Inspiser og tell mesh-objekter

Før behandling er det nyttig å forstå hvor mange mesh-noder scenen inneholder. Dette hjelper med å identifisere uventet store eller komplekse scener.

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

Fjern ubrukte (ekskluderte) noder

Noder merket som ekskludert blir ikke gjengitt. Å identifisere og hoppe over disse nodene under eksport reduserer scenens fotavtrykk. Den excluded attributtet er en egenskap på Entity, ikke et metodekall.

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

Kodeeksempel

Dette eksemplet laster inn en scene, rapporterer mesh-statistikk, og lagrer til det kompakte GLB-formatet: den viktigste praktiske optimaliseringen som er tilgjengelig gjennom 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)")

Merknader om optimaliseringsomfang

Aspose.3D tilbyr ikke mesh-dekasjon eller polygonreduksjonsalgoritmer. Reduksjon av filstørrelse oppnås hovedsakelig gjennom:

  • Eksport til binære formater (GLB i stedet for OBJ eller ASCII FBX)
  • Hopp over ekskluderte eller tomme noder under din egen behandlingslogikk

Påstander om spesifikke prosentvise hastighetsforbedringer eller minnereduksjoner avhenger av dine inndata og kan ikke garanteres generelt.

Se også

 Norsk