Unity2DでURP使ってるときに、光沢が出せずに苦労した話【Unity,Blender初心者向き】

## ことのはじまり
2Dでパチンコを題材にしたゲームを作ろうということで、ゲーム制作初心者だったこともあり何も考えずUniversal2Dで制作を開始　Unityのバージョンは2022.3.7f1です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/47cf0a84-dc73-4026-965e-7015e88b8866.png)


## 制作と実装アイデア
ゲームシステムの制作などに関しては通常通り。始めたての頃のLeague of LegensくらいわけわからないBlenderを何とか使いながらモデルを作成していきました。
パチンコが題材ということでアイテムとして「特殊景品」を追加してバフアイテムにしようと考えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/e0e394ed-87bd-48e6-a4d4-e49857dea1cb.png)
>画像引用：株式会社LIG

店舗によって異なる場合がある(らしい)のですが、様々なデザインがあり特殊景品の中には画像のように金のインゴットが入ってるものもあるようです。
そこで画像のような「イラストが描かれたパッケージの中に金のインゴットが入っている」ような3Dモデルを作成してUnityで使用しようと考えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/c5306bef-406f-45da-93fc-966a2a397f60.png)
モデルはこんな感じ。


## 事件発生
「へー、プリンシプルBSDFならそのまま引っ張ってもUnityでつかえるんやー。fbxにしてそのまま持って行ってつかったろｗ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/33160ead-9549-45bd-8a05-f41532f9578e.png)
...。
画像に関してはアイテムごとに差し替えることを前提としていたので特に問題は無いが、肝心なのがインゴットや右下の印字部分。<strong>いや光沢が無いやん！！！！</strong>
まぁこれに関してはUnityとBlenderの描画方法の違いによるものだからしょうがない。
MaterialのMetallicMapいじればなんとかなるやろ、ベイクもやってみたけど思った感じにならなかったし(これに関しては知識不足の筆者ミス感は否めない)。
とExtractMaterialsして対象のマテリアルを編集![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/8ca31af9-a21c-4ae9-820a-91b7c846c460.gif)
.........。<strong>おい変わっとらんやんけ！！！！</strong>
まぁ落ち着け。ShaderGlaphってものがあるらしいから試してみよう。ShaderGlaphに関しては知識が足りていないので説明は割愛します。軽く行った手順としては
1.Blenderで該当モデル(インゴット)のUV展開を行い、メタリックマップとラフネスマップを投影
2.メタリック・ラフネスマップを画像として保存
3.2種の画像をShaderGlaphでTexture2Dとして入力に使用、マップの画素値をメタリック・ラフネスの入力値として使用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/987c4f1b-1ad1-4d3c-83f2-e4cca6ffba6c.png)

その結果がこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/e4ddd21a-5808-49fe-a330-315aa15f5e8b.png)
............結局できてないんかい...。

そういえばガラスっぽい質感も結構怪しいな
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/f48a1e34-7a37-489d-966b-8301cb905bdb.png)
>Surface TypeをTransparentにしたことで透過は動いている模様


## 原因の特定
RenderPiplineの仕様に疑問を持ったため、新しく2Dと3Dでプロジェクトを作成し、それぞれのプロジェクトでMaterialのMetallic値が反映されるかのテストを行いました。
<dl>
  <dt>Universal 2DでのMetallic</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/c85806b1-5d37-4371-b8d9-54ceeecdcb9e.png "Universal2DでのMetallic")

<dl>
  <dt>Universal 3DでのMetallic</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/4e13e481-2178-4e43-8747-747ab393ff6f.png "Universal3DでのMetallic")

十中八九原因は2DのURPにあり。

## 2DURP環境で作ったプロジェクトを3DURP環境へ変更

手順
1.Create > Rendering URP Asset(with Universal Renderer)から3D用URP環境作成
<dl>
  <dt>3D用URPAssetの作成</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/0e7967ee-a338-405b-aa6e-da56b5041de2.png)

2.New Universal Render Pipeline Asset_Rendererが生成されるので、Renderer2D DataがRenderer ListとしてアタッチされているNew Universal Render Pipeline Assetを変更
<dl>
  <dt>変更前</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/c30cfe5f-6f17-4874-b776-1b0dcb8b4334.png)

<dl>
  <dt>変更後</dt>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/29c40f56-a27c-4cd9-9316-92144e402fb3.png)

3.新しく生成した3D用Asset_Rendererに変更後、Directional Lightを作成してマテリアルを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/80f2b615-43f8-4bd8-af60-d4267466efce.png)
輝く金だ...。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107830/9f1baf47-d6fd-4a54-874f-1d350abede38.png)
出来はともかくとしてガラスっぽい質感はできそうだよね

## まとめ
2DのURPにおいて基本的な機能だけでは光沢やマテリアルの質感を表現しづらいということでした。
その分描画面において非常に軽量とのことなので、ちょっとリッチなゲームにしたい場合には3D環境で2Dのシステムを作るようにしたほうが良いよ　という勉強になりました。