怀旧专场:教你制作Windows XP经典3D屏保
2022-02-26薛山
薛山
说到屏幕保护程序,或许很多年轻人都会觉得不明所以,作为CRT时代的标配,当你长时间不使用电脑但又不关机的时候,屏幕保护程序会主动显示一些预设的动态画面,不让屏幕长期显示同一画面而导致荧光物质老化。但在进入LCD时代之后,屏幕保护程序反倒会加大背光工作压力,因此渐渐就淡出了历史舞台。不过,作为一个从Windows 98开始用电脑的“小萌新”,屏幕保护程序就是我电脑萌芽阶段的一个特殊记忆,尤其是那个在三维空间里不断自动生长的水管,让人印象深刻,那么在Blender里,我们是否能复刻这个经典的3D屏保效果呢?
3D水管这个屏保最大的特点就是沿XYZ方向随机增长,这个设计如果是以传统的建模概念来说,最直观的方法就是只能先建好模型,再利用“建形”修改器来还原这个模型的生长过程。但这个方法有一些弊端,其中最明显的就是形态固定,因为你是先完成了建模,再进行还原,所以无法实现真正的随机化,而Windows XP的3D水管屏保每次都是不一样的,因此,最好的复现方法还是利用几何节点,也就是通过数学手段来解决这个问题。
注意,这次的教程需要用到3.1及以上版本的Blender,3.0版会缺少一个重要的节点。而在打开Blender之后大家可以直接利用默认立方体来新建几何节点,因为水管的生长在二维空间来看就是线段的增长,因此我们需要使用“网格直线”来作为基础,然后让它每一个顶点的位置都以1个单位,随机向正负XYZ方向移动。
逻辑上梳理清楚之后,接下来就该想办法操作了。因为是随机方向,所以我们需要一个“随机值”来作为算法的起点,总计有6个移动方向,我们只需要让这个随机值除以6,就能在6个方向中随机选择其一,因为每一个顶点都会计算一次,所以理论上就能让每一个顶点都随机沿正负XYZ方向移动了。
所以,如图1所示,我们需要先引入6个矢量,代表了XYZ轴各自±1单位的移动量,接下来就需要利用“随机值”,通过每六分之一个单位,也就是1/6=0.167来进行“吸附”,这会让每次在0到1之间生成的随机值都是0.167的整数倍,相当于做了一次六选一。
接下來我们只需要按顺序,让每两个矢量进行混合,并使用“相等”来让它们以1/6、2/6、3/6、4/6、5/6作为系数,这个步骤就是让它们按生成的随机数来进行匹配,在六个矢量方向中选择一个,具体设置可参考图2。
在得到这个看起来很复杂的六选一算法后,我们需要在网格直线后添加一个“设置位置”,它的功能就是调整每个顶点的位置,这时候如果我们直接把图2得到的结果输出到“位置”,增加网格直线的数量后会得到一个立体的菱形,而不是一个不断增长的线段,这就是为什么我们要用3.1版Blender的原因,因为从这个版本开始才有“累积场”这个节点,它的作用就是让每一个顶点的矢量增加都建立在前一次计算之上,如果没有这个节点,在每一个顶点的矢量计算之前都会把位置重置回原点,所以图像才会呈现为一个立体菱形,而在如图3所示正确设置“累积场”之后,再增加网格直线的顶点数量,就会得到我们想要的效果了。
FpddZsKpd84dix4sK67FZFOr1vZFat38Rb6/MRoKP1s=
最关键的是我们可以通过修改“随机值”的随机种,获得完全不同的走向图,这就实现了我们最开始的目的:随机变化的水管增长。
刚刚我们实现了水管的走向,但这时候我们并不能真正地看到“水管”,所以还需要继续在几何节点里进行设置,首先需要使用“网格→曲线”和“曲线→网格”,再利用“曲线圆环”作为“轮廓曲线”来呈现水管形状。
但这时候你可能会发现水管的细节有一些瑕疵,这是因为曲线精度不够所致,所以我们需要在“网格→曲线”和“曲线→网格”之间添加一个“细分曲线”来解决这个问题。
如果你也是Windows XP老玩家的话,应该还记得这个“水管”并非纯粹只是管道,在管道转弯位置其实还有一个小圆球,那这个东西如何添加呢?其实也很简单,因为我们之前通过算法,已经得到了一条不断随机弯折的线段,只需要在这条线段的每个顶点上,通过“实例化于点上”来放置一个经纬球或棱角球,问题就得以解决了,再给“管道”和球体各自添加材质,最终效果就实现啦,具体可参考图4。
如果要在Blender 3.1版本之前来做这个经典的屏保效果,可能还真只有先建模这一个方法可行,而几何节点的出现让这个过程变得更加简洁明了,而且还有了更随机化的效果,的确非常有趣。同时需要注意的是,几何节点的功能其实一直都在快速更新中,很多技巧都是新版本更迭后才出现的,这也就需要大家保持专注力,多研究新版本的特性,才能学到更多有用的玩法。