【houdini教程】利用Houdini中的程序化生成岩石

介绍

我叫史蒂文·斯基德莫尔Steven Skidmore),我是德克萨斯州奥斯丁的Gunfire游戏的首席艺术家。在将重点从电影VFX转移到视频游戏之后,我就开始了。我从小就知道自己想从事计算机图形学。我最初的目标是尝试开发像BlizzardBlur Studio这样的游戏电影。

我在佐治亚州萨凡纳的萨凡纳艺术与设计学院(SCAD)学习,并获得视觉效果学位。在我的三年级末,我开始使用虚幻引擎来尝试弥合游戏和视觉效果部门之间的鸿沟。大学毕业后,我在Raven Software短暂实习,从事Singularity的研究。大约一年后,我在Vigil Games担任了全职职位,在过去的十年中,我一直与同一支球队(Vigil Games,Crytek USA,Gunfire Games)一起工作,从事过《暗黑血统2》,《暗黑血统3》,《残余:来自灰烬,英雄绑定(VR),时空(VR),死亡与埋葬(VR)和其他太阳(VR)。

最近,我通过Substance DesignerHoudini对过程工作流非常感兴趣。过去曾与Houdini合作拍摄电影,因此毫无疑问地将其纳入Gunfire的制作流程中,因为我们开始通过HoudiniEngine桥看到它和实时引擎正在完成的所有工作。作为一个较小的开发人员,我们可以看到过程内容的巨大潜力,可以帮助缓解我们的开发流程中的瓶颈。

关于岩石发生器

我和我们的首席技术美术师Cort Soest之间对Houdini的程序化摇滚产生了某种迷恋。它起初是作为一项实验来学习Houdini的噪声实现方法,以及如何进行混合和组合噪声以获得各种形状的实验。然后,尝试重新创建我在ZBrush中为Darksiders 3 手工雕刻岩石时经常使用的一些技术和其他一些游戏成为一项挑战。

目的是使美术人员可以输入松散的基础网格物体,而Houdini资产将处理生成高多边形网格物体,创建低多边形游戏资产,UV展开,烘焙/应用的所有其他步骤。使用摄影测量纹理绘制物质中的纹理,并使用散射点实例化树叶和岩石。

agancg_利用Houdini中的程序化生成岩石_step01

基础网格

基本网格物体本身可以通过任何传统的盒建模技术来创建,或者对于猪头来说,这只是Houdini的默认示例网格,用于测试工具是否正常工作。那里的基础网格只是定义输出网格的粗略体积和比例。最终,该工具最终对网格进行体素化并将其转换回几何图形,以添加足够的细节并确保网格是气密的。

agancg_利用Houdini中的程序化生成岩石_step02

网络的第一遍处理岩石形状的基本宏整形。这主要是通过对网格施加位移的mountainSOP(表面/几何算子)完成的。在幕后,mountainSOP仅仅是包含一些噪声功能的数字资产,这些功能内置于Houdini基于节点的基于脚本的运算符VOP(VEX运算符)中。

agancg_利用Houdini中的程序化生成岩石_step03

我最终调整了默认的mountainSOP以添加更多功能。这包括掩盖垂直轴(对于Houdini,为Y)上的噪波,并仅将噪波应用于X和Z轴。

agancg_利用Houdini中的程序化生成岩石_step04

我用于大多数岩石整形的噪波是Worley F2-F1。这种噪波组合是块状蜂窝形状的最佳组合之一。3d Worley噪波的Y频率已按比例放大,以显示垂直拉伸的单元格的外观。我主图中的“ voxelmesh”节点是由SideFX Labs游戏开发团队创建的Houdini Digital资产。这些是加快工作流程的出色工具。该特定资产基本上是VDB到多边形转换工具,可将网格体素化为一定密度并将网格转换回多边形,这与ZBrush中的Dynamesh非常相似。

工具的下一部分将网格划分为不同的层。在Houdini中,可以用一百种不同的方式来完成此操作(布尔值,片段,VDB断裂等)。我选择的特定方法是将平面复制到点,然后根据这些平面将网格划分为多个部分。Gatis Kurzemnieks对该技术作了很好的解释- 使用Houdini创建程序性游戏资产。第一部分。我使用的方法与他的YouTube频道涵盖的细分类似。

Gatis还谈到了他如何为每个图层添加不同的厚度值。虽然我没有选择这种方法,但它肯定是一种可行的方法。我的网格的问题是,沿点的法线移动这些点时,它们最终会相互重叠并开始相互渗透。有一些技巧可以使法线大量模糊然后移位,但是所有这些方法都导致边缘柔软,糊状,我想保持清晰的地层。

我想出了一种解决方案,为每个图层创建自己的局部变换,并为每个图层随机缩放X和Z。这包括在每一层上生成一个定向的边界框并构造一个转换矩阵。这为我提供了每个层的局部旋转,因此我可以对齐TransformSOP节点的轴,以便在局部空间中缩放。VFXHive的Youtube频道上有一个关于Houdini矩阵和本地变换的非常不错的视频。(https://www.youtube.com/watch?v=t9yoUkFzInA

Houdini真正开始发光的地方是使用表达式。在Transform SOP的X和Z标度值中,我可以提供随机值。

agancg_利用Houdini中的程序化生成岩石_step05

 

由于所有这些层都在ForLoop中进行迭代,因此我知道每个层次层都分配有唯一的迭代编号。我可以使用detail()函数获取该全局迭代值,并在表达式中使用该值作为唯一的“种子”值来驱动rand()函数。这会返回介于0和1之间的随机浮点数,因此我可以使用fit01()函数将该范围调整为新的0.8-1.2范围。这意味着我图层的缩放比例永远不会低于0.8或高于1.2。种子通道用于控制更换种子和使用滑块恢复刻度。

agancg_利用Houdini中的程序化生成岩石_step06
然后将这些片段传递到另一个ForLoop中,以添加最终的噪音。此步骤包含与我的第一个宏遍非常相似的方法,但详细程度更高。AttributeVOP / MountainSOP与混合节点一起使用,将不同频率的噪波混合在一起以分解程序噪声形状,这与在Substance Designer中通过扭曲分解图案非常相似。每次出现噪波之后,我将使用AttributeBlurSOP来模糊这些点上的法线,以便增加和减少更多的噪波不会造成严重的挤压。值得一玩的有趣的事情是使用噪声来驱动其他噪声的失真。例如,分解Worley F2-F1几何形状的一种方法是使用另一种噪声来帮助驱动Worley Noise的偏移。(类似于SD中的翘曲)。
agancg_利用Houdini中的程序化生成岩石_step07
高多边形创建的最后一部分是削掉层的边缘。这是通过使用低分辨率版本的图层网格,使用MountainSOP的噪声使其失真然后使用该网格对高细节体素图层进行VDB断裂来完成的。
agancg_利用Houdini中的程序化生成岩石_step08
结束了高聚创意。下一步是低聚。我采用了高多边形网格,并以更大的VDB密度对其进行了体素化。这样会产生大得多的体素,从而减少细节。这被用来制作适合高多边形网格的粗糙轮廓的气密外壳。然后使用polyReduceSOP减少了三角形的数量,使游戏引擎可以接受。

agancg_利用Houdini中的程序化生成岩石_step09

因为我知道我将在Substance Painter中投影纹理的三行制,所以只要纹理像素密度相同且没有重叠的UV,我就不必太担心隐藏UV接缝。为此,我使用了一个简单的UVUnwrap节点,该节点类似于3ds Max中的框投影。然而,这导致了数百个微小的紫外线岛。为了解决这个问题,我使用了另一个SideFX Labs工具“合并小岛”,根据阈值将小UV岛合并回大簇。此方法有更好的方法,我目前正在探索其他选择,例如使用曲率驱动UV接缝或使用层间距本身来切割接缝。无论如何,这在实验的这个阶段对我都有效。

agancg_利用Houdini中的程序化生成岩石_step10

现在是时候烘焙贴图了。

贴图

低多边形网格是通过我的好友Cort Soest为Substance Painter编写的插件自动加载的,并与高多边形网格一起烘焙以生成所有必要的网格贴图(AO,法线,世界法线,曲率,位置)。暂时,这种方法的一个主要限制是Substance Painter的API不支持将资源从架子上注入到图层堆栈中,这意味着我们无法从命令行自动将智能材质分配给网格。我必须手动将智能材料应用于新的岩石资产。但是,这非常快,只需花费几秒钟即可应用。

智能材料本身是由2种Megascan纹理集的混合创建的,这两种纹理集均设置为在图层上的三边投影模式,然后通过Painter中的各种遮罩/生成方法彼此叠加。其余的外观只是生成器和填充层的组合以增强色彩。通过烘焙来自顶点颜色的ID贴图来修改层颜色。在Houdini中,为每个图层分配了唯一的顶点颜色,并将其导出到高多边形网格中。

agancg_利用Houdini中的程序化生成岩石_step11

此时,只需要将FBX文件和从Substance Painter导出的纹理导入游戏引擎,并像管道中的其他资产一样设置岩石。

客制化

定制以随机种子值的形式出现,该种子值放置在所有噪声函数以及处理层缩放的Transform上。噪波本身可以针对某些不同的岩石类型进行调整和缩放。还可以控制层数和每层之间的距离。从头到尾,通常需要5-10分钟的时间来烹饪所有东西并在Substance中构造资产。前进的目标是通过PDG自动化整个过程,以在我们的构建机器上解决数百次迭代。剩下的唯一主要步骤是弄清楚如何生成独特的类似岩石的基础网格物体以输入到工具中。

学习Houdini

Houdini是一个非常具有挑战性的3D程序,但它也是一个非常有回报和授权的程序。这是行业中选择Houdini并进行尝试的绝佳时机。越来越多的工作室开始利用Houdini的程序性来帮助推动各种游戏类型,从大型开放世界游戏到小型独立游戏。霍迪尼有很多东西可以提供给任何一支球队。这是一个不断发展的程序,SideFX在过去几年中做得很好,使Houdini成为了一款可行的游戏创作工具。我建议任何希望将其纳入其工具集中的人,从寻找Youtube众多教程开始。一些很棒的资源包括Kenny Lammers及其课程(https://www.indie-pixel.com/),Rohan Dalvi及其培训视频(https://www.rohandalvi.net/home)以及SideFX网站(https://www.sidefx.com/tutorials/)上的所有奇妙教程和资源。

深入研究Houdini并学习如何将形状复制到点以及如何使用属性来控制这些复制资产的规模及其方向,是一种真正简单但很棒的方法,可以开始挖掘Houdini可以提供的功能。乍一看,似乎所有其他3D应用程序都存在,直到您意识到随时可以使用所有功能,这是您决定将所有功能混合在一起确定最终结果的方式。它是解决问题者最有价值的3d工具。

发表评论

邮箱地址不会被公开。 必填项已用*标注

114 条评论 “【houdini教程】利用Houdini中的程序化生成岩石”