图形引擎实战:布料功能在项目的应用

概述

随着玩家和业界对游戏效果要求原来越高,项目对高表现力高性能效果也有了更迫切的需求,在实际工作中,项目提出布料效果需求有以下几点:

1 需要支持双层布料,运动时保证不得穿插。

2 编辑相关属性要方便而快捷。

3 布料运行效率高,内存占用少。

经研究测试,unity自带的布料系统有很多限制,以上需求中的双层布料无法满足,修改的话要深入引擎层,需要项目编译unity版本才可使用,为以后的升级版本带来很多问题。比对市面各种插件和工具后,选择以MagicaCloth为基础来修改。

之所有选择MagicaCloth,是其相比其他类似插件有如下优势:

1完全用C#实现,保证最好的兼容性。

2 使用Job+Burst实现并行高速模拟计算,效率高。

3 编辑功能清晰完整,开发效率高。

4 支持多种布料方式,骨骼布料,骨骼弹簧,网格布料,网格弹簧等。

项目的需求主要使用网格布料,因此主要对网格布料做了改造,改造的主要目标如下:

  • 多层布料支持
  • 效果提升
  • 效率提升

一.多层布料支持

1. Magica Cloth默认的数据生成

MagicaCloth的网格布料需要预生成数据,支持蒙皮网格。基本的流程是根据蒙皮网格生成一套虚拟布料网格,这套虚拟布料网格由原始网格计算而来,整体形状和原始蒙皮网格保持一致,但是顶点并不对应,可以通过调参数控制生成的虚拟网格的顶点数,然后再将虚拟网格导入布料网格,其中可以设置每个顶点是否为布料点,并调整布料相关参数,然后就可以导出预生成数据。

2.修改虚顶点生成逻辑

MagicaCloth默认的虚拟顶点生成流程:

对于双层布料而言,需要的是第二层布料(一般是外层)跟随第一层布料运动,即一层主动,一层随动,根据以上MagicaCloth逻辑,每个虚拟点都是主动点,驱动一个或者多个原始顶点(即渲染的顶点)运动。因此只要能给第二层布料的原始顶点找到合适的主动点,就可以让第二层布料跟随第一层布料运动了。

因此,可以在创建预加载数据第一步先区分出主动点和随动点,随动点不会生成虚拟粒子,而是映射到离自己最近的主动点被主动点驱动,相关逻辑改为如下:

修改后,第二层布料的顶点都会映射到合适的主动点跟随运动了。

但是,随着使用的深入,发现两层布料间有粘连的问题,这个是因为主动点和随动点的映射关系是根据距离确定的,但是在某些特殊情况下,距离随动点最近的主动点却不合适。因此,加入一个自定义主动点和随动点映射的功能。

增加此处理后,基本可以保证两层布料的正常运动。

3.编辑功能相关修改

为了实现虚拟粒子相关功能改动,增加部分编辑功能,下图是虚拟粒子阶段增加的编辑功能:

在MagicaVirtualDeformer组件上增加 Start Point Selection按钮,可以打开虚拟粒子编辑。

打开后,则列出各个可以设置的属性:

Point Size:显示虚拟点的粒子球大小。

showPointIndexMin:可显示的顶点对应索引范围的开始(控制只显示部分顶点,方便编辑)。

showPointIndexMax:可显示的顶点对应索引范围的结束。

下面都是各种显示属性的勾选框。

可以选择粒子类型为主动粒子(代理点)还是被动粒子(非代理点)

如果有自定义指定粒子链接关系的需求,则可以打开Start Point Link,编辑相关属性。

编辑效果如图所示:

二、布料效果提升

MaigcaCloth计算布料粒子时没有权重插值平滑功能,导致布料在边界位置过渡效果不好。因此我们在修改MagicaMeshCloth组件的编辑功能时,也增加了权重相关编辑:

使用上图编辑功能可以控制布料粒子的布料运动和原始蒙皮运动的混合权重,提升边界处的运动平滑性。编辑功能直观方便,可以直接观察。

三、布料效率提升

1.功能相关修改

1 分离布料数据,导出单独的prefab,用于低配机等不需要开启布料时提升效率,避免无用的内存占用和加载导致的cpu消耗。在MagicaRenderDemormer上增加属性,指定带Renderer的渲染Obj,如下图:

2 设置模型主体的瞬间移动和旋转对布料粒子的影响程度。用于剧情或者游戏中玩家瞬间切换位置,避免布料被强制拉伸导致的效果错误。

3 增加强制刷新布料接口,用于适应客户端部分特殊做法:比如因上级节点移动到极远,缩放为0等导致布料效果错误后的重置。

4 增加布料的Job计算中除0判断相关,避免布料计算出错。

5 增加布料的Job计算中骨骼数据判断,因动画中pos数据有NaN数据导致的布料效果错误。

6 布料销毁时删除速度优化。

欢迎加入我们!

感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com

#搜狐畅游##2024届校招##引擎开发工程师##技术美术#
全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
评论
9
5
分享
牛客网
牛客企业服务