人气 507

[图文教程] 游戏诞生之日10 - 美术篇 Houdini程序化生成入门 [复制链接]

水向 2022-4-5 21:58:34

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
在写专栏之初就想要研究一下程序化生成的流程,现在终于有机会进行一些研究了。
本文目标是:

  • 研究程序化生成的概念,建立起初步对程序化的认知。
  • 探讨程序化生成的适用范围。以确定要不要深入学习这门技术。
由于程序化生成这个话题非常大,以后我也会时不时加一些相关文章。本篇文章定位是,不需要了解软件的操作,仅仅建立一个概念,对新手非常友好。
<hr>第27块拼图 - 程序化生成技术

1. 什么是程序化生成技术
Houdini 程序化生成高速立交桥IceDust 的视频 · 2915 播放
看一个视频能直观的了解程序化生成技术能够做什么。
在游戏引擎中简单放置一条曲线,就能沿着曲线就能生成一整条立交桥。修改曲线的位置,整座立交桥的位置也跟随曲线变化而变化。
调整几个参数就能实时控制立交桥的形状。从路面的宽度,到路灯的数量和高度,到护栏的位置,到桥墩的数量和粗细,全都能通过参数进行调整。
CUGGyra5hU8hhsUF.jpg

YRsm33b2Z73lSYKm.jpg

总结一下的话,程序化生成技术能够根据输入的参数不同,能得到不同的输出。这个输出可以是一个3D模型,或是一个纹理贴图,也可以是一组点,或是一个二进制数据文件。
其实程序化生成技术并不是近几年的新鲜技术,在练习编程时候用程序画菱形,某种意义上也是个程序化生成的应用。输入是菱形的列数,输出是一个字符组成的菱形。
从这个角度看,一个捏脸系统也可以算是一个程序化生成的案例。输入是众多的身体部位参数,输出是一个玩家定制的,个性化的模型。
除此之外,如《我的世界》《饥荒》这样的随机地形,输入是一个随机种子,输出是一个新的地形,包含了资源、怪物和地形信息。
如《以撒的结合》《杀戮尖塔》这样的roguelike游戏,输入是一个随机种子,按照游戏的逻辑输出一个可玩的随机关卡,以达到一个独一无二的体验。
d090otF5au232tj2.jpg

h5DN1PNEQMNTQZIB.jpg

VCL3LoYtY5toYkcS.jpg

捏脸系统或是随机地形,随机关卡往往是一个游戏比较重要的系统,由程序、美术策划共同配合,用写代码的方式制作整个系统。这样做的好处是效率较高,而且能满足一些定制化的特殊需求。但是需要多人配合,或是需要即懂美术原理又懂编程的TA/图程进行开发,门槛更高。
随着游戏行业的发展,面对越来越大规模的地形和素材,美术也越来越需要能对模型进行批量生成、批量处理的工具。我们需要一个解决方案来快速制作这样的工具。
Houdini就提供了这样一套解决方案,将美术流程中可能用到的各类工具做了梳理以供使用,既避免了从零开始造轮子,又保证能快速简单地满足需求。我们可以把Houdini看做一个生产美术工具的工具。
2. 为什么是Houdini?
美术软件那么多,为什么选择Houdini?
dimS04t603i0FMm0.jpg

LlPPHp8DcuxHu1pj.jpg


  • 基于节点的工作流
在houdini中,一切物体都是基于节点的,模型是一个节点,对模型的操作和计算同样是一个节点,摄像机,材质,灯光等待同样是一个节点。
每个节点包含了不同的属性。例如节点是一个方块模型的话,就包含了长宽高的数值。如果节点是一个变换(Transform)操作的话。节点就会有位移,旋转,缩放等属性。
每个节点可以相互连接,节点的上端是输入,下端是输出,不同节点可接收的输入输出数量也是不一样的。
如果把节点当做一个数据处理的函数来看的话会比较容易理解。数据像水流一样从上往下,沿着连接线流向不同节点,每一个节点可以对数据流进行增删改查,数据流也可以分叉或是合并,最终流出来的数据便是我们最终的结果。
我们不仅仅能够通过修改连线改变数据流向的位置,还可以截取某个节点查看中间步骤。通过修改任意中间节点上的参数,就可以实时查看到最终效果,也就不会出现很早的一个操作错误无法撤销这样的情况。进一步,我们可以还创建很多测试用例,只要更改输入数据就能简单地进行测试。
I8AT3arRTI39ORN8.jpg

Houdini提供了非常多的预设节点,例如:

  • 模型处理  如:车削 挤出
  • 复制生成 如:复制图章
  • 流程控制节点  如:选择 循环
  • 地形节点 如:高度图
  • 噪声  如:高度图噪声
  • 分形节点  如:L-System
  • 灯光节点 如:各类灯光
  • 渲染节点 如: Mantra / RedShift
  • 流体节点 如:云
  • 动力学  如:毛发 布料
  • VOP编程节点
常见的建模操作基本都附带了,并且支持多种格式的文件。相比用代码从文件读取开始造轮子,这里有很多现成的轮子可以直接用。即使没有,也可以通过VEX节点进行拓展。
如果需要大量处理数据,会遇到性能问题,可以使用Python语言进行拓展。
轻松访问所有数据
Houdini里能够很方便地访问到各种数据,这为程序化控制提供了基础。
索引编号。Houdini里几何体里的顶点、边和面片都可以看到索引编号,通过这个索引就能以函数的形式取到这个数据,对数据进行修改后再保存回去。
属性。Houdini中将几何体的数据分为四个层级,分别是detail(对象),primitive(面),vertex(顶点),point(点) ,用户可以向每一个层级中追加属性,例如可以让每个点加上随机的缩放属性后,向点上拷贝出的物体也就具有了随机缩放。
访问其他节点。Houdini可以根据节点的路径来访问其他节点的数据,并用表达式在节点间建立引用关系。
YENoDe1LAf5eNbzi.jpg

heFDzm5T1e1kKmBm.jpg

3. 一些程序化的实例
我们实际上来看一个程序化模型生成的过程。从零开始做出一棵草。
WnHtnmyI3NmZ8F3n.jpg

通过改变每个步骤的参数,例如弯曲的程度,叶片的数量,就可以做出不同样式的草。
F2Kk9rdyg29M2Sk2.jpg

接下来生成一片草地。
Nn42122r22nVVOOP.jpg

有了生成草地这个流程,我们就可以将第一步的圆替换为任意几何体,就能在任意几何体上长出草来。
AWriUqxzipMhhi6C.jpg

在Houdini中还能够基于程序化地生成地形,相比用笔刷人工进行雕刻,效率和拟真程度都更好。
iAx9P599KqIzpe97.jpg

程序化生成的好处是,你可以退回到过去的某一步进行修改,而不用重做后续步骤。
EmHL15DlCpgtFmVG.jpg

eXK5i0tZciGizTkS.jpg

4. Houdini与游戏引擎对接
Houdini对接了Unity和Unreal这样的游戏引擎,我们可以这样理解:Houdini是一个制造插件的工厂,制造的这个插件能够在游戏引擎内部运行,根据参数生成各类模型。
Houdini将这样的插件称为数字资产(HDA,Houdini Digital Asset),这样一个资产封装了程序化的逻辑,规定了暴露的参数以及参数的取值范围。
ozMrzBD0bNbBMrC1.jpg

在实际工作中,除了编写HDA的人员外,其他人都不需要安装Houdini,也不需要知道HDA内部工作逻辑。只需要调整参数,编辑曲线,点击烘焙即可。
除此之外,Houdini还能导出其他游戏引擎可用的资产,例如,可以直接使用Houdini烘焙动画文件 ,或是Visual Effect Graph可用的向量场等。
WHHz6ZD2h2hC263h.jpg

5. 程序化的适用范围
程序化生成技术适合处理数量庞大有规律重复的工作。例如:

  • 可以参数化地生成模型,如:房屋、桌椅家具
  • 快速生成大量的、不重复的模型,如:石头、树木
  • 对大量的数据进行批处理,如:大地形植被
  • 搭建一整条管线,并在不同阶段进行编辑,如:大地形的地形工具
  • 一些特殊效果,如:在任意模型上长草,用模型生成特效
n0jz8eFEMAKwBhmW.jpg

相应的,少量的无规律的工作不适合用程序化的进行制作。例如:

  • 要求对模型进行非常细微的控制,例如建模出一个角色。
  • 已经有成熟插件,例如制作树的Speed Tree,制作地形的Gaea等。就不必用Houdini再做一遍。
  • 程序化无法带来明显优势的工作,因为Houdini学习起来相对高成本。
x49i56s6SvY1zwTt.jpg

注意事项

  • 团队中只需要有少数人来程序化生成工作流即可。
  • 程序化不能完全替代传统工作流。
  • 找准应用场景。强行做自己不适合的工作反而会事倍功半。
  • 注意性能问题,兼容性问题
6. 扩展资料
一些好的学习教程。



第27块拼图 - 程序化生成技术 Houdini

  • 付出成本: 2
  • 上手难度: 6
  • 可控性: 8
  • 表现效果: 8
  • 性价比: 2.0
<hr>
GyWR4nGxoRO48J0r.jpg

Houdini能讲的东西太多了,以后如果有机会再讲吧。最近在学各类程序化建模、程序化纹理,程序化地形,深感要学的东西太多,时间不够用。
这一系列文章将会收藏于专栏之中,希望大家多多支持。

只要对游戏开发有兴趣,欢迎加入交流群 Unity游戏开发流程研究 479984340
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-20 12:25 , Processed in 0.089555 second(s), 26 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.