混合与剔除

混合

把两种颜色混在一起。具体就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式或者算法混在一起,从而实现新的效果。

最终颜色= Shader计算后的颜色值*源因子(SrcFactor) +累积颜色*目标因子(DstFactor)

累计颜色可以理解为渲染当前物体后面的颜色即GBuffer中的像素,比如你的背景,还有身后的物体。混合模式控制的就是源因子和目标因子,在脚本里会看到的就是Blend SrcFactor DstFactor

混合模式

ShaderLab内的混合命令

 

ShaderLab 命令:Blend - Unity 手册 (unity3d.com)icon-default.png?t=M4ADhttps://docs.unity3d.com/cn/current/Manual/SL-Blend.html
ShaderLab 命令:BlendOp - Unity 手册 (unity3d.com)icon-default.png?t=M4ADhttps://docs.unity3d.com/cn/current/Manual/SL-BlendOp.html

1. Blend命令:启用混合会禁用GPU上的一些优化(主要是隐藏表面去除Early-Z)这会导致GPU帧时间增加。
2.混合操作默认为Add。
3.如果使用BlendOp命令,则混合操作将设置为该值。
4.混合方程
finalValue = sourceFactor * sourceValue operation destinationFactor * destinationValue
finalValue :是GPU写入目标缓冲区的值,即最终混合结果。
sourceFactor :在混合命令中定义,即源因子。
sourceValue :是片段着色器输出的值,即当前Shader内的输出值。
operation :是混合操作,根据是否使用blend op决定。
destinationFactor :在混合命令中定义,即目标因子。
destinationValue :是目标缓冲区中已有的值,即目前的背景颜色或后面模型的颜色。
5.单独的RGB和alpha混合与高级OpenGL混合操作不兼容。

Unity内对于Blend自带的枚举:Enum类

[Enum (UnityEngine. Rendering. BlendOp)]_ BlendOp ( BlendOp,Float) = 0
[Enum (UnityEngine. Rendering. BlendMode)]_ SrcBlend ( SrcBlend,Float) = 1
[Enum (UnityEngine. Rendering. BlendlMode)]_ DstBlend ( DstBlend, Float) = 0

  • Normal 图片正常叠加
//正常
float3 Normal(float3 Src, float3 Dst)
{
    Src = 0.;
    return Dft.rgb + Src . rgb;
}

  •  alpha混合【Blend SrcAlpha OneMinusSrcAlpha】
float3 ALphabLend(float4 Src, float4 Dst)
{
    float4 C = Src.a * Src + (1.0 - Src.a) * Dst;    //当前颜色*当前透明度+(1-当前透明度)*缓存颜色
    return C.rgb;
}

  •  变暗【BlendOp Min   Blend One One】
float3 Darken(float3 Src, float3 Dst )
{
    return min(Src, Dst);    //min(当前颜色,缓存颜色)* 1
}

  • Multiply正片叠底【Blend DSTColor Zero】
float3 Multiply(float3 Src, float3 Dst)
{
    return Src * Dst;    //当前颜色*缓存颜色 + 缓存颜色*0
}    

  • Screen滤色【Blend OneMinusDstColor One或Blend One OneMinusSrcColor】
float3 Screen(float3 Src, float3 Dst )
{
    return Src + Dst - Src寒Dst;    //当前颜色*(1-缓存颜色)+缓存颜色*1 或者 当前颜色*1+缓存颜色*(1-缓存颜色)
}

  •  Lighten变亮【BlendOp Max   Blend One One】
float3 L ighten(float3 Src, float3 Dst)
{
    return max(Src, Dst);    //max(当前颜色,缓存颜色)
}

  •  LinerDodge线性减淡【B;end One One】
float3 LinearDodge(float3 Src, float3 Dst)
{
    return Src + Dst;    //缓存颜色*1+当前颜色*1
}

 LinerBurn线性加深

float3 L inearBurn(float3 Src, float3 Dst )
{
    return Src + Dst - 1.0;
}

剔除

  • 法线剔除:也称为背面消隐,根据法线朝向判断哪个面被剔除掉。可以用来控制是否双面渲染。

Cull Off(Front        Back)

  • 面裁切: cI ip函数会将参数小于某像素点直接在片元阶段丢弃掉,常用于制作溶解,裁剪等效果。

Clip 默认剔除0.5部分

剔除模式
[Enum (Uni tyEngine. Rendering. CullMode)]_ CullMode ( CullMode,float) = 2

1.开启双面渲染相当于绘制了两次。
2. CI ip函数在某些PowerVR的机型上效率很低。
3.面裁切CI ip使用AIphaTest队列

教程地址:【技术美术百人计划】图形 3.2 混合模式及剔除_哔哩哔哩_bilibili 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于混合高斯模型的背景差分法(Gaussian Mixture Models-based Background Subtraction, GMMBS)是一种常用的目标跟踪算法,通过将目标从背景中分离出来,实现目标的跟踪。 该算法的基本思想是利用混合高斯模型对背景进行建模,将每个像素点的颜色值表示为多个高斯分布所组成的混合模型。对于每个像素点,如果其颜色值与背景模型的分布有显著偏差,就将其标记为前景(目标),否则标记为背景。 具体步骤如下: 1. 初始化背景模型:使用一定数量的图像帧作为初始背景模型,通过统计每个像素点的颜色值分布来建立混合高斯模型。 2. 背景更新:随着时间的推移,新的图像帧被用于更新背景模型。每次更新都会计算像素点颜色值的概率,并更新混合高斯分布的参数。 3. 背景差分:将当前图像帧的每个像素点的颜色值与模型进行比较,通过计算像素点颜色值与背景模型的概率之间的差异,来判断其是否为前景。 4. 前景提取:根据背景差分的结果,将差异较大的像素点标记为前景。 5. 目标跟踪:对于标记为前景的像素点,可以根据相邻区域的连通性进行目标的提取和跟踪。 Matlab提供了丰富的图像处理和数学函数,可以方便地实现基于混合高斯模型的背景差分法。通过读取视频,逐帧对图像进行处理,可获得目标的运动轨迹和实时跟踪结果。此外,Matlab还可用于可视化和评估目标跟踪的性能。 基于混合高斯模型的背景差分法在实际应用中具有较好的效果,可以应用于视频监控、行人检测和交通识别等领域。该算法能够适应背景的变化和光照变化,但对于复杂的场景和大规模目标跟踪仍有一定挑战。因此,在实际应用中,我们需要根据具体情况选择合适的参数设置和优化算法,以提高目标跟踪的精度和效率。 ### 回答2: 基于混合高斯模型的背景差分法是一种常用的目标跟踪算法。在目标跟踪中,背景差分法用于检测目标物体与背景的差异,并将其作为目标位置的估计。 MATLAB是一种强大的科学计算和数据可视化工具,可用于实现基于混合高斯模型的背景差分法目标跟踪算法。下面将介绍整个算法的步骤。 首先,需要初始化背景模型。这可以通过获取视频的一帧作为初始背景图像,并将其转换为灰度图像实现。然后,需要对该背景图像进行高斯建模,以得到背景模型。 其次,对于输入视频的每一帧,都需要计算当前帧与背景之间的差异。这可以通过将当前帧与背景模型进行像素级的差值计算得到。差值图像将突出显示目标物体的位置。 然后,需要对差值图像进行阈值分割,以将目标物体与背景进一步分开。这可以通过将差值图像中小于阈值的值置为0,大于阈值的值置为255来实现。阈值的选择将直接影响目标检测的准确性。 最后,可以对阈值分割后的图像进行目标跟踪和轮廓识别。这可以通过检测轮廓并找到最大的连通区域来实现。该区域被认为是目标物体的轮廓,其位置可以用于目标跟踪。 在MATLAB中,可以使用图像处理工具箱中的各种函数和工具来实现这些步骤。例如,可以使用“imread”函数读取视频帧,使用“rgb2gray”函数将帧转换为灰度图像,使用“imabsdiff”函数计算差值图像,使用“im2bw”函数进行阈值分割,使用“bwlabel”函数进行轮廓识别等。 综上所述,基于混合高斯模型的背景差分法目标跟踪是一种有效的算法,在MATLAB中可以实现并得到良好的效果。 ### 回答3: 基于混合高斯模型的背景差分法是一种常用的目标跟踪方法,它利用高斯混合模型对背景和前景进行建模,通过对图像序列进行背景建模和背景差分处理,以实现目标的提取和跟踪。 在Matlab中,可以使用Image Processing Toolbox来实现基于混合高斯模型的背景差分法目标跟踪。 首先,需要读取图像序列,并进行预处理。可以使用imread函数读取图像序列,使用im2double函数将图像转换为双精度图像,以便后续处理。然后,可以使用imresize函数调整图像尺寸,以提高算法的效率。 接下来,对图像序列进行背景建模。可以使用vision.ForegroundDetector函数创建一个混合高斯模型,并使用step函数对每一帧图像进行背景差分处理,得到前景图像。 然后,可以对前景图像进行后处理,以剔除部分不需要的噪声和干扰。可以使用imopen函数对前景图像进行开操作,以去除小的前景区域。可以使用bwareaopen函数去除小于一定面积的前景区域,以排除局部噪声。 最后,可以使用连通区域标记函数bwlabel或者regionprops函数,对前景图像中的目标进行检测和跟踪。可以根据需要,对目标的位置、大小、形状等属性进行分析和记录。 总之,基于混合高斯模型的背景差分法目标跟踪是一种常用的目标跟踪方法,可以通过使用Matlab中的图像处理工具箱,结合合适的函数和算法,实现目标的提取和跟踪。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值