Kuinka optimoida 3D-mallit Python:ssa

Kuinka optimoida 3D-mallit Python:ssa

Ongelma

Suuret 3D-mallitiedostot voivat latautua ja siirtyä hitaasti. Kun työskentelet Aspose.3D:n kanssa Python:ssa, on olemassa käytännön toimenpiteitä, joilla voit pienentää tiedostokokoa ja poistaa tarpeettomat kohtausdatan; pääasiassa viemällä sen kompaktiksi binaarimuodoksi ja karsimalla käyttämättömät solmut kohtausgraafista.

Esivaatimukset

  • Python 3.7 tai uudempi
  • aspose-3d-foss paketti asennettu kautta pip install aspose-3d-foss
  • 3D-syötetiedosto (OBJ, STL, FBX, glTF tai 3MF)

Optimointitekniikat

Muunna kompaktiksi binaarimuodoksi

Yksi tehokkaimmista tavoista pienentää tiedoston kokoa on viedä kohtaus glTF-binääriin (.glb). GLB-muoto pakkaa geometrian ja materiaalit yhteen binääritiedostoon, mikä on merkittävästi pienempi ja nopeampi ladata kuin tekstiin perustuvat formaatit, kuten OBJ tai 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")

Tarkastele ja laske verkot

Ennen käsittelyä on hyödyllistä ymmärtää, kuinka monta verkko-solmua kohtaus sisältää. Tämä auttaa havaitsemaan odottamattoman suuria tai monimutkaisia kohtauksia.

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

Poista käyttämättömät (poissuljetut) solmut

Poissuljetuiksi merkittyjä solmuja ei renderöida. Näiden solmujen tunnistaminen ja ohittaminen viennin aikana vähentää kohtauksen jalanjälkeä. The excluded attribuutti on ominaisuus kohteessa Entity, ei metodikutsu.

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

Koodiesimerkki

Tässä esimerkissä ladataan kohtaus, raportoidaan verkkojen tilastot ja tallennetaan kompaktiksi GLB-muodoksi: pääasiallinen käytännön optimointi, joka on saatavilla Aspose.3D:n kautta.

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

Huomautuksia optimoinnin laajuudesta

Aspose.3D ei tarjoa verkkojen tiivistys- tai polygonien vähennysalgoritmeja. Tiedostokoon pienentäminen saavutetaan pääasiassa seuraavilla keinoilla:

  • Vienti binaarimuotoihin (GLB OBJ:n tai ASCII FBX:n sijaan)
  • Poissuljettujen tai tyhjien solmujen ohittaminen omassa käsittelylogiikassasi

Väitteet tietyn prosenttiosuuden nopeutuksista tai muistin säästöistä riippuvat syötteistasi, eikä niitä voida yleisesti taata.

Katso myös

 Suomi