Hi,
我们在测试Groom毛发的时候遇到了一些问题,在运动速度过快时发现毛发会脱离头皮,而且移动时会呈不自然的炸开状。想了解下这是什么原因造成的?
另外我们发现这个模型的布料模拟,耗时非常高,这个是做法有什么问题么?
[Image Removed]
我们在附件中提供了视频和测试工程。
Hi,
我们在测试Groom毛发的时候遇到了一些问题,在运动速度过快时发现毛发会脱离头皮,而且移动时会呈不自然的炸开状。想了解下这是什么原因造成的?
另外我们发现这个模型的布料模拟,耗时非常高,这个是做法有什么问题么?
[Image Removed]
我们在附件中提供了视频和测试工程。
目前模拟帧率很低,我本地大概十几帧,帧率低会引起很多问题。毛发的模拟问题大概率首先和帧率相关。帧率低看了下和cloth的模拟设置相关,衣服的模拟设置参数有些很高,导致模拟慢,回复默认就快很多(从10帧提升到56帧)。包括毛发的模拟设置精度也很高,也拖累了速度。
布料频率效率设置: [Image Removed]毛发模拟频率设置:
[Image Removed]
选中相应LOD的布料部分模型,右键从选中的Section创建Cloth Data
[Image Removed]
Hi,
按照您上面说的还原成了默认设置。帧率确实是高了一些了。还有近一步的优化手段么?
另外运动速度过快时毛发会脱离头皮,而且移动时毛发会呈不自然的炸开状,这两个问题好像还是没有改善。
解算频率的修改在我本地提高了好几倍,不是一些些,不知道你指定只提高“一些”大概是多少(最好是单个角色测试比较)。如果只有一些,可能要看下其他配置或原因了。
毛发和布料的优化大思路是简化模拟的模型,简化模拟运算本身的复杂度,简化模拟运算的频率。比如制作LOD就是很好简化模拟模型的顶点的方式,还有就是刷权重尽量减少能模拟的顶点数。模拟运算复杂度一个是碰撞,一个是本身模拟解算器里一些复杂计算的开关等;简化模拟频率上面已经提到了。个人建议除了要非常小心sub steps的次数外,其次是LOD的制作着手。
毛发脱离或者炸开在游戏运行时会发生吗?因为我看到演示视频是编辑器里拖拽产生的结果,这个过程的可视化效果并不可靠
感谢老师,我们按您说的调整一下看看。
另外关于布料的简化模型,可以直接用模型的低面数LOD模型做布料模拟么?然后直接给到LOD0的模型上?还是说有其他更推荐的方式。
另外就是关于Groom毛发针对游戏的流程和标准,是否有什么可以参考的文档或者视频资料可以学习呢?
毛发脱离这个,目前只在编辑器里面发现有这样的情况,我们后面再看看在运行时还会不会出现这种情况。
布料模拟模型要求网格均匀,避免斜长三角面。简单布料,比如披风用LOD模型可以的。如果复杂服装要保证效果建议制作专门的模拟模型。另外模型的各级LOD都需要各自得模拟模型,这方面也可以继续优化。其他如果使用Cloth panel制作布料有专门的简化和均匀化顶点拓扑的节点来对渲染模型以及当前模拟模型简化后作为后续模拟模型使用,方便不少。
Groom毛发的设置我认为可以参考Metahuman的做法,关键是LOD需要制作,很多优化是基于LOD的。LOD根据屏幕大小切换,提供毛发数量减小,物理模拟开关等选项。比如游戏里很大部分时间头发可能屏幕占比是很小的,这个时候往往只需要渲染和模拟很少量的毛发,甚至切换到了cards级别。LOD也提供了以group为单位开关模拟的选项,比如角色顶部毛发是单独的group,并且并没有大幅度的运动,就可以在一定距离上切换到高级别LOD的同时关闭其物理模拟。
老师您好,我们还有一个疑问。就是您提到的给服装制作专门的Proxy Sim Mesh。我们理解的是在原有模型上加一个简化的模型当做Sim Mesh。然后在这个Sim Mesh上面刷布料数据,最终应用到渲染Mesh上。 流程大概是这样的:https://www.youtube.com/watch?v=cdwBBs3VO0c
但是您提到:模型的各级LOD都需要各自的模拟模型。
我们知道新的Cloth panel布料系统很容易做到这一点,但是新布料系统需要把布料部分单独拆分出来,我们目前是都做到角色身上的,所以暂时没办法用新的系统。
我们想知道老的系统应该如何做到这一点?难道要在角色身上加多个Sim Mesh,然后蒙皮到骨骼上么?
还是说共用一个Sim Mesh,但是给每个LOD加一个Cloth Data,然后按LOD0的那种做法去驱动各级LOD的渲染模型?
[Image Removed]另外关于上面这种方法,我也有一个疑问,就是如果是同一个Sim Mesh。那么如果我在引擎里面给Mesh添加LOD,似乎Sim Mesh也会被自动减面。有什么办法能让Sim Mesh不会被影响么?比如不管我给角色模型添加几个LOD,Sim的面数都始终保持LOD0的面数。
我看材质的Selection里面是有一个禁用的方式,不知道这个是否可以做到在给角色添加LOD的时候,不给Sim Mesh做减面。 因为我感觉其他LOD下Sim Mesh如果被减面过多的话,模拟应该会出现穿插之类的问题。
[Image Removed]
上面这些只是我猜想的如何在老的系统下,做模型的各级LOD都需要各自的模拟模型的方法。大概率应该是不正确的吧。所以想请教下是不是有什么其他的方式可以做到这一点?
大概就这些问题,希望老师能给解答一下,谢谢!
从以上机制和概念有几种可能的使用方式:
1、有3级LOD的角色,没有制作任何专门的布料模拟模型。UE里复制LOD0布料模型作为模拟模型,然后把这一模拟模型指定给所有三级LOD渲染模型。最后在布料权重配置里分别配置三个Clothing Data(虽然都是基于同一模拟模型),但为不同LOD重新刷权重。
2、有3级LOD的角色,没有制作任何专门的布料模拟模型。但UE里分别复制LOD0,LOD1,LOD2的三个布料模型作为模拟模型;然后分别再指定给这三级LOD,后续一样再对Clothing Data做刷权重及配置。
3、有3级LOD的角色,并分别制作了3级布料LOD模拟模型。UE里使用这三级额外的模型分别生成3个模拟模型(使用Remove from Mesh,也就是生成以后在mesh上就不被渲染了);后续再把这3级模拟模型分别指定给3级LOD渲染模型,后续同上
所以可以只有一个模拟模型,但3个Clothing Data;也可以有三个模拟模型,3个Clothing Data;这一个或者三个模拟模型可以只复制于LOD0,或者分别复制于各级LOD渲染模型,或者抽取于单独制作的模拟模型。
关于布料模拟模型的蒙皮问题:的确需要合适的蒙皮,尤其是当LOD可能去除部分骨骼后要确保没问题。如果使用LOD的渲染模型复制后作为模拟模型就没有这个问题,但如果单独的模拟模型就需要注意一下。给LOD模型指定更简单的模拟模型会起到性能优化作用,而且过于密集顶点的模拟模型来驱动低面的LOD也不会有效果加成,因此理论上最好是有LOD模拟模型的。但至于是否需要额外单独做,还是复制于LOD渲染模型可能要根据具体情况观察使用。
老师您好,
关于您说的第二点,有3级LOD的角色,没有制作任何专门的布料模拟模型。但UE里分别复制LOD0,LOD1,LOD2的三个布料模型作为模拟模型;
您说的复制,具体是指什么呢?旧的制作方式,布料都是在角色身上的,好像没有办法复制出来之类的吧?
原来是指的这个!感谢老师。
另外还有最后一个疑问,就是我上面提到的那个:
如果单独制作模拟模型,然后蒙皮在角色骨骼上。那么如果我在引擎里面给Mesh添加LOD,Sim Mesh也会被减面。有什么办法能让Sim Mesh不会被影响么?比如不管我给角色模型添加几个LOD,Sim的面数都始终保持LOD0的面数。
我试了下以下操作应该可以满足你提到的需求,你试试?:
在引擎内生称LOD模型前先把模拟模型全都生成好,假设有三级LOD:
[Image Removed]另外录了个视频供参考
明白了,感谢老师。