版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ww1351646544/article/details/88639202
Properties属性支持类型
属性类型 |
默认值的定义语法 |
例子 |
Int |
number |
_Int(“Int”,Int)=2 |
Float |
number |
_Float(“Float”,Float)=1.5 |
Range(min,max) |
number |
_Range(“Range”,Range(0.0,5.0))=3.0 |
Color |
(number,number,number,number) |
_Color("“Color”,Color)=(1,1,1,1) |
Vector |
(number,number,number,number) |
_Vector(“Vector”,Vector)=(2,3,6,1) |
2D |
“defaulttexture”{} |
_2D(“2D”,2D)=""{} |
Cube |
“defaulttexture”{} |
_Cube(“Cube”,Cube)=“white”{} |
3D |
“defaulttexture”{} |
_3D(“3D”,3D)=“black”{} |
常见渲染设置
状态名称 |
设置指令 |
解释 |
Cull |
Cull Back 或 Front 或 Off |
剔除背面/正面/关闭剔除 |
ZTest |
ZTest Less Greater 或 LEqual 或 GEqual 或 Equal 或 NotEqual 或 Always |
设置深度测试函数 |
ZWrite |
Zwrite On 或 Off |
开关深度写入 |
Blend |
Blend SrcFactor DstFactor |
开启并设置混合模式 |
SubShader标签类型
标签类型 |
说明 |
例子 |
Queue |
控制渲染顺序 |
Tags{“Queue”=“Transparent”} |
RenderType |
对着色器进行分类,例如这是一个不透明着色器或是一个透明着色器 |
Tags{“RenderType”=“Opaque”} |
DisableBatching |
指明是否对SubShader进行批处理 |
Tags{“DisableBatching”=“True”} |
ForceNoShadowCasting |
是否会投射阴影 |
Tags{“ForceNoShadowCasting”=“True”} |
IgnoreProjector |
如果为True则不接受投影影响 |
Tags{"IgnoreProjector "=“True”} |
CanUseSpriteAtlas |
当该SubShader是用于精灵(Sprites)时 ,将该标签设置为False |
Tags{"CanUseSpriteAtlas "=“False”} |
PreviewType |
指明材质面板将如何预览材质,默认为一个球,可以设置为Plane、SkyBox |
Tags{“PreviewType”=“Plane”} |
ShaderLab属性和Cg变量类型的匹配关系
ShaderLab属性 |
Cg变量 |
Color,Vector |
float4,half4, fixed4 |
Range,Float |
float,half,fixed |
2D |
sampler2D |
Cube |
samplerCube |
3D |
sampler3D |
常用的包含文件
文件名 |
描述 |
UnityCG.cginc |
包含了最常用的帮助函数、宏和结构 |
UnityShaderVeriables.cginc |
自动包含,有许多内置的全局变量,如UNITY_MATRIX_MVP |
Lighting.cginc |
自动包含,各种光照模型 |
HLSLSupport.cginc |
自动包含,用于夸平台的宏 |
常用的结构体
名称 |
描述 |
包含变量 |
appdata_base |
可用于顶点着色器输入 |
顶点位置、顶点法线 、第一组纹理坐标 |
appdata_tan |
可用于顶点着色器输入 |
顶点位置、顶点切线、顶点法线、第一组纹理坐标 |
appdata_full |
可用于顶点着色器输入 |
顶点位置、顶点切线、顶点法线、四组或更多纹理坐标 |
appdata_img |
可用于顶点着色器输入 |
顶点位置、第一组纹理坐标 |
v2f_img |
可用于顶点着色器输出 |
裁剪空间中的位置、纹理坐标 |
应用阶段传递给顶点着色器时Unity支持的常用语义
语义 |
描述 |
POSITION |
模型空间中的顶点位置,通常是float4 |
NORMAL |
顶点法线,通常是float3 |
TANGENT |
顶点切线,通常是float4 |
TEXCOORD0、TEXCOORD1… |
该顶点的纹理坐标通常是float2或float4 |
COLOR |
顶点颜色,通常是fixed4、float4类型 |
顶点着色器传给片元着色常用语义
语义 |
描述 |
SV_POSITION |
裁剪空间中顶点坐标 |
COLOR0 |
通常用于输出第一组顶点色,非必须 |
COLOR1 |
通常用于输出第二组顶点色,非必须 |
TEXCOORD0~7 |
通常用于输出纹理坐标,但不是必需的 |
片元着色器输出时Unity支持的常用语义
语义 |
描述 |
SV_Target |
输出值将会存储到渲染目标中 |
3种精度数值
类型 |
精度 |
float |
高精度,32位 |
half |
中精度,16位,-60000~+60000 |
fixed |
底精度,11位,-2.0~2.0 |
Unity支持的Shader Target
指令 |
描述 |
#pragma target2.0 |
默认,相当于Direc3d 9上的ShaderModel 2.0,不支持对顶点纹理采样,不支持显示 的LOD文理采样 |
#pragma target3.0 |
相当于Direc3d 9上的ShaderModel 3.0,支持对顶点纹理的采样等 |
#pragma target4.0 |
相当于Direc3d 10上的ShaderModel 4.0,支持几何着色器等 |
#pragma target5.0 |
相当于Direc3d 11上的ShaderModel 5.0 |
UnityCG.cginc中一些常用的帮助函数
函数名 |
描述 |
float3 WorldSpaceViewDir(float4 v) |
给一个模型空间顶点,返回世界空间该点到摄像机方向 |
float3 UnityWorldSpaceViewDir(float4 v) |
给一世界空间顶点,返回世界空间该点到摄像机方向 |
float3 ObjSpaceViewDir(float4 v) |
输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的方向 |
float3 WorldSpaceLightDir(float4 v) |
仅可用于前向渲染中。给一个模型空间中顶点位置,返回世界空间中从该点到光照方向,没归一化 |
float3 UnityWorldSpaceLightDir(float4 v) |
仅可用于前向渲染中。给一个世界空间中顶点位置,返回世界空间中该 点到光源方向,没归一化 |
float3 ObjSpaceLightDir(float4 v) |
仅可用于前向渲染中。给一个模型空间中顶点位置,返回模型空间中从该点到光源的方向。没归一化 |
float3 UnityObjectToWorldNormal(float3 norm) |
把法线方向从模型空间转到世界空间 |
float3 UnityObjectToWorldDir(float3 dir) |
把方向失量从模型空间转到世界空间中 |
float3 UnityWorldToObjectDir(float3 dir) |
把方向失量从世界空间转到模型空间中 |
ShaderLab的Blend命令
名称 |
意义 |
Blend Off |
关闭混合 |
Blend SrcFactor DstFactor |
开启混合源色会乘以SrcFactior而目标色会乘以DstFactor |
Blend SrcFactor DstFactor, SrcFactorA DstFactorA |
和上面几乎一样,只是使用不同的因子混合 |
BlendOp BlendOperation |
并非排源色和目标色相加混合,而是使用BlendOperation对它们进行其他操作 |
ShaderLab中的混合因子
参数 |
描述 |
One |
因为了1 |
Zero |
0 |
SrcColor |
源因子为色值 ,当为RGB通道时返回rgb,当为A通道时返回a值 |
SrcAlpha |
源因子的A通道值 |
DstColor |
目标因子色值,当RGB通道时返回rgb,当为A通道时返回a值 |
DstAlpha |
目标色值为A通道值 |
OneMinusSrcColor |
因子为1-源颜色。当为RBG则用rgb作为分量,为A通道时则以a作业值 |
OneMinusSrcAlpha |
因子为1-源颜色的a |
OneMinusDstColor |
因子为1-目标颜色。当为RBG则用rgb作为分量,为A通道时则以a作业值 |
OneMinusDstAlpha |
因子为1-目标颜色a |
LightMode支持的渲染路径设置
标签名 |
描述 |
Always |
会被渲染,但不计算光照 |
ForwardBase |
用于前向渲染。会计算环境光,最重要的平行光,逐顶点/SH光i源和Lightmaps |
ForwardAdd |
用于前向渲染。会计算有外的逐像素光源,每个Pass对应一个光源 |
Deferred |
用于延迟渲染。该Pass会渲染G缓冲 |
ShadowCaster |
把物体的深度信息渲染到阴影映射纹理中 |
PrepassBase |
用于遗留的。该Pass会渲染法线和高光反射的指数部分 |
PrepassFinal |
用于遗留延迟渲染。该Pass通过合并纹理、光照和自发光来渲染得到最后的颜色 |
Vertex、VertexLMRGBM、VertexLM |
用于遗留的顶点照明渲染 |
前向渲染内置灯光变量
名称 |
类弄 |
描述 |
_LightColor0 |
float4 |
该 Pass处理的逐像素光源的颜色 |
_WorldSpaceLightPos0 |
float4 |
该 Pass处理的逐像素光源的位置,如果是平行光,则是0 |
_LightMatrix0 |
float4X4 |
世界空间到光源空间的变换矩阵 |
unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0 |
float4 |
仅用于Base Pass前四个重要点光源在世界的位置 |
unity_4LightAtten |
float4 |
仅用于Base Pass前四个重要点光源的衰减引子 |
unity_LightColor |
half4[4] |
仅用于Base Pass前四个重要点光源的颜色 |
前向渲染内置灯光函数
函数名 |
描述 |
float3 WorldSpaceLightDir(float4 v) |
仅用于前向渲染,给一个模型空间顶点,返回世界空间该点到到光源的方向,没有归一化 |
float3 UnityWorldSpaceLightDir(float4 v) |
仅用于前向渲染,给一个世界空间顶点,返回世界空间该点到到光源的方向,没有归一化 |
float3 ObjSpaceLightDir(float4 v) |
仅用于前向渲染,给一个模型空间顶点,返回模型空间该点到到光i源的方向,没有归一化 |
float3 Shader4PointLights(float4 v) |
仅用于前向渲染,计算四个点光源的光照,参数是打包进失量的光照数据 ,用常用这个计算逐点光照 |
RenderType的参数
参数 |
说明 |
Opaque |
用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。 |
Transparent |
用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。 |
TransparentCutout |
蒙皮透明着色器(Transparent Cutout,两个通道的植被着色器)。 |
Background |
Skybox shaders. 天空盒着色器。 |
Overlay |
GUITexture, Halo, Flare shaders. 光晕着色器、闪光着色器。 |
TreeOpaque |
terrain engine tree bark. 地形引擎中的树皮。 |
TreeTransparentCutout |
terrain engine tree leaves. 地形引擎中的树叶。 |
TreeBillboard |
terrain engine billboarded trees. 地形引擎中的广告牌树。 |
Grass |
terrain engine grass. 地形引擎中的草。 |
数据函数:
函数 |
含义 |
abs(x) |
返回输入参数的绝对值 |
acos(x) |
反余切函数,输入参数范围为[-1,1],返回[0,π]区间的角度值 |
all(x) |
如果输入参数均不为0,则返回 ture;否则返回 flase。&&运算 |
any(x) |
输入参数只要有其中一个不为0,则返回 true。 |
asin(x) |
反正弦函数,输入参数取值区间为[−1,1],返回角度值范围为[−π/2 ,π/2 ] |
atan(x) |
反正切函数,返回角度值范围为⎡−π/2 ,π/2⎤ |
atan2(y,x) |
计算y/x 的反正切值。实际上和atan(x)函数功能完全一样,至少输入参数不同。atan(x) = atan2(x, float(1)) |
ceil(x) |
对输入参数向上取整。例如:ceil(float(1.3)),其返回值为 2.0 |
clamp(x,a,b) |
如果x 值小于 a,则返回a;如果 x 值大于 b,返回b;否则,返回 x |
cos(x) |
返回弧度 x 的余弦值。返回值范围为[−1,1] |
cross(A,B) |
返回两个三元向量的叉积(cross product)。注意,输入参数必须是三元向量 |
degrees(x) |
输入参数为弧度值(radians),函数将其转换为角度值(degrees) |
determinant(m) |
计算矩阵的行列式因子 |
dot(A,B) |
返回A 和 B的点积(dot product)。参数A 和 B 可以是标量,也可以是向量(输入参数方面,点积和叉积函数有很大不同) |
exp(x) |
计算ex的值,e= 2.71828182845904523536 |
exp2(x) |
计算2x的值 |
floor(x) |
对输入参数向下取整。例如floor(float(1.3)) 返回的值为1.0;但是 floor(float(-1.3))返回的值为-2.0。 |
fmod(x,y) |
返回x/y 的余数。如果 y 为 0,结果不可预料 |
frexp(x, out exp) |
将浮点数 x 分解为尾数和指数,即x = m* 2^exp,返回m,并将指数存入 exp 中;如果 x 为 0,则尾数和指数都返回0 |
frac(x) |
返回一个标量或矢量的小数部分组件 |
isfinite(x) |
判断标量或者向量中的每个数据是否是有限数,如果是返回true;否则返回false;无限的或者非数据(not-a-number NaN) |
isinf(x) |
判断标量或者向量中的每个数据是否是无限,如果是返回 true;否则返回 false; |
isnan(x) |
判断标量或者向量中的每个数据是否是非数据(not-a-number NaN),如果是返回true;否则返回false; |
ldexp(x, n) |
计算x∗2n的值 |
lerp(a, b, f) |
计算(1−f )∗ + ∗a b f或者a+f ∗ −(b a)的值。即在下限a 和上限 b 之间进行插值,f表示权值。注意,如果 a和 b 是向量,则权值 f必须是标量或者等长的向量。 |
lit(NdotL,NdotH, m) |
N表示法向量;L 表示入射光向量;H表示半角向量;m 表示高光系数。函数计算环境光、散射光、镜面光的贡献,返回的 4元向量: 1.位表示环境光的贡献,总是 1.0;2.位代表镜面光的贡献,如果 N •L<0,则为0;否则为 N •L;3.位代表镜面光的贡献,如果N •L<0或者 N •H <0 ,则位 0;否则为(N •H)m; |
log(x) |
返回以e为底的对数。 |
log2(x) |
计算log(2x)的值,x 必须大于 0 |
log10(x) |
计算log10(x)的值,x必须大于 0 |
max(a, b) |
比较两个标量或等长向量元素,返回 大值 |
min(a,b) |
比较两个标量或等长向量元素,返回 小值 |
step(a, x) |
如果 x<a,返回0;否则,返回1。 |
sqrt(x) |
求 x的平方根, x ,x必须大于 0。 |
tan(x) |
输入参数为弧度,计算正切值 |
transpose(M) |
M 为矩阵,计算其转置矩阵 |
几何函数:
函数名 |
含义 |
distance( pt1, pt2) |
两点之间的欧几里德距离(Euclidean distance) |
faceforward(N,I,Ng) |
如果Ng I• <0 ,返回N;否则返回-N。 |
length(v) |
返回一个向量的模,即 sqrt(dot(v,v)) |
normalize( v) |
归一化向量 |
reflect(I, N) |
根据入射光方向向量 I,和顶点法向量N,计算反射光方向向量。其中I和N 必须被归一化,需要非常注意的是,这个I 是指向顶点的;函数只对三元向量有效。 |
refract(I,N,eta) |
计算折射向量,I为入射光线,N为法向量,eta为折射系数;其中 I 和N必须被归一化,如果I 和N 之间的夹角太大,则返回(0,0,0),也就是没有折射光线;I是指向顶点的;函数只对三元向量有效。 |
mul(M, N) |
计算两个矩阵相乘,如果 M 为 AxB 阶矩阵,N 为 BxC阶矩阵,则返回 AxC 阶矩阵。下面两个函数为其重载函数。 |
noise( x) |
噪声函数,返回值始终在 0,1 之间;对于同样的输入,始终返回相同的值(也就是说,并不是真正意义上的随机噪声)。 |
pow(x, y) |
幕运算 |
radians(x) |
函数将角度值转换为弧度值 |
round(x) |
Round-to-nearest,或 closest integer to x 即四舍五入 |
rsqrt(x) |
X 的反平方根,x 必须大于 0 |
saturate(x) |
如果 x 小于 0,返回 0;如果 x 大于 1,返回1;否则,返回 x |
sign(x) |
如果 x 大于 0,返回 1;如果 x 小于 0,返回01;否则返回 0。 |
sincos(float x, out s, out c) |
该函数是同时计算 x 的 sin 值和 cos 值,其中s=sin(x),c=cos(x)。该函数用于“同时需要计算 sin 值和 cos 值的情况”,比分别运算要快很多! |
sinh(x) |
计算双曲正弦(hyperbolic sine)值。 |
smoothstep(min, max, x) |
值 x 位于 min、max 区间中。如果 x=min,返回 0;如果 x=max,返回 1;如果 x 在两者之间,按照下列公式返回数据: x−min x−min−2*( )3 +3*( )2 max−min max−min |
step(a, x) |
如果 x<a,返回 0;否则,返回 1。 |
sqrt(x) |
求 x 的平方根, x ,x 必须大于 0。 |
tan(x) |
输入参数为弧度,计算正切值 |
tanh(x) |
计算双曲正切值 |
transpose(M) |
M 为矩阵,计算其转置矩阵 |
纹理映射函数
函数 |
含义 |
tex1D(sampler1D tex, float s) |
一维纹理查询 |
Tex2D(sampler2D tex, float2 s) |
二维纹理查询 |
Tex3D(sampler3D tex, float s) |
三维纹理查询 |
偏导函数
函数 |
含义 |
ddx(a) |
参数 a 对应一个像素位置,返回该像素值在 X 轴上的偏导数 |
ddy(a) |
参数 a 对应一个像素位置,返回该像素值在 X 轴上的偏导数 |