Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 合成图层样式_Algorithm_Photoshop_Layer_Shadow_Composition - Fatal编程技术网

Algorithm 合成图层样式

Algorithm 合成图层样式,algorithm,photoshop,layer,shadow,composition,Algorithm,Photoshop,Layer,Shadow,Composition,我正在尝试从Adobe Photoshop实现“内部阴影”样式 我有3个RGBA层:源层(棕色)、内部阴影层(白色)和背景层。他们可以有类似Photoshop的混合模式(正常、倍增、颜色燃烧…)-混合不是关联的 我想把它们混合在一起,就像Photoshop中的图层样式一样。当我将阴影alpha乘以源alpha并混合(阴影覆盖(背景上的源))时,我得到了对象周围的黑色轮廓,其中源alpha介于0和1之间 Photoshop参考在左边,我的结果在右边 同样的问题也会出现在“彩色叠加”和许多其他样式

我正在尝试从Adobe Photoshop实现“内部阴影”样式

我有3个RGBA层:源层(棕色)、内部阴影层(白色)和背景层。他们可以有类似Photoshop的混合模式(正常、倍增、颜色燃烧…)-混合不是关联的

我想把它们混合在一起,就像Photoshop中的图层样式一样。当我将阴影alpha乘以源alpha并混合(阴影覆盖(背景上的源))时,我得到了对象周围的黑色轮廓,其中源alpha介于0和1之间

Photoshop参考在左边,我的结果在右边


同样的问题也会出现在“彩色叠加”和许多其他样式上。你知道如何正确地避免轮廓吗?

我在第339页的中找到了这个问题的答案

因此,用(背景)合成(阴影)是错误的。正确的做法是:

  • 背景合成为临时通道C,忽略的alpha值,并在所有地方使用1.0的alpha值

  • 以标准方式将(未修剪的)阴影C合成为C

  • 使用α,将背景计算成背景的加权平均值C 作为权重因子


  • 如您所见,阴影与源和背景混合在一起。加权平均值是我要找的函数。

    如果你有介于原始值和alpha之间的东西,它必须有颜色。如果可能的话,它应该匹配潜在的背景(在alpha后面),但是如果事先不知道,你只能猜测。