头文件引入:
XXPROGRAM
...
#include "UnityCG.cginc";
...
ENDXX
常用的结构体(在UnityCg.cginc文件中):在顶点着色器输入和输出时十分好用 。
关于如何使用这些结构体,可在Unity安装文件目录/Editor/Data/CGIncludes下打开查看
一些常用的函数
此书是以Build-in管线为基础,有些函数的名称和参数已经改变。Build-in 到URP转变手册可参考内置管线Shader升级到URP详细手册 - 简书
Unity 提供的CG/HLSL语义
何为语义?:语义就是赋给Shader脚本的输入和输出文档,让Shader知道从哪里读取数据,从哪里输出数据
在v2f结构体的TEXCOORDn中的具体语义可以由我们自己定义,换句话说,对于任何需要传输坐标的情形,我们都可以采用TEXCOORDn去描述。 更详细的知识可参考Directx文档
DirectX 编程 - UWP applications | Microsoft Learn
关于渲染平台的差异
在OpenGL和DirectX的纹理坐标的y轴是相反的,如果使用了纹理贴图和后处理效果而不注重屏幕坐标空间在不同渲染平台的差异的话,会出现纹理翻转。因此,为了解决这个问题 我们需要翻转y轴。一般情况下,Unity会为我们自动处理这个问题,但我们若开启了抗锯齿(Edit->Project Settings->Quality->Anti Aliasing)的同时使用了渲染纹理,Unity就不会为我们翻转纹理,默认情况下是符合DirectX的平台规定。当我们此时的屏幕特效只需要使用一张渲染图像,即只采样一次,就不需要在意纹理翻转的情况,因为在我们调用Graphics.Blit函数时,Unity已经为我们对屏幕图像的采样坐标进行了处理,只需要正常采样过程处理屏幕图像就行了,但如果要同时处理多张渲染图像(有抗锯齿)举个例子,对于Part-Bloom效果,我们需要同时提取需要高亮部分渲染出一张纹理,再将起模糊且高亮,这种情况就使用了多张纹理,手动进行纹理翻转。
采用如下代码进行纹理翻转。
Shader中的数据类型
对于只使用方向的单位向量,用fixed就足够了
Shader Target。