Win日記[Windowsプログラミング日記]
前書き
おちゃっこのWindowsプログラミングの日記です。
勉強したこととか、作ったもののスクリーンショットとかのページにします。
新しい記事の方が上に来るように書いていきます。
次の新しい日記のページへ
今回は複数ソフト間の連携の手順の日記です
まずは主要リンク先を提示します
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もすごい!!
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は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(エディットモット)はシェアウェアとしても完成しました。
特色は
モーションキャプチャデータの部分的
コピペして
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のページ
モーションブラシってどこがブラシなの?
という疑問に対して説明しました。
以下のリンクのpdfに簡単にですが書きました。
MotionBrush_ExplainGraphOfBrushes.pdf へのリンク
みなさんの応援のお陰で
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
です
令和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ファイルに保存できるようになりました。
物理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にすることで
そのような
使用するコンピュータの違いでモーションが違ってしまう現象が
緩和されると思います
物理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による位置コンストレイントなどが可能
ツール作り作業を一人でするということは
仕事で例えると
設計、開発、テスト、デバッグ、リリースを一人でする感じ
それを趣味でやるときの様子はどういうものか
ちょっとだけおみせします
ゲームパッドはSonyのPlayStation5用のゲームコントローラーDualSenceを使用
DualSenceの写真を載せます
テレビリモコンは別売りwww
さて
まずは設計書のようなもの
画像をクリックすると大きく表示されて文字が読めます
仕事でやるときには
OfficeのWordというアプリを使ってきちんと仕様書を書くけれど
趣味の時はこのくらいのテキトーさ加減
開発していくにつれて問題点が発覚することが多い
設計書を赤ペンでどんどん修正していく
赤ペン入れを含めて設計なのかもしれない
開発結果は以下のアドレスに置いてある
オープンソース
https://github.com/Ochakko/MameBake3D
そして
テストとデバッグのときのメモ
テストとデバッグについても
仕事でやるときには
バグトラッキングシステムででチケットを発行して
1つのチケットに付き1つの作業のようにして解決していく。
趣味の場合は
上の2枚のメモのように
問題点とチェックマークのメモ程度を残す感じ
こんなことをやって
何が分かったかというと
自発的にやっているから出来るようなものの
仕事で自分の思うことと違う作業でこれをやれと言わるなら
それなりに対価をもらわないと
ストレスで落ちるっ!!!
ということが分かった
ゲームコントローラー対応という経験が出来て良かった
次からはコンバットブローブンだっ
ゲームをゲームコントローラーでプレイすることは当たり前のこと
では
ツール(今回はモーション編集ツール)をゲームコントローラーで操作することにより
マウスやキーボードでの操作よりも操作性は向上するかどうか
について研究を行った
とりあえず報告してみる
今回は
ツイッターで報告したものを貼り付ける
( ツイッター画面のスクリーンショットの都合上
繰り返し画像になっている文章もある )
まとめると
マウスカーソルの瞬間移動とマウスカーソル位置の瞬間復元が出来る点で
ゲームコントローラーによる操作性向上はある
またゲームコントローラーの方が使用していて疲れにくいという利点もある。
しかし
マウスやキーボードが必要なくなるわけではなく
マウスやキーボードは必要
まめばけ3D(MameBake3D)というソフトにおいて研究を行っている
参考までにその操作方法も示す
まめばけ3Dはオープンソースで開発中の3Dモーションツールである
以下のアドレスにて公開および更新中
オープンソース
https://github.com/Ochakko/MameBake3D
昔の日記のページへ