【图形系统07】混合和剔除
混合指令
混合指令以 Blend
关键词开始,后面接混合模式。它可以在 Subshader 中使用,也可以在 Pass 中使用。
在 SubShader 中使用会影响到 SubShader 中的所有 pass
在 Pass 中使用只会对当前 Pass 起作用。
混合命令开启后,会禁用 GPU 上的一些优化(主要是隐藏表面/去除 Early-Z),这会使GPU 帧时间增加。
默认操作符是 Add。
单独的 RGB 和 Alpha 混合与高级 OpenGL 混合操作不兼容。
[!NOTE] 参数解释
Src
: 该片元产生的颜色 Source(源颜色)Dst
: 已经存在于颜色缓存的颜色被称为 Destination(目标颜色)SrcFactor
:源颜色的混合因子Dst Factor
:目标颜色的混合因子
可用的混合模式如下:
Blend Off
:关闭混合处理,当 Shader 中没有添加任何混合指令的时候,默认就是关闭状态。BlendSrcFactor DstFactor
:开启混合处理,允许自定义混合模式。源颜色和目标颜色按照如下公式进行颜色混合:$Color_{rgba}=Source_{rgba}·SrcFactor+Destination_{rgba}·DstFactor$Blend SrcFactor DstFactor,SrcFactorA DstFactorA
:跟上述指令类似,但是对于源颜色和目标颜色的 alpha 通道分别使用 SrcFactorA 和 DstFactorA 进行混合:
$Color_{rgb}=Source_{rgb}·SrcFactor+Destination_{rgb}·DstFactor$
$Color_a=Source_a·SrcFactorA+Destination_a·DstFactorA$
例如:我们想要在混合后,输出颜色的透明度值就是源颜色的透明度,可以使用以下命令:Blend SrcAlpha OneMinusSrcAlpha, One Zero
混合因子
[!quote] Title
Direct3D 现在支持通过逻辑运算符对目标颜色进行混合,体替代了上届描述的传统混合方程。不能同时使用传统混合方程和逻辑运算符这两种混合手段。当混合操作中使用了逻辑操作的时候,混合因子则不会被计算。
Unity 还提供了一些常用的混合指令:
混合操作
默认混合操作为 Add,我们可以使用混合操作命令进行其他混合操作:
BlendOp Op
:使用其他混合操作进行颜色混合,而不再只是进行颜色相加。BlendOpOpColor,OpAlpha
:跟上述指令类似,但是对于颜色和 alpha 通道分别使用 OpColor 和 OpAlpha 不同的操作。
混合操作命令通常是与混合因子命令一起工作的。但需要注意的是,当使用 Min 或 Max 混合操作时,混合因子实际上是不起任何作用的,它们仅会判断原始的源颜色和目标颜色之间的比较结果。
常见的混合类型
1 | //正常( Normal ),即透明度混合 |
混合面板编辑
**
1 | Properties |
Unity 线性空间 UI 的问题
(35条消息) Unity线性空间UI的问题_unity 线性空间_zhjzhjxzhl的博客-CSDN博客
https://www.jianshu.com/p/b93ef4b3453e
2023 Unity 技术开放日北京站-游戏专场:从手游到 VR ——《Pico 视频》渲染管线优化经验分享_哔哩哔哩_bilibili
剔除 Culling
clip
clip 函数会将参数小于 0 直接在片元着色器直接丢弃,常用于制作溶解,裁剪等效果**。
void clip (float4 x); void clip (float3 x); void clip (float2 x); void clip (float1 x); void clip (float x);
给定参数任何一个分量是负数,就舍弃当前像素的输出颜色
clip 函数等同于一下代码:
1
2
3
4
5void clip (float4)
{
if ((any<0))
discard;
}
Cull
默认情况下,引擎提出了物体背面(相对于摄像机方向)的渲染图元,而之渲染物体正面。可以使用 Cull
指令来控制需要剔除哪个面的渲染图元。Cull Off/ Front / Back
- 如果设置为 Back,那么那些背对着摄像机的渲染图元就不会被渲染,这也是默认情况下的剔除状态;
- 如果设置为 Front,那么那些朝向摄像机的渲染图元就不会被渲染;
- 如果设置为 Off,就会关闭剔除功能, 那么所有的渲染图元都会被渲染, 但由于这时需要渲染的图元数目会成倍增加, 因此除非是用于特殊效果,例如这里的双面渲染的透明效果,通常情况是不会关闭剔除功能的。