Houdini学习 —— 基于节点的过程化建模初探及思考

来源:互联网 发布:linux 下载速度很慢 编辑:程序博客网 时间:2024/06/14 22:49

这篇博客介绍了我使用Houdini进行过程化建模的流程,以及我在学习过程中关于节点、过程化生成和工具链的一些思考。


背景

我个人是PCG(Procedural Generation,过程化生成)的痴迷者,从SporeMinecraft,从动态河流到动态树木再到动态发丝的构建,种种都是PCG的思想在起作用。在GDC的2017的talk中,Kate Compton的演讲Practical Procedural Generation for Everyone对过程化生成进行了很详尽的阐述,有兴趣的可以去看看。

Houdini是过程化生成的绝佳工具,在这篇博客里,我会尝试使用一个简单的Box,进行节点式的过程化生成,从而构建出一个相对复杂的模型。并且我会记录一些我的想法思考,如果对过程没有兴趣的读者可以直接跳过建模过程,直接看我矫情的思考……


构建过程

总体的构建过程大体分为两个部分:

  • 第一部分是从一个box到一个相对复杂的单个模型的构建
    PCG
  • 第二部分是利用copy节点生成最终的模型。

单个模型的构建

轮廓构建

这个模型的构建主要使用了Poly Extrude节点,这个节点可以将你的面或者边拉出来,来创建新的polygons,可以将拉出来的几何体变大、变小或者扭曲。

Extrude

这里我连续使用了四个Poly Extrude节点,从而初步构建出一个轮廓。这四个Poly Extrude节点的作用分别是:

  1. 针对于每个面上的顶点,将这个点向中心移动,并且创建出新的顶点和新的面(Inset值设为0.2),将其放入对应的Group中(这里将其命名为”extrudeFront”)。
    PCG
  2. 针对于extrudeFront Group的点,复制一份出来并且将其往法线方向推一点(Distance值设为0.2),将新的点放到对应的Group中,并且删除组里原有的点信息。
    PCG
  3. 与步骤1类似,只不过是此时是针对于extrudeFront Group中的点向中心移动。
    PCG
  4. 与步骤2类似,只不过此时将其向法线负方向推一点(Distance值设为-0.2,Inset值设为0.04)
    PCG

模型细化

接着就是模型的细化操作了,我这里主要使用了Poly Bevel节点,来针对顶点进行一次……额……斜面化(不知道该咋翻译……)?然后用Divide节点处理五边面,再用Color节点染个色,得到如下的模型:

PCG

再将最里面那一部分的面通过blast节点提取出来:
PCG
再使用Poly Extrude节点和Poly Bevel处理一下,染个色,得到如下模型:
PCG

Merge一下,齐活:
PCG

使用Copy节点生成最终模型

这个应该不用特别解释,我使用了另一个box,将其Divisions设定为4 * 4 * 4,这样就有了125个点,使用add节点中的Delete Geometry But Keep the Points来保留点信息,从而复制出125个这样的模型:

PCG

对应的思考

思考这个词很宽泛,但我想谈谈使用Houdini来进行建模的过程中得到的一些启发:

  • 一个任务,能否拆成小任务?然后拆成更小的任务?

Houdini的生产方式主要是节点式(虽然你也可以在场景中直接拖动但是如果这样的话为什么不用Maya&Max呢?),这就意味着一个大的任务下来,首先需要将其分拆成小任务,然后再分拆成更小的任务,最后使用节点来进行实现。

这里所说的“任务”指的并不是将“大模型拆成小模型”这么狭隘,而是更加广义的任务分解。例如:如果想要做河流,那么需要将整个任务拆分成“将河流的走向用样条表示”与“有了河流的走向后如何构建这一段河流的模型”两个子任务。

还记得大一下学期的时候第一次接触Haskell的函数式编程课程,由于Haskell语言中不允许声明变量,于是你需要将一个大功能的函数分拆成若干个子功能函数,然后再接着分拆成简单的函数。

这种思维让我后来受益无穷,同样的,这种思维如果放到Modeling中来,尤其是PCG的Modeling,可能会对整个的生产工具链产生极大的效率提高。

实际上这种思维在国外的一些工作室里已经较为普遍了,我记得有一次与人他们提到这一块,并且做了一个对比:

  1. 使用传统做法做一块石头,需要一个下午,并且每做一块新的石头都需要付出同样的时间。
  2. 使用PCG的方法做石头,可能需要两天,但是可以通过修改几个参数的方式做出成千上万个不同的石头。

这也就是我对PCG如此痴迷的原因 —— 将编程的思维带出程序,放进美术工具链上,产生的能量大的惊人。

  • 节点,意味着太多太多太多

Houdini的节点意味着太多太多的东西。当然,对于技术人员来说,它只是一种数据表现形式而已,没什么大不了的。但是,对于美术来说呢?

每个节点都可以实时显示,每一次的修改都是以节点形式储存,每个节点都可以设定让其启用或不启用,每个节点都可以封装为新的层级!

所以,节点可以意味着资源的修改历史……

节点可以意味着资源的版本管理……

节点可以意味着资源的层级架构……

节点可以意味着不同层次的分工……

这是一片崭新的世界……而我只是刚开始探索……

这片天地让人颤抖……

<全文完>

阅读全文
0 0
原创粉丝点击