Precision Modes
Description
Shader Graph provides specific data precision modes for nodes, graphs, and Sub Graphs to help you optimize your content for different platforms.
To set the precision of an entire graph, open the Graph Settings menu and adjust the Precision control. You can then use the context menu to adjust the precision of individual nodes.
Precision mode settings
Name | Description |
---|---|
Single | This is a high-precision floating point value. The number of bits is platform-specific. For modern desktop computers, it is 32 bits. This mode is useful for world space positions, texture coordinates, and scalar computations that involve complex functions such as trigonometry, power, and exponentiation. |
Half | This is a low-precision floating point value. The number of bits is platform-specific. For modern desktop computers, it is 16 bits. This mode is useful for short vectors, directions, object space positions, and many high dynamic range colors, but not very strong light sources, such as the sun. |
Switchable | This mode is only for Sub Graphs. When you enable this mode for a Sub Graph Node, that node determines the precision of the Sub Graph that it references. See Sub Graph precision within other graphs for more information. |
Inherit | This mode determines a node's precision based on a set of inheritance rules. See the Precision inheritance section. |
Use Graph Precision | This mode forces this node to use the same precision setting as the graph. If this is a node in a Sub Graph, and that Sub Graph’s Precision is set to Switchable, then the precision of this node is the precision of the Sub Graph node representing this Sub Graph. |
Using Precision Modes
Visualizing Precision in a graph
To visualize data precision in a graph, set the Color Mode control to Precision. This applies color coding to your nodes:
- Single nodes are blue
- Half nodes are red
- Switchable nodes are Green.
Setting graph Precision
To set the default precision for the entire graph to Single or Half, open the Graph Settings and set the Precision property. Newly-created nodes in a graph default to the Inherit precision mode, and inherit the graph's precision.
Setting node Precision
Select a node to access its precision setting. The precision you set for a node determines the precision of the data types which that node uses for its calculations.
Precision Inheritance
All nodes use the Inherit precision mode by default. In this mode, a node that has one or more edge connections takes on the precision mode of an incoming edge. Nodes that do not have any edge connections take on Graph Precision. If you change the Graph Precision mode, the precision of those nodes also changes.
Inputs on the node | Final precision determined by inheritance |
---|---|
No inputs | Graph Precision |
Only Half inputs | Half |
Only Single inputs | Single |
Half and Single inputs | Single |
Only Switchable inputs | Switchable |
Switchable and Half inputs | Switchable |
Switchable and Single inputs | Single |
Switchable, Half and Single inputs | Single |
Simple inheritance
Simple inheritance refers to the inheritance behaviour of a node with only one precision type on its inputs.
In the figure below, Node A has the Inherit mode. Because it has no incoming edge, it takes the Graph Precision, which is Half. Node B also has the Inherit mode, so it inherits the Half precision mode from Node A.
Complex inheritance
Complex inheritance refers to the inheritance behaviour of a node with multiple precision types on its inputs.
A node reads precision settings from each input port. If you connect a node to several others with a variety of precision modes, the node with the highest resolution determines the precision mode for the group.
In the figure below, node D has the Inherit mode. It receives input from the adjacent edges via inputs 1 and 2. Node B passes the Half mode through input 1. Node C passes the Single mode through input 2. Because Single is 32-bit and Half only 16-bit, Single takes precedence, so Node D uses Single precision.
Mixed inheritance
Mixed inheritance refers to the inheritance behaviour on a node with both simple and complex inheritance types.
Nodes with no input ports, such as Input nodes, inherit the Graph Precision. However, complex inheritance rules still affect other nodes in the same group, as illustrated in the figure below.
Switchable precision
The Switchable mode overrides Half mode but not Single.
Sub Graph precision
Precision behavior and user interface elements for Sub Graphs and their nodes do not differ from other graphs and nodes. Sub Graphs represent a function, and you can affect that function's inputs, outputs, and operators by modifying the relevant set of precision settings.
- The Sub Graph properties correspond to the function's inputs.
- The internal node properties correspond to the function's operators.
- The output node corresponds to the function's outputs.
Outputs
To manually determine the precision of a Sub Graph's output, modify the Output node’s Sub Graph Output setting.
Inputs
To manually determine the precision of Sub Graph Inputs, open the Internal Inspector and set precision modes for each individual Property. Properties that use the Inherit option take on the Graph Precision you set for the Sub Graph.
Sub Graph Precision within other graphs
By default, you cannot change the precision of a Sub Graph Node in a Shader Graph. This is because the input and output precision you set in a Sub Graph define the precision of its associated Sub Graph Node. However, if you set the Sub Graph Precision to Switchable, you can adjust Sub Graph Node precision values via your Shader Graph.
For example, let's say that Sub Graph A is Switchable. You open Graph 1, which includes a Sub Graph Node referencing Sub Graph A. Like all other nodes, Sub Graph Node A defaults to Inherit. You change the precision of Sub Graph Node A to Half. The precision of Sub Graph A also becomes Half.