首页 > 游戏新闻 > 游戏资讯

西山居设计师谈《剑网3:指尖江湖》优化案例

发布时间:2022-03-19 13:34:44 来源:网络 作者:小编伯羽

  大家好,让我先自我介绍一下。我叫苏太亮,来自西山居。我现在主要负责剑网3:指尖江湖的优化。今天给大家分享的是指尖江湖项目的优化案例,《剑网3:指尖江湖》的优化。我们先来看看什么是动态骨架?我们可以在这里看两个视频。这是我记录的指尖江湖的角色创建的视频,这是藏剑山联合你们老板,你可以留意他的衣服,头发和振荡效应和袖子,我把从角色在这个阶段,你可以看到整个过程中运动的头发,服装更加真实、自然,动态骨骼的效果就是用在这些地方的,而且基本上是实时模拟动态骨骼的效果而不是艺术K动画。当然动骨架和动作的结合也很好,比如把叶莺的衣服吹起来的动作,效果也不错。接下来,让我们再看一段视频,比较一下叶颖的服装和发型。在这个视频中,我将所有的运动骨架效果都禁用了,相信大家可以看到区别,在整个旋转过程中,他的头发和衣服都很硬,没有运动骨架的乐观模拟,效果很差,很僵硬。

  什么是DynamicBone?DynamicBone实际上是一个名为DynamicBone的插件,通常用来模拟丝带、袖子、裙子、头发等的摆动效果。效果非常逼真,可以大大节省k帧动作的工作量。它广泛应用于手指湖,如玩家,NBC,坐骑,各种有趣的物体和吊坠。这是一个应用非常广泛的函数。右边的图片是指尖的一个字——“吉北清”。我已经标记了所有的地方,动态骨架是用数字,1,2,3和4。有的长,有的短,都有动态效果。让我们来感受一下动态骨架的使用,假设我们想要给予最长的爱此时,我们首先找到ribbon根的位置,在对象树中找到它的根,然后将它拖到动态骨架组件的节点上,并配置参数。这很简单。参数有很多,如阻尼系数、弹性系数、干燥系数、惯性系数等。阻尼可以被认为是一种阻力或摩擦,它降低了速度,弹性可以被认为是把你拉到一个目标位置,有各种参数,如果你感兴趣,你可以自己研究它。

  好了,现在我们知道如何使用动态骨架,让我们看看简化版的模拟,整个过程中动态骨架的简化模拟。让我们以ribbon为例,假设它有5个节点。在最后一帧中,它处于垂直状态,然后在当前帧中,它向右移动了一点。当然,它也有一点偏移和旋转,这一般是由于模型的位移或动作引起的。除了根节点,其他节点将从最后一帧的位置模拟。然后,根据各节点的参数,如惯性系数、弹性系数及上述各参数,对各节点进行相应的仿真计算,得到最优位置。最后,这个位置会更新到每个骨节点,并根据父-子节点关系、位置和最新位置来校正旋转,使整体看起来非常自然。让我们看看每一块骨头在这个过程中都有什么作用。核心代码集中于Update和LateUpdate组件。在Update中,它需要为每个骨头重置它的位置,在LateUpdate中,它做了大量的模拟,并最终设置为骨头,正如前面提到的。这里列出了一个完整的模拟。除了上面提到的阻尼和弹性,以及风力和重力的各种模拟操作外,印刷体积比较大。

  假设场景中有30个角色模型,每个模型有10个骨链每个骨架链10根骨头,总共3000根骨头,20个玩家在指尖竞技场加上坐骑,NBC等等,3000根骨头,这是一个正常的数字。这么多骨头,每个骨头都要做很多事情,表现如何?我们可以从优化前的数据开始。这是mi Max2在动态骨架组成中的CPU消耗,占了大约10%的CPU消耗,这是一个非常大的开销。这个模块占CPU总消耗的十分之一,这是相当大的开销。为什么动态骨骼如此耗费资源?这是一个很大的数目,可能总共有3000块骨头。这很复杂,需要很多模拟。值得一提的是,在整个仿真操作过程中,每个骨架都需要获取和设置世界坐标、世界旋转、世界矩阵等世界变化。

  当涉及到与世界变化相关的操作时,要特别注意Unity,因为这可能是一个耗时的操作。举个例子来说吧,在Unity中获取和设置世界的变化并不会在顶层使用世界坐标,而只会使用局部坐标。因此,每次获取或设置都是基于父节点逐层进行的,因此整个过程非常耗时。《指尖》中的许多骨头都有很深的层,就像这个一样。我已经检查过最深的层大约是20层,这确实有动态骨架的效果,所以它的层次非常深,计算世界坐标和旋转的成本非常高。层次越深,消费就越多。最后一点是,模拟是在Update和LateUpdate中完成的,需要在每帧的基础上完成,这意味着有固定的正常性能开销。现在我们知道了为什么它是如此的资源密集型,让我们看看我们为第一个版本的动态骨架所做的优化。让我们从以下三件事开始,这是我们在做优化时经常讨论的三个原则。首先是优先级,是的21、不做吃力不讨好的事,浪费的工作是最不应该的,尤其是在业绩方面。如果你不用做就能做,那肯定是最好的优化,因为如果你不做,那根本就没有优化,根本没有开销。如果你还是要做,考虑少做一些。最后,当你要做的时候,你要考虑你是否能做得更好,这可能有点抽象,但让我们详细地做一下。

  让我们来看看《指尖江湖》中纪氏的爱情图。我在1 2 3 4上面用红色标出了骨架的长度。在这个尺寸下,我想我们可以更清楚地看到这四条骨架链。好,让我们看看这张图,这是一张很小的图。4如果这个丝带很长,更清楚地看到,但是1和2已经看不清楚,尤其是骨头我与线,划线,其实这次是非常短的,在这种情况下,甚至有点僵硬,我估计我不能看到,尤其是在手机更小。因此,我们有了第一版的优化思路,根据骨链屏幕的投影程度,过短的骨链会直接关闭动态骨架的效果。

  投射长度可以使用骨链的静态长度,加上游戏的视场,这通常不会动态变化。所以计算它的屏幕投影长度几乎不用花钱。

  手机的平均宽度是70mm,所以小于2mm你就看不清楚了。长度也可以根据型号、机器情况和性能不同的画面质量来定制,当然也可以实时跟踪不同的压力,实时调整。我们能做得更少吗?我们仍然可以使用投影长度,我们可以取中等的骨头,比如1或3个骨头,在一些情况下保持最基本的刚性操作,保持最基本的效果。最后,考虑一下你是否能做得更好。在这个阶段,只能是死爆算法,在算法级进行优化,尽可能减少消耗。这里我们使用局部坐标来减少世界坐标的操作,正如前面提到的世界坐标的操作是一个非常耗时的操作,使用有些标语是为了减少重复。最后,我们需要减少组件的数量。一个字符,一个组件可以支持多个骨架链,因为在组件的数量上有一些正常的开销。这是我们在第一个版本中的优化。

最新发现

相关资讯

今日热榜

热门游戏