Please enable Javascript to view the contents

将houdini procedural modeling加入自己的工作流

 ·  ☕ 4 分钟

前言

    本来近期想在blender里面做一小套场景拿到UE4里面测试一下光照和后期的。陆陆续续做了些场景内容后发现一个很让我头疼的问题:每次我想在Mesh上改点什么都需要把之后展UV,LowPoly,HighPoly,各种贴图烘焙等整个流程全部都走一遍。作为一名非专业3D美术技术人员,我并没有找到什么好的办法来解决这个问题。然而对于我来讲每天的工作内容很多,不可能在这上面浪费太多时间,所以我重拾起了电脑里面快半年没打开的houdini打算利用它来搞定这个需求。经过两天的研究初步总结出了一套适用于我个人的3D美术资产的pipline:

blender打Mesh草稿->去houdini里面创建HDA进行程序生成和参数化->利用Gamedev插件做贴图烘焙和fbx导出或者直接利用houdini engine直接把HDA怼到引擎里面

    PS:其实Blender利用UE4官方的SendToUnreal插件也能直接把Mesh怼到引擎里面预览,减轻了Mesh导入导出的成本,不过在blender端修改Mesh的工作量还是没有减少。所以我目前觉得SendToUnreal更多的是作为引擎多边形编辑工具的拓展,重点在我上面的打Mesh草稿阶段,对整个美术资产制作流程的优化作用有限。

关于 procedural modeling 的思考

    不断完善自己工具链的过程也是明确自身需求的过程。就我个人而言因为美术功底和艺术上的创造力近乎于无,最多就是去artstation上找找灵感,然后到处翻教程。所以本身无法在这个方向获得足够的竞争力。而相比之下鄙人在编程上面相对擅长一些,所以我是更能够接受把程序化建模引入工作流并不断优化,同时放弃一些美术上自由度的方案。

Demo示例

下面通过一个蒸笼的模型来演示一下整个流程:

首先创建一个叫“steamer”的HDA。然后将其划分为4部分:

  • body 是蒸笼的主体,主要就是一个Tube在两边挤出然后利用polybridge掏空中间。

  • grid 是蒸笼每一层的网格底。
    就是简单的矩形变换然后和上面body的BaseTube做布尔运算切出需要的部分,就不上图了。

  • cap 是蒸笼的顶部原型盖子。

盖子部分我的做法是把一个平面投射到球体上,然后通过调整球体Y轴的半径来控制盖子的弧形感觉。

关于UV的小技巧

    虽然我们的模型面数很少,不过如果我们频繁HDA参数调整模型的拓扑结构,autouv所消耗的时间还是很多的,直观的感受就是电脑会卡一下。所以一般会在HDA的参数中添加一个启用UV的参数然后在switch节点中通过取值0或1来开关UV的自动展开。这样我们在频繁调整的时候就不会卡了。

    程序化建模对于新手来说最需要注意的一点就是对于UV空间的重复利用。例如像我们的蒸笼模型中,我们的蒸笼主体其实就是一个蒸笼格子一个个往上摞。所以他们完全可以公用同一块UV空间。当然这并不是完全没有问题的,如果你需要在某个格子上添加特殊的细节的话这种公用方案就无法满足。还有一点就是在UE4里面光照贴图要求UV之间是不能重叠的。不过这个其实引擎已经帮我们想到了,在我们把模型导入引擎的时候,引擎默认会帮我们生成一套专门的用作光照相关的UV(当然我们自己生成也可以)。就像我之前所说的,目前来讲“在某个格子上添加特殊的细节”这种操作并不能在美术上让我更有竞争力,所以我选择放弃这一点自由度换取数字资产在管线和效率上的优势。

导出fbx以及烘焙各种贴图

    houdini对我们常用的fbx和各种贴图的支持也是很好的。其中fbx导出没什么可说的,大家都一样。关于贴图的烘焙我们可以通过Gamedev(SideFxLabs)的插件里的maps backer来完成。

我们可以看到在maps backer中我们常用的几种例如法线贴图,Curature贴图,AO贴图等等都支持。

我们在用SP的烘焙的时候有一个选项就是OnlyByMeshName的选项。而在houdini中我们可以通过在烘焙前利用align and distribute节点让不同名称的Mesh分开依次间隔排列,这样就达到了和OnlyByMeshName相同的效果。


展望

    之前还接触过PDG相关的东西,不过目前来讲自己还没有这种需求,如果以后有机会我还是愿意试试的。随着技术的发展各个细分领域都可能会出现或者已经存在更加专业的解决方案,很难再出现一个工具cover所有需求的情况。那么多关注自身工具链的构建将各种解决方案有机的结合起来在当下就成了一件很重要的事情。

分享

saberuster
作者
saberuster
一个喜欢编程和折腾的追风少年