Unity Shader 参数学习记录

来源:互联网 发布:python list get函数 编辑:程序博客网 时间:2024/06/03 08:48

1.面的剔除  Cull

在渲染的时候,默认情况下只有朝向摄像机的面才会被渲染,可以通过Cull来告诉Unity我想渲染哪一个朝向的面,使用Cull命令在计算体积阴影的时候可以来计算和物体相交的投影。

Cull Off 不剔除

Cull Back  剔除背面(背向摄像机的面)

Cull Front 剔除前面(朝向摄像机的面)



2.深度缓存和深度测试

ZWrite On/Off  代表是否将像素的深度写入深度缓存中(同时需要看ZTest是否通过)

ZTest LEqual/Greater/GEqual/Less/Equal/NotEqual/Always/Never/Off 代表通过比较深度来更改颜色缓存的值。默认情况下,如果将要绘制的新像素的Z值小于深度缓存中的值的时候,则将用新像素的颜色值更新深度缓存中对应像素的颜色值。(需要注意ZTest Off代表关闭深度测试,等价于ZTest Always (直接将当前像素颜色写进颜色缓冲区)而不是ZTest Never(不要将当前像素颜色写进颜色缓存中,相当于消失)

/*********************************************************************

1)ZWrite On,ZTest 通过时,该像素的深度才能成功写入深度缓存,同时因为ZTest通过,该像素的颜色值才会写入颜色缓存

2)ZWrite On,ZTest 不通过时,该像素的深度不能成功被写入深度缓存,同时因为ZTest 不通过,该像素的颜色值也不会写入颜色缓存。

3)ZWrite Off , ZTest 通过时,该像素的深度不能成功被写入深度缓存,但因为ZTest通过,该像素的颜色值会被写入颜色缓存。

4)ZWrite Off , ZTest 不通过时,该像素的深度不能成功被写入深度缓存,同时因为ZTest 不通过,该像素的颜色也不会写入颜色缓存。

所以像素的深度能否成功写入深度缓存,条件为 ZWrite On,ZTest 通过。ZWrite 默认为On,ZTest 默认值为LEqual,也就解释了为什么Unity中,距离相机近的东西会阻挡距离相机远的东西。当我们先绘制距离近的东西,再绘制距离远的东西时,由于远的东西后绘制会挡住近的东西,所以我们通过ZWrite和ZTest来改变物体的遮挡关系。

*********************************************************************/



3.float4 _MainTex_ST 和 TRANSFORM_TEX

1)TRFANSFORM_TEX 主要作用是获取顶点的UV和材质球的Tiling和Offset作运算的,确保材质球里的缩放和偏移设置是正确的(v.texcoord代表顶点的uv)

2)_MainTex_ST 的ST是指SamplerTexture,意思是声明_MainTex的一张采样图,就是会进行UV计算,没有这个变量是无法进行TRFANSFORM_TEX的运算。_MainTex_ST.xy 即代表Tiling , 而zw 代表Offset 。



4.Blend混合语句 Blend {code for SrcFactor} {Code for DstFactor} 

混合指的是处理后的片段颜色与已经存在于缓冲区的颜色进行混合。

Code                    Resulting  Factor(SrcFactor or DstFactor)

One      float4(1.0)

Zero     float4(0.0)

SrcColor              fragment_output

SrcAlpha              float4(fragment_output.a)

DstColor               pixel_color

DstAlpha               float4(pixel_color.a)

OneMinusSrcColor  float4(1.0) - fragment_output

OneMinusSrcAlpha  float4(1.0 - fragment_output.a)

OneMinusDstColor   float4 (1.0 - pixel_color)

OneMinusDstAlpha  float4(1.0 - pixel_color.a)

当使用Blend时,最终颜色计算为 result = fragment_color * SrcFactor + pixel_color * DstFactor .

fragment_color 即是经过处理的片段颜色,就是fragment返回的结果

pixel_color 即是原本存在于缓冲区的颜色



5. UNITY_TRANSFER_FOG 宏 和UNITY_APPLY_FOG宏

UNITY_TRANSFER_FOG作用是从顶点着色输出雾数据. 在Shader Mode 3.0中是 计算每个像素的雾距离,和每个像素的雾效因子.

UNITY_APPLY_FOG作用从顶点着色器中输出雾数据,将第二个参数中的颜色作为雾效的颜色值,且在正向附加渲染通道(forward-additive pass)中,自动设置纯黑色(fixed4(0,0,0,0))的雾效.


原创粉丝点击