Unityのマテリアルではシェーダを切り替えた時に以前のシェーダのプロパティがそのまま残っています。
これ僕も気になって使ってないプロパティを削除するツールを作ったんですが、アセットサイズは削除前と削除後で変わってました(Unity2018時点)
微々たる差ではありますが絶対使わないのにStandardシェーダのプロパティが必ず入っちゃってるのが気になるのでお掃除してます
— AMAGAMI (@ina_amagami) August 5, 2019
残念な事に使われていないプロパティをビルド時に削除してくれるわけではなさそうです。
不要なプロパティを削除するツールを公開しておいたので、気になる方は使ってみて下さい。
ダウンロード
GitHubよりダウンロードできます
使い方
マテリアルを右クリックして「Material Cleaner」を選択すればOKです。
Projectビューの検索窓に「t:material」と入れるとプロジェクト内のマテリアルを全て表示できるので、こちらを使えばまとめて実行できます。
シェーダエラーが発生している時(マテリアルの表示がピンク色になっている時)は全てのプロパティが消えてしまうので実行しないで下さい
プロパティが残っている理由
そもそもなぜプロパティが残っているのかというと、元のシェーダに戻した時にプロパティを復元できるようにするためです。
これ自体は便利なのですが、何度もシェーダを切り替えているとプロパティが蓄積してしまい無視できないサイズになります。
特にデフォルトで選択されているStandardシェーダのプロパティは他のシェーダに切り替えたらもう使わないのに必ず残ってしまいます。
今回作成したツールはマテリアルを右クリックして実行するタイプですが、メリットだけ享受したい人はビルドにフックしてプロパティの削除を実行して、ビルドが終わったら元に戻すのがいいかもしれません。
効果
Standardシェーダのプロパティが消えるだけでファイルサイズが1KB程度減ります(HDRP・LWRPなどを使用していないケース)。
また、Androidのアセットバンドルをビルドしてみた結果としては、200Bほどファイルサイズが減っていました。
小さい差ではありますが、塵も積もればなんとやらですね。
やっぱり残ってしまうんですね。変更前のシェーダーが参照しているテクスチャがメモリプロファイラにref countなしで出てきたんです。変更しただけだと余分なメモリも消費してしまうので削除必須ですね
— KOGA Mitsuhiro (@shiena) August 5, 2019
変更前のシェーダが参照しているテクスチャがメモリプロファイラに載ってしまうこともあるようです。
メモリ上での変化までは検証していないのですが、ファイルサイズを削減できるという点だけでも不要なプロパティを削除しておく価値があると思ったので削除するようにしています!