ぶっかけ早苗さんVR・息抜き
今月の上旬に仕事は忙しさが一段落していたのですが、まとまった時間は取れずにMMDもUnityもちゃんと触れていませんでした。
いえ、ドラマを見るのにハマっていただけなんですけどね。
というわけで、しばらくBLOGも更新していませんでしたのでドラマ鑑賞の息抜きもかねてUnityを少し触ってみました。
あまり続けてDVDを見ていると頭が痛くなってしまいますので、適度な休憩は必要なのです。
使用したモーションはこれもすこし前に息抜きに作ったGIF動画用のもので、60フレームほどの小さなものです。2時間ほどで急いで作ったものなので、色々なところがいい加減ですがご容赦を。
[広告] VPS
Unityの扱いにもだいぶ慣れてきたのか、これぐらいの物でしたら素材さえあれば数時間で作れるようになりました。
BGMやSEの素材を探したり編集したりのほうが時間がかかるぐらいですね。
あと、Unity化の際に元動画にはなかった諏訪子様を追加しています。早苗さんや男たちの周りをケタケタと笑いながら歩くシルエットが判るでしょうか。
3Dサウンドなので、後ろを通過する時にケタケタ笑われると超怖いです。
アス比とFOVがおかしいような気がしてしかたがないので、直るようなら直して公開するかも?
でも、それもこれも、24を見終わってからなのです。
いえ、ドラマを見るのにハマっていただけなんですけどね。
というわけで、しばらくBLOGも更新していませんでしたのでドラマ鑑賞の息抜きもかねてUnityを少し触ってみました。
あまり続けてDVDを見ていると頭が痛くなってしまいますので、適度な休憩は必要なのです。
使用したモーションはこれもすこし前に息抜きに作ったGIF動画用のもので、60フレームほどの小さなものです。2時間ほどで急いで作ったものなので、色々なところがいい加減ですがご容赦を。
[広告] VPS
Unityの扱いにもだいぶ慣れてきたのか、これぐらいの物でしたら素材さえあれば数時間で作れるようになりました。
BGMやSEの素材を探したり編集したりのほうが時間がかかるぐらいですね。
あと、Unity化の際に元動画にはなかった諏訪子様を追加しています。早苗さんや男たちの周りをケタケタと笑いながら歩くシルエットが判るでしょうか。
3Dサウンドなので、後ろを通過する時にケタケタ笑われると超怖いです。
アス比とFOVがおかしいような気がしてしかたがないので、直るようなら直して公開するかも?
でも、それもこれも、24を見終わってからなのです。
ゆさゆさ早苗さんVR・その2
Oculusのセンサーが不安定でこれは壊れたかな?と思ってフテくされてたのですが、USB HUBを交換したら問題が解消したので再開です。
Oculusを購入したのは去年の1月頃でした。
その頃はUnityでOculus対応のプログラムを作成するためにはUnityのProライセンスが必要だったので、4カ月の試用ライセンスが切れてから触っていなかったのですが、今は無料のStandard版でも作れるようになっているのを知り、再びいじりりはじめています。
とりあえず、早苗さんを自分の部屋に呼んでイロイロしたいなというソフトを書いてみています。ほぼ紙芝居プログラムとはいえ、こういったリアルタイム処理は書いたことが無いので作法が判らず壁に突き当たることばかりです。知り合いにゲームプログラマでも居れば良いのですけどね。
とりあえず組みはじめて、何が必要になりそうかを洗い出していきます。
1.HSWD待機処理
Oculus の SDKを最新にすると、以前にはなかったこんな警告メッセージが画面に表示されるようになっていました。
プログラムのことはお構いなしに画面にオーバーラップ表示されるので、起動直後に演出があるようなプログラムだと困ってしまいます。
仕方が無いので、警告が表示されている間は待機する処理を入れることにしました。急いでいる時には面倒ですよね!
2.フェードインフェードアウト処理
警告メッセージが終わったらBGMと同時に画面をフェードインさせます。
この画面フェードイン処理、以前は2DのTextureを画面いっぱいに表示し、それをだんだんと透明度を上げることで実現できていたと思ったのですが、久々にその処理を使って見ると使えなくなっています。
仕方が無いので、カメラを黒い箱で覆い隠して、その箱の透明度を上げることで実現する事にします。これも実は問題ありなのですが、あまりこだわっても仕方が無いので。
Canvas用とBGM用のフェードインフェードアウト処理を別に用意しましたが、汎用的なコンポーネントとして作成できるかもしれません。要検討です。
タイトルロゴはてきとう。本当はカメラにオーバーラップさせたかったのですが、どうもOculusでは実現するのはちょっと面倒なようなので、カメラの前にタイトルのオブジェクトを浮かべるだけに留めています。
3.シーン管理
そして何かキーを押すとタイトルはフェードアウトし、画面の外から早苗さんが飛び込んできます。
Oculusを被ってテストしてると、判っているのにビクッとしてしまいます。
ここからメニューセレクトと位置調整モードに入りますが、タイトル画面からの流れを制御する仕組みが難しいですね。
今はシーン管理用のスクリプトを用意して状態遷移を書いていますが、状態遷移が複雑になると管理が破たんしそうです。このあたり、一般的にはどうしているんでしょうかね。参考になる文献とかあるとよいのですが。
4.カメラ移動
早苗さんと見つめ合いながら、自分の頭の位置にカメラが来るようにキーボード操作で調整できるようにします。標準の移動処理はゲーム用の移動処理なので、別途移動処理を書き起こしています。
しかし、ここでキーの定義に悩み中。前後左右はWASDで良いとして、カメラのロールや上下をどう割り当てるのが分かりやすいか試行錯誤中。他の操作との統一も必要になりますから、キー定義を一括管理するクラスが必要になりますね。どう書けば良いのか……。
ちなみにここで早苗さんのポッチリがチラっと見えるのですが、私のDK1では解像度が足りないせいか今一つはっきりしません。残念!!(キャプチャ画面はSDKのデバッグ画面ですので、実際はもう少しきれいです)
ぶっちゃけ、ここで早苗さんと見つめ合ってるだけでも大満足です。自分の部屋に早苗さんがいる!!!というのは感動ものです。
5.メニュー画面
今のところ一番苦労しているのかこのメニュー処理です。Unity標準の操作ではOculusともキーボード使用とも相性が悪いので、キーボード操作用メニュー画面を書き起こしています。
いちおう3Dらしくアニメーションしますが、ちょっとショボイです。SAOみたいなスクロールメニューが良かったのですが、私には難易度が高すぎました。
この辺りからUnityの作法に慣れてきたので、そこそこ汎用的に書いていますが、まだ判らないことだらけですね。
モーションをキー操作で切り替えて再生するぐらいはすぐできるのですが、メニューを付けたり演出を入れたりすると途端にハードルが高くなりますね。
どこで挫折するか、飽きて放り出すか判りませんがとりあえずやる気がある間に作ってしまいたいものです。
Oculusを購入したのは去年の1月頃でした。
その頃はUnityでOculus対応のプログラムを作成するためにはUnityのProライセンスが必要だったので、4カ月の試用ライセンスが切れてから触っていなかったのですが、今は無料のStandard版でも作れるようになっているのを知り、再びいじりりはじめています。
とりあえず、早苗さんを自分の部屋に呼んでイロイロしたいなというソフトを書いてみています。ほぼ紙芝居プログラムとはいえ、こういったリアルタイム処理は書いたことが無いので作法が判らず壁に突き当たることばかりです。知り合いにゲームプログラマでも居れば良いのですけどね。
とりあえず組みはじめて、何が必要になりそうかを洗い出していきます。
1.HSWD待機処理
Oculus の SDKを最新にすると、以前にはなかったこんな警告メッセージが画面に表示されるようになっていました。
プログラムのことはお構いなしに画面にオーバーラップ表示されるので、起動直後に演出があるようなプログラムだと困ってしまいます。
仕方が無いので、警告が表示されている間は待機する処理を入れることにしました。急いでいる時には面倒ですよね!
2.フェードインフェードアウト処理
警告メッセージが終わったらBGMと同時に画面をフェードインさせます。
この画面フェードイン処理、以前は2DのTextureを画面いっぱいに表示し、それをだんだんと透明度を上げることで実現できていたと思ったのですが、久々にその処理を使って見ると使えなくなっています。
仕方が無いので、カメラを黒い箱で覆い隠して、その箱の透明度を上げることで実現する事にします。これも実は問題ありなのですが、あまりこだわっても仕方が無いので。
Canvas用とBGM用のフェードインフェードアウト処理を別に用意しましたが、汎用的なコンポーネントとして作成できるかもしれません。要検討です。
タイトルロゴはてきとう。本当はカメラにオーバーラップさせたかったのですが、どうもOculusでは実現するのはちょっと面倒なようなので、カメラの前にタイトルのオブジェクトを浮かべるだけに留めています。
3.シーン管理
そして何かキーを押すとタイトルはフェードアウトし、画面の外から早苗さんが飛び込んできます。
Oculusを被ってテストしてると、判っているのにビクッとしてしまいます。
ここからメニューセレクトと位置調整モードに入りますが、タイトル画面からの流れを制御する仕組みが難しいですね。
今はシーン管理用のスクリプトを用意して状態遷移を書いていますが、状態遷移が複雑になると管理が破たんしそうです。このあたり、一般的にはどうしているんでしょうかね。参考になる文献とかあるとよいのですが。
4.カメラ移動
早苗さんと見つめ合いながら、自分の頭の位置にカメラが来るようにキーボード操作で調整できるようにします。標準の移動処理はゲーム用の移動処理なので、別途移動処理を書き起こしています。
しかし、ここでキーの定義に悩み中。前後左右はWASDで良いとして、カメラのロールや上下をどう割り当てるのが分かりやすいか試行錯誤中。他の操作との統一も必要になりますから、キー定義を一括管理するクラスが必要になりますね。どう書けば良いのか……。
ちなみにここで早苗さんのポッチリがチラっと見えるのですが、私のDK1では解像度が足りないせいか今一つはっきりしません。残念!!(キャプチャ画面はSDKのデバッグ画面ですので、実際はもう少しきれいです)
ぶっちゃけ、ここで早苗さんと見つめ合ってるだけでも大満足です。自分の部屋に早苗さんがいる!!!というのは感動ものです。
5.メニュー画面
今のところ一番苦労しているのかこのメニュー処理です。Unity標準の操作ではOculusともキーボード使用とも相性が悪いので、キーボード操作用メニュー画面を書き起こしています。
いちおう3Dらしくアニメーションしますが、ちょっとショボイです。SAOみたいなスクロールメニューが良かったのですが、私には難易度が高すぎました。
この辺りからUnityの作法に慣れてきたので、そこそこ汎用的に書いていますが、まだ判らないことだらけですね。
モーションをキー操作で切り替えて再生するぐらいはすぐできるのですが、メニューを付けたり演出を入れたりすると途端にハードルが高くなりますね。
どこで挫折するか、飽きて放り出すか判りませんがとりあえずやる気がある間に作ってしまいたいものです。
ゆさゆさ早苗さんVR
久しぶりにOculusを触って遊んでいます。
以前は開発にMMD for Unityを使用していましたが、久しぶりにみると更新がもうずいぶん長い間止まっているようですのでMMD4Mecanimを使用する事にしました。
ためしにいつも使用しているボーン構造でモーションを作り、MMD4Mで変換再生してみると……おお、かなりの再現度合です。
作成したのは単純なモーションでしたので、もうすこし込み入ったモーションをつくるとどうなるか判りませんが、何パターンかモーションを作ってみて仮のアプリを作成してみたいと思います。
しかし、いつのまにかUnityのFreeライセンスでもOculus SDKが使えるようになっていたんですね。
腰の上で暴れる早苗さん。
久しぶりにOculusを被ってみると、やはり没入感がすごいです。本当に家の中で寝ているのかと錯覚するぐらいです。私が所有してるのはDK1ですが、ポジショントラッキングが付いているというDK2もだんだん欲しくなってきました。
でも車検でDK2が2つぐらい買える値段が飛んでいきましたので、じっと我慢です。
以前は開発にMMD for Unityを使用していましたが、久しぶりにみると更新がもうずいぶん長い間止まっているようですのでMMD4Mecanimを使用する事にしました。
ためしにいつも使用しているボーン構造でモーションを作り、MMD4Mで変換再生してみると……おお、かなりの再現度合です。
作成したのは単純なモーションでしたので、もうすこし込み入ったモーションをつくるとどうなるか判りませんが、何パターンかモーションを作ってみて仮のアプリを作成してみたいと思います。
しかし、いつのまにかUnityのFreeライセンスでもOculus SDKが使えるようになっていたんですね。
腰の上で暴れる早苗さん。
久しぶりにOculusを被ってみると、やはり没入感がすごいです。本当に家の中で寝ているのかと錯覚するぐらいです。私が所有してるのはDK1ですが、ポジショントラッキングが付いているというDK2もだんだん欲しくなってきました。
でも車検でDK2が2つぐらい買える値段が飛んでいきましたので、じっと我慢です。
ビッチもぶ子さん
先週末はとらはぜ式もぶ子さんを弄っていました
ボンヤリと、てとらさんをギャル化させたいなぁと思っていたのですが、そんな折にとらはぜ様がもぶ子さんを公開されたのでこちらを手を付ける事に。
右が改変前のオリジナルもぶ子さん。左が改変中。
もっとアメリカンスクールガール的に胸元を開けて下着出して……ってやりたいのですが、さすがに似合わないですよね。
髪型を変えたいのと、リボンとルーズソックスはカスタム少女からの借り物ですので余裕があればモデリングしなおしたいなと。スカートも短くした分、物理設定しなおさないといけないし……課題は山積みです。
良い改変モデルが出たらそちらを使おうかと一旦手置き。
ほったらかしにしているモデルやモーション溜まってきたかも。
ボンヤリと、てとらさんをギャル化させたいなぁと思っていたのですが、そんな折にとらはぜ様がもぶ子さんを公開されたのでこちらを手を付ける事に。
右が改変前のオリジナルもぶ子さん。左が改変中。
もっとアメリカンスクールガール的に胸元を開けて下着出して……ってやりたいのですが、さすがに似合わないですよね。
髪型を変えたいのと、リボンとルーズソックスはカスタム少女からの借り物ですので余裕があればモデリングしなおしたいなと。スカートも短くした分、物理設定しなおさないといけないし……課題は山積みです。
良い改変モデルが出たらそちらを使おうかと一旦手置き。
ほったらかしにしているモデルやモーション溜まってきたかも。
IKベイクふたたび
今年の初めごろにIKをうまくFKに変換できないかと頑張っていた話の続きです。
MMDのIKで作成したモーションを他のプラットフォームで再生すると、思ったように再生されなくて困ることがあります。
IKはターゲットの座標から各関節の回転をコンピュータが逆算して求めてくれるのですが、MMDではこの計算にいくつかの工夫や制約が入っていて、この計算を再現できなとうまくモーションが再生されないということになるようです。
では、どうすればよいか。IKで作成したモーションを一旦、IKなしの状態にしてから他のプラットフォームへ持っていこうというのがこれまでの試みでした。これをIKベイクと言うそうです。
IKベイクの方法で一番確実なのは、MMD自身が計算した各関節の回転情報を得る事です。MMDにはMME用にいくつかの情報が公開されているため、ここから情報が得られそうだとは漠然と考えていたのですが、私のスキルではどうやって手を付けて良いのか判らず手をこまねいていました。
ところが、最近になって以下の参考になるものを見つけて、私のスキルでもなんとか手が届きそうなところまで来たかなと考えはじめたところです。
参考1.わたりさんのMME
アクセサリ、ボーンの位置合わせ用エフェクト
便利なエフェクトセットのなかに、「IKオフに変換」というそのままズバリのIKベイクを行うエフェクトがあります。
中身を紐解くとベイクしたいIK関連ボーンにアクセサリを関連付け、その回転行列と、親ボーンからの相対回転を計算しているようです。
なるほど!IKのリンクボーンは回転情報を得ても回転0になるので、どうすれば良いのかと思っていましたがアクセサリをつけてあげれば、そのアクセサリから回転情報が得られるのですね!
どうしてその計算でその結果が得られるかは理解できませんが、計算してみるとたしかに思った結果が得られるようです。
ここは深く考えずに計算式を拝借する事にします。
参考2.ミーフォ茜さんのMMM用プラグイン
GetMmdTransformationPlugin
MMM用の便利なプラグインセットのなかに、MMDからポーズ情報を1フレームだけ取得してMMMに反映させるというものがありました。ソースコードを読んでみると、まさにMMDがMME用に公開している関数を参照しています。
私のスキルでは細部までわかりませんが、実装を真似てみると確かに情報が取得できます。
一部、アクセサリの情報取得関数の実装が欠落しているため少し修正する必要がありますが、ほぼそのまま流用できます。
あとは、ミーフォ茜さんのGetMmdTransformationPluginと同じやりかたでMMDのモーションを全フレーム分取得し、わたりさんの計算式を適用するだけでベイク完了・・・のはず。
というわけで検証してみました。
左が元のIKありモーション。右がベイクしたFKモーションです。足首が変な方向なのは未だベイクしていないからで、顔の角度が異なるのはボーン構造が異なるからですが、おおむね思ったようにベイクできているようです。ただ計算誤差なのかモデルを重ねると微妙にモーションが重なりません。
とりあえず本当にこの方法でIKベイクができるのか実現性検証のためにプログラムを書いたのですが(3週間もかかって!)、プログラムの使い勝手が悪くテストが思うように進みません。もう少し使い勝手をよくして再トライしていと思います。
でも、誰か頭の良い人がぱぱっと作ってくれないかなぁ…(チラッ
MMDのIKで作成したモーションを他のプラットフォームで再生すると、思ったように再生されなくて困ることがあります。
IKはターゲットの座標から各関節の回転をコンピュータが逆算して求めてくれるのですが、MMDではこの計算にいくつかの工夫や制約が入っていて、この計算を再現できなとうまくモーションが再生されないということになるようです。
では、どうすればよいか。IKで作成したモーションを一旦、IKなしの状態にしてから他のプラットフォームへ持っていこうというのがこれまでの試みでした。これをIKベイクと言うそうです。
IKベイクの方法で一番確実なのは、MMD自身が計算した各関節の回転情報を得る事です。MMDにはMME用にいくつかの情報が公開されているため、ここから情報が得られそうだとは漠然と考えていたのですが、私のスキルではどうやって手を付けて良いのか判らず手をこまねいていました。
ところが、最近になって以下の参考になるものを見つけて、私のスキルでもなんとか手が届きそうなところまで来たかなと考えはじめたところです。
参考1.わたりさんのMME
アクセサリ、ボーンの位置合わせ用エフェクト
便利なエフェクトセットのなかに、「IKオフに変換」というそのままズバリのIKベイクを行うエフェクトがあります。
中身を紐解くとベイクしたいIK関連ボーンにアクセサリを関連付け、その回転行列と、親ボーンからの相対回転を計算しているようです。
なるほど!IKのリンクボーンは回転情報を得ても回転0になるので、どうすれば良いのかと思っていましたがアクセサリをつけてあげれば、そのアクセサリから回転情報が得られるのですね!
どうしてその計算でその結果が得られるかは理解できませんが、計算してみるとたしかに思った結果が得られるようです。
ここは深く考えずに計算式を拝借する事にします。
参考2.ミーフォ茜さんのMMM用プラグイン
GetMmdTransformationPlugin
MMM用の便利なプラグインセットのなかに、MMDからポーズ情報を1フレームだけ取得してMMMに反映させるというものがありました。ソースコードを読んでみると、まさにMMDがMME用に公開している関数を参照しています。
私のスキルでは細部までわかりませんが、実装を真似てみると確かに情報が取得できます。
一部、アクセサリの情報取得関数の実装が欠落しているため少し修正する必要がありますが、ほぼそのまま流用できます。
あとは、ミーフォ茜さんのGetMmdTransformationPluginと同じやりかたでMMDのモーションを全フレーム分取得し、わたりさんの計算式を適用するだけでベイク完了・・・のはず。
というわけで検証してみました。
左が元のIKありモーション。右がベイクしたFKモーションです。足首が変な方向なのは未だベイクしていないからで、顔の角度が異なるのはボーン構造が異なるからですが、おおむね思ったようにベイクできているようです。ただ計算誤差なのかモデルを重ねると微妙にモーションが重なりません。
とりあえず本当にこの方法でIKベイクができるのか実現性検証のためにプログラムを書いたのですが(3週間もかかって!)、プログラムの使い勝手が悪くテストが思うように進みません。もう少し使い勝手をよくして再トライしていと思います。
でも、誰か頭の良い人がぱぱっと作ってくれないかなぁ…(チラッ