我正在尝试使用Javascript中的技术“chisel soft”重新创建图层样式“斜面和浮雕”。
以下是示例图像和应用过滤器。
original image
chisel soft, depth 100%, size 50px
stackoverflow问题https://dsp.stackexchange.com/questions/530/bitmap-alpha-bevel-algorithm中描述了“平滑”和“凿硬”技术的算法。我相信“凿子软”技术是一种变体,它使用与凿子一样坚硬和光滑的相同构件。
官方photoshop告诉以下有关效果:
“Chisel Soft使用改进的距离测量技术,虽然不如Chisel Hard那样准确,但在更大范围的遮罩上更有用。它保留了比平滑技术更好的功能。”
技术:凿硬
- 计算高度贴图:计算图像的欧氏距离变换。 alpha == 1.0的像素是对象,alpha <1.0的像素是自由空间。
- Comute Surface法线:距离变换被解释为高度图。可以通过从相邻的垂直和水平值计算dx / dy来确定表面法线(例如,使用简单差分算子或sobel滤波器。)这两个数字提供凹凸贴图所需的法线
- BumpMapping:将曲面法线与全局光源组合以计算光照强度。强度是从-1到1的值,其中负值是阴影,正值是高光,绝对值是光源的大小。
醇>
技术:平滑
- 计算高度贴图:不使用计算欧氏距离变换,对于平滑技术,使用适当大小的两遍框模糊(近似高斯模糊)对原始图像进行平滑处理。
- 计算曲面法线:1的结果被解释为高度贴图。像凿子一样计算表面法线。
- BumpMapping:看到凿子。
醇>
技术:Chisel Soft
我只能通过一些实验粗略地说出我发现了什么。
- 计算高度地图:
高度图似乎是两个欧几里德距离变换和原始图像的alpha通道的组合。第一距离变换将具有α> = 0.5的像素视为对象,将其他像素视为自由空间。
第二距离变换将具有α<= 0.5的像素视为对象,将其他像素视为自由空间。
不幸的是,我不知道如何组合这些部分以获得正确的效果。
步骤2和3可能与技术“平滑”和“凿硬”相同。
醇>
非常感谢任何想法!