Blenderでパズルのアニメーション
Blender3.1で、パズルのアニメーションをするPythonで作成したアドオンの紹介です。
パズルのルール
- アイテムを動かして、各棒のアイテムが揃ったら完成
- アイテムは上からしか動かせない
- 移動先は、空の棒か同じアイテムの上でないといけない
- 1本の棒は4つまでしかおけない
- 同じアイテムは同時に動かせる
アドオン動作の前提条件
- 3本以上の棒といくつかのアイテムが必要です。いずれも
puzzle
というコレクションに入っている必要があります。 - アイテムは、焼き鳥のように棒に刺さっている必要があります。
- 棒の高さは揃えてください。アイテムの高さは棒を4分割したくらいの高さで揃えてください。
- アイテムはマテリアルで区別します。1つのマテリアルにちょうど4つのアイテムが必要です。
やり方
- Puzzle-Anim(Blender Add-on)をインストールしてください。
- サイドバーの編集タブの「Puzzle Anim」を開いてください。
- 「Make sample」を押してください。サンプルのオブジェクトを作成します。
- 「Make animation」を押してください。パズルを解くアニメーションがはじまります。
変更してみよう
棒とアイテムは下記のようにいくつでも置いたり場所も変えられます。
※ アイテムの追加は、アニメーションをクリアしてから行ってください。アニメーションが残っていると、追加時に位置が再設定されます。
アイテムを変更したら、再度、「Make animation」を押すと新しいアニメーションがはじまります。
ロジック
- puzzuleコレクションのオブジェクトの高さを2つにクラスタリングして、高い方を棒と認識し、残りをアイテムと認識します。
- 棒の位置を初期値にして、xy座標でクラスタリングして、各棒に刺さっているアイテムを識別します。
- 深さ優先探索で解を探索します。
- 解からアニメーションを作成します。
※ クラスタリングは、自前でkmeansで行っています。
以上