夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

BlenderでPythonを用いてトランスフォームの適応を行う

今回はBlender Python枠です。

今年度は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にすることを正規化と呼びます。

これを行うためにはCtrlAキーから適応→適応したいパラメータによって可能です。

〇位置の適応

この適応操作を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などにエクスポートできる仕組みも作っていきたいです。