🔎

pyassimpで3Dメッシュデータを読む

2024/02/01に公開

自己紹介

ゲーム制作系テクニカルアーティスト

モチベーション

アセットで購入した3Dモデルデータを一括走査するツールの作成。
走査対象はobj,fbx辺りが想定される。
PySide6使いたかったし、データ読むだけだったので、わざわざFBX SDKのためにpythonのバージョンを落としたくなかった。

環境

  • anaconda3
  • python 3.11.7
  • pyassimp 5.2.5
pip install pyassimp
  • assimp 5.3.1(pyassimpだけで実行したらこっちも必要と言われたので)
conda install conda-forge::assimp

コード

欲しい情報

  • メッシュ名
  • メッシュに紐づくマテリアル名
  • メッシュそれぞれのtri数
import pyassimp

fbx_file_path = r"C:\test.fbx"
with pyassimp.load(fbx_file_path) as scene:
    #meshはアサインされたマテリアル毎に分割されている
    meshes = scene.meshes
    for mesh in meshes:
        #メッシュ名
        meshname = mesh.name
        #マテリアル
        mat_index = mesh.materialindex
        mat = scene.materials[mat_index]
        #マテリアル名
        matname = mat.properties.get(('name', 0))
        #tri数
        trinum = len(mesh.faces)
        #出力
        print('Mesh name : {meshname}, Material name : {matname}, tri num : {trinum}')

以上。
↓上記情報を用いてできたツール。

Discussion