Unity3D Shader Graph帮助文档 7:Precision Modes
请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
7 Precision Modes
7.1 Description
Shader Graph允许您设置特定的精度数据模式以在不同平台上进行优化。使用左上角的 【Precision】 下拉菜单设置整个图形的精度,或使用每个节点上的齿轮图标菜单设置图形上各个节点的精度。
有关类型选项的更多信息,请参见Precision Types。
7.2 Menu Options
Name | Description |
---|---|
Float | 设置精度模式为float |
Half | 设置精度模式为half |
Inherit | 设置精度模式为inherit ,请参见下面的Precision Inheritance这一节。仅在节点上可用。 |
7.3 Using Precision Modes
7.3.1 Visualizing Precision
若要通过图形显示数据精度,请使用Shader Graph window右上角的 Color Mode。 将 Color Mode设置为 Precision 以直观地指示当前的evaluation中,每个节点使用的精度是half
还是float
。
7.3.2 Graph Precision
要将整个SG图的精度设置为float
或half
,请使用Shader Graph window左上角的下拉菜单。默认情况下,新创建的节点使用此下拉菜单中设置的精度。
7.3.3 Node Precision
要为每个节点设置唯一的精度,请使用其齿轮图标菜单 根据您在每个节点上设置的精度,精度类型在数据流过图形时向上或向下强制转换。
例如,如果将一个half
节点连接到一个float
节点,则数据将被上浮成float
。然后,如果将该float
节点连接到另一个half
节点,则数据将向下转换回half
。
7.3.4 Precision Inheritance
节点具有一个称为“继承”的精度选项,这使它们可以继承任何传入边的精度模式。当您将所有节点添加到图形中时,默认情况下将使用继承模式。为没有任何边连接到其输入端口的节点设置继承选项时,它们将使用 Graph Precision设置。
例如,如果将节点A设置为继承,则它使用half
作为其精度模式,因为 Graph Precision为half
。
节点从每个输入端口读取精度。您可以将具有不同精度模式的节点连接到单个节点的输入端口。在这种情况下,结果输出是连接的节点中最高的可用精度模式。
例如,将节点D设置为继承。节点B将half
的精度传递给输入端口A。节点C将float
的精度传递给输入端口B。因此,节点D输出float
,这是节点D上输入端口中精度最高的模式。
您也可以使用精度模式来设置没有输入端口的节点。这些通常是输入节点,默认情况下将其设置为继承并使用 Graph Precision。与其他节点类似,使用每个输入节点的齿轮图标菜单来手动设置SG图输入数据的精度。
当为没有连接到其输入端口的节点设置继承选项时,它们将使用 Graph Precision设置。如果更改 Graph Precision模式,则这些节点的精度也会更改。跟踪设置为继承的节点很重要,因为在更改 Graph Precision时,它们可能会导致转换瓶颈。
例如,如果将 Graph Precision从half
更改为float
,但是将节点B手动设置为half
,则输入到节点B的数据将从float
更改为half
,然后在节点D处再次转换回float
。
7.3.5 Sub Graph Precision
在子SG图中,图和节点的精度行为与普通图相同。使用左上角的相同下拉菜单设置 Graph Precision,并使用每个节点上相同的齿轮图标菜单为子图形中的各个节点设置 Node Precision。
在 Output节点上为 Sub Graph Output设置精度。此精度适用于子SG图的 Output节点的所有输出端口。
对于子SG图输入,在子SG图的 Blackboard上为每个单独的属性设置精度模式。使用继承选项的属性,会使用左上角的下拉菜单,继承为子SG图设置的图精度。
当您在主SG图中使用子SG图节点时,子SG图将确定其自身的精度。子SG图的Blackboard上输入属性的精度模式,继承了子SG图asset中的子SG图精度。子SG图的输出使用 Output节点的精度。您不能更改SG内子SG图节点的精度。
例如,将 Sub Graph Precision设置为half
,将 Graph Precision设置为float
。然后将Input A和Output节点都设置为 Inherit。子SG图的输入和输出端口继承了子图精度的half
,即使您将图精度设置为float
也是如此。如果希望子SG图的继承行为与主SG图的继承行为匹配,则必须将子SG图精度也设置为float
。