本文へスキップ


                                     Unity3D, VRoid, モーキャプ編集ツール, fbx おちっこLAB Since 2002 おちゃっこLAB Since 2006
おちゃっこLAB化け猫編バージョン2 Since 2013/12/21
おちゃっこLABメトード2編 Since 2021/09/23

Win日記[Windowsプログラミング日記]



前書き

おちゃっこのWindowsプログラミングの日記です。
勉強したこととか、作ったもののスクリーンショットとかのページにします。

新しい記事の方が上に来るように書いていきます。






次の新しい日記のページへ






Unity上でVRoidのvrmにbvhモーションキャプチャを適用する手順[2021/11/14]


今回は複数ソフト間の連携の手順の日記です
まずは主要リンク先を提示します

Unity3D(3D統合ソフト) https://unity3d.com/jp/get-unity/download
VRoid Studio(キャラクター作成ソフト) https://vroid.com/
UniVRM(Unity用vrmインポーターパッケージ) https://github.com/vrm-c/UniVRM/releases
カーネギーメロン大学モーキャプ(bvh) https://sites.google.com/a/cgspeed.com/cgspeed/motion-capture
EditMot(モーキャプデータコピペ編集ツール) https://www.vector.co.jp/soft/winnt/art/se523002.html
EditMotOSS版MameBake3Dのプログラムソース(実行ファイル無し) https://github.com/Ochakko

手順通りに変換設定したUnity上のvrmの動画
https://twitter.com/ochakkolab/status/1459615015875473411?s=20


では手順説明です。


図1:VRoidでキャラクターモデル作成してエクスポート

かわいいキャラクターをすぐに作れるVRoidが正式版になったそうなので試してみました。
ライセンスとしては作成したモデルをUnity上でゲームに使用しても良いそうです。
図1はVRoidで作成したキャラクターです。
この日記のページの都合上画像ファイルが小さくて圧縮表示で残念ですが実際もっとすごいかわいいです。

今回の日記はVRoid正式版のvrmファイルをUnity上で表示して
モーションキャプチャファイルbvhの動きをさせる手順を書きます。
図1に示すようにキャラクターが完成したらVRMエクスポートメニューを実行。

次にモーションキャプチャファイルfbxにしてUnityに持っていく準備をします。
EditMotというソフトを使います。
https://www.vector.co.jp/soft/winnt/art/se523002.html



図2:bvhフォルダ

図2のようにモーションキャプチャファイルbvhを1つのフォルダに入れます。
モーションキャプチャファイルはカーネギーメロン大学のMotionBuilder Friendlyタイプを推奨。
モーキャプデータには回転の順序だけでなく座標系がいろいろ異なるものがあるので
適切な種類を選ぶことが重要

retarget.rtgというファイルはEditMotというソフトのTestフォルダの中に入っています。
retarget.rtgファイルをbvhファイルと同じフォルダにコピペします。


図3:bvh2FBX batchメニュー実行

EditMotを立ち上げてFile-->bvh2FBX batchメニューを実行。


図4:bvh2FBX batchでbvhフォルダーを指定

bvh2FBX batchメニューを実行してbvhが入ったフォルダの場所を指定します。
図4はbvhフォルダ指定画面です。


図5:bvh2FBX batchの結果

bvh2FBX batchが成功すると図5のようにbvhフォルダの中にfbxファイルが生成されます。

次にUnityへ複数モーション入りのfbxを持っていく準備として
1つの形状fbxにbvh2FBXで作成した複数のfbxモーションをリターゲットします。


図6:MotonBrushでサンプルプロジェクトを読み込む

EditMotのFile-->Openメニューを時こうして
EditMotのTestフォルダの中にあるサンプルプロジェクトを開きます。


図7:EditMotのTestフォルダのプロジェクトを読み込んだところ



図8:サンプルプロジェクトの形状にbvh2FBXで作成したFBXのモーションをバッチでリターゲット

File-->Retarget batchメニューを実行して
サンプルプロジェクトの形状にbvh2FBXで作成したFBXのモーションをバッチでリターゲットします。
少し時間が掛かりますがプログレスバーが出ますので気長に終了を待ってください。


図9:モデルパネル表示

Retarget batch終了後にはサンプル形状にモーションが適用されています。
この際モーション用のモデルデータも作成されます。
モーション用のfbxのモデルは重くなる原因ですので削除します。
削除するにはFile-->モデルパネルメニューを実行してモデルパネルを表示し
不要モデルの横のdeleteボタンを押します。


図10:不要モデルを削除した後のモデルパネル


図11:モーションパネル

モデルを削除して動作を軽くしたところで
リターゲットしたモーションの確認をします。
モーションの確認をしてどのモーションを使うかを決めます。


図12:モーションパネルでモーションを選択して再生してチェック選択

モーションパネルでモーションを選択した後
オイラーグラフ(画面下の横長ウインドウ)の上部のボタンの内、三角の形のプレイボタンを押します。
プレイボタンを押してモーションをチェックします。
カメラ操作用のスプライトボタンは3DウインドウのSpriteFKと書いてあるプレートをクリックして出します。


図13:ToolWIndowのプロパティボタンでモーションに名前を付ける

使用するモーションを決めたら
そのモーションに名前を付けます。
ToolWindowのプロパティボタンでプロパティダイアログを出して名前を設定。


図14:プロジェクト保存

File-->Save-->Projectでプロジェクトを保存します。

図15:プロジェクト名設定

プロジェクト保存時にはプロジェクト名を変えることを推奨します。
名前を変えない場合は既存のプロジェクトが上書きされます。



図16:Unity3Dでプロジェクト作成

さていよいよ本題のUnityで動かすための説明です。
Unity3Dのプロジェクトを作成します。
3D Coreタイプを選択して適当なプロジェクト名を付けてCreate projectボタンで作成。


図17:モーションリターゲット済のfbxとテクスチャをUnityのAssetにドラッグアンドドロップ

モーションリターゲット済のfbxとテクスチャをUnityのAssetにドラッグアンドドロップします。
リターゲット済のfbxはEditMotで作成したプロジェクトフォルダの中のモデル名のフォルダの中にあります。


図18:fbxのRigをHumanoidに設定

fbxをドラッグアンドドロップしたら
Assetの中にfbxのアイコンが出来ます。
再生マークが付いているfbxのアイコンをクリック。
右側のInspectorウインドウのRigタブをクリック。
RigのタイプとしてHumanoidを指定してApplyボタン。
これでfbxのボーン情報がUnityの標準形式へと変換されました。


図19:fbxのAnimation設定

図18のRigタブのtなりにあるAnimationタブをクリック。
今回はプログラミング無しでの説明なのでモーションは1つにします。
モーション名のあるウインドウで必要ないモーションを - ボタンを押して削除。

LoopTimeにチェック。
CycleOffsetに1(後で再生速度倍率を設定すると自動で大きい数値になる)。
Root Transform Rotation-->Original
Root Transform Position Y --> Feet
Root Transform Positon XZ --> Original
Motion--> Root Motion Node --> <None>
Applyボタンを押す。

ここで大事なのはRoot Motion Nodeを<None>のままにするところ。
fbx自体を表示に使用する場合にはRootNode-->Hip_Jointを指定するのですが
vrmのモーションとして使用する場合には<None>にしておかないと体全体の回転の中心がずれます


2022/01/10追記
UnityEditorのアップデートにより
<None>以外にも自動処理の選択肢が追加されています。
それでもうまくいかないばあいは
InspectorでVRM側の全体移動ジョイントの位置を
fbx側の全体移動の位置と同じになるように数値入力するとうまくいきます。



図20:Asset内にAnimator Controllerを作成

Asset内で右クリックしてCreate-->Animator Controllerメニューを実行して
Animator Controllerを作成。


図21:Animator Controllerの設定

作成したAnimator Controllerのアイコンをクリック。
画面上のAnimatorタブをクリック。
fbxをEntryボタンの辺りにドラッグアンドドロップ。
モーション名のラベルが付いたオレンジ色のボタンが作成される。



図22:モーションスピードの設定

オレンジ色のボタンをクリック。
Speedに5を指定。


次はVRoidで作成した表示用のvrmをインポートします。


図23:Asset内でImport Package



図24:UniVRM


vrmをUnityにインポートするには
UniVRMというパッケージを使いますのであらかじめダウンロードしておきます(図24)。

先ほどと同じモデルデータのあるAsset内で右クリック。
Import Package-->Custom Packageメニューを実行しUniVRMをインポート。
UniVRMというパッケージをインポートしてvrmをインポート可能になりました。


図25:VRoidでエクスポートしたvrmをUnityにインポート

VRoidでエクスポートしたvrmをAsset内にドラッグアンドドロップ。
vrmのキャラクターの絵が付いたアイコンがAsset内に出来ます。


図26:メニューからvrmをHierarchyに追加

vrmをUnityのHierarchyに追加します。
この際にドラッグアンドドロップではなくVRM0-->MeshIntegratorメニューを使います



図27:HierarychyのMainCameraの設定

ここまでの手順で
vrmがゲーム用のオブジェクトとして登録されましたが
このままではカメラがキャラクターの後ろ姿を映しています。
Hierarchyのメインカメラをクリックして設定(図27)。
Rotation Y --> 180
Position Z --> (+)5.5


図28:vrmのAnimation Controller指定

Hierarchyのvrmの項目をクリック。
InspactorのAnimator-->ControllerにAsset内に作成したAnimator Controllerを指定。


図29:Game画面でvrmモーション再生

ゲームタブを押してから三角の再生ボタンを押すと
vrmがbvhから作成したfbxのモーションを再生します。
髪の毛も揺れます!!

動画をツイッターにアップしました。
https://twitter.com/ochakkolab/status/1459615015875473411?s=20


こんなことがGUI操作だけでプログラミング無しで出来てしまうなんて
UnityもVRoidもすごい!!




説明がつくっ、説明がつくぞっっ!!(憑りつかれた研究者風に)」[2021/10/10]


EditMotはver1.0.0.7で完成したのですが
初期のころのモーションキャプチャ結果のbvhを扱う場合に
姿勢が裏返ることがある不具合が発覚し修正に苦労しました

MameBake3Dデベロップ版としてオープンソースで試行錯誤しながら開発しました
やっと結果が落ち着いて更に説明もつくようになったのでメモとして残します
(EditMot ver1.0.0.15としてのリリースは1,2週間後になる予定です)

裏返る現象を図1と図2であらわします


図1:意図した姿勢(裏返っていない)


図2:意図しない姿勢(裏返っている)

肘の姿勢を例にとって説明します
肘の姿勢を計算するときには図1に示すオレンジ色の折れ線
つまり[肩から肘の線]と[肘から手首への線]の曲がり具合から計算します

このとき図1が意図した姿勢だとして
オレンジ色の折れ線情報だけで計算すると図2の意図しない姿勢が計算結果になることがあります

図1の折れ線も図2の折れ線も同じようにみえるので答えが2通り出てくるのです
これがbvh裏返りの症状の原因でした

そこで対策しました

一般的な3Dソフトにおいてはオレンジ色の折れ線情報に加えて
オレンジ色の折れ線に垂直なベクトルUpVec(アップベクトル)の計算を加えて正しい姿勢にします

MameBake3DとEditMotにおいては
メトード研究開発練習が目的なので
計算方法を編み出すことになりました

(オイラー角に関しては
2010年ころに協力者(謎の猫様?)が残したものを大いに参考にして続きを開発してきました)

さてその方法とは
図1と図2の姿勢の内
1回前(時間的に1フレーム前)の姿勢におけるオイラー角に近い方を選ぶという方法です。
その際に図2の姿勢を図1の姿勢に正すためのオイラー角の表現について試行錯誤しました

骨の軸をX軸とすると図1と図2ではX軸に関して裏返るほどねじっています
X軸に関して180度ねじっていることはすぐにわかります
長い間それだけで判定していました

しかし図1では肘を直角から伸ばす方向に曲げているのに対し
図2では肘を伸ばした状態から曲がる方向に曲げています
このときの回転軸をY軸とすると
図1ではY軸に関して60度曲げたとき
図2ではY軸に関してー60度曲げています

実際の姿勢の違いを体を使って確認してやっと正解と思われるオイラー角補正がわかりました
骨の軸に関しては180度違い
その他の2つの軸に関しては両方とも符号違いの回転になります

このことを考える際に陥った間違えとしては
回転結果の座標軸との成す角度だけから答えを導こうとする間違いがありました

今回求めているのはX,Y,Zの順番で回転するオイラー角を求めているのです
回転が座標系からみて何度かではなくて軸の周りに何度回すかというのを求めているのです

そんな間違いを何度も何度もして180ーY度のはずだなどと試行錯誤してはがっかりしていました

これらのことを踏まえると
式で表すと骨の軸がXのときオイラー角は
図1:X度、Y度、Z度
のとき
図2:X+180度、ーY度、ーZ度
となります


骨の軸はY軸の場合もZ軸の場合もあります

これらの中で1回前のオイラー角に一番近いものを選べば
正しい姿勢が得られることがMameBake3Dデベロップ版にて検証できました
研究成果として
行列とUpVecを使用したオイラー角計算の
別解(クォータニオンと前回比較を使用したオイラー角計算)
がやっと出来ました

https://github.com/Ochakko
(MameBake3DのChaVecCalc.h, ChaVecCalc.cppにあります)


この成果をEditMotにマージして
EditMot ver1.0.0.15のリリースへと準備中です

EditMotはVector様のサイトにて配布予定です
(現在1つ前のバージョンver1.0.0.14公開中
https://www.vector.co.jp/soft/winnt/art/se523002.html


次こそ完成版だと思います
(だよねぇー)



2021/10/14追記
180度裏返り対策付きのver1.0.0.15は2021/10/20夕方 Vector様のサイト(上記)にて公開予定です

180度裏返り対策について実際の効果を示さないと説得力に欠けると思うので補足説明します

モーションキャプチャ技術は昔よりも今の方が手法や精度などが改善されています
ですが昔のキャプチャデータも膨大であり精度が悪いデータも使いたくなります
精度が悪いデータにおいて足が180度近く上がったときなどに180度裏返りは起こりやすいです

昔のデータを扱うとき
180度裏返りが起こってしまったときの説明をします


図3にver1.0.0.14つまり180裏返り対策無しのモーキャプデータのオイラーグラフを示します
赤色がX軸回転、緑色がY軸回転、青色がZ軸回転です
XYZの順番でそれぞれの角度だけ回転することになります


図3:180度裏返り対策無しのオイラーグラフ

オイラー角はそれぞれ180度急に値が飛んでいたり急に符号が反転しているのがわかります


図4にver1.0..15つまり180度裏返り対策有りのオイラーグラフを示します


図4:180度裏返り対策有りのオイラーグラフ

図4についても
古い手法のモーキャプデータなのでオイラーグラフに段々状になっていますが
対策により元の動き本筋の動きがわかるようなグラフに完全しました

図4のオイラーグラフになる前にもう一段階ありました
オイラー角の計算のたびに裏返り対策計算をしてしました
そのときにはせっかく直したオイラーオイラーグラフが多重回裏返ってしまいました
多重回裏返るとIK操作(マウスでジョイントをドラッグして姿勢を編集する操作)の開始時に
瞬時に姿勢が裏返ったりしました

そこで180度裏返り対策はモーキャプデータbvhをfbxファイルに変換する際にだけ実行しました
そのようにしたところIK操作時に姿勢が急に反転することもなくなりました


さてそれでは次の段階
裏返ってはいませんがグラフが段々状になっています
段々状のオイラーグラフのモーション再生すると
少しの間変化が無く急に少しカクッと動くのを繰り返します

これに対しても解決策はあります

図5と図6をみてください


図5:段差が起きているフレーム(横軸時間)の前後のフレームをマウスドラッグで選択



図6:ツールウインドウの補間ボタンを押して補間を行い段差を無くす


図5で段差の1つを選んで段差の前と後ろを含むように複数フレーム選択します

図6でツールウインドウの補間ボタンを押します
補間ボタンを押すと複数フレーム選択の一番最初のフレームと一番最後のフレームの姿勢はそのままで
その間のフレームの姿勢を最初と最後の間で滑らかに変化するように計算
して設定します

他の段差についても補間するべきところは補間操作します

このようにして段々状のオイラーグラフ対策をすると
モーションが滑らかになります


古いモーキャプデータも使える可能性が高くなるバージョン
それが2021/10/20夕方公開予定のEditMot ver1.0.0.15
です


ちなみに
こちらとしては
180度裏返り対策を実装しましたが
誰かの手のひら返しが無くなる保証はありません







EditMot(エディットモット)を使って確かめたいことがある[2021/07/18]


EditMotはver1.0.0.7で完成したのですが
リターゲットバッチ処理(一括処理)機能があまりにも落ちやすいということで
修正版を出すことにしました。
落ちないことと処理中にGUIがキラキラしてきれいなところはトレードオフだったのですが
真面目にやれということで、キラキラしなくなりますが落ちなくなりました。
7月26日(月)朝にEditMot ver1.0.0.8が出ました!!。
配布アドレスは以下です。(投げ銭はカートに入れるボタンからお願いします
https://www.vector.co.jp/soft/winnt/art/se523002.html


EditMotにはたくさんの機能が付いていますが
モーションキャプチャデータの部分的コピペを一推し(いちおし)していることには理由があります。

某所で2500個のモーションキャプチャデータが手に入ります。手に入りました。

手付けモーションのプロでもない人がかっこいいあるいは面白いダンスモーションを作るためには!!


という問いの応えの一つとして


2500個の実際の動きを部分的にコピペすれば踊ることが出来る
という
仮説を立てました。



EditMotのミッションとして上記仮説を確かめるのです。
2500個のキャプチャデータをfbxファイルにして更にゆりちゃんデータ(同梱している赤ジャージの子)にリターゲットするには
膨大な(おおげさに言うと)変換処理待ち時間が必要
さらに全モーションを再生して確認してプルプルしている部分などを滑らかに修正するにはかなりの手間が必要。
しかし、それをやることはゆりちゃん用のモーションライブラリが出来るようなもの。
コピペして踊らせるのです。
モーションライブラリが本当にモーションライブラリならコピペして踊るはずなのです。
いや、踊りたいのです!!

ということで
作業は地味を極めますが出来れば楽しいものです。



知っていますでしょうか?
ラジオ体操の意味を。
NHKの見解によりますとラジオ体操をしても体力増進にはなりません。
体力増進にはなりませんが命の危機を救う可能性があるそうです。
というのは転びにくくなるそうです。
なぜ転びにくくなるのか?
普段したことのない態勢になったときに転びやすいそうです。
普段したことの無い変な姿勢の体操をたくさんしておくとそれを体だか脳だかが覚えていて
いざというときのその姿勢から通常の姿勢への補間計算を行って転ばずに復帰するそうです。
そういう意味でラジオ体操すると転びにくくなり命の危機を救うのです。
あ、ラジオ体操の宣伝ではありません。
何が言いたいかというと
2500個の実際の動きをコピペして補間することにより踊ることも可能という仮説の論拠を示した
のです。
つまり動きとは覚えている動きの補間計算なのですという論拠


そんな面倒なことをなぜするのか?
みなさん驚く方もいるかもしれませんが
実を言うとぼくも踊りたかったんですwww
(確かめさせてください)



ちなみにぼくがコンピュータのことを好きな理由は
自分の代わりに動いている絵を描いてくれるところです。



EditMot(エディットモット)シェアウェア版としても完成[2021/07/07]


EditMot(エディットモット)はシェアウェアとしても完成しました。

特色
モーションキャプチャデータの部分的コピペしてFBXファイル


次のアドレスはまとめの動画のアドレスです。
動画【モーションツール】ver1.0.0.7完成版のいいところ【完成しますた】
https://youtu.be/nApvd9___mQ

エピソードっぽくまとめの感想も書かせていただきました。

上記のまとめ動画の中の技術的な部分の抜粋を日記として書いてみます。


まずモーションツールとしては
モーションキャプチャデータを使うものが格段に見栄えするということ。
ということは
モーションツールに求められているのは
モーションキャプチャデータの部分的コピーペーストであるという仮定。
その仮定に基づいてEditMot(エディットモット)はver1.0.0.7でシェアウェアとしても完成。

画面的にどうなのかスクリーンショットを載せます。

図1,図2、図3は
EditMotに同梱しているEditMotC4.exeにより
2つのEditMot.exeを2つ縦に並べて立ち上げたところ。
EditMotは複数起動して一方から他方へとモーションのコピーペーストが可能。


図1:下のEditMotは腕を元気良く振るが少ししか歩かない。
上のEditMotはくるっと一周り歩くが腕をほとんど振らない。
下のEditMotのモーションをコピー。


図2:上のMotionBrushのツールの操作対象ボーン設定ボタンを押して
腕のモーションだけをペーストするように指定。



図3:上のEditMotで複数フレームを選択してツールのペーストボタンを押してペースト。


図1から図3の説明を読むとおわかりのように
モーションキャプチャデータの
任意のフレーム範囲の任意のボーンのモーションを
任意のフレーム範囲にコピーペースト可能。

動画ではお見せしませんでしたが
コピーペーストにより
つなぎ目部分が不連続になった場合には
ツールの補間ボタンを使います。

補間ボタンの使い方を説明します。
不連続の始まりのフレームと不連続の終わりのフレームを両端に含むように複数フレームを選択。
ツールの補間ボタンを押す。
不連続の始まりと終わりの間を補間して滑らかに変化させます。



次に
コピーペーストだけでは足りないことがあります。
そのための編集機能も付いています。

これについては以前から動画や日記にしているように
複数フレームとブラシとブラシのパラメータを選んで
ジョイントをマウスでドラッグする方式の編集。

図4,図5,図6は
おちゃっこLABのEditMotのページ置いてある追加ブラシのアップデータを使用した様子。



図4:UpLinearブラシ、リピート2、ミラーU。線形。


図5:UpX^2ブラシ、リピート2,ミラーU。放物線。



図6:UpCosブラシ、リピート2、ミラーU。三角関数。


図4,5,6で使ったブラシは
機械的な線形の動作、放物線、三角関数のブラシ。
動きは冒頭で紹介した動画をみてください。

ジョイントのドラッグ操作に失敗したり気に入らなかった場合には
Ctrlキーを押しながらzキーを押すとアンドゥ(操作の取り消し)が出来ます。
ShiftキーとCtrlキーを押しながらzキーを押すとリドゥ(取り消した操作の再実行)が出来ます。
アンドゥリドゥ用のバッファはリングバッファです。


こんな感じの機能が
私が思う完成形のモーションツールの編集機能。

みなさんに見守っていただけたから完成できたと思っています。
どうもありがとうございました。


以下にリンクを示す。

Vector様のサイトでシェアウェアとして公開中
2021/07/07 ver1.0.0.7 完成版リリース
https://www.vector.co.jp/soft/winnt/art/se523002.html


2021/07/11
EditMotPluginsSDK Updata 002
TopPosスライダーを0にしたときの重みが間違っていたのを修正
(本体と一緒にご使用ください)
アップデータ002 ブラシ修正 EditMot ver1.0.0.7用

動画【モーションツール】ver1.0.0.7完成版のいいところ【完成しますた】
https://youtu.be/nApvd9___mQ

おちゃっこLABのEditMotのページ



EditMot(エディットモット)とBrush(ブラシ)の関係[2021/06/25]


モーションブラシってどこがブラシなの?
という疑問に対して説明しました。

以下のリンクのpdfに簡単にですが書きました。
MotionBrush_ExplainGraphOfBrushes.pdf へのリンク


Vector様に登録されました。[2021/05/29]


みなさんの応援のお陰で
OSSとしてのMameBake3Dは完成し
開発継続のためにソフト名をEditMotに変えて
Vector様のところでシェアウェアとして公開中です
ありがとうございます


Vector様のシステムは
ダウンロードと課金が別ボタンになっていますので
まずは気軽にダウンロードして動くかどうかチェックしてから
課金するかどうかを決めることが出来ます

EditMotのVector様でのアドレスは以下です
https://www.vector.co.jp/soft/winnt/art/se523002.html

動かすために必要なランタイム(DLL)のインストーラと
修正したテストデータは本サイトに置いてあります
EditMot1.0.0.1用のアップデータ001


現在のEditMotのバージョンはver1.0.0.1で
ver1.0.0.2への差し替えを申請中

ver1.0.0.2には上記のアップデータ001が同梱されています
バグの修正もあります


EditMotを気に入ってくださった方や
将来性に期待された方などおりましたら
投げ銭感覚で
カートに入れるボタンを押して
いただけると
開発継続の可能性がアップします

前回の日記においては
4KTVが必須のような印象でしたが
EditMotというソフトとしては
横2K縦1Kの解像度があれば画面内におさまります
ですので機種によっては13インチのモバイルでも動作可能です


メインのツイッターアカウントは
@ochakkolab
です

モーションブラシ用のアカウントを作りました
@Brush0Ch
です



ありがとうございます。MameBake3D完成しました。[2021/05/13]


令和3年(2021年)5月13日(木)大安 午後0時08分 MameBake3Dは完成!!
本サイトのMameBake3Dのページ

トップページでも告知しましたがMameBake3D(まめばけ3D)完成しました。

Microsoft DirectX11対応
物理ライブラリbullet physics対応
ゲームパッド(Sony DualSence)対応

FBXファイル入出力
ベイク済フルフレームモーション対応
bvhファイルをFBXにする機能
リターゲット機能
全ボーン自動剛体作成設定機能搭載
物理パラメータ設定
30fpsでも破綻しないように設定できる物理シミュレーション
複数フレーム変化分編集
モーションブラシ機能
IK搭載
物理IK搭載
物理シミュレーションと物理IKのベイク

3Dモーションに必要と思われる数式を研究開発テストしてOSS化
( https://github.com/Ochakko )

MameBake3Dのgithubへの最初のコミットは
2014年6月22日

完成まで約7年間


ありがとうございました。
おかげさまで完成しました。

思えば2010年頃
不特定多数にゲーム作成ライブラリを配布していた頃
物理に大きなバグがある指摘を受けながらも
そんなことはないと配布を続けてしまい怒られたのであった

オープンソースにしてからその大きなバグはみつかって修正した

このオープンソースの7年間は
こちらとしては
3Dモーションのブラックボックスに対する信用問題だったのだろう
と今ならわかる気がする

あくまでも
こちらとしては
である

3Dモーションに関わる計算式を
研究開発しながら説明し信用問題に対応
した
と解釈

みなさんにみまもっていただいたから出来たこと
本当にありがとうございます


説明済の数式が一式揃ったところで
これから生活の足しとなるような
シェアウェア作成に取り掛かります

(の足し)というのが重要

以前は3Dソフト販売だけで生活しようという高すぎる目標を持っていた
せっかく貴重なお小遣いを使ってくださった人に対してまで
これでは足りない生活できない
というような不満の態度を示してしまった

(生活)の足しを意識することで
みなさんからの善意に気が付くことが出来ました


ありがとうございました
今後ともよろしくお願いいたします


次のシェアウェアは4KTV対応ならではのソフトにする予定

こんなのを考えている段階


図1 次のソフトの案その1

図1の案としては
親玉ソフト内部から
MameBake3D相当のソフトを4つ起動して並べて
4つのソフトの内の2つを選んで選択フレームから選択フレームへと
モーションの編集を可能にしたい
というもの

4つ起動して負荷はどうなのかをみたのが図2


図2 4つ立ち上げて4つとも物理シミュレーションを動かしたときのマシンへの負荷

物理を4つも立ち上げると
CPUは10%から25%くらい
GPUは10%から40%くらい
の負荷だった

なんとかなりそうである

経過はこの日記で報告していきます


足しも積もれば山となる!!
ぱっちりチリ足!!


追記
MameBake3DのライセンスはLGPLです
ライセンスはそのままです。変更しません。
市販のソフトによくあるように
このソフトについて
とか
オープンソースについて
などのメニューを追加して
そこにライセンスがLGPLであることと
お問い合わせ先のメールアドレスを記述する予定
市販ソフトのよくあるパターンを真似することにします。



物理IKと物理シミュ結果をベイクしてFBXファイルに[2021/05/02]


物理IKと物理シミュレーション結果をモーションにベイクしてFBXファイルに保存できるようになりました。

物理IKのベイクについては前回の日記で書きました
もう少し絵や動画を載せておこうと思います

まずは物理IKのベイクの動画です

動画1:【物理IK】MameBake3Dの物理IKが保存可能に【位置コンストレイント】
https://youtu.be/EOqRf35o7u8

絵も載せておきます


図1 位置コンストレイントしたいジョイントにMass0 ON to LowerJointsを実行

前回の日記で
ドラッグ中に形が崩れないようにしたい場合には
右クリックメニューからKinematic On To LowerJointsを実行しました

位置コンストレイントをしたい場合
つまり
ドラッグ中に位置を固定したいジョイントに対しては
図1のようにジョイントを右クリックして出てくるメニューから
Mass0 ON to LowerJointsを実行します。

物理IKには回転(PhysRot)と移動(PhysMv)を用意しましたが
位置コンストレイントと相性が良い操作は移動(PhysMV)の方です

動画1でもPhysMvStartボタンを押してからジョイントをドラッグしています

物理IKの移動の際の絵を2つほど載せます


図2 物理IK移動の前の様子 胸の分岐のジョイントをドラッグする準備

図2では図1の方法で両方の手首にMass0を設定した後、胸の分岐のジョイントを選択しています
この姿勢から
PhysMvStartボタンを押し
胸の分岐ジョイントを横にドラッグすると図3のようになります


図3 物理IK移動後の様子 両手首には位置コンストレイントを設定済

ドラッグして
図3のようになりました

両手首の位置を動かさずに体を少し横に移動することが出来ました
自転車のハンドルを握りながら体を動かす場合などに応用可能


次に物理IK回転の図も載せます


図4 物理IK回転前の様子 肘ジョイントをドラッグする準備


図5 物理IK回転後の様子

図4が物理IK回転前で
図5が物理IK開店後です

PhysRotStartボタンを押してから肘ジョイントを上に少しドラッグしました

思ったよりも
普通に曲がりました

物理IKはドラッグしたジョイントから周囲のジョイントに力が伝わり
周囲のジョイントからフィードバックが変えてくるのですが
図4図5のように
無理なく少しドラッグする分には
普通に曲がることが多いです

物理的に動かすのに明らかに大きな力が必要な場所を
強引にドラッグしたりすると
急に大きく曲がりすぎたりすることもあります

ドラッグに失敗したり
結果が気に入らなかった場合には
Ctrlを押しながらZキーでアンドゥします(操作を取り消して操作前の姿勢に戻します)


物理IK回転と物理IK移動は
複数フレームを選択してから行います
ドラッグすると複数フレームに効果がベイクされます
複数フレームに対してどのようにベイクされるかについては前回の日記に書いてあります


今日はもう1つ動画があります

動画2 : 動画【物理シミュのベイク】MameBake3Dで物理をベイク【フレーム範囲指定OK】
https://youtu.be/E-w6tpksu4I


動画2は
物理シミュレーション結果もモーションにベイクできるようになった様子を動画にしたものです

物理IKはジョイントドラッグ操作です
物理シミュレーションと呼んでいるのは
モーションに合わせてツインテールが揺れたりするシミュレーションのことです


図6 物理シミュレーションのベイク BT RECボタン

図6は物理シミュレーションをベイクする際のスクリーンショットです
BT Startボタンは物理シミュレーションを再生するだけです

複数フレームを選択してから
BT Startの1つ下のボタン
BT RECボタンを押すと
指定範囲の物理シミュレーションを再生しながらそれを記録します
再生終了後に少し画面が固まって
指定フレーム範囲に物理シミュレーションがベイクされます

動画ではそのあと
プロジェクトファイルを保存してから読み込みなおして
物理シミュレーションが保存されたことを確認しました

プロジェクトファイルを保存する際にFBXファイルも保存されています
Maya2020で読み込んでも物理シミュレーションがベイクされていることを確認しました



物理IKや物理シミュレーションは
使用するコンピュータの処理速度などによって
まったく同じには再生されないことが多いです

処理が重い環境だと
物理が暴れてしまうこともあります

物理をベイクしてFBXにすることで
そのような
使用するコンピュータの違いでモーションが違ってしまう現象が
緩和されると思います





MameBake3Dの物理IKを再び有効にしてみました[2021/04/26]


物理IKとは
6DOFスプリング剛体を全てのボーンの位置と向きに合わせて自動的に作成し
数学でドラッグして物理で伝達とフィードバックをもらう形式のインバースキネマティクスのこと

物理ライブラリにはbullet physics ver2を使用し、
物理の力の伝達とフィードバックをもらう部分に利用している

物理IKのベースとなる部分は
数年前には出来ていた
しかし、きれいな結果を得るためには
物理IK中に60fpsくらいで処理できる環境が必要だった

当時の開発マシンでは限界が来て
何年か寝かしていた
数年前のゲーミングPCくらいのスペックで大丈夫だと思う

比較的きれいな結果が出るようになったので
解説記事を書いてみることにした

絵の中に解説を書いたのでみていただきたい
絵は縮小配置しているが元の絵は割と大きいので
絵をクリックして大きくすると字が読めると思う



図1 Kinematicをオンにして指の動きが破綻しないようにする

手順準備
手首のジョイントを右クリックしてメニューを出し
KinematicON to LowerJointsを実行
これをしておかないと
指の動きが破綻しやすい



図2 物理IK実行の手順

手順1
複数フレームを選択
開始位置をマウスでクリック
終了位置までマウスボタンを押したままドラッグ

手順2
3DウインドウのTopPosというスライダーを動かして
編集効果のピークの位置を設定

手順3
物理IKを開始するため
(通常のIKと区別するために)
PhysRotStartボタンを押す
物理IKはドラッグ単位
ドラッグ開始の前に毎回PhysRotStartボタンを押す

手順4
ジョイントをマウスでドラッグ
ドラッグ中に経過時間と編集内容が記録される(最大約30秒間)
結果を取り消したい場合は
ドラッグ終了後にCtrl + Zでアンドゥ



図3 物理IKの結果の説明

ジョイントドラッグが終わると編集内容が結果に反映される

ドラッグ内容には時間と姿勢が記録されている

開始フレームからピークフレームまでは
ドラッグ開始からドラッグ終了までの編集内容が時間が増える方向で適用される

ピークフレームから選択終了フレームまでは
ドラッグ終了からドラッグ開始までの編集内容が時間が減る方向で適用される


物理IKの特徴として
ドラッグ内容が周りのジョイントに影響し
周りのジョイントからドラッグジョイントへも影響があるという点

微妙に体が傾いたり
微妙に腰がくねったりするような物理IKならではの効果がある

物理IKでは
回転禁止設定や制限角度や
Mass0による位置コンストレイントなどが可能




ゲームコントローラ対応の設計開発テストデバッグを趣味でやるとこんな感じ[2021/04/17]


ツール作り作業を一人でするということは
仕事で例えると
設計、開発、テスト、デバッグ、リリースを一人でする感じ

それを趣味でやるときの様子はどういうものか
ちょっとだけおみせします


ゲームパッドはSonyのPlayStation5用のゲームコントローラーDualSenceを使用
DualSenceの写真を載せます




テレビリモコンは別売りwww


さて
まずは設計書のようなもの


画像をクリックすると大きく表示されて文字が読めます

仕事でやるときには
OfficeのWordというアプリを使ってきちんと仕様書を書くけれど
趣味の時はこのくらいのテキトーさ加減

開発していくにつれて問題点が発覚することが多い
設計書を赤ペンでどんどん修正していく

赤ペン入れを含めて設計なのかもしれない

開発結果は以下のアドレスに置いてある
オープンソース
https://github.com/Ochakko/MameBake3D


そして
テストとデバッグのときのメモ







テストとデバッグについても
仕事でやるときには
バグトラッキングシステムででチケットを発行して
1つのチケットに付き1つの作業のようにして解決していく。

趣味の場合は
上の2枚のメモのように
問題点とチェックマークのメモ程度を残す感じ


こんなことをやって
何が分かったかというと

自発的にやっているから出来るようなものの
仕事で自分の思うことと違う作業でこれをやれと言わるなら
それなりに対価をもらわないと
ストレスで落ちるっ!!!

ということが分かった

ゲームコントローラー対応という経験が出来て良かった
次からはコンバットブローブンだっ



ゲームコントローラーでツールの操作性は向上するかどうかについての研究 [2021/04/14]


ゲームをゲームコントローラーでプレイすることは当たり前のこと
では
ツール(今回はモーション編集ツール)をゲームコントローラーで操作することにより
マウスやキーボードでの操作よりも操作性は向上するかどうか
について研究を行った

とりあえず報告してみる
今回は
ツイッターで報告したものを貼り付ける

( ツイッター画面のスクリーンショットの都合上
繰り返し画像になっている文章もある )












まとめると
マウスカーソルの瞬間移動とマウスカーソル位置の瞬間復元が出来る点で
ゲームコントローラーによる操作性向上はある

またゲームコントローラーの方が使用していて疲れにくいという利点もある。

しかし
マウスやキーボードが必要なくなるわけではなく
マウスやキーボードは必要


まめばけ3D(MameBake3D)というソフトにおいて研究を行っている
参考までにその操作方法も示す





まめばけ3Dはオープンソースで開発中の3Dモーションツールである
以下のアドレスにて公開および更新中

オープンソース
https://github.com/Ochakko/MameBake3D









昔の日記のページへ








ナビゲーション










店舗イメージ