Kā optimizēt 3D modeļus Python

Kā optimizēt 3D modeļus Python

Problēma

Lieli 3D modeļu faili var būt lēni ielādēties un pārsūtīties. Strādājot ar Aspose.3D Python, ir praktiski soļi, ko var veikt, lai samazinātu faila lielumu un noņemtu nevajadzīgos ainas datus; galvenokārt, eksportējot uz kompakto bināro formātu un izgriežot neizmantotos mezglus ainas grafā.

Priekšnosacījumi

  • Python 3.7 vai jaunāks
  • aspose-3d-foss pakete instalēta caur pip install aspose-3d-foss
  • 3D ievades fails (OBJ, STL, FBX, glTF, vai 3MF)

Optimizācijas metodes

Pārveidot uz kompakto bināro formātu

Viens no visefektīvākajiem veidiem, kā samazināt faila lielumu, ir eksportēt ainu uz glTF bināro (.glb). GLB formāts iepako ģeometriju un materiālus vienā binārajā failā, kas ir ievērojami mazāks un ātrāk ielādējams nekā teksta formāti, piemēram, OBJ vai ASCII FBX.

from aspose.threed import Scene, FileFormat

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

Pārbaudīt un saskaitīt režģus

Pirms apstrādes ir noderīgi saprast, cik daudz mesh mezglu aina satur. Tas palīdz identificēt negaidīti lielas vai sarežģītas ainas.

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

Noņemt neizmantotos (izslēgtos) mezglus

Mezgli, kas ir atzīmēti kā izslēgti, netiek renderēti. Šo mezglu identificēšana un izlaide eksportēšanas laikā samazina ainas pēdas nospiedumu. The excluded atribūts ir īpašība uz Entity, nevis metodes izsaukums.

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

Koda piemērs

Šis piemērs ielādē ainu, ziņo par režģa statistiku un saglabā kompaktā GLB formātā: galvenā praktiskā optimizācija, kas pieejama caur 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)")

Piezīmes par optimizācijas apjomu

Aspose.3D nenodrošina režģa decimācijas vai daudzstūru samazināšanas algoritmus. Faila izmēra samazināšana tiek sasniegta galvenokārt, izmantojot:

  • Eksportēšana uz bināriem formātiem (GLB nevis OBJ vai ASCII FBX)
  • Izlaist izslēgtos vai tukšos mezglus jūsu pašas apstrādes loģikā

Apgalvojumi par konkrētām procentuālām paātrinājuma vai atmiņas samazinājuma izmaiņām ir atkarīgi no jūsu ievades datiem un vispārīgi nevar tikt garantēti.

Skatīt arī

 Latviešu