Opengl GLSL中的Photoshop阴影样式
我试图在OpenGL中实现Adobe Photoshop的阴影层样式。我需要添加一个模糊的阴影边缘,这是由“大小”控制的属性。我最初认为通过典型的高斯模糊算法运行它会很好。但仔细观察效果,我很清楚高斯模糊不会产生相同的效果,因为它会均匀地处理光栅的所有碎片。在Photoshop中,模糊区域总是沿着阴影形状的边缘。那些向形状的中心变宽。任何人都可以指出一个算法或GLSL示例,它根据大小参数模糊形状的边缘,就像在Photoshop中一样 更新:这是我使用欧几里得距离场和中概述的技术得出的最终结果 阀论文+最近的“OpenGL洞察”:Opengl GLSL中的Photoshop阴影样式,opengl,glsl,photoshop,Opengl,Glsl,Photoshop,我试图在OpenGL中实现Adobe Photoshop的阴影层样式。我需要添加一个模糊的阴影边缘,这是由“大小”控制的属性。我最初认为通过典型的高斯模糊算法运行它会很好。但仔细观察效果,我很清楚高斯模糊不会产生相同的效果,因为它会均匀地处理光栅的所有碎片。在Photoshop中,模糊区域总是沿着阴影形状的边缘。那些向形状的中心变宽。任何人都可以指出一个算法或GLSL示例,它根据大小参数模糊形状的边缘,就像在Photoshop中一样 更新:这是我使用欧几里得距离场和中概述的技术得出的最终结果 阀
我对这个答案也很感兴趣,因为我正试图在我的开源项目中复制Photoshop图层样式: 这就是我所知道的:
- 投影和内影是二元的。在层上添加放置阴影与在具有反转遮罩的层上添加内部阴影相同
- “技术”设置为“精确”的“外部辉光”使用倒角度量计算欧几里德距离变换(EDT)
- 笔划设置为渐变,“形状突发”使用相同的EDT
- 技术设置为“柔和”的外部辉光使用了一些未知的变换,这些变换与用于放置阴影的变换相同
(来源:) 这是有符号欧几里德距离变换和有符号高斯距离变换:
(来源:)
(来自的图像)我认为如果没有边缘检测,您将无法做到这一点。我使用了4个过程实现了它。第一个过程:渲染平面(仅使用平面几何体)使用黑色填充和基于方向的偏移。第二遍:宽度上的高斯模糊。第三遍:高度上的高斯模糊。第四遍:渲染最终的纹理平面。它看起来很好,但我希望使用更少的遍数。很好!最后,我也使用了距离场方法。仅供参考,我在回答中提到的切角度量是本文中描述的切角5,7,11距离:“近似距离变换的情况”。从我所尝试的一切来看,简单的欧几里德距离场效果很好,如果可能的话,我希望看到一些屏幕截图