0%

unity shader 参数

Queue

“Queue”标签。定义渲染顺序 越小越先被渲染。

Queue 索引 描述
Background 1000 通常用这个队列渲染需要绘制在背景上的物体
Geometry 2000 默认值;大部分物体在这个队列。不透明的物体也在这里
接上 这个队列内部的物体的渲染顺序会有进一步的优化
AlphaTest 2450 需要透明度测试物体使用的队列
Transparent 3000 在Geometry和AlphaTest渲染后,再从后往前渲染。透明度混合物体都该用
Overlay 4000 实现叠加效果[如镜头光晕]。任何需要最后渲染的,用这个。
自定义 x 用户可以定义任意值,比如”Queue”=”Geometry+10”

RenderType

RenderType 使用
Opaque 绝大部分不透明的物体都使用这个
Transparent 绝大部分透明的物体、包括粒子特效都使用这个
TransparentCutout 蒙皮透明着色器
Background 天空盒都使用这个
Overlay GUI、镜头光晕都使用这个

IgnoreProjector

“IgnoreProjector”,值为”true”时,表示不接受Projector组件的投影。

Blend

https://docs.unity3d.com/Manual/SL-Blend.html

注释:SrcColor 为片元颜色,DstColor为目标颜色[已在颜色缓存的颜色]

语义 描述
Blend Off 关混合
Blend SrcFactor DstFactor 设置混合因子 OutputColor = SrcFactor * SrcColor + DstFactor * DstColor
Blend SrcFactor DstFactor, srcFactorA DstFactorA 几乎同上[公式见下],只是增加因子,分离了color.rgb与color.a
Out.rgb = SrcFactor * SrcColor.rgb + DstFactor * DstColor.rgb
Out.a = SrcFactorA * SrcColor.a + DstFactorA * DstColor.a
BlendOp BlendOperation 颜色混合操作不仅有相加,而可以用其他的操作

常用blend叠加因子

1
2
3
4
5
6
7
8
9
10
11
Blend SrcAlpha OneMinusSrcAlpha        //alpha blending
Blend One OneMinusSrcAlpha //premultiplied alpha blending OutputColor = SrcColor + (1-SrcColor.a)* DstColor
Blend One One //additive OutputColor = SrcColor + DstColor
Blend SrcAlpha One // 用于"Particles/Additive" OutputColor = SrcColor.a * SrcColor + 1 * DstColor
Blend DstColor One // 用于"Particles/Blend" OutputColor = DstColor * SrcColor + 1 * DstColor
Blend
Blend OneMinusDstColor One //soft additive
Blend DstColor Zero //multiplicative
Blend DstColor SrcColor //2x multiplicative
Blend Zero SrcAlpha //multiplicative blending for attenuation by the fragment's alpha

BlendOperation 描述
Add Add source and destination together.
Sub Subtract destination from source.
RevSub Subtract source from destination.
Min Use the smaller of source and destination.
Max Use the larger of source and destination.

Offset

1
Offset Factor, Units

Allows you specify a depth offset with two parameters. factor and units. Factor scales the maximum Z slope, with respect to X or Y of the polygon, and units scale the minimum resolvable depth buffer value. This allows you to force one polygon to be drawn on top of another although they are actually in the same position. For example Offset 0, -1 pulls the polygon closer to the camera ignoring the polygon’s slope, whereas Offset -1, -1 will pull the polygon even closer when looking at a grazing angle.

翻译:使用两个参数指定深度偏移.Factor是多边形的深度的斜率(在光栅化阶段计算得出)中的最大值。Units是产生在窗口坐标系的深度值中可分辨的差异的最小值。
e.g. Offset 0, -1 不管多边形斜率将多边形拉到离摄像机更近, Offset -1, -1则在将多边形在切线角拉到更近

……完全看不懂对不对?
解释下效果会怎么样吧,其实Offset -1000, 0 就能让面片在正面在正对摄像机的时候更靠近摄像机,
而 Offset 0, -10000 就能在摄像机侧着看面片的时候让面片更靠近摄像机
所以当这两个值为很大负数之后就能使面片浮于其它物体之上

unity shader Offset Factor, Units详解

Shader Model

shader model的版本。
代码中的

1
#pragma target 3.5

https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html
选的越高,对老设备支持更差,对新设备GPU支持更好。

14年及以后的安卓设备大多已能支持pragma target 3.5(OpenGL ES 3.0 ) 当时小米3未支持不过到2020应该也不会有人用了吧。

pragma target 3.5 与 2.5(default) 主要区别: (from官方)
pragma target 3.5 : OpenGL ES 3.0 capabilities;不支持 WinPhone & OpenGL ES 2.0; 支持 DX11+, OpenGL 3.2+, OpenGL ES 3+, Metal, Vulkan, PS4/XB1

todo:
ZTest
ZWrite
Cull
https://docs.unity3d.com/Manual/SL-CullAndDepth.html