今年度はBlenderで様々なことを行ってきましたが、今回はPythonを使用してオブジェクトの正規化を行っていきます。
〇環境
・Windows 11
・Blender4.1
〇正規化(トランスフォームの適応)とは
筆者はUnityエンジニアでもあるので、特に意図していない限りTransform.Position=0,0,0、Transform.Rotation=0,0,0、Transform.Scale=1,1,1であるオブジェクトの状態を理想としています。
これはスケールが整っていない場合UnityやUnrealEngineなどで期待される動きが行われないことや、アニメーション等が崩れるなど多くのトラブルを引き起こす可能性があります。
こうした状態が発生する原因としてオブジェクトモード
でスケールや回転等を与えてしまっているためです。
編集モードでスケールや回転を行うことでトランスフォームが維持されたまま変形させることができます。
また、現在の形状を維持しつつTransformを0,0,0、スケールを1,1,1にすることを正規化と呼びます。
これを行うためにはCtrl
+Aキー
から適応
→適応したいパラメータによって可能です。
〇位置の適応
この適応操作をPythonで行っていきます。
位置の適応は以下のようになります。
import bpy # 選択中のオブジェクトの位置を適用(正規化) bpy.ops.object.transform_apply(location=True, rotation=False, scale=False)
transform_apply()
を使用することで可能です。ここで、引数として位置、回転、スケールが存在し、それぞれBool型で与えることで可能です。
つまり回転のみ正規化したい場合は以下のようになります。
# 選択中のオブジェクトの回転を適用(正規化) bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)
同様にスケールの場合は以下です。
# 選択中のオブジェクトのスケールを適用(正規化) bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
以上でトランスフォームの適応=正規化が完了しました。
筆者は現在大学でBlenderの指導にもあたっているので、特に初学者向けに簡単にUnityなどにエクスポートできる仕組みも作っていきたいです。