Πώς να βελτιστοποιήσετε τα 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)
- Αποκλείστε αποκλεισμένα ή κενά κόμβους κατά τη διάρκεια της δικής σας λογικής επεξεργασίας
Οι αξιώσεις για συγκεκριμένες ποσοστιαίες επιταχυντικές αυξήσεις ή μειώσεις μνήμης εξαρτώνται από τα δεδομένα εισόδου σας και δεν μπορούν να εγγυηθούν γενικά.