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

本文详细解析了Direct3D中的各种混合模式,包括Alpha混合、线性减淡、滤色、正片叠底等,并提供了对应PhotoShop混合效果的D3DBlendState设置参数。了解这些模式有助于提升图像合成质量。

一、基本定义:

  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 不仅可以进行更多复杂的混合操作,还可以一次混合多张图。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值