GLSL中的Photoshop投影风格

Mic*_* IV 4 opengl photoshop glsl

我试图在OpenGL中实现Adobe Photoshop的Drop Shadow图层样式.我需要在Photoshop的"大小"属性控制的阴影边缘添加模糊度.我首先想到通过典型的高斯模糊算法运行它会很好.但仔细观察效果我很清楚高斯模糊不会产生相同的效果,因为它会均匀地处理光栅的所有碎片.在Photoshop中,模糊区域总是沿着阴影形状的边缘.这样可以朝着形状的中心变宽.任何人都可以指向一个算法或GLSL示例,根据大小参数模糊其边缘的形状,就像在Photoshop中一样?

UPDATE:这是我使用欧氏距离场中概述的技术最终结果 这个阀门纸+最近的书 "的OpenGL的见解": 在此输入图像描述

Vin*_*lco 5

我对这个答案也很感兴趣,因为我试图在我的开源项目中复制Photoshop图层样式:

https://github.com/vinniefalco/LayerEffects

这就是我所知道的:

  • 投影和内阴影是彼此的双重身份.在图层上添加投影与将内阴影添加到具有反转蒙版的图层相同.

  • 技术设置为"精确"的外发光计算具有倒角度量的欧几里德距离变换(EDT).

  • 行程设置为Gradient,"Shape Burst"使用相同的EDT.

  • 技术设置为"更柔和"的外发光使用与用于投影的相同的未知变换.

由于距离变换几乎在每个Photoshop图层样式中都起着关键作用,因此可以合理地假设投影中的未知变换是EDT的变体.我能找到的唯一其他变体称为"高斯距离变换"(GDT).不幸的是,在"医疗,遥感和工业应用的二维和三维图像配准"一书中只有一个描述.PDF可用:

http://read.pudn.com/downloads85/ebook/327739/Wiley%5B1%5D.Interscience.2-D.and.3-D.Image.Registration.for.Medical.Remote.Sensing.and.Industrial.应用.pdf

这是GDT的描述:

如果我们使用单调递增的径向函数对图像进行卷积,则将获得与距离变换图像类似的图像.高斯的逆可以用作单调递增的径向函数.因此,为了获得图像的距离变换,图像用高斯卷积,并且卷积图像的强度被反转.以这种方式计算距离变换使得所获得的距离对噪声不太敏感.这在图4.6中的示例中得到证明.图4.6a和4.6b分别示出了通过高斯卷积计算的图像4.5a和4.5b的距离变换.与欧几里德距离变换相比,通过高斯卷积计算的距离变换对噪声不太敏感.

鉴于此图片:

在http://www.imgfsr.com/sitebuilder/images/fig4.5a-256x256.png之前

这是带符号的欧几里德距离变换和带符号的高斯距离变换:

EDT http://www.imgfsr.com/sitebuilder/images/fig4.5c-256x256.png GDT http://www.imgfsr.com/sitebuilder/images/fig4.5e-256x256.png

(图片来自http://www.imgfsr.com/ifsr_dtg.html)