6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

原神のモデルをUnityで動作させるまで

Last updated at Posted at 2024-10-24

はじめに

原神のモデルをUnityで動かしたいと試行錯誤した結果、ようやく形になったので記録として残すことにしました。各ツールの詳細な使い方や、Unityの基礎的な部分は説明を省いています。


作成にあたり、以下の記事を参考にしました。

環境

  • Unity2022.3.43f1
  • PMXエディタ 0.2.7.3
  • MMD4Mecanim 2020/11/05 版(β)

モデルの用意

以下のページで公開されているスプレッドシートからモデルを1つ選んで
ダウンロードします。ダウンロードしたzipファイルは展開しておいてください。

モデルデータの修正

PMXエディタを使ってモデルデータの修正を行います。

テクスチャ名は簡体字が使われています。簡体字のままだと失敗するという報告もありましたが、私の環境ではそのまま使用できました。

ただ、直感で分かりにくい単語があったり、今後不具合の原因になっても困るので、ここは素直にリネームします。

pmx.png

新しい名前は半角英数が無難です。

rename.png

pmxのファイル名も簡体字が使われているので、念のため保存時に変更しました。

プロジェクトの作成

Unityでプロジェクトを作成します。後述しますが、今回はURP対応のシェーダを使用するので、テンプレートの中からUniversal 3Dを選んで作成しましょう。

newproj.png

作成後、Readmeなどは不要であれば削除して構いません。ReadmeのRemove Readme Assetsボタンをクリックしてください。表示されたダイアログのProceedボタンを押せば不要なデータが削除されます。気にならなければそのままでも問題ありません。

readme.png

この後で導入するMMD4Mecanimですが、パッケージが現在のURPに対応していないため、シェーダが正常に動作しません。いくつか代替案がありますが、今回は比較的扱いやすいUnityURPToonLitShaderExampleを使用します。

リンク先からzipファイルをダウンロード、展開してUnityのAssetsにD&Dするだけです。

toon.png

MMD4Mecanimの導入

以下のサイトからMMD4Mecanimをダウンロードします。

ダウンロードしたzipを展開すると以下のようなファイルが入っているので、この中からMMD4Mecanim.unitypackageを選択してダブルクリックします(D&DやメニューバーのAssets > Import PackageでもOKです)

mmd4import.png

パッケージの中身はそのまま全てインポートしてください。

展開したzipにはURP用のパッケージも含まれていますが使用しません。

編集したモデルをプロジェクトに追加

PMXエディタで編集したpmxファイルとテクスチャが含まれるフォルダを丸ごとプロジェクトに追加してください。

dandd.gif

追加したフォルダを見ると【ファイル名.MMD4Mecanim.asset】というファイルが増えています。ファイルを選択するとInspecterに利用規約が表示されるので、内容を確認してチェックを入れてください。最後に【同意する】→【Process】を押すと変換が始まります。

run.gif

変換が終わると結構な確率でエラーが発生します。

error.png

エラーになると処理が中断しますが、そのまま続けてください。マテリアルやFBXなど関連するファイルが生成されます。中断した場合は少しファイルが足りませんが、動作させるだけなら特に問題ありません。

file.png

Humanoidを適用

生成されたFBXファイルのアニメーションタイプをHumanoidにします。

humanoid.png

モデルによって対応するボーンがなかったり、マッピング重複などでエラーが発生します。その場合は手動で修正してください。

manual.gif

マテリアルの修正

Materialsフォルダに入っている全てのマテリアルを修正します。シーンにモデルを配置しておくと確認がしやすくなるため、おすすめです。

instantiate.png

まずはシェーダをSimpleURPToonLitExample(With Outline)に変更します。

simpletoon.gif

生成されたマテリアルはPMXエディタで修正したマテリアルと順番が一致しているので対応するテクスチャを設定してください。

material.png

これを全てのマテリアルで行います。

bandicam 2024-10-21 11-56-42-919.png

シェーダパラメータの調整

今回はそれなりに表示できるところまでを目指すので、よく使う項目を取り上げます。

High Level Setting

顔、目、口のマテリアルならチェックを入れます。ライティングが柔らかくなるようです。

face.gif

Alpha Clipping

アルファクリッピングを使用する場合はチェックを入れます。シェーダ下部にあるRender QueueをTransparentにしないと正常に描画されないことがあるので注意してください。

設定 描画結果
AlphaClipping
OFF

RenderQueue
FromShader
normal.png
AlphaClipping
ON

RenderQueue
FromShader
onfromshader.png
AlphaClipping
ON

RenderQueue
Transparent
ontrans.png

Outline

輪郭線のサイズをWidthで指定します。カラーはそのまま輪郭線の色になります。

outline.gif

アニメーションを付けて再生

アニメーション自体に特殊な手順はありませんので解説は省きます。Animatorを追加して再生してください。ここではサンプルとしてUnitychanのアニメーションを利用してみました。

animator.gif
© UTJ/UCL

物理挙動を追加

デフォルトでは髪や装飾が全く動かないので、MMD4MecanimModelを使って揺れ物を動かします。pmxファイルを変換した時にエラーが発生しなかった場合は、モデルをシーンに配置するとき自動的にコンポーネントが追加されますが、エラーとなった場合は以下のように手動で追加します。

mmd4model.gif

MMD4Mecanim > Scripts の中にMMD4MecanimModelがあるので追加してください。追加するとModelの欄にModel Fileという項目があります。変換時に生成された〇〇.modelのファイルを指定してください。

model.png

指定しなくても再生時に設定してくれるようですが警告が出ます。

変換でエラーが発生しなかった場合は自動的に設定された状態になります。

ok.png

失敗したときには生成されないIndex FileとVertex Fileも指定が行われていますが、無くてもとりあえず動くので、気にしなくても良いと思います。

Physics Engine には Bullet Physics を選択してください。後は再生するだけで動作します。

bullet.png

bulleton.gif

比較になります。左は物理挙動なし、右はありです。

特定の物理挙動を止める

物理挙動を有効にすると、モデルによって一部のオブジェクトが過剰に揺れることがあります。

backpack.gif

これらは MMD4 Mecanim Model コンポーネントのPhysicsにある RigidBodies で調整が可能です。対応するオブジェクトのチェックを外してしまえば物理挙動の対象外になります。

rigidbodys.png

stop.gif

右側のパラメータも調整してみましたが、動作に変化がなかったので要検証です。

表情を変える

表情は MMD4 Mecanim Model のMorphで変更できます。

morphhelper.gif

これだけでは初期表情しか設定できないので、MMD4 Mecanim Morph Helpher を使ってゲーム実行時に表情を変化させます。MMD4Mecanim > Scripts にスクリプトがあるので追加してください。

morph.gif

パラメータはエディタ上で指定できます。

項目 内容
Morph Speed Morph Weight で指定した値になるまでかかる時間
Morph Name Morph一覧にある名前と同じ文字列を指定
Morph Weight ウェイト(変化量)0.0~1.0の範囲で指定
Override Weight 未検証

例えばMorphSpeedを1、MorphNameをまばたき、MorphWeightを1にして再生した結果が以下の通りです。

morphtest.gif

スクリプトで制御する

スクリプトから変更することも可能です。ここでは別途Playerスクリプトを作成してスペースキーが押されたら表情を変化させる実験してみます。なお、エラー処理は省いています。

Player.cs
using UnityEngine;

public class Player : MonoBehaviour
{
    MMD4MecanimMorphHelper morphHelper;

    void Start()
    {
        // MMD4MecanimMorphHelperの取得
        morphHelper = GetComponent<MMD4MecanimMorphHelper>();
    }

    void Update()
    {
        if( Input.GetKeyDown( KeyCode.Space ) )
        {
            Debug.Log( "スペースキーが押されました。" );
            // 各項目を設定
            morphHelper.morphSpeed = 0.1f;
            morphHelper.morphName = "ウィンク";
            morphHelper.morphWeight = 1.0f;
        }
    }
}

scrmorph.gif

MMD4MecanimMorphHelperにはモーフが再生中かどうかをチェックするisProcessingプロパティが用意されています。詳細はMMD4Mecanimのマニュアルを確認してください。

// モーフが再生中か
if( morphHelper.isProcessing )
{
    // 再生中
}

リップモーフ

音声ファイル名から口の動きを制御することができます。こちらは付属のマニュアルに記載されている動作確認を行っただけで、各パラメータの詳細については検証していません。

MMD4Mecanim > Scripts にある MMD4MecanimSpeachHelper を追加して、Speech Audio Clip にサウンドファイルを追加します。ファイル名をひらがな、カタカナで記述することで、サウンドファイル名と同じ口の動きを行ってくれます。

lipsync.gif

例として"あいうえお"を設定して再生しました。

おわりに

まだ不明な点や表示上のバグ、検証が終わってない項目もありますが、目標のとりあえず動かすは達成できました。Unityの学習などでも利用できて楽しくなりそうです。利用規約をよく読んで、上手に活用しましょう。

all.png

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?