Unity6で追加されたシェーダグラフヒートマップ機能でノードごとの「処理の重さ」を可視化する方法についてまとめました。
ヒートマップカラーモード
Unity6から、Shader Graph に Heatmap Color Mode が追加されました。
これを使うと、シェーダグラフの各ノードの「処理の重さ」を可視化することができます。
Unity6からシェーダグラフのノードごとの「処理の重さ」が可視化できる機能が追加👀
— Haruki Yano / Haruma-K (@harumak_11) 2024年11月28日
Radeon GPU Analyzerで測定したGPUサイクル数を元にしているとのこと
どのノードが重いかってわかりづらいので、シェーダグラフ組む時に参考にすると良さそうです pic.twitter.com/vkygYWHUMW
使い方
使い方は簡単で、シェーダグラフのウィンドウの右上の Color Mode を Heatmap に切り替えるだけです。
切り替えを行うと下図のように、各ノードに処理の重さを表す色が表示されます。

色は事前にノードごとに測定されたGPUのサイクル数に応じて決められており、基本的に輝度が高いものほど処理負荷が高いと判断できます。
ただし、テクスチャサンプリングなど処理負荷を測れないものに関しては、水色(unknown)として着色されます。

GPUのサイクル数は Radeon GPU Analyzer を用いて測定したとのことなので、正確にはプラットフォームごとに値は変わるとは思いますが、グラフを組むときの参考としては十分そうです。
カスタムノードやサブグラフの処理負荷を設定する
さて上述の通り、この Heatmap の仕組みは事前に測定されたGPUのサイクル数に基づいています。
したがって、カスタムノードやサブグラフについてはデフォルトではヒートマップが適用されません。
カスタムノードやサブグラフにヒートマップを表示するには、以下の手順で行います。
- Assets > Create > Shader Graph > Custom Heatmap Values > Heatmap with Default Values を選択
- あるいはイチから作りたい場合は Empty Heatmap を選択
- アセットが作られる
- アセットの Inspector(下図)から当該ノード・サブグラフのカテゴリを設定する
- Edit > Project Settings > ShaderGraph > Heatmap Color Mode Settings に↑をアサイン

また、上図のCategory欄から、ヒートマップの色は自由にカスタムできます。
参考
https://discussions.unity.com/t/2023-3-heatmap-color-mode/931489