使用软件: Houdini 18.5
UE4版本: 4.26
所需技能:Houdini基础操作,UE4基础操作
前言:
自己随便摸索瞎玩玩,做笔记与分享用。不保证全部正确,如有问题欢迎留言一起讨论。有可能出后续,有可能不会(咕咕咕)。
- 为方便用过Houdini却没植过毛的小伙伴食用,前半部分会简易的手把手做一点植毛。后半部分篇主要为Houdini导入UE4时,坐标轴对齐,粗细调节,使导入的毛发尽可能和houdini内生成的结果保持相近与一些简单的调节方法,以及一些尝试和在途中遇到的问题及解决办法。
- 整体为比较简单的初级内容。不涉及骨骼,动画,物理等。
- 个人认为比较重要的在于【1.3Houdini调整width尖端】和【2.3 将Width属性准确传递给UE4】
- 使用斜体字的地方为Houdini的节点名
1.Houdini毛发的准备
想做比较高端的动物毛发的话,非常建议去SideFx搜索Grooming Barry Bacon教程。这三部的毛发教程非常的硬核。做教程的小姐姐本身就是专门做动物毛发艺术家,非常细致的讲解了Houdini制作动物毛发的整个流程,也包含了很多Houdini小技巧,有蛮多是我的知识盲区的。
粗略的看了一下,主要是用手去绘制一些Guides,和Masks,然后用节点进行处理。类似于3D雕刻,想要得到最佳的效果是比较需要花时间去调整的。
Introduction-to-grooming-in-houdin教程传送门
我在这里就不对毛发的作成方式进行特别详细的介绍了。没有用过GroomHair的小伙伴就凑合着一起整一下吧。
1.1 模型的准备
准备一个模型,把需要植毛的部分Group起来(Fur),并创建一个Null节点用于输出(OUT_GEO)。
如果模型的面数非常少的话,可以按需求先subdivide的一下,得到的毛发结果也更好一些(不然没选到的地方可能会秃)。
为方便调整,请注意模型的大小调整与现实世界的大小保持一致。与UE4的cm单位不同的是,Houdini的单位为m,从UE4中导出的模型记得要首先缩小100倍。
这里因为我的猫爪和肉球模型是比较随意的分开做的,就用猫爪全体减去了肉球覆盖的部分
1.2创建Guide
创建一个Guide Groom节点。
与猫爪模型的OUT_GEO节点连接,并限制Group在刚才创建的Fur上。
调整Density(密度)之类等属性。
越密点越多导入所需要的时间越长,一开始还是用少一点的来尝试。
猫爪毛刷
进入Guide Groom节点,添加Guideprocess来简易的调整guide的走向。
搜索guideprocess,教程网上也蛮多的,具体数值就不放了,你们随意的调整一下玩玩吧。
1.3 植毛,调整width的尖端
回到上一层,添加Hair Generate节点并连接
可以添加一个hairshader用来方便观察毛发
跳入Hair Generate 节点内,在内部创建一个Hair Generate节点,连接并将生成毛发的Group也限制为Fur。调整密度和其他(同样,一开始也是少一些尝试比较好)
调整width的尖端
这里我们先填入0.0001,也就是0.1毫米。可根据喜好调整。
下面一定要注意!!
HairProfile右下的最小值一定不要设置为Houdini默认的,稍微提高一点,否则把width的给UE时会因为宽度为0,导致导入后的毛变成一种倒三角的形状,就像是满身中枪...
关于width属性传递给UE,请详见下面的 【
2.3 将Width属性传递给UE4】
圆圈中的点要稍微往上提一点
并创建一个Null(OUT_ShortFur)节点,稍后用来导出用
1.4 初步导出abc文件
创建新的GEO节点,使用Object Merge节点读取刚才的OUT_ShortFur节点。
这里先把所有的attribute删除,看一下效果
对应UE4的cm单位,加一个Transform节点并将Scale扩大100倍
这里导出的大小十分重要,如果导出的毛发大小过小,有可能会导致Import时引擎崩溃或得到的渲染结果有偏差
最后创建一个Rop Alembic Output节点,输入导出路径文件名.abc,导出毛发到文件.
因为是在Geo节点中,所以左侧的结果无法显示width的变化,请以Hair Generate节点的结果为准
2.导入UE4
2.1 Plugin勾选,重启UE
2.2 导入Scale,Rotation对齐坐标轴
将刚刚的abc毛发文件拖入Contents Browser, 会出现Groom Import Option
这里,为使与Houdini的坐标一致, 填入
Rotation x:-90 y:0 z:180
Scale x:-1
然后import。(根据电脑的情况和毛的密度,有可能需要等待几分钟导入完成)
拖入地图中,确认坐标一致的情况下可以与模型完美重合
另外值得一提的是,就算我们并没有专门导出任何属性给UE,在UE的毛发界面里进行UV预览也能观察到每一根的毛发都从毛根到毛尖有UV。每一根也都有独立的Seed。都可以在材质里调出使用。
一点通过调整毛根毛尖颜色的尝试
2.3 【将Width属性准确传递给UE4】
从上图所见,好像导入的结果与Houdini中的结果已经很相似,内心还有点小激动,想要立马开始调整width,density...一顿噼里啪啦操作作出那种正油哇亮的效果。
但各位小伙伴们,先不要心急,后面还有一个坑在等着我们。
将Hair Width先适当调高,可以发现目前毛与Houdini Hair Generate给出的结果不同,从上到下的宽度一致,其实我们还没有把wdith属性传给UE。
官方文档给出了一些我们可以给毛发的属性
https://docs.unrealengine.com/en-US/WorkingWithContent/Hair/AlembicForGrooms/index.html
这里Uniform对应Houdini里毛发的Primitive
要传递width属性给UE,需要在vertex顶点上添加groom_width属性
让我们先回到Houdini。在Hair Generate可以查看到point属性 width
让我们使用一个Attribute Promote 传递给vertex属性,也不要忘记在Attribute Delete里保留groom_width属性。
这里我的建议是添加一个Attribute Wrangle,给@groom_width *= 100, 也是为好观察,以及方便对应UE的单位cm。
然后再次导出,在UE里右键毛发资产并Reimport。可以宽度0.2时看出毛尖宽度有所变化
【坑1】groom_width最小值一定不要为0
如果你没有按照1.3里讲的将width的最小值提高一点点,将会得到如下图的根尖结果。或者干脆是倒三角形的。或者也可以在最后调整属性,将groom_width的最小值提高一点,并且注意不要导出负数。
【坑2】如何使调整UE中的Width值,使与Houdini内部粗细一致
这里经过我的测试与观察,UE4内显示的粗细,应该是对所有Groom_width属性的值进行了一个除以最大值的处理,以保持导入的毛发在Hari width值为1时,最粗的毛永远是1cm。
(如果不对欢迎指正)
大概是这样的:
让我们先回到Houdini中观察一下*100以后的groom_width的值,进行排序后发现最大值
那么,我们在UE中所有点的实际Width的值,都是经过了
groom_width/max_groom_width * Hair Width = groom_width/ 0.01(cm) * Hair Width
的处理的。要想得到和Houdini中相同的结果,只需要在UE的Hair Width值里填入与max_groom_width相同的值0.01即可。 在此基础上再进行细微的调整。
同理,如果你的最大值不是0.01,而是0.05,就要在Hair Width里填入0.05的基础上进行调整
可以看出0.01的情况下结果基本一致
如果不调整Hair Width的值,只调整max_groom_with的值,你会发现虽然Houdini内看的结果粗了很多,但是UE内结果一成不变,或者本来数值没有改变的地方,反而变得更细/粗了的情况。
groom_withremap到最大值为0.05的情况下Reimport后,结果和之前最大值0.01时一模一样
2.4 添加其他的Group id的毛发
要做成质量比较高的毛发都需要多个分组,方便使用不同材质和进行其他的调整。
方法也非常简单。
这里我直接复制了刚才的GuideGroom和HairGenerate,然后分别调整了长度和密度,使刚才做的毛比较短而多,新复制的毛虽然少但稍微长一点。
大概效果是这样的
然后分别在两个Hairgen里,为导出之前的添加一个不同的groom_group_id即可。
注意要与文档中要求的int 32,primitice所对应
然后到导出用的Geo节点,将两个毛Merge到一起,最后不要忘了在AttributeDelete添加保留这个属性
重新导入就可以看到有2个Group了
*这里也注意一下width是按照每个组的最大值进行除算的,所以如果每个Group的max_groom_width不同的话,要分别调整Hair Width
2.5 颜色
颜色的调用啊调整基本都是在材质内。具体的官方文档里有使用方法。
Houdini内跟上面也没有什么太大的不同,在物体表面绘制颜色然后把颜色属性(vector)传递给vertex的groom_color属性即可,目前也没有其他特别需要注意的地方。
先是用attribute paint在模型上简单涂抹了几下,然后把属性Ramp给颜色
在HairGenerate里导给毛发颜色,最终在导给groom_color
简单整了个材质
总体来讲,个人感觉用Houdini做毛修改起来还是比较方便的。
在导入UE使大概要注意这4点:
- Scale要对应
- width最小值不要有0
- 修改groom_width的最大值的话,Hair Width最大值也要相应修改
- 使用Groom Group 时,修改相应的每组的最大值
那么,就先这样吧。各位小伙伴有缘再见~~~~(写不动了,摸了摸了)
第一“猫”称游戏(伪)