Houdini | 程序化建模之路(三)Math Method
Houdini技术Thepoly 15935 0
实名

通过了实名认证的内容创造者

发布于 2022-3-23 20:42:44

您需要 登录 才可以下载或查看,没有账号?注册

x
             QQ截图20220323200234.png
5fd96ebb287692385d08d3a57e63a5fa.jpg

Hello . 大家好
本文为Houdini程序化建模的分享
我是王掌柜


一 承接上文

1.上一节中,最后我用bend节点对桥的整体进行弯曲

这里Capture以及Up Vector控制的是扭曲朝向相关系数。图中红色渐变是开启了Visualize Falloff的功能 用于可视形变程度及走向


2.添加Transform节点,点击Move centroid Origin则可以以世界原点为物体几何中心


3.复制几个造造声势


4.这个时候Houdini程序化建模的强大之处就体现出来了。因为流程节点化、所有参数暴露并且重要参数可相关,于是修改、迭代、复用模型就变得相当便捷,极大提高了制作效率

二 关于houdini中的一些数学知识

1.Vex | Point | Normal | AttributeWrangle

a.首先用add创建一个点


b.添加Attitude Wrangle节点

该节点是houdini中用来进行编程的节点,这里我用的是Houdini的Vex。

我们把光标放在上方属性栏VEXpression之中,快捷键Alt+E呼出编程面板

键入下面一行简单的程序

这一行代码的意思是将点的xyz坐标值赋予法线向量xyz的三个分量,我们在Spreadsheet面板中已经看到:ID为0的点,已经有了三个N分量,N[x]、N[y]、N[z]

c.这时,我们挪动赋予法向量的点,会发现随着我们的移动,法线也在偏移

如果我们将代码换成(反向):

就会发现法线向量的变化
我们用一个球上的点进行观测会更明显。法线全部指向世界中心(实际上所有法线会交于世界原点一点)

法线在次时代游戏制作过程中,是个非常重要的概念,不仅仅局限于模型制作环节,在动画、特效、渲染以及shader制作过程中也是非常重要的。在制作流程中,要时刻注意法线的方向问题。


而在Houdini中,编辑法线有很多种方式:节点操作、属性操作、Vex等等。

2. About COS | SIN
a.首先,在Geo中创建一个Sphere,在View中生成一个球,并转换类型为Polygon。

b.之后我们将球上的顶点用Add剥离出来


c.之后利用PointWrangle节点,键入如图所示程序


d.这时,我们滑动下方的动画帧,就会发现这一群点会根据你的滑动做有规律的上下起伏运动

其实,代码的含义是,将帧数除以10所得的值的cos值,赋予给所有点的Y坐标,这样帧数在变化的同时就会控制着整体点的Y位置变化,而这个上下变化的规律就是COS(余弦曲线)
这时,我再新建两个相同的节点,将VEX中的cos换成sin并将它们利用Merge节点合并在一起,两群点就会按照上述曲线去做规律运动

这里为什么要提及Cos和Sin的一些知识呢,主要有两点:第一,读者可以发现Houdini中的VEX语言相当的灵活(并且很像C/C++),很多类型的参数都在Houdini暴露出来进行Vex调用达成最终的效果;第二,可以用程序化建模中的数学方法解决一些实际问题。例如在主机游戏中,有大面积的海域的造型和渲染,如果不想呈现出较容易察觉的规律性,往往会采用FFT的方法(快速傅里叶变换)。


3.About PointVop

a.新建一条直线,改变直线射线朝向为Z轴正方向;十倍长度以及添加100个点。这时,我希望直线上所有的点在YZ上按照Sin曲线形态分布,就需要PointVop节点


b.新建PointVop节点


c.进入该节点层级,我们通过该节点所囊括的相关类型数据进行数学运算来达到图形效果。

首先,我令Ptnum除以Numpt求商。这一步的原因是Sin的振幅峰值为1,表现在图像上就是Y方向最大值为1。Ptnum是Point Number就是点号,最大值为99;Numpt是点的数量是100。那么二者相除就会得到0到0.99的数(接近于1)。但是这里要注意,Ptnum和Numpt都是整形数据,二者相除得到的商也是整形数据(也就是抹除了小数点),所以要将整形转化为浮点型数据,这样才能得到小数。


d.之后我们把商作为圆周角连入sin的rad。这里涉及到一个向量转化的问题。因为我需要实现点在Y轴方向上的振幅变化,也就是说要改变每个点的Y坐标,所以我要改变Y坐标。那么就是将SinY赋予新输出点的Y坐标,而XZ值不变,这时我们要用到Set Vector Component节点,并且调整该节点的VectorComponent,意图将SinY的值赋予给点的Y坐标值,再输出。之后我们添加MuLtiply Constant节点来控制周期。


这样我们就得到了一个sin曲线图像

三 小结:Houdini中的数学方法
而程序化,绝对离不开数学,这就要求美术人员制作素材或是制作相关美术资源的时候,要学会用数学思维解决问题:逻辑运算、矩阵等等。文章用整整一个篇幅、以几个小案例作为样本,意在说明数学在程序化建模过程中的重要性和便捷性,学会用数学思维解决问题是学好Houdini的先决条件。接下来会带着大家用Houdini做一下更为复杂的模型。

- End -

喜欢Thepoly的可以通过三种方式与我们建立联系。分别是公众号、微信群以及QQ群。公众号是我们最为官方的窗口,更多内容都必须关注公众号后才能获取。另外现以开通微博:手机版http://weibo.cn/thepoly网页版http://weibo.com/thepoly


         

本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表