木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java5年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql5年进入店铺

Photoshop Blendmodi in GLSL

转载自:http://renderingpipeline.com/2012/06/photoshop-blendmodi-glsl/

I once wrote a texturing tool in which you could paint on a 3D model on multiple layers. These layers were composing the final texture just as you know it from photoshop, complete with alpha, opacity slider and: blend modes. these blend modes are quite simple to implement and it can be useful to use the exact same modes as they are familiar to artists and it’s possible to prototype the final effects in PS (or even write importers and exporters to psd files). The hardest part actually was collecting all the formulas, so this is why I’m collecting them here once again:

I’m assuming the ‘lower’ color is stored in base and the ‘upper’ color is stored in blend.

  • multiply:
    result = base * blend;
  • screen:
    result = vec4(1.0) - ((vec4(1.0) - blend) * (vec4(1.0) - base));
  • darken:
    result = min( blend, base );
  • lighten:
    result = max( blend, base );
  • difference:
    result = abs( base - blend );
  • negation:
    result = vec4(1.0) - abs( vec4(1.0) - base - blend );
  • exclusion:
    result = base + blend - (2.0*base*blend);
  • overlay:
    # per channel:
    if (base < 0.5) {
        result = 2.0 * base * blend;
    } else {
        result = vec4(1.0) - 2.0 * (vec4(1.0) - blend) * (vec4(1.0) - base);
    }
  • hard light:
    # per channel:
    if (blend < 0.5) {
        result = 2.0 * base * blend;
    } else {
        result = vec4(1.0) - 2.0 * (vec4(1.0) - blend) * (vec4(1.0) - base);
    }
  • soft light:
    # per channel:
    if (blend < 0.5) {
        result = 2.0 * base * blend + base*base - 2.0 * base*base*blend;
    } else {
        result = 2.0 * sqrt(base) * blend - sqrt(base) + 2.0 * base - 2.0 * base*blend;
    }
  • dodge:
    result = base / (vec4(1.0) - blend);
  • burn:
    result = vec4(1.0) - (vec4(1.0) - base) / blend;

BlendingCodeFragment ShaderShaderTutorial



posted @ 2012-07-18 21:41  程序流程图  阅读(295)  评论(0编辑  收藏  举报
木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java5年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql5年进入店铺