unity3d学习交流群913755380
UnityShader的基础语法
pragma
主要内容:
编译指令 | 示例/含义 |
---|---|
#pragma vertex name | 替换name,来指定Vertex Shader函数、Fragment Shader函数。 |
#pragma fragment name | 替换name,来指定Vertex Shader函数、Fragment Shader函数。 |
#pragma target name | 替换name(为2.0、3.0等)。设置编译目标shader model的版本。 |
#pragma multi_compile name | 替换name定义宏。#if defined (A)… #endif,如果宏声明,则执行定义内的代码。声明宏的方法:获取shader所在材质mat,mat.EnableKeyword(“name”)和mat.DisableKeyword(“name”)对宏A进行定义和移除。 |
ComputeScreenPos:位于UnityCG.cginc中,用于将裁剪空间坐标范围从[-w,w]映射到[0,w](不做透视除法,直接插值),像素着色器中用的时候一般除以w映射到[0,1]作为纹理(比如深度纹理)的uv值;
tex2Dproj:与tex2D相似,不过输入的uv一般是上面ComputeScreenPos计算出的值,用的时候要除以w做个映射;
UNITY_PROJ_COORD:处理平台差异,一般直接返回输入的值;
SAMPLE_DEPTH_TEXTURE:位于HLSLSupport.cginc,一般用于获取深度纹理的颜色,直接输入uv;
SAMPLE_DEPTH_TEXTURE_PROJ:基本同上,不过输入的uv也是上面ComputeScreenPos计算出的值,内部用tex2Dproj实现;
LinearEyeDepth:unity中,我们从深度图中获取的值一般不能直接使用(一般是一个与观察空间的z值倒数线性相关的值),因此需要将其转化到观察空间的z值来使用,这个函数就是这个作用;
Linear01Depth:将上述得到的z值映射到[0,1]范围;