我正在尝试在 OpenGL 中实现 Adobe Photoshop 的投影图层样式。我需要为由 Photoshop 中的“大小”属性控制的阴影边缘添加模糊度。我首先认为通过典型的高斯模糊算法运行它会很好。但是仔细观察效果,我很清楚高斯模糊不会产生相同的效果,因为它均匀地处理光栅的所有片段。在 Photoshop 中,模糊区域总是沿着阴影形状的边缘。那些向形状中心变宽。任何人都可以指向到一个算法或 GLSL 示例,它根据大小参数模糊其边缘的形状,就像在 Photoshop 中一样?
更新:这是我使用欧几里得距离场和中概述的技术的最终结果
this阀纸+近期book “OpenGL见解”:
最佳答案
我也对这个答案很感兴趣,因为我试图在我的开源项目中复制 Photoshop 图层样式:
https://github.com/vinniefalco/LayerEffects
这是我所知道的:
由于距离变换在几乎所有 Photoshop 图层样式中都起着关键作用,因此假设投影中的未知变换是 EDT 的变体可能是合理的。我能够找到的唯一其他变化称为“高斯距离变换”(GDT)。不幸的是,在“医学、遥感和工业应用的 2-D 和 3-D 图像配准”一书中只有一个描述。 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.Applications.pdf
以下是 GDT 的描述:
如果我们用单调递增的径向函数对图像进行卷积,将获得一个图像,其功能类似于距离变换图像。高斯的逆可以用作单调递增的径向函数。因此,为了获得图像的距离变换,将图像与高斯卷积并反转卷积图像的强度。以这种方式计算距离变换使得获得的距离对噪声不那么敏感。这在图 4.6 中的示例中进行了演示。图 4.6a 和 4.6b 分别显示了由高斯卷积计算的图像 4.5a 和 4.5b 的距离变换。与欧几里德距离变换相比,高斯卷积计算的距离变换对噪声不太敏感。
鉴于此图像:
(来源:imgfsr.com)
这是带符号的欧几里得距离变换和带符号的高斯距离变换:
(来源:imgfsr.com)
(图片来自 http://www.imgfsr.com/ifsr_dtg.html)
关于opengl - GLSL 中的 Photoshop 投影样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886258/