DIY 多面体镜面万花筒

前几天在网上看到了一位艺术家 Anthony James 的展览作品,使用多面体和镜子生成万花筒的效果,觉得很有意思:

这个作品的大致原理是:

  1. 多面体的外壳是半透明的玻璃,有一定的透光率。
  2. 多面体的每条边的内侧安装了 LED 光源。
  3. 光源发出的光线在多面体内部反复反射,每次反射时由于玻璃是半透明的,一部分光线会被反射回内部,另一部分光线穿过外壳被外部观察到。镜子的透光率越低,光线在穿过外壳之前被反射的次数就越多,看到的图案就显得越“深邃”。

YouTube 上有个博主手把手地展示了怎样从头 DIY 一个这样的模型:视频地址。我表示这顿操作虽然看着不算难,但对我这种懒人来说还是有点过于折腾了。

不过没关系,咱可以编程实现呀。我写了一个 shadertoy 演示:

这个动画支持除了 snub 和 antiprism 之外各种类型的均匀凸多面体及其对偶。下面的动画演示的是菱形十二面体 (rhombic dodecahedron),它有个独特之处是自身在镜子反射下成的像可以密铺整个空间 (space filling)。

石榴籽的形状就近似于菱形十二面体,这使得它们可以紧紧的挨在一起构成密铺的结构:

这种可以密铺整个空间的多面体非常少,正方体当然是其中之一,但是其它的正多面体 (正四面体、正八面体、正十二面体、正二十面体) 都不行。

值得注意的是,身处多面体内部和外部的观察者,看到的景象可能是不同的。

例如上面的菱形十二面体从内部看起来,有些胞腔从中间被劈开了:

甚至即便只从外部观察,从不同类型的镜面看到的景象也是不同的。例如截顶的正方体,从八边形的镜面看进去,内部是密铺了整个空间的:

但是如果从三角形的面往里看,会发现镜子中的四面体由近到远方向是交错改变的:

请你思考一下,这些背后的原因是什么?

 | 

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器