Πώς να βελτιστοποιήσετε τα 3D μοντέλα στο Python

Πώς να βελτιστοποιήσετε τα 3D μοντέλα στο Python

προβλημα

Όταν εργάζεστε με Aspose.3D στο Python, υπάρχουν πρακτικά βήματα που μπορείτε να κάνετε για να μειώσετε το μέγεθος του αρχείου και να αφαιρέσετε τα περιττά δεδομένα σκηνής. κυρίως εξάγοντας σε μια μικρή δυαδική μορφή και πιέζοντας αχρησιμοποίητα κόμβους από το γραφείο σκάνισης.

Προϋποθέσεις

  • Python 3.7 ή νεότερη
  • aspose-3d-foss Το πακέτο εγκαθίσταται μέσω pip install aspose-3d-foss
  • Ένα αρχείο εισόδου 3D (OBJ, STL, FBX, glTF ή 3MF)

Τεχνικές βελτιστοποίησης

Μετατροπή σε ένα Compact Binary Format

Ένας από τους πιο αποτελεσματικούς τρόπους για να μειωθεί το μέγεθος του αρχείου είναι να εξάγει τη σκηνή σε δειγματοληψία (.glbΗ μορφή GLB συσκευάζει γεωμετρία και υλικά σε ένα μόνο δυαδικό αρχείο, το οποίο είναι σημαντικά μικρότερο και ταχύτερο να φορτίσει από τις μορφές που βασίζονται στο κείμενο όπως OBJ ή 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")

Ελέγχοντας και μετρητώντας τα ματς

Πριν από την επεξεργασία, είναι χρήσιμο να καταλάβουμε πόσα κόμβοι μαστού περιέχει η σκηνή. Αυτό βοηθά στην αναγνώριση απροσδόκητα μεγάλων ή πολύπλοκων σκάνων.

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

Απομάκρυνση Αχρησιμοποίητων (Αξαιρούμενων) Κόντρων

Τα κόμβα που έχουν επισημανθεί ως αποκλείονται δεν παραδίδονται.Η αναγνώριση και η απομάκρυνση αυτών των κόμπων κατά τη διάρκεια της εξαγωγής μειώνει την απόδοση του σκηνικού. excluded Η ιδιοκτησία είναι μια ιδιοκτήτη που Entity,Όχι μια μέθοδος κλήσης.

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

Κωδικός Παραδείγματος

Αυτό το παράδειγμα φορτώνει μια σκηνή, αναφέρει στατιστικά στοιχεία και αποθηκεύει στην συμπαγή μορφή GLB: η κύρια πρακτική βελτιστοποίηση που είναι διαθέσιμη μέσω του 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)")

Σημείωση για το πεδίο βελτιστοποίησης

Το Aspose.3D δεν παρέχει αλγόριθμους αποσύνθεσης ή μείωσης πολυγόνων. Η μείωση του μεγέθους αρχείων επιτυγχάνεται κυρίως μέσω:

  • Εξαγωγή σε δυαδικές μορφές (GLB αντί για OBJ ή ASCII FBX)
  • Αποκλείστε αποκλεισμένα ή κενά κόμβους κατά τη διάρκεια της δικής σας λογικής επεξεργασίας

Οι αξιώσεις για συγκεκριμένες ποσοστιαίες επιταχυντικές αυξήσεις ή μειώσεις μνήμης εξαρτώνται από τα δεδομένα εισόδου σας και δεν μπορούν να εγγυηθούν γενικά.

Δείτε επίσης

 Ελληνικά