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图的精度设置为floathalf,请使用Shader Graph window左上角的下拉菜单。默认情况下,新创建的节点使用此下拉菜单中设置的精度。

7.3.3 Node Precision

要为每个节点设置唯一的精度,请使用其齿轮图标菜单 根据您在每个节点上设置的精度,精度类型在数据流过图形时向上或向下强制转换。

例如,如果将一个half节点连接到一个float节点,则数据将被上浮成float。然后,如果将该float节点连接到另一个half节点,则数据将向下转换回half

7.3.4 Precision Inheritance

节点具有一个称为“继承”的精度选项,这使它们可以继承任何传入边的精度模式。当您将所有节点添加到图形中时,默认情况下将使用继承模式。为没有任何边连接到其输入端口的节点设置继承选项时,它们将使用 Graph Precision设置。

例如,如果将节点A设置为继承,则它使用half作为其精度模式,因为 Graph Precisionhalf

节点从每个输入端口读取精度。您可以将具有不同精度模式的节点连接到单个节点的输入端口。在这种情况下,结果输出是连接的节点中最高的可用精度模式。

例如,将节点D设置为继承。节点B将half的精度传递给输入端口A。节点C将float的精度传递给输入端口B。因此,节点D输出float,这是节点D上输入端口中精度最高的模式。

您也可以使用精度模式来设置没有输入端口的节点。这些通常是输入节点,默认情况下将其设置为继承并使用 Graph Precision。与其他节点类似,使用每个输入节点的齿轮图标菜单来手动设置SG图输入数据的精度。

当为没有连接到其输入端口的节点设置继承选项时,它们将使用 Graph Precision设置。如果更改 Graph Precision模式,则这些节点的精度也会更改。跟踪设置为继承的节点很重要,因为在更改 Graph Precision时,它们可能会导致转换瓶颈。

例如,如果将 Graph Precisionhalf更改为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