Jak optimalizovat 3D modely v Pythonu

Jak optimalizovat 3D modely v Pythonu

Problémy

Při práci s Aspose.3D v Pythonu můžete podniknout praktické kroky pro snížení velikosti souboru a odstranění zbytečných dat scény; především exportováním do kompaktního binárního formátu a vyřezáváním nepoužívaných uzlů ze scénového grafu.

Předpoklady

  • Python 3.7 nebo novější
  • aspose-3d-foss balíček nainstalovaný prostřednictvím pip install aspose-3d-foss
  • 3D vstupní soubor (OBJ, STL, FBX, glTF nebo 3MF)

Technické optimalizace

Konverze do kompaktního binárního formátu

Jedním z nejúčinnějších způsobů, jak snížit velikost souboru je export scény do binárního systému glTF (.glb) Formát GLB shromažďuje geometrii a materiály do jednoho binárního souboru, který je podstatně menší a rychlejší k načtení než textové formáty jako OBJ nebo 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")

Inspekce a počítání sítí

Před zpracováním je užitečné pochopit, kolik mešitých uzlů scéna obsahuje. To pomáhá identifikovat nečekaně velké nebo složité scény.

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

Odstranit nepoužívané (vyloučené) uzly

Vstupné, které jsou označené jako vyloučené nejsou vykreslovány. Identifikace a přeskočení těchto uzlů během exportu snižuje stopy scény. excluded atribut je vlastnost na Entity, ne metoda volání.

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

Příklad kódu

Tento příklad načte scénu, uvádí statistiku sítě a ukládá do kompaktního formátu GLB: hlavní praktická optimalizace dostupná prostřednictvím 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)")

Poznámky k rozsahu optimalizace

Aspose.3D neposkytuje algoritmy pro desetištění sítí ani redukci polygonů. Redukce velikosti souboru se dosahuje především prostřednictvím:

  • Export do binárních formátů (GLB místo OBJ nebo ASCII FBX)
  • Přehánění vyloučených nebo prázdných uzlů během vlastní logiky zpracování.

Tvrzení o konkrétních procentech zrychlení nebo snížení paměti závisí na vašich vstupních datech a obecně nelze zaručit.

Viz také:

 Čeština