Kaip optimizuoti 3D modelius Python

Kaip optimizuoti 3D modelius Python

Problema

Dideli 3D modelio failai gali būti lėti įkelti ir perkelti. Dirbant su Aspose.3D Python, yra praktinių žingsnių, kuriuos galite atlikti, kad sumažintumėte failo dydį ir pašalintumėte nereikalingus scenos duomenis; pagrindinė priemonė – eksportuoti į kompaktišką binarinį formatą ir išvalyti nenaudojamus mazgus iš scenos grafiko.

Būtinosios sąlygos

  • Python 3.7 arba naujesnė
  • aspose-3d-foss paketas įdiegtas per pip install aspose-3d-foss
  • 3D įvesties failas (OBJ, STL, FBX, glTF arba 3MF)

Optimizavimo technikos

Konvertuokite į kompaktišką binarinį formatą

Vienas efektyviausių būdų sumažinti failo dydį – eksportuoti sceną į glTF binarinį (.glb). GLB formatas supakuoja geometriją ir medžiagas į vieną binarinį failą, kuris yra žymiai mažesnis ir greitesnis įkelti nei tekstiniai formatai, tokie kaip OBJ arba 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")

Patikrinkite ir suskaičiuokite tinklus

Prieš apdorojimą naudinga suprasti, kiek tinklo mazgų scena turi. Tai padeda identifikuoti netikėtai dideles arba sudėtingas scenas.

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

Pašalinkite nenaudojamus (išskirtus) mazgus

Mazgo žymėti mazgai nėra atvaizduojami. Identifikavimas ir šių mazgų praleidimas eksporto metu sumažina scenos pėdsaką. Ši excluded atributas yra savybė, priklausanti Entity, o ne metodo iškvietimas.

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

Kodo pavyzdys

Šiame pavyzdyje įkeliamas scena, pateikiama tinklų statistika ir išsaugoma į kompaktišką GLB formatą: pagrindinė praktinė optimizacija, prieinama per 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)")

Pastabos apie optimizacijos apimtį

Aspose.3D nepateikia tinklų supaprastinimo ar daugiakampių sumažinimo algoritmų. Failo dydžio sumažinimas pasiekiamas pagrindinai per:

  • Eksportavimą į binarinius formatus (GLB vietoj OBJ arba ASCII FBX)
  • Išskirtų arba tuščių mazgų praleidimą jūsų pačių apdorojimo logikoje

Teiginiai apie konkrečius procentinius pagreitėjimus ar atminties sumažinimus priklauso nuo jūsų įvesties duomenų ir negali būti garantuoti apskritai.

Žr. taip pat

 Lietuvių