URP 编写自定义 Shader (4) 法线

https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.7/manual/writing-shaders-urp-unlit-normals.html

Shader "Example/URPUnlitShaderNormal" {
    Properties {
    
    }

    SubShader {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" }

        Pass {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            struct Attributes {
                float4 positionOS   : POSITION;
                // 声明包含每个顶点法向量的变量
                half3 normal        : NORMAL;
            };

            struct Varyings {
                float4 positionHCS  : SV_POSITION;
                half3 normal        : TEXCOORD0;
            };

            Varyings vert(Attributes IN) {
                Varyings OUT;
                OUT.positionHCS=TransformObjectToHClip(IN.positionOS.xyz);
                // 使用 TransformObjectToWorldNormal 函数将法线从对象转换到世界空间,此函数来自 SpaceTransforms.hlsl 文件,在 Core.hlsl 中引用
                OUT.normal=TransformObjectToWorldNormal(IN.normal);
                return OUT;
            }

            half4 frag(Varyings IN): SV_Target {
                half4 color=0;
                // IN.normal 是一个 3D 向量. 每个分量的范围 [-1, 1],
                // 要使用负的法线向量,需要使用压缩技巧,将法线分量值范围 [-1,1],压缩为颜色值范围 [0,1]
                color.rgb=IN.normal*0.5+0.5;
                return color;
            }
            ENDHLSL
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值