🫠

【令和最新版】原神MMDをUnityで動かす話 ~URP対応を添えて~

2023/12/01に公開

この記事は TDU CPSLab AdventCalender 2023 の1日の記事です。

動作確認環境

原神MMDモデルのダウンロード

Hoyolaboでまとめてくれている方が居たので掲載します。
https://www.hoyolab.com/article/118389

原神の場合、アセットをぶっこ抜きしたものや、再配布のものが多いです。
しかし、Bilibiliでのアップデート特設ページなら基本的には公式が配布しているものなので安全でしょう。

今回はこの前来たver4.2で配布されたフリーナを題材にしたいと思います。

ぼやき

そういえば魔神任務良かったですね...なんて言うかフリーナとヌヴィレットの関係性がこう...
涙が止まらずフリーナのためにn万ぶっこんでしまいました...

https://www.bilibili.com/blackboard/activity-L1Yb4Uwfc2.html

ダウンロードの場所は大体、模型下载 の項目となっています。

欲しいキャラのバナーの模型下载ボタンをクリックすることでダウンロードできます。

形式はZipファイルとなっています。ダウンロードが終わったら展開しましょう。


このように、pmxファイルやtexフォルダーがあれば成功です。
(今回ダウンロードしたフリーナはフリーナ本体のほかに、シュヴァルマラン婦人などのスキルで登場するキャラクターが付属するため、pmxのファイルが多くなっています。pmxファイルが1つしかなくても問題ないです。)

PMXについて簡単に解説

VPVPのWikiを見てください。。。
https://w.atwiki.jp/vpvpwiki/pages/284.html

モデルの修正

ここまででモデルのダウンロードが終わりました。
しかし、このままではテクスチャ名に簡体語の漢字が含まれているので、後述する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エディタをインストールしましょう。
https://kkhk22.seesaa.net/category/14045227-1.html
ページの下の方にある

にてダウンロードしてください
Zipファイルとなっているので解凍してください。


このようになっていればOKです。

PmxEditor_x64.exe を開きましょう。

エラーが出る場合は以下のリンクを参考にしてください。

https://kkhk22.seesaa.net/article/471320888.html#asu

テクスチャの参照先を修正

PMX編集ウィンドウのファイルから先ほどダウンロードしたファイルを開きましょう。

開いたら下記の画像のように、モデルが白くなっていると思います。

これはテクスチャ名を変更したため、モデル側が参照できなくなったためです。
ここから参照先を修正していきます。

PMXエディタで材質タブを選択しましょう。

デフォルトだと 顔に当たる部分が選択されていると思います。
下記の画像にて赤線を引いている部分を修正しましょう。

下部のテクスチャの参照を先ほど変更した英名に置換しましょう。
上部のタイトル部分は何でもいいです。

それをすべての材質で繰り返します。

ビューワの方で正しく表示されていればOKです。

Ctrl+S で保存しましょう。ファイル名も英名とかにしておいた方が無難です。
原神のキャラの英名をまとめたサイトを貼っておきます。
https://paper.hatenadiary.jp/entry/2021/01/18/225430

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をインストールします。
配布ページに飛びましょう。

https://stereoarts.jp/

飛んだら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視点でキャラクターを操作するサンプルを利用したいと思います。

https://assetstore.unity.com/packages/essentials/starter-assets-third-person-character-controller-urp-196526?locale=ja-JP

こちらのアセットをマイアセットに追加してください。

再度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やコントローラーに対応しています。
公式の動画を張っておきます。
https://youtu.be/4QuPlKzdq14?t=3

ではこのロボットみたいなモデルを先ほど変換したモデルに差し替えましょう。

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