【HSN_015】模型表面的线缠绕
今天的学习笔记基本上是照葫芦画瓢,参照的是b站教程“如何沿着几何体的表面追踪粒子”(文末点击阅读原文可前往)。由于涉及到我还不熟悉的粒子和动力学部分,也就是所谓的POP和DOP节点,不求完全整明白,目的只是为了稍加了解。
Houdini中的节点最基础的应该是SOP,即Surface OPerations。只有把这部分先搞懂了,才有可能更深入地学习其他模块。比如POP,Particle OPerations(粒子编辑模组)和DOP,Dynamic Operations(动力学编辑模组)。在学习的过程中适当看看高阶教程,一来可以提醒自己学习是条漫漫长路,不可操之过急;二来能帮助加深对软件的认识,望而生畏大可不必,就算学不会日子还得照常过。
下面开始今日的学习。
我还是用的可爱的Bunny模型,你也可以用Houdini提供的test模型(输入Test查找),比如经典的猪头(Pig Head)和橡胶玩具(Rubber Toy)。
接下来直接创建“POP network”节点,双击进入节点内部,可以看到这是一个连接好的粒子预设。包括粒子源(POP Source)和粒子解算器(popsolver)等。在“POPSource”节点属性中,将发射类型“Emission Type”改为点(Points)。
然后在“Birth”属性中将出生速率(Birth Rate)改小一点,如250,点击播放按钮可以看到模型表面不断有粒子生成。
为了让粒子扰动起来,这里添加了一个“popwind”节点,在Noise噪波属性中,增加“Amplitude”(幅度)的值为1,“Swirl Size”(旋转尺寸)设为0.5。然后点击播放,观察粒子的随机扰动情况。幅度和旋转尺寸值是我随便设置的,多尝试不同的值就能基本明白其含义。
退回到“popnet”节点,后面连一个“trail”节点,只要增加“Trail Length”的值,如100,就能看到每个粒子的在不同时刻留下的离散点轨迹。“Trail Increment”相当于采样步数,控制离散点的数量。
换个颜色给个局部特写——
我发现将“Result Type”改成“Connect as Polygons”,就直接得到了线条。但原视频中的做法是使用“add”节点(笔记012中讲过),不知道创作者的用意是什么,可能后面有用吧。
因为“trail”节点中所有的点都有一个“id”属性,所以在“add”节点中,“Add”方式选择按照属性(By Attribute)添加,属性名称(Attribute Name)直接填“id”即可。
接下来的步骤理解起来可能稍微有点费劲,目的是为了让粒子限制在模型的表面运动。我们先跟着做吧,进入“popnet”节点,在“popwind”后面添加一个“sop solver”节点,双击进入节点内部。
解算用到了“ray”节点,该节点有两个输入端口,左边显示需要“Ray Points or Primitives”,右边显示需要“Collision Primitives”,看上去是和碰撞有关。
很显然,左侧就是粒子生成的点,右侧是原来的模型。但现在的节点已经嵌套了,怎么连接到原来的模型呢?这里使用的是“object merge”节点,可以在“object1”栏中输入“../../../transform1”,即可调用相应的节点。
现在只需要将“ray”节点属性中的“Method”改为“Minimum Distance”(最小距离),神奇的事情就发生了。为了看得更清楚,我把粒子点显示成了玫红色。像是很多蚂蚁在身上爬,有点难受。
后面只需把“ray”输出为“OUT”,原视频中整了一大堆,又是“point vop”,又是“primitive attribute”的,似乎……都没什么必要。
最后,用“color”节点添加颜色。“Color Type”选择“Ramp from Attribute”,“Attribute”使用现成的id即可。由于id的数值范围在不断变化,0~1显然就不适合了。怎么办呢?
好在“Geometry Spreadsheet”窗口中我找到了一个叫做“nextid”的detail属性,这个值也是在不断增加的。nextid就是下一个id号的意思,显然是比现有的所有id值都要大,id/nextid范围不就是0~1了么!我真TM是个天才~
那怎么调用这个属性呢?用的是detail函数,“detail("../add1","nextid",0)”。大家可以试试自己对着函数介绍能否写出来。detail函数的括号中有两个字符串(string)和一个浮点数(float)。两个字符串分别是节点名称和属性名称,都要加引号;一个浮点数一般起保险作用,如果没有这个属性,返回值就为0。
播放结果如下——
如果要在Houdini中直接渲染线条,使用“Attribute Create”为其添加width属性(约定俗成的做法),通过“Value”设置线条的粗细。当然,这个“Value”也可以利用现有的点属性来获得由粗到细的渐变效果(提示:用id除以nextid)。
今天的学习到此结束,感谢各位的阅读,下回见~
【往期绘图教程汇总】
思斐迩(Sphere)——沟通科学与艺术的桥梁。
杭州思斐迩科技有限公司长期专注于科学可视化领域,专业提供科研图像设计和科研动画制作等服务。公司拥有一支专业的硕博团队,涵盖生物、化学、材料、美术设计等,具有深厚的科学和艺术底蕴。自2016年以来已为全球上百家高校和科研机构提供设计服务,包括中科院、MIT、Stanford、ETH Zurich、EPFL、清华、北大、Cornell等,蜚声海内外。公司秉持以图像诠释思想,用技术创作艺术的宗旨,作品被Science、Nature、Cell、JACS、Angew等期刊选用,并受邀为其制作动画。为了更好地服务科研工作者,公司还长期开设科研绘图培训课。更有国内最大的科研作图教学公众号“3D科研绘图”和答疑社群,为大家提供详细的教程和答疑咨询。曾为浙江大学、复旦大学、武汉大学、同济大学、上海科技大学、中科院大连化物所等单位提供专业作图讲座和培训,线上线下总受众数超十万人。