土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

ユニティちゃんトゥーンシェーダーのUIを改修するエディタ拡張を作ってみた

 カスタムマテリアルエディターの勉強の過程で、ユニティちゃんシェーダーのUIを改修するコードを書いてみました。以下主な特徴です

ソースコードの配置場所

 ソースコードは下記にアップしてあるので欲しい方はご自由にどうぞ。あくまで土屋が使いやすいように改修してあり、オリジナルと互換性がありません。利用においてはご自身の責任においておねがいします。

https://gist.github.com/t-tutiya/824ba6ccb05fb1d1d210aa4a4389ae03

使い方

対象のユニティちゃんトゥーンシェーダーは2.0.4です。また、現状ではToon_DoubleShadeWithFeather.shaderのみに対応しています。他のシェーダーでは恐らくちゃんと動かないでしょう。

組み込みの手順は以下になります。

①Editorフォルダ配下にUnityChanShaderGUI_T2.csを配置。
(Editorフォルダが無ければ新規作成)
②Toon_DoubleShadeWithFeather.shaderの下部に以下の1行を追加。

    }
    FallBack "Legacy Shaders/VertexLit"
    //↓この行を追加
    CustomEditor "UnityChanShaderGUI_T2"
}

 上記の1行以外は、元のシェーダーコードは無改造でして、カスタムマテリアルエディタの疎結合性が発揮されたように思います(コーディングはやたらと面倒でしたが!)

UI改修点

主な改修箇所は以下の通りです。

①項目を階層化(大項目は開閉可能)し、個々のプロパティ名を短くした。
②テクスチャと対応するカラーパレットをシングルライン化
③Enable系/Tweak系は、トグルをオンにしたら中身が表示されるようにした。
④offset/scaleは削除(どうせシェーダー内では使ってない)
⑤法線マップがアタッチされた時、その法線マップを使用するかを選択するトグル(_Is_NormalMapToBase/_Is_NormalMapToHighColor/_Is_NormalMapToRimLight)が自動で有効になるようにして、トグルはUIから削除した(法線マップをアタッチした際は、ジオメトリの法線ベクトル情報は使用しないとした)。

①と⑤によってオリジナルとの互換性が維持されれていません。また、大してテストしてないのでバグがあるかもしれませんが、報告頂いてもすぐには直せないかもです。

今後

 今回はカスタムマテリアルエディタの最小限の機能で実装しましたが、将来的にはもっと色々修正したいと思っています。

 また、シェーダーバリアントの機能を使って、現在のユニティちゃんシェーダーのファイルを1つに統合し、UI上で使用する機能を取捨選択するように出来ないかと考えています。シェーダーバリアントはプリコンパイル処理なので、パフォーマンスは下がらない筈です。むしろ今より上がる可能性もあります(いやどうかな……)。

 これは当然シェーダーコード自体の改修になるので、オリジナルとは互換性が完全に失われます。まあ、自分で使う用だからそれでもいいかな……(やるにしてもシェーダー本2が終わってからですが!)。

補足

ユニティちゃんトゥーンシェーダーのコードロジックについて知りたい方はこちらをどうぞ。2.0.3対応版ですが、ロジック自体は同じです。

ユニティちゃんトゥーンシェーダーの コードをひたすら読む本 (Ver2.0.3対応版)
https://s-games.booth.pm/items/662396

Unityのシェーダー言語(ShaderLab/HLSL)自体について学びたい方はこちらをどうぞ。

Unityシェーダープログラミングの教科書 ShaderLab言語解説編
https://s-games.booth.pm/items/660001