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-fosspaketti asennettu kauttapip 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.