URP | 基础CG和HLSL区别
CG和HLSL区别
tags | 标签区别
管线说明tags标签,URP的shader都需标明使用的渲染管线的标签,即"RenderPipeline"="UniversalRenderPipeline"。


HLSL语法
CG的引入变成了HLSL的引入,即CGINCLUDE ENDCG变成了HLSLINCLUDE ENDHLSL。
CG的编码,从CGPROGRAM ENDCG变成了HLSL的HLSLPROGRAM ENDHLSL.

这俩个区别什么

UnityCG,cginc已经不再适用,取而代之的是Core.hlsl,在引用时注明#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"即可。

CBUFFER_START 使用
CBUFFER_START和CBUFFER_END,对于变量是单个材质独有的时候建议放在这里面,以提高性能。CBUFFER(常量缓冲区)的空间较小,不适合存放纹理贴图这种大量数据的数据类型,适合存放float,half之类的不占空间的数据,关于它的官方文档在下有详细说明。https://blogs.unity3d.com/2019/02/28/srp-batcher-speed-up-your-rendering/
注意:UnityPerMaterial大小写。

C-buffer 缓冲区
代码
代码
贴图采样
新的DXD11 HLSL贴图的采样函数和采样器函数,TEXTURE2D (_MainTex)和SAMPLER(sampler_MainTex),用来定义采样贴图和采样状态代替原来DXD9的sampler2D,在不同的平台有不同的变化,在GLcore库函数里定义,具体的原理未知,如有大佬了解望给予评论和指出。

结构体
代码阶段 需要注意的是把模型传入的UV信息和改一下这样区分。

顶点阶段
顶点着色器阶段,使用的函数也是不一样的,TransformObjectToHClip(v.positionOS.xyz) 替换掉原来的。

贴图采样
贴图的采用输出函数采用DXD11 HLSL下的 SAMPLE_TEXTURE2D(textureName, samplerName, coord2) ,具有三个变量,

分别是TEXTURE2D (_MainTex)的变量
SAMPLER(sampler_MainTex)的变量和 uv,
注意: 贴图采样方式是3个变量,贴图的名字,数据,UV信息。