Precision-Modes.md 5.5 KB

Precision Modes

Description

Shader Graph allows you to set specific precision data modes for optimization across different platforms. Use the Precision drop-down menu in the top left corner to set the precision for the entire graph, or the gear icon menu on each node to set the precision for individual nodes on the graph.

See Precision Types for more information about type options.

Menu Options

Name Description
Float Sets the precision mode to float.
Half Sets the precision mode to half.
Inherit Sets the precision mode to inherit.
See Precision Inheritance below. Only available on nodes.

Using Precision Modes

Visualizing Precision

To visualize data precision through the graph, use Color Mode located in the top right corner of the Shader Graph window. Set the Color Mode to Precision to visually indicate whether each node is using half or float in the current evaluation.

Graph Precision

To set the precision for the entire graph to float or half, use the drop-down menu in the top left corner of the Shader Graph Window. By default, newly-created nodes use the precision set in this drop-down menu.

Node Precision

To set a unique precision for each node, use its gear icon menu. Based on the precision you set on each node, the precision type casts itself up or down as data flows through the graph.

For example, if you connect a half node to a float node, the data is upcast to float. If you then connect that float node to another half node, the data is downcast back to half.

Precision Inheritance

Nodes have a precision option called inherit, which makes them inherit the precision mode of any incoming edges. All nodes use the inherit mode by default when you add them to a graph. When you set the inherit option for nodes that do not have any edge connections to their input ports, they use the Graph Precision setting.

For example, if you set Node A to inherit, it uses half as its precision mode because the Graph Precision is half.

A node reads precision from each input port. You can connect nodes with different precision modes to the input ports of a single node. In such cases, the resulting output is the highest available precision mode among the connected nodes.

For example, set Node D to inherit. Node B passes a precision of half to input port A. Node C passes a precision of float to input port B. Node D thus outputs float, which is the highest precision mode among the input ports on Node D.

You can also use precision modes to set nodes with no input ports. These are typically Input Nodes, which by default are set to inherit and use the Graph Precision. Similar to other nodes, use the gear icon menu of each input node to manually set the precision of the graph's input data.

When you set the inherit option for nodes that do not have connections to their input ports, they use the Graph Precision setting. If you change the Graph Precision mode, the precision of those nodes also change. It's important to keep track of nodes that you set to inherit, as they might result in a conversion bottleneck when you change the Graph Precision.

For example, if you change the Graph Precision from half to float, but manually set Node B to half, the data input to Node B changes from float to half, and then converts back to float again at Node D.

Sub Graph Precision

In Sub Graphs, precision behavior of the graph and nodes are the same as that in normal graphs. Use the same drop-down menu in the top left corner to set Graph Precision, and the same gear icon menu on each node to set Node Precision for individual nodes in a Sub Graph.

Set precision for the Sub Graph Output on the Output node. This precision applies to all output ports of the Sub Graph's Output node.

For Sub Graph Inputs, set precision modes for each individual Property on the Sub Graph's Blackboard. Properties that use the inherit option inherit the Graph Precision you set for the Sub Graph using the drop-down menu in the top left corner.

When you use a Sub-graph Node inside a main graph, the Sub Graph determines its own precision. The precision modes for input properties on the Sub Graph's Blackboard inherits the Sub Graph Precision of the Sub Graph Asset. The Sub Graph's output uses the precision of the Output node. You cannot change the precision of a Sub-graph Node inside a Shader Graph.

For example, set the Sub Graph Precision to half, and the Graph Precision to float. Then set both Input A and the Output node to inherit. The input and output ports of the Sub Graph inherit half from the Sub Graph Precision, even though you set the Graph Precision to float. If you want the inherit behavior of the Sub Graph to match that of the main graph, you must set the Sub Graph Precision to float as well.