URP 下的 Shadedr 基础写法的总结

URP 下的 Shadedr 基础写法的总结

URP简单介绍

URP是一种新的新的渲染管线,首先我们要粗略了解一下URP,他是SRP的一个高级版本,SRP是Unity面向用户开放的可编程渲染管线,URP和HDRP则是经过Unity进一步包装的SRP,分别面向手机(低性能)和主机(高性能),分别提供了对应的渲染库,有些是混用的功能,界限也没有非常明显。

使用URP的一大原因是可拓展性和高性能,还有一个让我不得不用的原因就是Unity新推出的Shadergraph和VFX graph都是基于URP的,可预见的未来URP将是Unity主打方向。如果你的工作需要你创建各种各样的美术效果,那么URP对你来说避无可避。

下面是URP渲染管线下写Shader最基础的写法,含有备注

固有色URP Shader(含注释)

// 这个shader给mesh填充一个固定的颜色
Shader "URP/ConstantColor"
{
    // shader的属性,这个例子里面是空的,就代表没有对外暴露的属性
    Properties
    {
        //_BaseColor为shader变量名,BaseColor为inspector显示名字
        _BaseColor("Base Color", Color) = (1, 1, 1, 1)
    }

    // SubShader块包含Shader代码
    SubShader
    {
        // Tags定义了subshader块何时以及在什么条件下执行
        Tags
        {
            "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline"
        }

        Pass
        {
            // HLSL代码块,Unity SRP使用HLSL语言,Pass中全部是HLSL
            HLSLPROGRAM
            // 定义顶点shader的名字
            #pragma vertex vert
            // 定义片元shader的名字
            #pragma fragment frag

            // 这个Core.hlsl文件包含了常用的HLSL宏定义以及函数,也包括了对其他常用HLSL文件的引用
            // 例如Common.hlsl, SpaceTransforms.hlsl等
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            // 下面结构体包含了顶点着色器的输入数据
            struct Attributes
            {
                // positionOS变量包含了物体空间的顶点位置
                float4 positionOS : POSITION;
            };

            struct Varyings
            {
                // 这个结构体里必须包含SV_POSITION
                float4 positionHCS : SV_POSITION;
            };
            CBUFFER_START(UnityPerMaterial)
                half4 _BaseColor;//定义和Property中同名的变量使之关联
            CBUFFER_END

            // 顶点着色器
            Varyings vert(Attributes IN)
            {
                // 定义输出的结构体
                Varyings OUT;
                // TransformObjectToHClip函数可以将顶点位置从物体空间转换到齐次裁剪空间
                OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);

                return OUT;
            }

            // 片元着色器        
            half4 frag() : SV_Target
            {
                // 返回一个固定的颜色
                half4 customColor = half4(0.5, 0, 0, 1);
                //return customColor;
                return _BaseColor;
            }
            ENDHLSL
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值