如何制作这个奇怪的浮雕苹果标志?
如果我们从水平线开始讨论会更容易一些,如下所示:
正如 Ilmari Karonen 所说,这只是一张置换贴图。您从 3D 地形h ( x , y ) 开始,然后结果中的每个点 ( x , y ) 应使用从y 0 = y − h ( x , y ) 开始的线。
使用光栅图形,这可以立即渲染,但要获得干净的矢量线,我们实际上需要以相反的方式工作:每条线都应参数化为
f y 0 ( x ) = y 0 + h ( x , f y 0 ( x ))
问题是这只是一个隐含的定义方程,因为 RHS 包含y = f y 0 ( x )。这可以用 Newton-Raphson 解决,但有一个更简单的方法:只需构建从左到右的线,并在每个点根据需要向上或向下以完成方程。假设连续性,这总是只是一个小的更新,所以我们可以在那里将h近似为常数。
Haskell 中的实现:
type ℝ = Double
horizContourLine ::
((ℝ,ℝ) -> ℝ) -- ^ The topography/height function
-> (ℝ,ℝ) -- ^ x-interval on which to render the path
-> ℝ -- ^ Step size / resolution along the path
-> ℝ -- ^ Base-level y-coordinate of the line
-> [(ℝ,ℝ)] -- ^ Trail line
horizContourLine h (x₀,xe) δx y₀ = go (x₀,y₀)
where go (x,y) = (x,yTgt)
: if x<xe then go (x+δx, yTgt)
else []
where yTgt = y₀ + h (x,y)
然后,使用合适的图像输入,例如
我们得到像
完整代码:https ://gist.github.com/leftaroundabout/8b7075d25adecdf16806ea5d7a7ea2aa
旋转到对角线作为练习。
这基本上只是应用于一堆线的置换贴图。
棘手的部分是对位图纹理应用置换贴图会拉伸和压缩整个纹理,包括线条和它们之间的间隙。要在示例图像中获得阴影效果,您只需要拉伸间隙,而不是线条本身。我可以看到两种(或三种)方法:
使用矢量图像编辑器,该编辑器可以配置为仅替换线条的路径,同时保持线条的宽度不变。我不确定是否有任何常见的现成矢量绘图软件(Illustrator、Inkscape 等)支持这一点,但如果支持,那可能会产生最清晰的结果。
在位图编辑器(Photoshop、GIMP 等)中,从由等宽的交替黑白条纹组成的纹理开始,应用置换贴图,然后使用边缘检测过滤器将条纹边界转换为线条(或可能会在矢量绘图程序中自动跟踪移位的条纹边界)。这里的风险是,除非您以非常高的分辨率工作(然后缩小最终结果),否则质量可能会因混叠而受到影响。
编写您自己的软件来执行上述操作之一。显然,这需要一些并非每个人都具备的编程技能,但就图形编程任务而言,这实际上应该不是特别难的。
我实际上使用GIMP中的置换过滤器测试了选项 2。不幸的是,我现在真的没有时间编写一步一步的演练(也许稍后......),但作为一个预告片,这是我快速实验的最终结果:
Ilmari Karonen 提到的“位移”和 Abdul Qayum 提到的“救济效应”几乎是一回事。
以下是图像浮雕算法及其在安全打印中的应用的一些图片。我们使用图像使单元格(或网格)不规则(或有位移),然后在其上绘制平行线。
您可以手动实现此算法,也可以使用软件,例如 GIMP 置换贴图或 JURA(由 Abdul Qayum 使用)。