精度モード
説明
Shader Graph では、異なるプラットフォームにわたって最適化するために、特定のデータ精度のモードに設定できます。グラフ全体の Precision (精度) を設定するには、左上の角にある Graph Settings ボタンから Graph Settings メニューを表示してください。または、各ノードの歯車型アイコンのメニューを使用してグラフ上の各ノードの精度を個々に設定してください。
Precision のオプションに関する詳細は Precision タイプ を参照してください。
メニューオプション
名前 | 説明 |
---|---|
Float | 精度モードを float に設定します。 |
Half | 精度モードを Half に設定します。 |
Inherit | 精度モードを Inherit に設定します。後述の Precision の継承 の項をご覧ください。ノードにのみ使用可能です。 |
精度モードの使用
精度の視覚化
グラフ上のデータの精度を視覚化するには、Shader Graph ウィンドウの右上にある Color Mode を使用します。Color Mode を Precision に設定すると、現在の評価で各ノードが Half
と Float
のどちらを使用しているかが視覚化されます。
グラフの精度
グラフ全体の Precision (精度) を Float
または Half
に設定するには、Shader Graph ウィンドウ の左上にあるドロップダウンメニューを使用してください。新規作成されたノードには、このドロップダウンメニューで設定された精度がデフォルトで使用されます。
ノードの精度
ノード毎に精度を設定するには、各ノードの歯車型アイコンメニューを使用します。各ノードに設定した精度を基に、精度のタイプはグラフ内のデータの流れに沿ってアップキャスト/ダウンキャストされます。
例えば、Half
ノードを Float
ノードに接続すると、データは Float
にアップキャストされます。その後、この Float
ノードを別の Half
ノードに接続すると、データが Half
にダウンキャストされます。
精度の継承
ノードには Inherit
(継承) と呼ばれる Precision (精度) のオプションがあり、これを使用しているノードは、そのノードに入ってくるエッジの精度モードを継承します。グラフに追加したノードは全てデフォルトでこの Inherit
モードを使用します。入力ポートへのエッジ接続がないノードに Inherit
オプションを設定すると、そのノードは Graph Precision の設定を使用します。
例えば、Node A に Inherit
を設定すると、その継承モードは Half
になります。これは、Graph Precision が Half
になっているからです。
ノードは精度を各入力ポートから読み取ります。ひとつのノードの入力ポートに、異なる精度モードを使用している複数のノードを接続することも可能です。この場合、結果は、接続されたノードの中で最も高精度のモードで出力されます。
例えば、Node D に Inherit
を設定します。Node B は入力ポート A に 精度 Half
を渡します。Node C は入力ポート B に 精度 Float
を渡します。したがって Node D は、Node D の入力ポートの中で最も高い精度モードである Float
を出力します。
入力ポートを持たないノードの場合も、精度モードを使用した設定が可能です。ほとんどの場合これは Input ノード です。Input ノードはデフォルトでは Inherit
に設定されており、Graph Precision を使用するようになっています。他のノードと同様に、各入力ノードの歯車型アイコンメニューから手動でグラフの入力データの精度を設定できます。
入力ポートへの接続を持たないノードに Inherit
を設定すると、そのノードはGraph Precision の設定を使用します。Graph Precision のモードを変更すると、ノードの精度も変わります。Inherit
に設定されたノードは、Graph Precision を変更した時にデータ変換のボトルネックを発生させる場合があるため、把握しておくことが重要です。
例えば、Graph Precision を Half
から Float
に変更し、かつ手動で Node B を Half
に設定した場合、Node B へのデータ入力は Float
から Half
に変更され、その後 Node D で再び Float
に変換されます。
Sub Graph の精度
Sub Graph 内におけるグラフとノードの精度の動作は、通常のグラフ内と同様です。Graph Precision の設定には左上にある同じドロップダウンメニューを使用し、Sub Graph 内の個々の Node Precision の設定には各ノードの歯車型アイコンメニューを使用してください。
Sub Graph Output の精度を Output ノードに設定します。Sub Graph の Output ノードの全ての出力ポートに、この精度が適用されます。
Sub Graph Input の場合は、Graph Inspector から個々の プロパティー に精度モードを設定します。Inherit
に設定されているプロパティーは、ウィンドウ左上のドロップダウンメニューで Sub Graph に設定された Graph Precision を継承します。
メイングラフ内で Sub Graph ノード を使用する場合、Sub Graph が独自にその精度を決定します。Sub Graph の Blackboard の入力プロパティーの精度モードは、Sub Graph アセットに設定された Sub Graph Precision を継承します。Sub Graph の出力は Output ノードの精度を使用します。Shader Graph 内で Sub Graph ノード の精度を変更することはできません。
例えば、Sub Graph Precision を Half
に設定し、Graph Precision を Float
に設定します。その上で Input A と Output ノードの両方を Inherit
に設定します。Sub Graph の入力ポートと出力ポートは、Graph Precision が float
に設定されていたとしても Sub Graph Precision から Half
を継承します。Sub Graph の Inherit
動作をメイングラフのそれと一致させたい場合は、Sub Graph Precision も Float
に設定する必要があります。