【令和最新版】原神MMDをUnityで動かす話 ~URP対応を添えて~
この記事は TDU CPSLab AdventCalender 2023 の1日の記事です。
動作確認環境
- Unity@2022.3.11f1
- UniversalRenderingPipeline@14.
- Unity Toon Shader@v0.9.5
- MMD4Mecanim@vBeta20201105
- PMXエディタ@v0.2.7.3
原神MMDモデルのダウンロード
Hoyolaboでまとめてくれている方が居たので掲載します。
原神の場合、アセットをぶっこ抜きしたものや、再配布のものが多いです。
しかし、Bilibiliでのアップデート特設ページなら基本的には公式が配布しているものなので安全でしょう。
今回はこの前来たver4.2で配布されたフリーナを題材にしたいと思います。
ぼやき
そういえば魔神任務良かったですね...なんて言うかフリーナとヌヴィレットの関係性がこう...
涙が止まらずフリーナのためにn万ぶっこんでしまいました...
ダウンロードの場所は大体、模型下载 の項目となっています。
欲しいキャラのバナーの模型下载ボタンをクリックすることでダウンロードできます。
形式はZipファイルとなっています。ダウンロードが終わったら展開しましょう。
このように、pmxファイルやtexフォルダーがあれば成功です。
(今回ダウンロードしたフリーナはフリーナ本体のほかに、シュヴァルマラン婦人などのスキルで登場するキャラクターが付属するため、pmxのファイルが多くなっています。pmxファイルが1つしかなくても問題ないです。)
PMXについて簡単に解説
VPVPのWikiを見てください。。。
モデルの修正
ここまででモデルのダウンロードが終わりました。
しかし、このままではテクスチャ名に簡体語の漢字が含まれているので、後述するUnityでのpmxからfbxへ変換する際にテクスチャの読み込みに失敗してしまいます。
そのため、それぞれのテクスチャ名をアルファベットに変更して、pmxファイル側での参照も英語に修正していきます。
テクスチャ名の修正
モデルを修正する前にテクスチャのファイル名を修正しましょう。
以下のようにテーブルを作っておくとわかりやすいです。
旧名(簡体語) | 新名(英語) |
---|---|
髮.png | hair.png |
髮_1.png | hair_1.png |
髮_2.png | hair_2.png |
髮_1.png | hair_1.png |
颜.png | face.png |
体.png | body.png |
体_1.png | body_1.png |
PMDエディタのインストール
まずPMXを編集するために、PMXエディタをインストールしましょう。
にてダウンロードしてください
Zipファイルとなっているので解凍してください。
このようになっていればOKです。
PmxEditor_x64.exe を開きましょう。
エラーが出る場合は以下のリンクを参考にしてください。
テクスチャの参照先を修正
PMX編集ウィンドウのファイルから先ほどダウンロードしたファイルを開きましょう。
開いたら下記の画像のように、モデルが白くなっていると思います。
これはテクスチャ名を変更したため、モデル側が参照できなくなったためです。
ここから参照先を修正していきます。
PMXエディタで材質タブを選択しましょう。
デフォルトだと 顔に当たる部分が選択されていると思います。
下記の画像にて赤線を引いている部分を修正しましょう。
下部のテクスチャの参照を先ほど変更した英名に置換しましょう。
上部のタイトル部分は何でもいいです。
それをすべての材質で繰り返します。
ビューワの方で正しく表示されていればOKです。
Ctrl+S で保存しましょう。ファイル名も英名とかにしておいた方が無難です。
原神のキャラの英名をまとめたサイトを貼っておきます。
Unityの準備
次にUnityのPJの準備をします。
Unity Hubでテンプレートで3D(URP)を選択し、プロジェクトを作成しましょう。
作成が終わったら必要なパッケージを追加していきます。
まず、メニューからWindow/PackageManager と選択しましょう。
PackageManagerウィンドウが開いたら + ボタン/Add package by name をクリックし、下記のPackage名を name の部分に貼り付けましょう。
com.unity.toonshader
Importやコンパイルなどのロードが終わった後に、PackageManagerにてUnityToonShaderがリストに表示されていればOKです。
今追加したPackageはUnity公式がリリースしているToonShaderというモノです。MMD4MecanimでもURP対応したパッケージは存在していますが、2023年11月現在で3年以上更新されていないため最新のURPでは正常に動作しないため、今回は別途でToonShaderを入れました。
pmxからfbxへの変換
ここからが本題です。
MMD4Mecanimのインストール
MMDをUnityで使用できる形式に変換するMMD4Mecanimをインストールします。
配布ページに飛びましょう。
飛んだらMMD4Mecanimの項目に行き、赤枠で囲ったところからダウンロードします。
Zip形式なので解凍してください。
Unityの方でImportします。AssetsメニューからImportPackage/CustomPackageで、
先ほど解凍したフォルダにある、MMD4Mecanim.unitypackageを開きましょう。
ロードが終わったらImportボタンをクリックしましょう。
このようなダイアログが出た場合は Yes を押してください。
これでMMD4Mecanimのインストールが終わりました。
PMXをFBXに変換する
では変換してみます。
先ほど修正したモデルをフォルダごとUnityに突っ込みましょう。
ExplorerからUnityのProjectに向かって力業でぶっ込んでください。
Projectビューで該当部分を確認しましょう。
XXX.MMD4Mecainm というファイルを選択してください。
利用規約が書いてあります。
同意したら下にスクロールしてすべての項目にチェックマークを付けたら同意するボタンをクリックしましょう。
赤枠で囲んだProcessボタンをクリックしたら変換が始まります。
処理が終わり、モデル名でPrefabができていることを確認してください。
色がマゼンタでShaderErrorになっています。これは後で修正します。
モデルと同じ階層にMaterialsというフォルダが生成されています。
選択してそれぞれのMainTexの項目にテクスチャが入っていればOKです。
Shaderを変更する
MMD4Mecanimによって生成されたMaterialはBuildin-PipelineのShaderが設定されているため、URP環境ではShaderエラーになってしまいました。
そのため先ほど入れたUnity Toon Shaderを適応します。
見た目を確認するために変換されたPrefabをSceneに配置しましょう。
Materialsフォルダにて、すべてのMaterialを選択し
MaterialのShaderをToonに変更しましょう。
検索フィールドにToonと入れると楽です。
Sceneビューで確認しましょう。マゼンタ色を卒業できていれば成功です。
このままでは見づらいのでMaterialの設定を調整します。
それぞれのMaterialでBase Shading Featheを1に、Receive ShadowをOffに設定しましょう。
こんな感じで表示されていると思います。
まだ白くなってる部分が多いですが、これは光の反射によるものです。
環境光であるDirectional Lightに背を向けるために、TransformのRotationのYの値を180にしましょう。
Sceneビューの視点を変更して、色合いがいい感じに可愛くなっていればOKです。
ここまででモデルの変換が終わりました。
歩かせてみる
ではここから歩かせてみましょう。
今回は一通り歩行処理が実装されているStarterAssetsというアセットを使用します。
こちらのアセットはUnity公式が機能などのサンプルとして公開しているものとなっており、InputSystemやCinemachineなどの比較的新しいUnityの機能を盛り込んで実装されています。
今回はTPS視点でキャラクターを操作するサンプルを利用したいと思います。
こちらのアセットをマイアセットに追加してください。
再度PackageManagerを開きましょう。
項目を画像のようにMy Assetにしてください。
次にStarterAssetsを探しましょう。該当のアセットを選択し、右上のダウンロードボタンを選択してください。
(筆者はすでにダウンロードしたため、Re-downloadとなっています)
Downloadが終わったらRe-downloadの隣にあるImportボタンをクリックしましょう。
Warningが出たらそのままInstall/Updateを選択してください。
またWarningが出る場合はYesを押しましょう。入力形式のモジュールがInputManagerからInputSystemに変更するため、Unityが再起動します。Sceneの保存はしなくても大丈夫です。
再起動した場合は再度PackageManagerから該当のアセットを選択し、Importし直します。
ダイアログが出てきたら先ほどと同じ対応をしてください。
下記の画像のようなウィンドウが出てきたらImportしましょう。
長いロードが終わったらProjectにてPlayGroundと検索し、ヒットしたSceneを開きます。
このSceneが今回入れたStarterAssetsのサンプルです。
試しに実行してみましょう。WASDやコントローラーに対応しています。
公式の動画を張っておきます。
ではこのロボットみたいなモデルを先ほど変換したモデルに差し替えましょう。
Hierarchyビューにて PlayerArmature の子となるようにモデルを配置してください。
元々PlayerArmatureの子にあったGeometryを右クリックしてDeleteをクリックし、削除しましょう。
Projectビューにて、変換後のモデルを選択してください。Rigタブを選択し、AnimationTypeをHumanoidに変更したら、Applyボタンをクリックしましょう。
PlayerArmatureのInspectorのAinmatorコンポーネントにあるAvaterをクリックしましょう。
モデル名のAvaterを選択してください。
ここまででゲームを実行してみましょう。
モデルが動けばOKです!
最後に
ここまででCPS Lab アドベントカレンダー 2023の1日目の記事は終わりです。ありがとうございました。
明日は Gentoo様のGentoo Install Battleとなります。
氏曰く一年以上温めてきたネタだそうで、期待が膨らみますね!
Discussion