2015年12月27日日曜日

MMD+Unity+cardboardでダンスを眺める

注意:unity歴1週間(記事下書き時点)の初心者のいうことなので真に受けないでください。
注意:メモ書きなのでわかりにくいのは仕様です。ご了承ください。

12/15あたりにサークルでunityとmmdを使う講習があった。
まともにunityを使ったのは初めて。
これが結構面白くて、cardboardでダンスを見れないかなーと思いまして。


■調べてわかったこと
・MMD4mecanimというのが便利
・ただし最新版ではmobile向けのビルドはサポートされていない
・実際動作しない


これが今年の初頭だったらまだ対応していたんだけど、こないだ始めた僕にはどうやら無理そう。
というわけで、別の方法、つまりMMD4Mecanimを使わないでMMDモデルをUnity上で踊らせてみることにした。
~完~



といわけで手持ちのNexus5(Android 6.0.1)の中でミクさんが踊ってくれるまでの軌跡。
iphoneはなんもわからない。

画像は適当なので。

■必要な事前準備
こちらのサイト様がとってもわかりやすくて神かもしれない
基本的にあちら様の記事をベースに、適宜こっちの文章に読み替えるのがバランス良さそう
【スマホVR】Unity 5 PersonalとCardboard SDKで嫁をAndroidに召喚する【MMD】 #JAGVR
http://greety.sakura.ne.jp/redo/2015/04/android-vr-app-unity-5-cardboard-sdk.html
なぜこの記事だけでだめなのか。それは、最新のMMD4Mecanimではmobile向けビルドができないからだ。
・Android SDK - JDKとともにAndroidで動作させるのに必要
・MMDモデル - latとかはモデリングが特殊なので向いていないかも。あぴミク使いました。
・VMDモーション - おすきに。ささっと試すなら短いほうがいいです(大切)。
・MikuMikuMoving - 以下MMM
・PMX editor
・Unity - 最新版でやりました
cardboard SDK for Unity- Assetsに追加
・unityちゃん - Assets storeから
・blender - 最新版でやりました
blender_mmd_tools

まあ細かい説明は省いて。
■モデルの下ごしらえ
・MMMに使うモデルとモーションを読みこませる
 モーションを読みこませるときにフレームが0になってることは確認したほうがいい
・物理演算  物理焼きこみ を実行してモーションを保存 あとでわかる名前で WS000001
 モーフ周りもこの時にやっておくこと あぴミクにコッチミンナがあれば・・・!!WS000002
保存。

■FBXの作成
ここは「blender mmd インポート」とかで調べるとよさ気
・blenderにmmd_toolsを用いてpmxをインポート
 設定はよくわからないのでデフォルトでやった
・モデル以外は消す
 Cubeとか
 Nを押して出てくるコラムの下の方の「MMD」より下のGDSLを選ぶとテクスチャが映える
 別に白いままでも問題ない
・モデルを選択した状態でVMDファイルををインポート
 普通のダンスだと20分とか普通にかかるので注意。いくつかモデルをインポートしたいならこの間に並列作業が吉。
・再生するとアニメーションになっていることを確認
めっちゃ重いのは物理焼きこみの代償
・エクスポートからfbxとして出力 あとでわかる名前で
 .pmxと同じ階層にしておく
 これも10分とかかかる。並列作業でバンバン効率上げよう。

■unity上での操作
・unicyちゃんを追加しておく
・cardboard SDK内のパッケージを読み込む
・cardboardのdemoscene(ディレクトリじゃなくてシーン)を開く
WS000003
・Hierarchyからcubeを削除、direction lightを追加

WS000005WS000004

 ここでdirection lightを追加しておかないと、あとでtextureをいじった時に戸惑う
・作成したfbxが含まれるフォルダをAssetに追加
 テクスチャとかも入ってるのが重要
・Assetに追加したfbxをHierarchyに追加
 InspectorからRigタブ内のAnimationTypeをHumanoidにしてApplyする必要は・・・・たぶんない
・位置を0,0,2、向きを0,180,0、大きさを0.4,0.4,0.4にする
・Hierarchyから追加したモデルを開いて、いらないものの描画のチェックボックスを外す
 [モデル名]__meshが最低限必要なもの

 特に問題は出ていないけどどうなんだこれ
・Assetのfbxを開いて、下のほ~~~にあるanimationを、Hierarchyのモデル(上の画像で言うmiku)にD&D
勝手にanimatorが作成されて適応される

・再生したい(躍らせたい)音楽をAssetsに追加した上で、Hierarchyのモデル(上のほうで言ったmiku)にD&Dにしておく。
 再生位置の調整とかは、現状よくわからないので音楽ファイルのほうをいじった
 Play On AwakeのチェックをONにしておく


■テクスチャの調整

・追加したモデルのマテリアルをいじる
 [モデル名]_meshのインスペクタに一覧がでてる
・unityちゃんシェーダーを使う
 unityちゃんを表示するとかしていい感じの設定を持ってくるのがいい感じ
 マテリアルのShaderをUnityChanのなかから選んでいく
 たとえば肌だとこんな感じ


・テクスチャの画像が外れている場合はpmx editorでモデルを開きながら適切な画像を選択
・Outline thicknessを調整するといい感じ
 UnityChanシェーダーのHairとかはOutline thiknessを設定できるが、正直0.0でもよさそう

全部調整するとこんな感じ


※このモデル(あぴミク)での癖:

愚直に肌テクスチャにはskin、服テクスチャ部分にcolthing・・・とやるとたまにこんなことがおきる。
これは、黒い部分が透過する筈なのに透過しない例。
そういう時はほかのshaderで代用してしまうほかない。
この場合は透過させたいのでいい感じにTransparentしてくれたSkin - Transparentを選んでみると

よくなった。

こんな感じに、モデルによって微調整が必要になる。
がんばんないとね。

■再生する


なるほど。

■保存
・Save Scene as....
いまのままだとcardboardのDemoSceneに上書きするので適当な名前で保存。


■build settings
・Fileからbuild settingを選択
・Add Open Scene
 先で保存したシーン名が追加されていることを確認
・PlatFormでAndroidを選択
・Development Buildを選択
・Player Settings・・・を選択
 InspectorにPlayerSettingsが表示されるのでいろいろ変更
・・Company Name 作成者の情報
・・Product Name アプリ名
・・Resolution and Presentation内
・・・Defualt Orientation をLandscape Leftに
・・Other Setting内
・・・Identification内
・・・・Bundle Identifier パッケージ名 本質的にアプリを管理するのはアプリ名でではなくてこちら
とありあえずこれだけ変えたら自分の環境では動いた。

 

■buildする
 USBデバッグを有効にしておくと、build&runで、apkを転送してデバイス上で起動までやってくれる。
 提供元不明のアプリ云々細かいことはほかのサイトで。

■スマフォをcardboardとかハコスコとかにいいれて再生



ミクさんが歌いながら目の前で踊ってくれる!!!最高!!!

■気になること
・MMD4Mechanimは、モーフ変形を別ファイルに書きだしてスクリプトで別途処理させている
・なので、PMX2FBXを使ってFBXに変形させても表情がない
・blenderはその点すべてFBXに含めてくれるので良いが遅い
・PMX2FBXにモーフ変形も含めるオプションがあれば最高っぽい
・ただし互換性は落ちる
・物理のリアルタイムレンダリングができないので、触るみたいなインタラクションは無理
・頑張ればできそう???
・そもそもスマフォに入力デバイスがないので解決しなくてもいいみたいな話
・没入型MusicPVとか面白いと思うんだけどなー
・足元のパネルの項目を全部動かすには別途スクリプトが必要→別の記事でどうぞ
・なんもしない場合、ポジションのリセットしか効かないのが仕様です
・同じテクスチャ画像を使ったメッシュは全部同じマテリアル設定にblenderを通すとなってしまう
・belnder側に設定があるならいいけど
・知らないこと多すぎてやばお

だれか僕にOclus Rift買ってください!!!!

本記事はPCLライセンスおよびUnityちゃんライセンスのもとにあります。
また、利用するモデル、モーションなどの利用規約は熟読して常識的な利用をお願いします。
発生したいかなる損害について責任は負いません。

ユニティちゃんライセンス
この作品はユニティちゃんライセンス条項の元に提供されています

9 件のコメント:

  1. このコメントは投稿者によって削除されました。

    返信削除
  2. 半年以上前の記事へのコメント失礼します。
    本記事を参考にして、MMD4Mecanimを使用せずMMDモデルをUnity上で躍らせることが出来ました。

    一点だけ不明な箇所があります。
    アニメーション再生時にBlender上では表情の変化もされますが、Unity上では表情が変化しません。
    原因を調べたところ、Unityにインポートしたモデルにはそもそも"まばたき"や"口パク"などのシェイプに必要な情報を持っていませんでした。
    sparks-rowさんの記事によると表情の変化も行えているようですが、設定を変更するなどされましたでしょうか?
    不躾な質問ですが、もしよろしければ回答お願いします。

    返信削除
  3. こんにちは。コメントありがとうございます。

    Blender上では表情変化があるのにUnity上では反映されない、ですか。
    設定などはこの記事のとおりです。もし、ここに記載されていない設定項目(恒常的な設定)を触っていたとしても、流石に覚えていません、、、すみません。

    もしかしたら利用しているモデルの問題かもしれませんね。
    似た症状として、モデルによってはこの記事の方法でもUnity上では表情が反映されなかった記憶があります。その時にBlenderではどうだったかまでは思い出せません。。

    何かのお役に立てれば幸いです。

    返信削除
  4. 返信ありがとうございます。
    モデルによって差があるかもしれないですか。。。
    何がしかのヒントになりましたので、もう少し調べてみようと思います。

    返信削除
  5. あなたはblenderで2アニメーションを置くことができますか?申し訳ありませんが、私は日本語を話すことができません

    返信削除
  6. あなたはblenderで2アニメーションを置くことができますか?申し訳ありませんが、私は日本語を話すことができません

    返信削除
  7. I don't understand what you are saying.
    (Typically, Japanese translating algorithm is not good)

    Could you speak a detail in English?

    返信削除
  8. 1年以上前の記事へのコメント失礼いたします。
    現在(2016年12月31日)、こちらの記事と同じことを行っているのですが、
    Blender(最新)へアドオンであるblender_mmd_toolsを導入し、vmdファイルを
    インポートしたのですが、表情以外が動作いたしません。
    これは、ボーンなどの操作が必要なのでしょうか?
    ご教授願いたくコメントしたしだいです。

    返信削除
  9. こんにちは。コメントありがとうございます。

    まず、この記事を書いた時点以上の知識は未だにないということをご承知おきください。
    当然想定外の利用法であるため、blenderに取り込んだりunityに取り込んだりといった際、色々モデルとモーションの相性があったように記憶しています。
    幾つか組み合わせてみて、モーションファイルがおかしいのか、モデルのボーンの設定が特殊なのかを探ってみてはいかがでしょうか。
    推測ですが、モデルの設定が少し特殊なのではないかという気がします。

    具体的な解決にならずすみません。。。

    返信削除