opengl - GLSL 中的 Photoshop 投影样式

标签 opengl glsl photoshop

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

更新:这是我使用欧几里得距离场和中概述的技术的最终结果
this阀纸+近期book “OpenGL见解”:
enter image description here

最佳答案

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

https://github.com/vinniefalco/LayerEffects

这是我所知道的:

  • 投影和内阴影是彼此的对偶。在图层上添加阴影与向具有反转蒙版的图层添加内阴影相同。
  • 技术设置为“精确”的外发光使用倒角度量计算欧几里得距离变换 (EDT)。
  • 描边设置为渐变,“Shape Burst”使用相同的 EDT。
  • 技术设置为“柔和”的外发光使用一些与投影相同的未知变换。

  • 由于距离变换在几乎所有 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 的距离变换。与欧几里德距离变换相比,高斯卷积计算的距离变换对噪声不太敏感。

    鉴于此图像:

    Before
    (来源:imgfsr.com)

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

    EDT
    (来源:imgfsr.com)
    GDT

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

    关于opengl - GLSL 中的 Photoshop 投影样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886258/

    相关文章:

    c - 来自 OpenGL 的 X11 BadAlloc 错误

    c++ - wglCreateContextAttribsARB 函数崩溃

    c++ - 有没有办法确定每个 GL_LINE 元素将写入多少像素?

    qt - GLSL 给出奇怪的错误 : "#version required and missing" only on mac

    c++ - glGetTexImage 使用 FBO 返回 0

    javascript - 通过 Javascript 在 Photoshop CS6+ 中格式化文本

    android - 如何在Windows中打开草图文件

    c++ - OpenGL 纹理三角形

    opengl - 循环是在 GPU 上按顺序执行还是并行执行?

    html - 为网站制作横幅 [网页设计/CSS]