{}!Google Tag Manager end}} Unity PolySpatial 的自定义函数节点支持 | PolySpatial visionOS | 1.0.3
docs.unity3d.com
    显示 / 隐藏目录

    Unity PolySpatial 的自定义函数节点支持

    PolySpatial 的 shader graph 转换通过解析有限的 HLSL 子集并将其转换为 MaterialX 节点,为自定义函数节点(使用“String”函数类型时)提供部分支持。 请注意,这并不允许使用任何超出结合内置着色器图节点所能实现的功能;它只是提供了一种替代的规范方式,对于某些用途来说可能更紧凑或更方便。

    与完整的 HLSL 实现相比,用于自定义函数节点的解析器很原始,并且正在积极开发中。

    Function Body Format

    自定义函数体应包含一系列临时变量或输出的赋值语句。 不得重新分配变量。

    示例

    下面是一个支持的函数体示例。 注意,代码体仅由赋值语句组成,赋值一个临时变量并用来设置输出值。

    float2 xy = float2(In.r * In.a, In.g) * 2.0 - 1.0;
    Out = float3(xy, max(1.0e-16, sqrt(1.0 - saturate(dot(xy, xy)))));
    

    Supported Types

    解析器可识别标量、向量和矩阵浮点类型:“float”、“float2”、“float3”、“float4”、“float2x2”、“float3x3”、“float4x4”

    Supported Operators

    解析器支持用于浮点数、向量和矩阵值的基本算术运算符(+, -, *, /, %)用于处理“float”、向量和矩阵值,并支持逻辑/比较运算符(!, &&, ||, ==, !=, >, <, >=, <=)用于处理“float”值。 对于“float”条件和“float”或向量值,支持条件操作符 (?:)。

    Swizzling

    支持混合向量值。 例如,“float3(1, 2, 3).xz”等效于“float2(1, 3)”。

    Supported Functions

    HLSL Intrinsic Functions

    解析器支持HLSL内部函数的一个子集: abs、acos、all、any、asin、atan、atan2、ceil、clamp、cos、cosh、cross、degrees、distance、dot、exp、floor、fmod、frac、isinf、isnan、length、lerp、log、max、min、mul、normalize、pow、radians、rcp、reflect、refract、round、rsqrt、saturate、sign、sin、sinh、smoothstep、sqrt、step、tan、tanh、transpose、trunc

    PolySpatial-Specific Functions

    此外,解析器支持自定义“splitlr”函数,该函数实现了MaterialX Spec中描述的splitlr函数:

    genType splitlr(genType valuel, genType valer, float center, float2 texcoord);
    

    (其中“genType”是“float”、“float2”、“float3”或“float4”中的一个)。

    Unity Macros

    对于纹理采样,解析器支持Unity宏:SAMPLE_TEXTURE2D, SAMPLE_TEXTURE2D_LOD, SAMPLE_TEXTURECUBE_LOD

    Supported Globals

    解析器支持Unity的几个内置全局变量:_Time, _SinTime, _CosTime, unity_DeltaTime, unity_ObjectToWorld, unity_WorldToObject, UNITY_MATRIX_V, UNITY_MATRIX_I_V, UNITY_MATRIX_P, UNITY_MATRIX_I_P, UNITY_MATRIX_VP, UNITY_MATRIX_I_VP

    Note: 目前,visionOS提供的对象到世界矩阵(因此也包括“unity_ObjectToWorld”和“unity_WorldToObject”)包含渲染体的变换:即,在空间中移动(有界)应用程序会影响其世界变换,这与 Position Node 输出的世界位置不同,后者是相对于渲染体的变换而言的,因此在应用程序重新定位时不会发生变化。

    返回到顶部
    Copyright © 2024 Unity Technologies —
    • Your Privacy Choices (Cookie Settings)