首先URP是基于SRP的渲染管线,咱们直接讨论下SRP的Shader:
一、相同处
1、都可以用Shader.Fin获取路径的Shader
2、Properties写法一样,如果不写面板就不会显示属性。
3、都可以有多个SubShader,执行其中1个不兼容则换下一个,如果直至编译失败显示紫色。
二、不同点
1、Tags标签不同 需要 “RenderPipeline”=“UniversalPipline”
2、基本结构都是
Properties
SubShader
Tags
3、但是Pass { HLSLPROGRAM} //多了个HLSLPROGRAM
以前如果你是用CG写Shader的话,现在最好换到HLSL啦
CGPROGRAM / ENDCGPROGRAM 的语句块会自动包含内置渲染管线。这样如果还想包含SRP Shader代码库则会有一些冲突。
4、为什么Unity要切换到HLSL呢?
早期的Unity中的Shader是用Cg写的,但是后面都转到了HLSL。Cg已经很久不更新了,所以使用HLSL才是正道。
5、如果想要Shader和SRP Batcher兼容,需要将材质的所有属性定义在一个名为UnityPerMaterial的CBUFFER块中。
CBUFFER_START(UnityPerMaterial)
half4 _BaseColor;
CBUFFER_END