Kako optimizirati 3D modele u Python

Kako optimizirati 3D modele u Python

Problem

Velike 3D model datoteke mogu biti spore za učitavanje i prijenos. Kada radite s Aspose.3D u Python, postoje praktični koraci koje možete poduzeti kako biste smanjili veličinu datoteke i uklonili nepotrebne podatke scene; prvenstveno izvođenjem u kompaktan binarni format i uklanjanjem neiskorištenih čvorova iz grafova scene.

Preduvjeti

  • Python 3.7 ili noviji
  • aspose-3d-foss paket instaliran putem pip install aspose-3d-foss
  • Ulazna 3D datoteka (OBJ, STL, FBX, glTF ili 3MF)

Tehnike optimizacije

Pretvorite u kompaktan binarni format

Jedan od najučinkovitijih načina za smanjenje veličine datoteke je izvoz scene u glTF binarni (.glb). GLB format pakira geometriju i materijale u jednu binarnu datoteku, koja je znatno manja i brža za učitavanje od tekstualnih formata poput OBJ ili 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")

Pregledajte i prebrojite mreže

Prije obrade korisno je razumjeti koliko čvorova mreže scena sadrži. To pomaže u otkrivanju neočekivano velikih ili složenih scena.

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

Uklonite neiskorištene (isključene) čvorove

Čvorovi označeni kao isključeni se ne renderiraju. Identifikacija i preskakanje tih čvorova tijekom izvoza smanjuje otisak scene. The excluded atribut je svojstvo na Entity, a ne poziv metode.

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

Primjer koda

Ovaj primjer učitava scenu, izvještava o statistikama mreža i sprema u kompaktan GLB format: glavna praktična optimizacija dostupna putem 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)")

Napomene o opsegu optimizacije

Aspose.3D ne pruža algoritme za decimaciju mreža ili smanjenje poligona. Smanjenje veličine datoteke postiže se prvenstveno kroz:

  • Izvoz u binarne formate (GLB umjesto OBJ ili ASCII FBX)
  • Preskakanje isključenih ili praznih čvorova tijekom vaše vlastite logike obrade

Tvrdnje o određenim postotcima ubrzanja ili smanjenju memorije ovise o vašim ulaznim podacima i ne mogu se općenito jamčiti.

Vidi također

 Hrvatski