首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3.6版本更新,Blender几何节点模拟功能解析

就在这个月初,Blender更新了3.6 LTS正式版,根据以往的经验来看,这意味着3.x版本已经发展到了成熟阶段,很多此前只在试验版本中推出的功能都优化完毕,加入到了正式版本中,其中最值得关注的就是几何节点更新了模拟功能,简单来说就是可以在几何节点里通过位置设置来实现运动效果,这意味着它不仅可以在很多时候替代传统的物理模拟,甚至还可以实现诸多此前很难实现的效果,并且对硬件资源的需求大大降低,所以本期我们就利用这个新功能,来做一个类似《复仇者联盟》里灭霸打响指之后的物体消散效果,看看到底难不难吧!

01

构建点云,为模拟系统做准备

我们本期想做的就是将某个物体切割成数个小方块,类似乐高积木的样子,然后让它们按从上到下的顺序,逐步向上方杂乱飘散,这个设计的第一步就是导入咱们想要切割的物体,这个物体可以直接导入现成的模型,也可以在几何节点里自己生成,比如我们想要让文字以这种方式消散,可以直接在Blender几何节点里通过“字符串转曲线”来输入字符,注意如果要输入中文字符,就需要先把默认的英文字体改成中文字体,可以下载自己喜欢的字体放到字体文件夹里调用,如果是特殊设计的艺术字,就需要通过导入SVG等曲线文件来实现操作了。

文字生成后我们通过“实现实例”、“填充曲线”和“挤出网格”,就能得到一个基本的立体文字了。如果你导入的是已有的模型,就可以跳过这一步,直接进入下一个环节了,现成模型最大的优点就是有已经正确映射的UV,这对于后续材质着色器的设置会有一定的帮助,当然损失的就是后续的可调整空间,如何取舍就全凭大家自己的设计需求了。

设置完模型之后,我们就需要将它转换为点云了,之所以这么做,是因为如果想把它从内到外都填充成一个个的方块,就必须让它的内部也分布有点,如果直接在表面上分布点显然是无法实现这个目的的,因此我们要先把模型从“网格到体积”,设置为“尺寸”,这时候物体就会变成一团雾,然后“分布点于体积内”并选择为“栅格”,并将“间隔”和“网格到体积”的“体素大小”用同一个值来进行控制,注意我们需要控制“外部带宽”来调整点云的厚度,很多文字内部都有空白区域,如果“外部带宽”太高就会导致这些空白区域被点云占用,反倒影响效果。

02

设置模拟流程

完成第一步的点云设置后,我们就可以来设置模拟流程了,在几何节点编辑器里选择“模拟”里的“Simulation Zone”,也就是模拟区域,它就会给出一个自带输入和输出的框架,我们要做的就是在输入输出之间进行“设置位置”,模拟就会按照我们的位置设置,根据时间的推进来进行连续计算,从而得到物体动画模拟效果。   

这时候如果你给“设置位置”的偏移量设置一个数值,比如Y轴设置0.01,回到视频第一帧再播放,你就会发现物体沿着Y轴正方向以每帧0.01的速度开始运动了,所以如果想要做点云向上飘散效果,我们只需要在“设置位置”的偏移量上做文章就好了。

既然是杂乱地向上纷飞,所以我们需要使用噪波纹理作为基础,然后使用“矢量计算”的“相减”来对中心点进行位移,注意这时候我们只在X和Y轴位移,让它们的中心点回到中间,Z轴不进行位移,因为Z轴一旦位移,点云的移动就会完全围绕物体中心点来上下进行,我们只想要向上运动,所以不进行位移补偿。

接下来我们就需要使用“正片叠底”来对X和Y方向进行2倍的扩散,这样会让它向上飘散时呈喇叭状而不是直上直下,最后我们再接一个缩放(Scale),这个值控制的是点云的运动速度,还可以通过一个“随机值”来让点云之间的运动速度有些微差别,让视觉效果更显无规律化。       

然后我们要做的是让点云以Z轴为基础,靠上方的点云先动,靠下方的点云后动,以此实现逐步剥离飘散的效果。这个设计也是通过此前的“设置位置”来实现的,这次我们要操作的是它的“选中项”,首先将“位置”将“分离XYZ”,我们要用到的是Z数值,因为是从上至下逐步开始飘散,所以需要先选中上方点云,再慢慢选中下方点云,因此我们要用一个数值,减去“场景时间”的“秒”,并让Z大于这个结果,就能得到我们想要的设计目标,可以在“秒”和“相减”之间加一个“相除”来控制速度。如果想要选择区域不是那么直上直下,可以在“位置”后面接一个“线性光”,和噪波纹理相结合,这时候再回到第一帧重新播放视频,就能看到一个相当符合要求的向上飘散效果啦! 

03

实例化立方体并添加着色器

在前面一步我们完成了基于点云的模拟系统构建,但因为是点云,所以在渲染模式下我们看不到任何东西,所以最后一步当然就是要把这些点全都转化成实例,也就是立方体,因此我们需要使用“实例化于点上”,注意立方体的尺寸其实和我们之前“网格到体积”和“分布点于体积内”所使用的值成比例,可以引用相同的值,然后单独减去一个0.003之类的数值级能得到一个看得清边缘缝隙的立方体矩阵了。

这时候即便是在渲染模式下播放视频,也能看到由立方体堆砌的文字或物体随着时间推移,从上到下破碎飘散了,但还有一个小问题,就是这些小立方体并没有旋转效果,而是直挺挺地往上飞,所以我们还需要加一个“旋转实例”,然后为“旋转”添加一个“随机值”,并和“场景时间”的“秒”相加,同时还要把第二步里从上至下进行权重筛选得到的值连接到“选中项”上。如此以来,所有动起来的立方体都会被赋予一个随机的初始旋转值并且持续旋转,而还没动起来的立方体则会保持原样。

最后一步就是添加着色器效果了,正如我们之前所说,因为几何节点生成的网格没有准确的UV,所以我们无法通过“采样最近”和“采样编号”来保存UV并输出,因此只能在最后接“应用实例”后通过“设置材质”来为物体添加材质,这时候因为UV没有正确展开,所以无法正确使用图像材质,纹理材质也需要将“纹理坐标”切换到“物体”后才能使用。而如果是已经有UV的物体作为底材来进行设计,就不会有这个问题了。

04

看似复杂但逻辑很简单

从效果来看,几何节点的模拟功能解决了很多以前很难解决的问题,虽然整体来看节点复杂程度不低,但还是那句老生常谈,只要理清了逻辑就不难搞懂它能够运行的原因,将物体转换为点云再通过噪波纹理控制运动方向,并结合位置信息进行具体运动点的控制,就能实现咱们的设计目的,而且是其他功能基本无法实现的目的,确实值得大家仔细研究。

编辑|张毅

审核|吴新

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OobY3KSWZBlCqQROHEsJ2BbQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券