Houdini学习 —— 基于节点的过程化建模初探及思考
来源:互联网 发布:linux 下载速度很慢 编辑:程序博客网 时间:2024/06/14 22:49
这篇博客介绍了我使用Houdini进行过程化建模的流程,以及我在学习过程中关于节点、过程化生成和工具链的一些思考。
背景
我个人是PCG(Procedural Generation,过程化生成)的痴迷者,从Spore到Minecraft,从动态河流到动态树木再到动态发丝的构建,种种都是PCG的思想在起作用。在GDC的2017的talk中,Kate Compton的演讲Practical Procedural Generation for Everyone对过程化生成进行了很详尽的阐述,有兴趣的可以去看看。
Houdini是过程化生成的绝佳工具,在这篇博客里,我会尝试使用一个简单的Box,进行节点式的过程化生成,从而构建出一个相对复杂的模型。并且我会记录一些我的想法思考,如果对过程没有兴趣的读者可以直接跳过建模过程,直接看我矫情的思考……
构建过程
总体的构建过程大体分为两个部分:
- 第一部分是从一个
box
到一个相对复杂的单个模型的构建 - 第二部分是利用
copy
节点生成最终的模型。
单个模型的构建
轮廓构建
这个模型的构建主要使用了Poly Extrude
节点,这个节点可以将你的面或者边拉出来,来创建新的polygons,可以将拉出来的几何体变大、变小或者扭曲。
这里我连续使用了四个Poly Extrude
节点,从而初步构建出一个轮廓。这四个Poly Extrude
节点的作用分别是:
- 针对于每个面上的顶点,将这个点向中心移动,并且创建出新的顶点和新的面(
Inset
值设为0.2),将其放入对应的Group中(这里将其命名为”extrudeFront”)。 - 针对于
extrudeFront Group
的点,复制一份出来并且将其往法线方向推一点(Distance
值设为0.2),将新的点放到对应的Group中,并且删除组里原有的点信息。 - 与步骤1类似,只不过是此时是针对于
extrudeFront Group
中的点向中心移动。 - 与步骤2类似,只不过此时将其向法线负方向推一点(
Distance
值设为-0.2,Inset
值设为0.04)
模型细化
接着就是模型的细化操作了,我这里主要使用了Poly Bevel
节点,来针对顶点进行一次……额……斜面化(不知道该咋翻译……)?然后用Divide
节点处理五边面,再用Color
节点染个色,得到如下的模型:
再将最里面那一部分的面通过blast
节点提取出来:
再使用Poly Extrude
节点和Poly Bevel
处理一下,染个色,得到如下模型:
Merge
一下,齐活:
使用Copy
节点生成最终模型
这个应该不用特别解释,我使用了另一个box,将其Divisions
设定为4 * 4 * 4,这样就有了125个点,使用add
节点中的Delete Geometry But Keep the Points
来保留点信息,从而复制出125个这样的模型:
对应的思考
思考
这个词很宽泛,但我想谈谈使用Houdini来进行建模的过程中得到的一些启发:
- 一个任务,能否拆成小任务?然后拆成更小的任务?
Houdini的生产方式主要是节点式(虽然你也可以在场景中直接拖动但是如果这样的话为什么不用Maya&Max呢?),这就意味着一个大的任务下来,首先需要将其分拆成小任务,然后再分拆成更小的任务,最后使用节点来进行实现。
这里所说的“任务”指的并不是将“大模型拆成小模型”这么狭隘,而是更加广义的任务分解。例如:如果想要做河流,那么需要将整个任务拆分成“将河流的走向用样条表示”与“有了河流的走向后如何构建这一段河流的模型”两个子任务。
还记得大一下学期的时候第一次接触Haskell的函数式编程课程,由于Haskell语言中不允许声明变量,于是你需要将一个大功能的函数分拆成若干个子功能函数,然后再接着分拆成简单的函数。
这种思维让我后来受益无穷,同样的,这种思维如果放到Modeling
中来,尤其是PCG的Modeling
,可能会对整个的生产工具链产生极大的效率提高。
实际上这种思维在国外的一些工作室里已经较为普遍了,我记得有一次与人他们提到这一块,并且做了一个对比:
- 使用传统做法做一块石头,需要一个下午,并且每做一块新的石头都需要付出同样的时间。
- 使用PCG的方法做石头,可能需要两天,但是可以通过修改几个参数的方式做出成千上万个不同的石头。
这也就是我对PCG如此痴迷的原因 —— 将编程的思维带出程序,放进美术工具链上,产生的能量大的惊人。
- 节点,意味着太多太多太多
Houdini的节点意味着太多太多的东西。当然,对于技术人员来说,它只是一种数据表现形式而已,没什么大不了的。但是,对于美术来说呢?
每个节点都可以实时显示,每一次的修改都是以节点形式储存,每个节点都可以设定让其启用或不启用,每个节点都可以封装为新的层级!
所以,节点可以意味着资源的修改历史……
节点可以意味着资源的版本管理……
节点可以意味着资源的层级架构……
节点可以意味着不同层次的分工……
这是一片崭新的世界……而我只是刚开始探索……
这片天地让人颤抖……
<全文完>
- Houdini学习 —— 基于节点的过程化建模初探及思考
- houdini节点ray的一点改进(多图
- houdini节点ray的一点改进(原理
- 对业务建模的思考——为什么要业务建模
- 维度建模的基本概念及过程
- 维度建模的基本概念及过程
- 维度建模的基本概念及过程
- 维度建模的基本概念及过程
- 维度建模的基本概念及过程
- 建模的思考
- houdini中copy节点的stamp函数的用法
- houdini中的foreach节点的循环操作的用法
- ROS学习笔记(三):新建包及节点初探
- 基于色度和亮度的背景建模及阴影去除方法—看到一篇文献的总结
- 产品研发过程管理专题——基于产品的测试管理(用友软件测试流程初探)
- 三维CAD建模——基于半边数据结构的基本欧拉操作建模
- Houdini 如何查看节点属性
- UML一统天下 ——统一的不是建模过程而是建模语言
- Linux 目录配置标准:FHS
- 【精通hibernate】(4)hibernate事务管理以及并发问题处理
- Codeforces 712D Memory And Scores 前缀和+DP
- 洛谷 P1091 合唱队形
- error C2143: syntax error : missing ';' before
- Houdini学习 —— 基于节点的过程化建模初探及思考
- Scala基础
- 数据库学习中使用的表
- 算法第4版(Java语言描述)课后习题答案
- Android问题集锦之五十二:unsupported reloc 43
- 判断组成回文的字符串序列
- vim键盘操作(中班)
- redis小本本(二)
- 接口安全之短信验证(防恶意被刷)