Python에서 3D 모델을 최적화하는 방법

Python에서 3D 모델을 최적화하는 방법

문제점

파이썬에서 Aspose.3D를 사용하는 동안 파일 크기를 줄이고 불필요한 장면 데이터를 제거하기 위해 실용적인 단계가 있습니다; 주로 컴팩트한 바이너리 형식으로 수출하고 장점 차트에서 사용되지 않은 노드를 눌러.

원칙들

  • Python 3.7 또는 그 이후의 경우
  • aspose-3d-foss 설치된 패키지에 따라 pip install aspose-3d-foss
  • 3D 입력 파일 (OBJ, STL, FBX, glTF 또는 3MF)

최적화 기술

컴팩트 바이너리 형식으로 변환

파일 크기를 줄이는 가장 효과적인 방법 중 하나는 스케줄을 glTF 바이너리로 내보내는 것입니다 (.glbGLB 형식은 지질과 재료를 하나의 바이너리 파일로 포장하며, 이는 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는 메쉬 분해 또는 폴리곤 감소 알고리즘을 제공하지 않습니다. 파일 크기 감량은 주로 다음을 통해 달성됩니다 :

  • 이중 형식으로 수출 (OBJ 또는 ASCII FBX 대신 GLB)
  • 자신의 처리 논리 동안 꺼져 있거나 공허한 노드를 제거합니다.

특정 비율 속도 상승 또는 메모리 감소에 대한 주장은 입력 데이터에 달려 있으며 일반적으로 보장되지 않습니다.

또한 보기

 한국어