【Blender To Unity】Blenderで作成したマテリアルをBakeしてUnityにインポートする方法

　Blender上でテクスチャをBakeし、Unityにインポートする方法です。Bakeのやり方だけ知りたい方は【手順】をお読みください。
　また、この記事は以下の記事のトラブルシューティング用に作成したものです。Unityへのエクスポート方法がわからない方は、以下の記事をお読みください。

https://qiita.com/fuji_kyoto_kc/items/57697feac48ad83fd706


**【使用ツール】**
Blender 3.6
Unity 2022.3.22

# 【問題点】
　BlenderからFBX形式でモデルをエクスポートし、Unityにインポートしました。しかし、Unity上で作成されたマテリアル内にテクスチャが貼られておらず、Texturesフォルダにも格納されていません。
 ※ここでいうTexturesフォルダは、テクスチャ抽出時にそのテクスチャを格納したフォルダを指します。

(本来であれば、マテリアルのinspector上でAlbedoの左側にテクスチャが貼られている状態でエクスポートされる)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/233e157f-b515-01d9-a968-2d6e4af53150.png)

↓

(しかし、BlenderからUnityにエクスポートしたところ、テクスチャが貼られておらず、テクスチャを格納したフォルダ内にも存在しない)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/8b3ba53e-16a2-c0ba-17cf-efc68289ea11.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/bf646216-8be2-c264-b7f0-19707bbeefc0.png)

# 【回答】
　Blender上で作成したノードベースのマテリアルはUnityに正しく反映されないことがあります。Blender上でテクスチャをBakeし、Unityにその画像をそのままインポートする必要があります。

　前提として、Blenderでマテリアルを作成する際に使用したノードは、Unityでも全て不都合なく使えるわけではありません。Unityで使用できないノードが使われているマテリアルは、Unityにインポートする時にはじかれます。そのため、上述した問題点のようにテクスチャが貼られていない(+存在しない)という問題が生じます。

　例えば、Blenderでノードを使用して作成したマテリアルを例に考えます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/52c6dedf-ce8d-f084-3d1c-7937366632a7.png)

 Image Texture(下記画像1枚目)やPrincipled BSDF(下記画像2枚目)は、何ら問題なくUnityにインポートできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/a3902dda-a11d-3a94-df16-e85cef59a54e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/bcba78d1-3e0d-f649-dea7-b6ab6f5e32e3.png)

そのため、これらのノードのみを使用して作成したマテリアルの場合は、Unityに正常にインポートできます。

(インポートした結果↓)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/e12be1d3-f2df-29f9-263a-a9337ff8e298.png)

しかし、Image TextureとつないでいるRGB CurvesはUnity上で使用できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/88010906-28a3-3be8-73e1-303b74f35446.png)

そのため、Unityにインポートした際、テクスチャがフォルダに格納されず、またマテリアルにも貼られていないという問題が発生します。

# 【手順」
　Blender上でテクスチャをBakeし、Unityにインポートする手順を紹介します。
 
　今回は、Planeオブジェクトを作成し、そこにマテリアルを割り当ててBakeすることで、正方形のテクスチャを作成する方法を紹介します。
　本来であれば、すでに作成したモデルを選択してBakeします。しかし、めんどうくs...((
 以下の方法では、汎用性の高いテクスチャを作成することができるため、この方法で進めていきます。


### ①Blender上でShadingタブを開き、Bakeするマテリアルを表示します。

(以下では、deskwoodマテリアルをBakeします)

### ②Bake用にImage texturesを新規作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/cd05751a-c74a-4c0a-9d4f-725670234913.png)

作成したImageTextureはどこにも繋がずおいておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/1b67599a-0ede-e479-1271-a94888294e7d.png)

### ③Image Texture内で+Newを押下し、新規イメージを作成します。

今回は、wooddesktextureという名前でテクスチャを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/9711b460-7b86-2266-50eb-b138025463e8.png)


**【Tips】**
　WidthとHeightでイメージのサイズを決定します。ここのサイズは高ければ高いほど、テクスチャが鮮明になりますが、その分パフォーマンスにも影響してきます。UnityにBakeしたテクスチャをインポートした後、Unity上でここのサイズを調整することができますので、今回はある程度サイズを大きくして作成しています。
　サイズ調整部分については、きじいちばんしたのTipsで解説します。

### ④画面右側のプロパティタブからRender Propertyを表示し、Render EngineをCyclesにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/f0d82938-219e-ba34-e2c3-2c7cfef74dc8.png)

### ⑤Render Property内のBakeタブを開き、Bake TypeをEmitにします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/00d41f53-a03e-8c42-0250-b4d6585adac7.png)

### ⑥マテリアル内でBase ColorにつないでいるノードをEmissiionにも接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/ab01ed26-89a5-edb5-9378-84c7f540f5cc.png)

### ⑦画面上部の3D ViewでBakeするオブジェクトを選択し、続けて②で作成したImage Textureを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/aa8a0760-a459-9e7f-ecae-0f8891ebfa3c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/41ca5a81-c6ee-c254-4dd9-c3f181703b74.png)

### ⑧Render Property内のBakeタブから、Bakeボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/15ccdfd7-4aaa-0951-f594-3553cc683fb1.png)

すると、画面下部に下記画像のようなローディング画面が出てきます。ここが100%になるまで待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/d985c991-afc3-f352-3206-dea1007840e8.png)

### ⑨画面上部のUV Editingタブを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/226ff12b-007b-ec5a-f620-4c2e2219fae4.png)

### ⑩画面左側に出てくるUV Editor画面上部のImageを押下し、Saveを選択します。

わかりやすい場所に保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/e388864b-c062-d7c1-6949-6b81b2c92bc4.png)

### ⑪Unityの画面を開き、Bakeした画像をProjectタブのわかりやすい場所にドラック＆ドロップします。

### ⑫Unity上でテクスチャを張りたいマテリアルを選択し、Albedo左側の正方形部分にテクスチャをドラッグ&ドロップします。

※マテリアルのEmission下部にあるTilling値をいじることで、テクスチャの拡縮を変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/770d59e1-5d06-a21b-bc53-0a1294c4ef58.png)

以上がテクスチャのBake方法になります。Normal Mapをbakeする場合は、bake TypeをNormalにして上記の方法と同じことをやればできます。

**【Tips】**
　BakeしてUnityにインポートした後に、テクスチャサイズを変更して最適化する方法について紹介します。
 ※ここでいうテクスチャサイズの変更とは、テクスチャの拡縮のことではなく、テクスチャの容量のことを指しています。
 
　まず、Unityにインポートしたテクスチャを選択し、Insepectorを表示します。
 　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/92264a6d-da75-7e0c-ce94-15541412b8aa.png)

　Inspector下部のMax Sizeを変更することで、テクスチャサイズを増減させることができます。見た目に大きな影響のない範囲で調整し、なるべくサイズを小さくすることで最適化を実現できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/e29ffd4d-0124-f910-1aac-0188e98d62ba.png)

　Max Sizeを変更した後に、右下のApplyボタンを押下することで変更を保存できます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/8d9059c4-c257-26f4-49c7-9abe57b9dc99.png)