美文网首页
图层混合模式 & glBlendFunc & Xfermodes

图层混合模式 & glBlendFunc & Xfermodes

作者: hjm1fb | 来源:发表于2019-12-17 11:37 被阅读0次
  • 图层混合模式介绍

Fireworks 8 混合模式详解
Blending modes in Adobe Photoshop

  • glBlendFunc介绍

Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合
终端图像处理系列 - OpenGL混合模式的使用
LearnOpenGL-混合

glBlendFunc(GLenum src_factor, GLenum dest_factor)
color_result = color_ src ∗src_factor + color_dest∗dest_factor
dest指的是当前储存在颜色缓冲中的颜色向量,即目标色,底色,本色。底部的背景。
src指的是新的,要用于合成的纹理的颜色,即源色,用于合成的资源。上层的前景。

比较常规的配置应该是

// norm模式
glBlendEquation(GL_FUNC_ADD);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

注意:
OpenGL里执行完glBlendFunc后,记得恢复之前的glIsEnabled和glBlendFunc. 这点容易被忘记导致各种渲染异常。

  • 用OpenGL Shader实现图层混合模式

OpenGL(十七)Photoshop blend算法 与 图层混合模式
终端图像处理系列 - 图像混合模式的Shader实现(有介绍3D场景下的混合方案)(对应源码)
Shader 中的颜色混合模式(Blend Mode)
postprocessing
glsl-blend
GIMP对Blend的处理
w3c的混合模式标准

  • 不用shader就能实现的PS的混合模式:

Multiply 正片叠底
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);
(AE在正片叠底时对透明度的处理逻辑不详,所以只适用于不透明的两个图层混合的情况。图层有透明度时,实际效果可能会和AE的有差异)

Darken 变暗
glBlendFunc(GL_ONE, GL_ONE) glBlendEquation(GL_FUNC_MIN)
(Android 不支持GL_FUNC_MIN,iOS可以用GL_MIN_EXT)

Lighten 变亮
glBlendFunc(GL_ONE,GL_ONE) glBlendEquation(GL_FUNC_MAX)
(Android 不支持GL_FUNC_MAX,iOS可以用GL_MAX_EXT)

Difference 差值
glBlendFunc(GL_ONE, GL_ONE) glBlendEquation(GL_FUNC_SUBTRACT)
(只适用src的RGBA值比dest的RGBA值都大的情况,否则还是需要用shader计算两张图的RGBA差值的绝对值)

Screen 屏幕
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)
或glBlendFunc(GL_MINUS_DST_COLOR, GL_ONE)
两者结果一样

Linear Dodge(Add) 线性减淡(增加)
glBlendFunc(GL_ONE, GL_ONE)
(BodyMoving插件只支持Add, 不支持Linear Dodge)

Normal 常规混合
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

  • 考虑透明度的shader代码示例
    // 柔光
    const char *gl_fra_SoftLight = SHADER_SRC(
        precision highp float;

        varying vec2 vTexCoord;
        uniform sampler2D uTexture;
        uniform sampler2D uTexture2;
        

            float blend(const float x, const float y) {
                return (y < 0.5) ?
                       (2.0 * x * y + x * x * (1.0 - 2.0 * y)) :
                       (sqrt(x) * (2.0 * y - 1.0) + 2.0 * x * (1.0 - y));
            }

            void main() {
                vec4 front = texture2D(uTexture2, vTexCoord);
                vec4 back = texture2D(uTexture, vTexCoord);

                vec3 dest = vec3(blend(back.r, front.r), blend(back.g, front.g),
                                 blend(back.b, front.b));
                float alpha = max(front.a, back.a);
                float mixAlpha = front.a*back.a;
                vec3 remainColor = back.rgb * (1.0 - front.a)*back.a + front.rgb * (1.0 - back.a)*front.a;
                gl_FragColor = vec4((dest*mixAlpha + remainColor), alpha);
            }
    );

相关文章

  • 图层混合模式 & glBlendFunc & Xfermodes

    图层混合模式介绍 Fireworks 8 混合模式详解[http://m.ps123.net/design/HTM...

  • OpenGL颜色混合函数所遇到的问题

    因为项目涉及到多个半透明图层的合并,需要使用到glBlendFunc进行颜色混合 http://www.cppbl...

  • PS中27种图层模式入门

    1.正常模式(Normal) 默认模式,显示混合色图层的像素,没有进行任何的图层混合。这意味着基色图层(背景图层)...

  • PS基础篇:图层模式、图层蒙版

    图层模式: 加色模式:光的混合 聚光灯 屏蔽黑色 减色模式:油墨的混合 印刷油墨 屏蔽白色 图层蒙版:

  • photoshop快捷键动图大全(3)纯键盘组合键

    正序切换图层混合模式 【Shift+加号(小键盘)】逆序切换图层混合模式 【Shift+减号(小键盘)】 缩小【C...

  • 图层混合模式 _By Serene

    选图: 高于50%灰: 低于50%灰: 图层混合模式# 正常## 不与其他图层发生任何混合。使用时用当前图层的颜色...

  • 商修人像

    一、 二、中性灰 观察组 a.建立黑色的纯色图层,混合模式改为颜色 b.复制图层,混合模式改为柔光 c.新建曲线 ...

  • PS第三篇——文字火焰特效

    一、重点:图层的混合选项和混合特效 右击文字缩略图,点击混合选项 混和选项中的混合模式在右侧图层窗口上方也有 二、...

  • 混合模式

    混合模式,简单来说就是在图层基础上进行某种公式运算,使多个图层以不同效果混合起来。 每一种混合模式都是一种运算,运...

  • photoshop-图层

    图层混合 混色模式 加色模式:变亮(屏蔽黑色) 减色模式:变暗(屏蔽白色) 叠光模式 叠加模式:将两个图层叠加到一...

网友评论

      本文标题:图层混合模式 & glBlendFunc & Xfermodes

      本文链接:https://www.haomeiwen.com/subject/mhrsnctx.html