どうも、ラブヘイトです。
BlenderからUnityにモデルをインポートした際に、
・Normal mapはどうやって適用するの?
・Bleder側で割り当てていたUVmapはどこへ?など
いくつか疑問があったので、自分が行ってできた一例を紹介しようと思います。
利用するモデル
まずはBlender側から
今回はこちらのモデルを使います。
街灯の窪んでいる部分が、Normal mapの適用されている箇所です。
これをUnity側に持っていった時も適用したいというのが、今回の課題です。
BlenderでのNormal mapの作成方法がわからない方は、過去記事に書いています。参考にしてみてください
【Blender】UV mapの一部にだけNormal mapを適用する方法 - うにty生活
作成したモデルの前提
オブジェクトの一部にNormal mapを割り当ててる(以下Normalオブジェクト)
つまり1つのオブジェクトの中でNormal mapを割り当てる部分のマテリアルは分けている状態
また、全ての箇所に仮でもいいのでマテリアルを割り当てといてください。
Unity側でオリジナルのマテリアルを設定するのに必要です。
UV mapは二つ存在
一つはベタ塗り用、一つはNormal map用です。
※ 上側の画像背景はnormal mapですが本来は透明です
Normalオブジェクトのshaderはこんな感じ
エクスポート
この状態のモデルをエクスポートします。
エクスポート設定は以下の通り
エクスポート設定はいちいち覚えておくのも面倒なので、プリセットとして覚えさせておくことをお勧めします。
そしてUnityにインポートします。
人によって違うとは思いますが、マテリアルはBlenderから運んできても、色味が違うので自分はそもそもBlender側では本気でShaderいじらないです。こんなもんかなーと確認が取れたらもう出力しちゃって、Unity側でガッツリShaderいじります。
Unity側の設定
インポートしたモデルのマテリアルをUnity側で設定する場合
インポートしたオブジェクト>Inspector>Material
からマテリアルを設定して
ApplyすることでUnity側のマテリアルをモデルに簡単に割り当てることが可能です。
normal map用のマテリアルもここで割り当てます。
※Blender側でマテリアルが割り当てられてないまま、Unity側にインポートするとインポート設定で出てこなくなるので注意
normal map用のマテリアルを作成していきます。
と言ってもめちゃくちゃ簡単です。
Normal mapのShader作成
Blenderで作成したTextureはBlenderエクスポート時にCollectionとして一緒に出力してもいいし、画像を保存しているなら手動でインポートでもどちらでもいいと思います。
Create > Shader > HDRP > Lit Graph
で新しいShader Graphを作成。選択した状態でCreate>Material
からShader Graphが割り当てられたMaterialを作成します。
Sample Texture 2Dノードを利用する方法とNormal From Textureノードを利用する方法、2つあります。どちらもTextureにNormal mapを設定するのは同じです。
それぞれの結果を見てみましょう。まずはNormal From Textureから
近くで見た時
遠くで見た時
なぜかぼやける...
次にSample Texture 2D
近く
遠く
かなり遠くからでも窪んで見えるため、Sample Texture 2Dを採用
もしかしたら、Normal From Textureの使い方が悪いのかもしれないが今回は体験談ということでよしとしましょう。
今回はここまで、ここまで見てくださってありがとうございました。