Houdini是很受欢迎的特效制作软件件,它不仅能够制作各种特效,还可以创建可缩放的悬崖发生器。今天艺术家Lucas DZIURA分享在Houdini生产可缩放悬崖发生器的过程,大家可以看看。


1
项目参考


最初的计划是创建一个过程设置,该设置从输入文件中创建一个悬崖。然后进行纹理化阶段,最后创建设置以自动导入和导出悬崖以及数据。

作为参考,在项目开始时,我们会带摄像机进行摄影测量和参考收集。


2
开始测试


第一个测试后,发现悬崖太大,无法为FPS视图保留足够的细节,因此添加一个放置在关卡内关键点上的手工悬崖,为玩家添加细节,悬崖的主要作用是充当指导玩家进入关卡的大结构特征。

最初进行相当复杂的设置,涉及许多计算和VDB节点。在游戏环境中,需要使悬崖形状不那么复杂,以更好地适合几何形状,一旦手工制作悬崖,就可以添加统一的结果。

实际的悬崖生成器是该项目中最简单的部分。周围的一切都比较复杂。悬崖生成器本身由3个HDA组成。第一个将输入的几何图形转换为更密集的网格,同时向内推动该几何图形以获取少量空间以供以后移动。
第二个通过在VOP网络中基于混合噪声的不同三边形投影,来移动几何图形来创建高多边形。
第三个创建低多边形以及UV,清理任何额外属性的几何形状并导出。使用由Adrien Lambert制作的自定义节点,该节点可以在几何图形上创建蒙版。
这是实际的悬崖生成器HDA:


3
TOP节点


TOP节点是很重要的知识,本质上,PDG(过程依赖图)是使用TOP(任务运算符)的地方。这是一张图像,可以帮助大家了解如何读取TOP节点:

我觉得这个概念对理解其余的制作很重要,因此将引用cgwiki来说明使用方法:

Tops是任务和流程的节点图。它类似于Rops,它可以将操作链接在一起并控制执行顺序。Rops和Tops之间的主要区别在于细粒度控制。 

Rops和Tops相比:

       ●Tops是事物的基于容器的视图,您看不到节点内部发生了什么,并且节点数量有限。

       ●Rops是基于容器的渲染视图,您看不到节点内部正在发生什么,它具有有限的节点集。

       ●Rops是事物的原子视图,作用范围更加广泛。

       ●Tops是任务和处理的原子视图,可以深入了解框架/单个过程,它的作用域更为广泛。

因为Tops对每个节点了解更多,所以可以完成Rops或标准渲染场软件难以完成的工作。例如:

       ● 确保尽可能并行运行

       ●不必要的任务不会等待

       ●使用尽可能多的CPU内核

       ●检测何时不需要重新运行任务,跳过它们

       ●连接到服务器场后,可以对许多任务的多台计算机进行复杂控制

       ●将简单的GUI放在简单的操作上

       ●提供用于复杂操作的完整Python API

       ●具有内置支持以控制其他应用,例如Maya,Nuke和FFmpeg

       ●具有内置支持,可与shot弹枪之类的资产管理系统对话

       ●具有内置支持,可与拖拉机,截止日期和排队工作配合使用”


4
岩石生成

这是网络的第一部分,也是创建悬崖的地方。会自动获取特定文件夹中的每个输入几何图形,并通过不同的HDA对其进行处理。

有2种创建方法,因此可以切换参数以在一个或另一个之间切换。你可以获取文件,然后通过之前制作的HDA运行它们。
网络的任务是通过处理先前使用我制作的第三个HDA创建的高多边形来制作低多边形。之后获得Rop抓取,该抓取指向PDG外部的Geo节点。
在此节点内,在geometry文件的parameter中有一个属性为@pdg_input的文件。这是因为它获取使用中的节点的输入,当调用该ROP Fetch从该网络中的ROP FBX输出导出时,文件节点获得该ROP Fetch的输入的引用。低聚模型。创建一个整理好的文件夹,所有输出数据都已排序,可以看到使用@ pdg_index`函数,该函数调用当前项目的索引。对于第一个悬崖,该文件夹命名为“ Cliff_00”,然后再命名为“ Cliff_01”,依此类推。
有相同的设置来导出高电平,除了有另一个HDA可以清理所有内容以便导出,而不是低多边形HDA。
网络的下一部分按索引分区可以将低多边形和高多边形划分为相同的工作项。完成操作后,将它们发送到另一个指向Map Baker的ROP Fetch中。
为了烘焙地图,输入一个低多边形和高多边形。由于将两者都划分为一个工作项,因此可以使用@pdg_input属性并指定所需的输入,0表示低多边形,1表示高多边形。这样可以获取两个模型并进行烘焙。烘焙完成后,将低多边形与刚烘焙的地图进行分区。然后使用ROP节点,目标是通过AO和法线从烘焙中渲染低多边形。为此将其指向我设置的相机和特定的地理节点。
在geo节点中,使用Tag来指定输入,这是一个字符串值,可以在任何节点中对其进行处理后将其添加到工作项中。由于使用了地理标记,因此只能提取几何图形,并且划分到这些工作项中的唯一几何图形是低多边形。
我添加的材料是经典的Principle Shader,使用相同的表达式链接刚刚烘焙的地图,这次使用image标签。图像的索引是在地图中生成图像的顺序,因此法线= 0,AO = 1,依此类推。当我调用ROP节点时,使用AO和法线贴图来渲染低多边形。
完成后,在“覆盖文本”节点上在图片上添加一些文本。
对于高多边形,基本上是相同的过程,只是该材料是标准的“原理着色器”,没有任何修改。
渲染完两个模型后,将使用ImageMagick节点,需要ImageMagick软件上工作,它是免费的,只需要输入.exe的路径即可运行,ImageMagick节点允许图像蒙太奇。将两个图像都划分到同一工作项中,并且将ImageMagick节点设置为Concatenate,让它们组合为1张图片。如果低点好并且烘烤进展顺利,就可以与一张图片进行比较。
ImageMagick节点的输出示例:
PDG的下一部分处理RGB蒙版的导出。我使用ROP提取,指向ROP网络。
ROP网络内部是一个“烘焙纹理”节点,指向“地理”节点,该节点可以烘焙网格上的任何纹理。我将漫反射颜色烘焙下来,方便后期用作UE4的纹理化蒙版。
地理节点特殊之处在于垫网络中,该网络包含了RGB蒙版的所有着色器。
以这种方式制作着色器是因为在早期测试中,烘焙和纹理部分是在Substance Painter中处理的,然而要走完每条悬崖并一头经历整个纹理处理过程非常麻烦。因此使用自己制作的智能材料作为基础,在Houdini中进行复制。为了做到这一点,我分析每一层的作用以及如何在Houdini中获得相同的结果。
然后重现Substance Painter中使用的混合模式。像加法,减法,乘法和除法只是简单的操作,因此很容易制作。对于像Screen或Overlay之类的产品,不知道如何制作它们。我使用谷歌搜索寻找到了一个方法,每种混合模式均根据数学公式进行了说明,这里是Houdini内部VOP中制作的不同混合模式。
简单的操作混合模式:
覆盖:
屏幕:
这类添加了一个混合节点以控制混合模式的不透明度,就像在Substance Painter中一样。完成操作后,只需要手动重做不同的图层和蒙版即可。这是红色遮罩与在SP中制作的遮罩生成器的对应关系。
为了访问AO,Position和每个工作项所需的所有地图,我使用之前在@pdg_input和标记中说明过的相同方法。
其他蒙版几乎都是以相同的方式创建的。只是混合了不同的蒙版,并重新制作了蒙版生成器的必要部分。
将所得的蒙版组合到矢量3中,并放入“原则着色器”的基色中。剩下的PDG的最后一部分非常简单,因为只有Render节点可以单独渲染每个蒙版,以在一切正常的情况下进行预览,而不必将模型导入到引擎中。
每个ROP节点都指向一个不同的Geo节点。每个“地理”节点都会为材质分配相应的蒙版。
在每个地理节点内,都是与我已经介绍过的文件和材质节点相同的设置。
渲染所有带有蒙版的模型后,将拥有另一个ImageMagick进行剪辑。这是输出示例:
在仅从UE4导出的阻止作为FBX文件的情况下,PDG将:

       ●用UV创建低聚

       ●出口低聚

       ●创建一个高多边形

       ●烤高到低聚

       ●导出带有AO /法线贴图和高多边形的低多边形的比较图片

       ●创建与导出RGB纹理遮罩

       ●在低聚上创建每个蒙版预览的蒙太奇图片


5
可扩展性

可伸缩性驻留在PDG的功能之内。由于每个工作项都是并行运行的,因此非常高效,并且可以一次执行多个任务。PDG可以与渲染场一起使用,为特定的渲染场制作了一些称为调度程序的节点。在给定时间内可以处理的项目数仅受专用于PDG的CPU数量的限制,这使得解决方案不仅可扩展,而且适用于世界范围。


6
局限性


这些工具从输入文件创建所有内容并导出数据,我没有时间进行自动化的事情是在UE4中进行导入/导出。我们的关卡设计器必须从UE4中导出。

为了减少导入所花费的时间,通过将其拖放到场景中,悬崖将其原始出口位置保持在正确的位置。下一个挑战是创建一些Python脚本,以自动导出选定的悬崖,并在删除旧悬崖时自动将其导入并放置到关卡中。由于时间限制,需要手动创建脚本。


7
UE4纹理


如前所述,为每个悬崖生成了RGB蒙版纹理。在UE4内,基于上述蒙版制作了一种在不同的图素纹理之间混合的纹理。这是着色器的概述。

第一部分将scale的3个值相加并将它们除以3得到中值,然后将此值乘以一个参数即可为每个纹理提供不同的缩放值。
这些UV值插入到不同的纹理样本中,这是处理不同图层的基色的部分。RGB蒙版驱动3种纹理之间的混合,可以修改每个纹理的色调以及所有纹理的全局色调。
下一部分基本上是相同的东西,但是这次是法线贴图。由于此着色器仅用于岩石,因此不会具有金属值。通过将粗糙度填充到每个法线贴图的蓝色通道中来优化纹理,因此每种可贴砖材质仅使用2个纹理而不是3个纹理。然后使用DeriveNormalZ节点从R和G通道重新创建法线贴图,“展平法线”节点可以修改法线的强度,粗糙度混合使用相同的设置。
我要做的最后一件事是混合宏法线,这是从Houdini的高多边形中烘焙的法线贴图。
除了混合材质外,在着色器添加一些选项。第一个是UP矢量混合,可以在资产顶部混合纹理,而不管其大小和旋转度。对于苔藓,雪和灰尘之类的东西非常有用。“世界对齐混合”考虑资产的法线以及要混合的材料法线,最后添加一个函数来控制顶点红色的混合。
我添加的另一个选项是用grunge纹理覆盖一些颜色和粗糙度,以破坏拼贴效果。RGB蒙版的B通道就不再使用了(黑色是纹理1,红色是纹理2,绿色是纹理3),所以用它来驱动一个污物蒙版。在Houdini内部,蓝色面罩是以AO面罩为基础生成的,可以根据需要将污垢放置到网格的缝隙中。我有很多开关可以独立切换每个选项。所有这些计算的结果都链接到“制作材料属性”,这可以将该材料与其他材料混合。
下一个大选择是与景观融合,为此进行RVT混合。RVT混合非常好,但缺点是混合渐变是笔直的,而且不太现实。为了解决这个问题,我做了一个小功能,使纹理的渐变边缘变形。还将顶点颜色的绿色通道链接到RVT混合,以获得更好的控制并可能添加/擦除怪异的伪像。


在Houdini中已经制作完成悬崖生成器,希望上面的内容能够帮到大家。