【Unity】Unity6で追加されたシェーダグラフヒートマップ機能でノードごとの「処理の重さ」を可視化する

Unity6で追加されたシェーダグラフヒートマップ機能でノードごとの「処理の重さ」を可視化する方法についてまとめました。

ヒートマップカラーモード

Unity6から、Shader Graph に Heatmap Color Mode が追加されました。
これを使うと、シェーダグラフの各ノードの「処理の重さ」を可視化することができます。

使い方

使い方は簡単で、シェーダグラフのウィンドウの右上の Color Mode を Heatmap に切り替えるだけです。
切り替えを行うと下図のように、各ノードに処理の重さを表す色が表示されます。

色が表示される

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

色のルール

GPUのサイクル数は Radeon GPU Analyzer を用いて測定したとのことなので、正確にはプラットフォームごとに値は変わるとは思いますが、グラフを組むときの参考としては十分そうです。

カスタムノードやサブグラフの処理負荷を設定する

さて上述の通り、この Heatmap の仕組みは事前に測定されたGPUのサイクル数に基づいています。
したがって、カスタムノードやサブグラフについてはデフォルトではヒートマップが適用されません。
カスタムノードやサブグラフにヒートマップを表示するには、以下の手順で行います。

  1. Assets > Create > Shader Graph > Custom Heatmap Values > Heatmap with Default Values を選択
    1. あるいはイチから作りたい場合は Empty Heatmap を選択
  2. アセットが作られる
  3. アセットの Inspector(下図)から当該ノード・サブグラフのカテゴリを設定する
  4. Edit > Project Settings > ShaderGraph > Heatmap Color Mode Settings に↑をアサイ

設定

また、上図のCategory欄から、ヒートマップの色は自由にカスタムできます。

参考

https://discussions.unity.com/t/2023-3-heatmap-color-mode/931489