PhotoShop 中一些常见混合方法在 D3D BlendState 中的对应的参数设置

一、基本定义:

  1. 混合是指两个 Surface(图层)之间以一种特殊算法进行融合。(注:为了理解方便,图层也可以简单的理解为图片)
  2. 以下的公式中 Src 和 Dst 分别指两个图层,Src 是指源图层 Dst 是指目标图层(注:源图层可以简单的理解为两张纸摞在一起的图片的上面一层,目标层是下面的一层)
  3. RGB 指的是颜色通道,A 指的是 Alpha 通道。
  4. D3D 中混合使用的设置为
D3D12_BLEND_DESC

其中的

D3D12_RENDER_TARGET_BLEND_DESC

的若干属性,包括

D3D12_BLEND SrcBlend;
D3D12_BLEND DestBlend;
D3D12_BLEND_OP BlendOp;
D3D12_BLEND SrcBlendAlpha;
D3D12_BLEND DestBlendAlpha;
D3D12_BLEND_OP BlendOpAlpha;

 

二、PhotoShop 中一些常见混合方法在 D3D BlendState 中的对应的参数设置 

 

  • AlphaBlend (Alpha 混合)

基本公式为:

Color=Src.RGB*Src.A+Dst.RGB*(1.0f-Src.A)

D3D Blend State 的设置为:

SrcBlend=D3D12_BLEND_SRC_ALPHA;
DestBlend=D3D12_BLEND_INV_SRC_ALPHA;
BlendOp=D3D12_BLEND_OP_ADD;

 

  • Additive (线性减淡/Linear Dodge)

基本公式为:

Color=Src.RGB+Dst.RGB

D3D Blend State 的设置为:

SrcBlend=D3D12_BLEND_ONE;
DestBlend=D3D12_BLEND_ONE;
BlendOp=D3D12_BLEND_OP_ADD;

 

  •  Screen (滤色/Screen)

基本公式为:

Color=1.0f-(1.0f-Src.RGB)*(1.0f-Dst.RGB)

D3D Blend State 的设置为: 

SrcBlend=D3D12_BLEND_INV_DEST_COLOR;
DestBlend=D3D12_BLEND_ONE;
BlendOp=D3D12_BLEND_OP_ADD;

 

  • Multiply (正片叠底/Multiply)

基本公式为:

Color=Src.RGB*Dst.RGB

 D3D Blend State 的设置为: 

SrcBlend=D3D12_BLEND_DEST_COLOR;
DestBlend=D3D12_BLEND_ZERO;
BlendOp=D3D12_BLEND_OP_ADD;

 

  • Multipy2X

基本公式为:

Color=Src.RGB*Dst.RGB*2.0f

 D3D Blend State 的设置为: 

SrcBlend=D3D12_BLEND_DEST_COLOR;
DestBlend=D3D12_BLEND_SRC_COLOR;
BlendOp=D3D12_BLEND_OP_ADD;

 

  • ColorDodge (颜色减淡/Color Dodge)

基本公式为:

Color=Src.RGB+Src.RGB*Dst.RGB/(1.0f-Dst.RGB)

 D3D Blend State 的设置为: 

SrcBlend=D3D12_BLEND_INV_DEST_COLOR;
DestBlend=D3D12_BLEND_ZERO;
BlendOp=D3D12_BLEND_OP_ADD;

 

三、总结

  1. 上述的混合我只给出了 Color 的混合方法,没有给出 Alpha 的混合方法,因为 Alpha 最终输出的东西是因项目而不同的,需要根据个人需求设定,没有统一的标准,但是 Color 的混合是有统一标准的。
  2. PhotoShop 中的混合方法除了上述之外还有非常多种类,但是那些混合方法已经不能光靠设置 Blend State 来实现了,需要用 Pixel Shader 来进行混合。使用 Pixel Shader 不仅可以进行更多复杂的混合操作,还可以一次混合多张图。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值