はじめまして、すらです。
ずっと前から制作していたキャラクターモデルがようやく形になったので、Unityでのゲーム開発を始めることにしました。
そこで今回からUnityのゲーム開発において詰まった点など、備忘録として残していきたいと思っています。
今日の議題はBlenderで作成したモデルをUnityへインポートする方法です。
おそらくインポート自体はすんなりいくと思うのですが、テクスチャの移動がネックとなるポイントだと思うので解説したいと思います。
といってもやることはめちゃくちゃ簡単です。
※注意
私はBlenderもUnityも完全な初心者で、記事で紹介する内容はTry&Errorの果てに辿り着いた答えなので、必ずしも正しいもしくは最適な方法であるとは限りません。
私と同じような壁にぶつかった方の助けになればと思っての、初心者による初心者のための記事になります。
記事の内容に関して有識者の方のご指摘をいただければ大変ありがたく思います。
使用バージョン
Blender 3.1人数
Unity 2022.3.14f1
Blenderでのモデルの作成
まずはUnityへインポートするモデルを用意してください。
どのような用途でUnityへインポートするかで変わってくるかもしれませんが、
私の場合はゲーム開発のためにBlenderでキャラクターを作って、Unityへインポートしてそのままゲーム制作に入る予定なので、
その前提で解説を進めさせていただきます。
(Blenderでのキャラの作成方法などは割愛します。というか私が教えてほしいぐらい)
これは私が作成したモデルで、これをUnityへインポートしたいと思います。
UnityへインポートするまえにBlender側で、テクスチャの設定(マテリアル)とボーンの設定(ウェイト含め)は済ませておいてください。
インポート後もBlenderに戻って調整できるので、この段階ではそんなに完璧な状態でなくても問題ないと思います。
(正直私もまだまだ全然理解が進んでいないので、まだ必要な作業があるかもしれない。)
この時の私のマテリアルの設定はこんな感じになっています。
Yシャツのシワの表現やニーハイ、スカート、カーディガンの毛糸の表現のために、
ベースとなる画像テクスチャとノーマルマップをノードでつないで出力しています。
それ以外のマテリアルは画像テクスチャをつないでいるだけの非常にシンプルなものになっています。
Blenderで設定した画像テクスチャ以外のノードは基本的にBlenderの中でしか使えません。
なのでUnityへインポートする前提ならノードは凝ったものを作る必要はないと思っています(勉強不足)
ノードの情報をテクスチャとしてベイクする方法もあるみたいなのでそれを利用するのもアリ(勉強中)
Blenderでのエクスポート作業
あとはUnityへインポートするだけの状態にできたら、エクスポート作業に入ります。
オブジェクトの中でエクスポートしたくないメッシュやアーマチュアがある場合は、
エクスポートしたいものだけをCtrl+左クリックで選択された状態にしておいてください。
私の場合はすべてのメッシュとアーマチュアをエクスポートしたいので選択状態にはしていません。
そうしたら、ファイル→エクスポート→FBXを選択
①パスモードをコピーへ変更して、右のアイコンをアクティブ状態にする。(テクスチャを埋め込む)
こちらの設定はマテリアルに画像テクスチャを埋め込んでいる方は必要な項目です。
これをしないと.FBXにテクスチャ情報が渡されません。
マテリアルに画像テクスチャを設定していない場合はパスモードは自動で問題ありません。
②オブジェクトタイプの選択
エクスポートしたいオブジェクトのタイプを選択します。
今回私はメッシュとアーマチュアのみの選択です。
また、エクスポートしたいオブジェクトを選択していた場合は、オブジェクトタイプ選択の上にあるLimit toの選択したオブジェクトにチェックを入れてください。
こちらにチェックがない場合は選択されたオブジェクトタイプのすべてがエクスポートされるということになります。
③ジオメトリの中にあるモディファイアを適用を確認する
もし、作成したモデルのモディファイアがまだ適用前なら、こちらにチェックをつけると、
モディファイアを適用した状態でエクスポートできます。(Blender上では適用前の状態が保たれる)
④デフォームボーンのみを確認する
こちらはアーマチュアのボーンの中に変形(deform)にチェックが入っていないものがあり、
エクスポートにいらない場合はチェックを入れることでエクスポートの範囲外にしてくれます。
例えば、Blenderの中でIK用のボーンを入れている場合は変形ボーンに設定していないはずなので、その場合Unityへ持っていくのには不要なボーンだと思います。
上記の設定を確認して、問題なさそうならエクスポートしてください。
これでエクスポート作業は完了です。
Unityへインポート
プロジェクトを開いたら、Assetsフォルダに任意のフォルダを作成してその中にBlenderで作成した.FBXデータをドラッグアンドドロップしましょう。
私はmodelというフォルダを作成して中にモデルの名前のフォルダを作成してその中に.FBXデータ入れました。
.FBXのデータを入れて、▶を押して展開するとこのようにずらーっとメッシュだったりマテリアルだったりが並ぶと思います。
インポート自体はこれで完了していますが、さらにここからUnity側へデータを正しく読み込ませます。
まず、展開元の.fbxデータを選択した状態にして、インスペクターを表示させます。
Rigのタブでアニメーションタイプをヒューマノイドにして適用するをクリックします。
適用をするとインポートしたデータにAvatarが追加されます。
インスペクターの設定を押してAvatarの設定画面を開きましょう。
設定画面が開いたら、Body、Head、LeftHand、RightHandのタブを切り替えながらボーンを設定していってください。
点線の丸で表示されている名前はあってもなくてもいいボーンです。それ以外のボーンは必ず埋めてください。
Unity側であらかじめセットしてくれている場合もあるので、セットされているものが正しいボーンなのかも確認したほうが良いです。
アニメーションを再生するにはボーンの設定が必須ですので、足りないボーン等がある場合は、Blenderで設定し直しましょう。
揺れもの設定のために入れているボーンなどはここでは設定しなくも大丈夫です。
設定できたらDoneを押して適用してください。
次に.FBXデータをシーンにドラッグアンドドロップしましょう。
おそらくテクスチャが設定されていない真っ白なモデルが表示されると思います。(私のようにところどころ色がついている場合もあると思います)
白のモデルが配置できたら、.FBXのファイルを選択状態にしてインスペクターのMeterialsタブをクリックしてください。
テクスチャとマテリアルを抽出してください。
抽出先の選択画面になると思いますので、任意の場所にフォルダを作成してそこに抽出してください。
私はAssets/Texture/(モデル名)とAssets/materials/(モデル名)というフォルダを作成してそれぞれの場所にテクスチャとマテリアルを抽出しました。
そうすると「なし」になっていたマテリアルがセットされ、.FBXインポート時に展開されたマテリアルも作成したフォルダへ移動されました。
ここまですれば、モデルのテクスチャも白から変わっていると思います。
私の場合はスカートやニーハイなどノーマルマップを使用していたところがまだおかしいのでさらに追加で設定をしていきます。
設定をしたい場所をクリックしてください。
今回私はスカートの部分をなおしたいのでスカートをクリックして選択状態にしています。
インスペクターにマテリアルの情報があると思うので、「▼」を押して中身を展開してください。
BaseMapに正しいテクスチャが選択されているかを確認してください。
BaseMapと書かれている文字の左の四角のアイコンをクリックすれば、なんのテクスチャが設定されているかを表示してくれます。
違うテクスチャが設定されているor何も設定されていない場合は正しいテクスチャを四角のアイコンにドラッグアンドドロップして設定してください。
テクスチャは先ほど抽出先に設定したフォルダに入っているはずです。
続いてNormalMapも同じように設定を確認してください。
最後にタイリングの値を変えて、ノーマルマップのスケールを変更してBlenderでのスカートの毛糸のような表現をUnityでも再現しました。
他にもMetallicやsmoothnessなどの値を変えて、理想のマテリアルの表現を再現しましょう。
裏面が透明になる場所がある
このように裏側が透明になっている部分がある場合は、おそらくBlenderで厚み付けをしていないメッシュだと思いますので、
Blenderでエクスポートするときにソリッドモディファイアなどを使用して厚みをつけてみてください。
もしくはUnity側のカリングの設定で、裏側にもテクスチャを反映させることもできるそうです。(カリングで検索してみてください)
私のようにHDRPでプロジェクトを作成している方は、マテリアルのインスペクターのdouble-sidedにチェックを入れれば、
両面にテクスチャが反映されるので裏面が透明ではなくなります。
最後に
BlenderからUnityへのキャラクターのインポートについて解説しました。
知っている人からすると当たり前のことしか書いていないかもしれませんが、
私たち初心者にとってはここに辿り着くまでにかなりの時間を割いてしまいます。
この記事がBlender→Unityへのインポートで悩んでいる初心者の方へ届くことを願っています。
すらでした。