docs.unity3d.com
    显示 / 隐藏目录

    Normal From Height 节点

    描述

    根据输入值 Input 定义的高度值以及输入值 Strength 定义的强度来创建法线贴图。

    端口

    名称 方向 类型 描述
    In 输入 Float 输入高度值
    Strength 输入 Float 输出法线的强度。采用真实世界单位,推荐范围为 0 - 0.1。
    Out 输出 矢量 3 输出值

    控件

    名称 类型 选项 描述
    Output Space 下拉选单 Tangent、World 设置输出法线的坐标空间。

    生成的代码示例

    以下示例代码表示此节点在每个 Output Space 模式下的一种可能结果。

    Tangent

    void Unity_NormalFromHeight_Tangent_float(float In, float Strength, float3 Position, float3x3 TangentMatrix, out float3 Out)
    {
        float3 worldDerivativeX = ddx(Position);
        float3 worldDerivativeY = ddy(Position);
    
        float3 crossX = cross(TangentMatrix[2].xyz, worldDerivativeX);
        float3 crossY = cross(worldDerivativeY, TangentMatrix[2].xyz);
        float d = dot(worldDerivativeX, crossY);
        float sgn = d < 0.0 ?(-1.0f) : 1.0f;
        float surface = sgn / max(0.000000000000001192093f, abs(d));
    
        float dHdx = ddx(In);
        float dHdy = ddy(In);
        float3 surfGrad = surface * (dHdx*crossY + dHdy*crossX);
        Out = normalize(TangentMatrix[2].xyz - (Strength * surfGrad));
        Out = TransformWorldToTangent(Out, TangentMatrix);
    }
    

    World

    void Unity_NormalFromHeight_World_float(float In, float Strength, float3 Position, float3x3 TangentMatrix, out float3 Out)
    {
        float3 worldDerivativeX = ddx(Position);
        float3 worldDerivativeY = ddy(Position);
    
        float3 crossX = cross(TangentMatrix[2].xyz, worldDerivativeX);
        float3 crossY = cross(worldDerivativeY, TangentMatrix[2].xyz);
        float d = dot(worldDerivativeX, crossY);
        float sgn = d < 0.0 ?(-1.0f) : 1.0f;
        float surface = sgn / max(0.000000000000001192093f, abs(d));
    
        float dHdx = ddx(In);
        float dHdy = ddy(In);
        float3 surfGrad = surface * (dHdx*crossY + dHdy*crossX);
        Out = normalize(TangentMatrix[2].xyz - (Strength * surfGrad));
    }
    
    返回到顶部
    Copyright © 2023 Unity Technologies — 商标和使用条款
    • 法律条款
    • 隐私政策
    • Cookie
    • 不要出售或分享我的个人信息
    • Your Privacy Choices (Cookie Settings)