UnityのShader Graphで浮動小数点数の精度を設定できるPrecision Modeについてまとめます。
Unity2019.3.0
Shader Graph 7.1.8
はじめに
この記事ではUnityのShader GraphのPrecision Modeについてまとめます。
Shader GraphのPrecision Modeは浮動小数点数の精度を設定するための機能です。
Shader Graphの基本的な使い方については以下の記事にまとめていますので、必要に応じて参照してください。
また、シェーダにおける浮動小数点数の精度の取り扱いついては以下の記事にまとめています。
本記事はこれらの知識を前提としますので、必要に応じて参照してください。
Color Modeを変更してノードの精度を可視化する
Shader Graphで浮動小数点数の精度を設定する前に、まずノードに設定されている精度を可視化します。
そのためにはツールバーからColor ModeをPrecisionに切り替えます。
すると、精度がFloatに設定されているノードは青、Halfに設定されているノードは赤に着色されます。
これでノード毎に設定されている精度が一目でわかるようになりました。
ノード/グラフに精度を設定する
それでは実際に精度を設定していきます。
まずノードの右上の歯車ボタンからはノード毎の精度を設定できます。
Floatに設定すればそのノードは単精度で計算され、Halfに設定すれば半精度で計算されます。
Inheritについては次節で説明します。
またツールバーからはグラフとしての精度が変更できます。
この挙動についても次節で詳しく説明します。
ノードの精度をInheritにした時の挙動
次にノードの精度をInheritに設定した時の挙動を見ていきます。
まず下図のように入力ポートに何も繋がっていないノードがInheritになっている場合には、
そのノードの精度設定はグラフの精度設定を継承します。
またもしInheritにしたノードの入力ポートに他のノードがつながっている場合には、
Inheritなノードの精度は入力ポートの精度と同じ精度になります。
また下図のようにInheritなノードに入力ポートが二つある場合には、
接続された二つの入力ノードの精度のうち高い方が適用されます。
サブグラフと精度
前節の精度の適用ルールについてはサブグラフについても同様です。
サブグラフにもグラフの精度とノード毎の精度が設定できます。
また、サブグラフの各ノードの精度の設定はあくまでサブグラフで完結するものであり、
メインのグラフに接続したとしてもメインのグラフの精度設定は一切反映されません。