
English: 
(upbeat music)
- [David] Okay, so my
name is David Coleman
and I'm a Technical Art
Director at The Coalition.
Today I'm gonna be talking about Gears 5's
real-time character dynamics.
So before I get started, though,
I'm gonna show a little
video that shows our game.
(ominous music)
- [Man] You find what you're looking for?
- [Kait] Yeah.
And now I need to kill it.
(beast roars loudly)
(dramatic music)
- [Clayton] I'm not gonna lie,
it's real ugly out there.
- [Fahz] Down!
- [Kait] Then we watch each other's backs.
Like always.
(intense music)
- [Kait] You got it, Carmine.

Chinese: 
（欢快的音乐）
- [David] 大家好，我叫 David Coleman，
是 The Coalition 的技术美工总监。
今天我要讲的是《Gears 5》的
实时角色动力学。
但在开始之前，
我想先通过一小段视频来展示我们的游戏。
（可怕的音乐）
- [男人] 你找到目标了吗？
- [Kait] 找到了。
现在我要杀了它。
（野兽大声怒吼）
（振奋人心的音乐）
- [Clayton] 我不想说谎，
外面真的很危险。
- [Fahz] 趴下！
- [Kait] 我们相互掩护。
和往常一样。
（紧张的音乐）
- [Kait] Carmine，到你那边了。

Chinese: 
（紧张的音乐）
- [Carmine] 再见！
- [Kait] 噢，你看到那个喷枪了吗？
（紧张的音乐）
- [Sarah] 这一枪真干净利落。
（紧张的音乐）
- [Reyna] 啊，真恶心。
- [Kait] 快离开 Venom！
- [Damon] 炸弹快爆炸了！
快跑！
（紧张的音乐）
- [Sarah] 我们必须马上离开！
（紧张的音乐）
- [士兵] 出来吧，我们不怕你！
（战斗的声音）
（紧张的音乐）
- [Augustus] 嘿！还记得我吗？
精彩部分现在才刚刚开始，混蛋！
（紧张的音乐）

English: 
(intense music)
- [Carmine] Good night!
- [Kait] Oh, did you see that spray?
(intense music)
- [Sarah] A clean kill.
(intense music)
- [Reyna] Well, I'm sick.
- [Kait] Get out of the Venom!
- [Damon] Bomb's about to blow!
Run for it!
(intense music)
- [Sarah] We gotta leave now!
(intense music)
- [Soldier] Come out, come
out, wherever you are!
(battle sounds)
(intense music)
- [Augustus] Yah! Do you remember me?
Now's the fun part, bitch!
(intense music)

Chinese: 
- 好的，正如大家在视频中看到的那样，
我们设置了许多不同的角色和野兽，
还有各种各样的武器和场景等等。
而今天我要讲的就是我之前提到的
动力学。
但是，我首先要讲的是《Gears of War 4》的动力学，
也就是在开始开发《Gears 5》之前所采用的动力学。
接着，我会聊一聊在开始《Gears 5》的前期制作时，
我们制定了什么样的
动力学系统目标。
我会讲一讲最终开发出的系统——
Rod Dynamics，
并介绍这个系统的
开发过程。
然后，我会展示
如何使用该系统，
以及我们设置的一些
不同的生物。
接下来，我将讨论我们在开发这个系统时
遇到的一些难题。

English: 
- Okay, so as you saw in
that video we have a lot
of different characters and monsters
and all kinds of things.
So, what I'm gonna be talking
about today is the dynamics,
as I mentioned.
But I'm gonna start with
the Gears of War 4 dynamics
that we came from before we
started developing Gears 5.
And I'm gonna talk about
what were our goals
for our dynamic system
as we started pre-production in Gears 5.
I'll talk about the system
that we ultimately developed,
which is called Rod Dynamics,
and what would that process was like
as we developed that system.
And then I'll show some of the workflow
in using that system,
along with some examples
of different creatures
that we set up.
And then I'm gonna talk
about some of the challenges
that we ran into with this system.

Chinese: 
最后，我会在过场动画、游戏以及
其他场景中展示我们的
一些成果。
然后，我将进行总结，
如果是现场直播，我还会留一些时间提问，
如果大家想联系我，
可以在领英上找到我的联系方式。
那么，首先我们来讲一下《Gears of War 4》。
在《Gears of War 4》中，我们的动力学系统
主要使用 PhysX 布料。
这对我们来说存在一些限制，
因为我们发现性能以及
我们的性能目标
确实限制了
每个角色只能使用 50 个顶点。
这个数目并不是很多，
因此画质不是很高。
在这版游戏中，我们主要使用 PhysX 布料。
但对于刚体动力学，
我们也使用了一些 Unreal AnimDynamics。
而且，在一些地方我们还使用了 Ragdoll Physics，
尤其是在处理 Carrier 的尾巴时，
我将在本视频的后面详细介绍这种技术。
这导致最终我们需要
管理多个系统，

English: 
And, at the end, I'll kinda
show some of our results
in our cinematics, in our game play,
and different scenarios.
I'll summarize, and then we would have
some time for questions
if this was a live event,
but if you want to reach out to me
I'm sure you can find me on LinkedIn.
Okay, so, let's get into it
starting with Gears of War 4.
So, in Gears of War 4 we
primarily used PhysX cloth
for our dynamic system.
And that was kind of limiting for us,
because we found that the performance,
with our performance goals,
was really limiting us
to only using 50 vertices per character.
Which is not a lot.
It's not very high quality at that point.
So we were primarily using PhysX cloth,
but we also used some Unreal AnimDynamics
for our rigid body dynamics.
We also had some examples
of using Ragdoll Physics,
specifically for our Carrier tail,
which I'll be going into more
later in the presentation.
So, ultimately, we had
these multiple systems
that we had to manage.

Chinese: 
进而导致我们很难对它们进行迭代。
上述每一个系统都有各自的
迭代难度，
它们之间相互作用，
迭代更是难上加难。
我们发现，要实现我们的目标，
这些系统会导致性能大打折扣。
而我们遇到的另一个主要问题是，
我们所有的过场动画
都必须对所有次要事物，
例如服装、头发等，
进行关键帧动画处理。
这显然是不切实际的。
过场动画设计师一点儿也不想
这样做。
他们希望能够提高性能，
这才是他们的用武之地。
所以，总的来说，《Gears of War 4》
采用的动力学系统所实现的画质很受局限。
因此，在《Gears of War 5》中，
我们希望拥有更高画质的视觉效果。
这是我们的主要任务之一。
我们希望它在视觉上看起来更棒。
除此之外，我们还想只实施一个统一的系统，
以避免系统不同所带来的问题。
当然，我们还想解决
过场动画方面的问题。
所以，在《Gears 5》中，我们改为全部使用实时过场动画，

English: 
And that made them
challenging to iterate on.
Each of these systems
had their own challenges
for iteration,
but even the fact that
they were different systems
brought their own challenges.
We found that the systems
were pretty performance costly
for our goals.
And the other major problem that we had
was that all of our cinematics,
we had to do keyframe animation for all
the secondary things like cloth, and hair,
and so on and so forth.
And so that's definitely not ideal.
The cinematic animators
didn't wanna really
be working on that.
They wanna work on performance,
which is what they should be working on.
So, overall, our quality
was kind of limited
when it came to dynamics
for Gears of War 4.
So, with Gears of War 5,
obviously we wanted to have
higher quality visuals.
So that was kind of our,
one of our main pillars.
Like, just make it look way better.
But we also wanna make
it in a unified way,
so that we didn't have the
problem of disparate systems.
And we wanted to, of
course, address the problem
that we had with our cinematics.
So we switched in Gears 5 to
using all real-time cinematics,

English: 
cause we wanted to make sure
that the dynamic systems
would work in that kind of an environment.
Of course, the system has to support
our challenging performance
goals that we had.
And really that was 60 frames per second
in all game modes on XBox One X.
So that's Campaign, that's
Multi-player, all of it.
Always 60 frames a second,
which is definitely a challenge.
We had to come up with making sure
that we could have a dynamic system
that would support all of the
different character complexity
that we were looking
at in our concept art.
So lots of different hair,
ponytails, dreadlocks.
We had lots of capes and chains,
and bandoliers and chains,
and leather straps that
are tied onto a character.
And we also had a lot
of these concepts coming
that were robots that were infected
by what we call the swarm,
and so that means that
we had lots of tentacles
kind of dangling off of them.
So, with those goals in
mind we led onto this path

Chinese: 
因为我们希望确保动力学系统
能够在这种环境下工作。
当然，系统还必须能够帮助我们实现
已定下的那些极具挑战性的性能目标。
实际上就是让 XBox One X 的所有游戏模式
实现每秒 60 帧，
包括战役模式、多人模式等等。
始终每秒 60 帧
确实是一个很大的挑战。
我们必须想方设法确保
有一个动力学系统
可以支持我们在概念创作图中考虑的
所有不同角色的复杂性。
不计其数的头发、马尾辫、长发绺。
许许多多的斗篷和铁索、
弹药带和链条，
还有绑在角色身上的皮带。
而且，我们还有很多这种
被蜂族感染的
兽兵的概念，
这意味它们身上
会垂着许多触须。
牢记这些目标，我们进入了开发流程，

Chinese: 
希望能够获得一个
可以实现所有目标的系统。
但我们并未真正开发出能够
根据设想满足所有目标的
任何系统。
尤其是在性能方面。
于是，我们问自己“该如何实现这些目标呢？”
随后我们想到了，要是可以同时模拟
刚体和软体动力学，
那么就可以统一这些系统。
抱歉，是如果我们可以同时模拟
骨骼的刚体和软体动力学，
那么就可以统一这些系统。
因此我们进行了探索，
尝试了多串骨骼链，
而仅仅是标准的线性蒙皮，
我们也可以制造一些索具来支撑它，
结果看起来相当不错。
幸运的是，在《Gears》中，
我们的一些角色使用厚皮革布料和道具。
我们没有很多丝滑的织物类道具。
这对我们也大有帮助。
所以我们想到，
如果能把基于位置的动力学应用到骨骼上会怎样呢？
下面，我准备讲一讲什么是基于位置的动力学。

English: 
of okay, let's develop
a system that will meet
all of those goals.
Because we really didn't
find anything out there
that would meet all of the goals
in the way that we
wanted to approach them.
Particularly when it came to performance.
So, we asked ourselves, "How
can we achieve these goals?"
And so, we thought,
well if we can simulate
both rigid and soft body dynamics,
we could unify those systems.
Sorry, if we could simulate bones
for both rigid and soft body dynamics,
then we could unify those systems.
And so we discovered, well,
we tried some multiple bone chains,
and just standard linear skinning,
and we could kind of create
rigging that would support that,
and look, you know, fairly decent.
Luckily, for Gears, we
have characters that have,
you know, thick leather cloth and stuff.
We don't have a lot of,
like, silky fabric and stuff.
So that really helped us as well.
So then that led us to, well,
what if we can apply position
based dynamics to bones?
And I'm gonna talk about what
position based dynamics is,

Chinese: 
基本上，现在大多数
游戏系统都在使用这种动力学，
例如 PhysX、Havok 等等。
于是，我们尝试将它直接应用于骨骼，
而不是顶点。
我们先来讲讲基于位置的动力学，
就开发而言，这种动力学相对比较常见。
大家可以查看另外一篇论文了解相关知识——
《基于位置和方向的 Cosserat 杆》。
最终，根据这两篇论文，我们开发了
一个系统，称为 Rod Dynamics。
好了，我们来谈谈基于位置的动力学，
以了解构建系统所需的
基本内容。
就像我刚才说过的那样，
很多游戏布料系统都在使用它，例如 Havok 和 PhysX 布料。
从根本上讲，它只是粒子的集合，
相互之间形成约束。
所以，碰撞是通过将粒子投射到
碰撞体之外来分解的。
接下来，我将通过一个例子来
逐步逐帧地
介绍一个非常简单的单串骨骼链。

English: 
but basically it's what most
of the game systems use nowadays.
PhysX, Havok, et cetera.
So we thought, let's try and
apply that to bones directly
instead of to the vertices.
So, as super-high level in
terms of our development
we started with position based dynamics.
And that led us to
looking at another paper
called Position and Orientation
Based Cosserat Rods.
And ultimately from those two papers
we developed a system called Rod Dynamics.
Okay, so, let's talk about
position based dynamics
so that we have a foundation
of what this system is built upon.
So it's used, like I
said already, it's used
by many game cloth systems,
such as Havok and PhysX cloth.
And it's basically, it's just
a collection of particles
with constraints between them.
So, collisions are resolved by projecting
the particles outside of collision bodies.
And so here I have an example
of just walking through,
step by step, frame by frame,
of a very simple, single-bone chain here.

English: 
So we're gonna imagine that
the bone, the root bone there,
is pinned in place so it can only rotate.
And so we set up our particles
at our root and at our end.
And then we measure the distance
between that root and that end
to give us a length constraint.
And then we update the
particles velocities
by starting with some gravity.
And so then we can estimate,
well where's the particle gonna move
with that gravity.
So we push it down there.
And then we generate our
collision constraints.
And in this frame, the
particles outside of collision
so it doesn't really matter.
And then we resolve, iteratively, between
the collision and the
length constraint itself.
And then we can look at
what was the velocity
from previous frame to this frame.
And then we can carry
that velocity forward
to the next frame and, at the same time,
update our bone positions
to match these particles.
And so then for the next frame
we start adding some more gravity.
So here we add that.
And we get our new, a fitted position.

Chinese: 
假设骨骼的根骨骼在这里，
被固定在一个位置，只能旋转。
我们在根骨骼和末端
创建粒子。
然后测量根骨骼
与末端之间的距离，
以确定长度约束。
然后，开始施加一些重力
来更新粒子速度。
这样我们就可以估算出，
粒子随重力作用
将移动到哪个位置。
我们把它拉到下面。
然后生成碰撞约束。
在这一帧中，粒子投射到碰撞体之外，
因此无关紧要。
然后，我们在碰撞约束和长度约束之间
进行迭代分解。
接下来我们看看
从上一帧到这一帧的速度。
我们可以将该速度
传递到下一帧，
同时更新骨骼位置以匹配这些粒子。
因此，对于下一帧
我们开始施加更大的重力。
我们在这里施加，
得到一个合适的新位置。

Chinese: 
重新生成碰撞约束，
找到碰撞体中的粒子。
然后将该粒子投射到碰撞体之外。
但是你会发现该粒子
与它的根粒子相距较远。
此时，我们便可以在碰撞约束和
长度约束之间进行迭代分解，
以找到合适的粒子位置。
然后，我们查看上一帧的位置，
获取速度。
我们继续操作，依此类推。
因此每一帧都将进行
这种迭代。
所以，该系统存在一些局限性，
在查看基于骨骼的系统时
尤其如此。
这就是我们的目标。
事实就是，粒子
只是空间中的位置。
它们没有方向。
因此，如果想对系统中的骨骼
施加一些弯曲约束，
则需要额外进行分类。
这超出了该系统的范围。
你无法使用粒子模拟弯曲和扭转。
事实上，这种弯曲或旋转

English: 
And we regenerate our
collision constraints,
and we find the particles
inside the collision.
So then we project that particle
outside of the collision.
But then you can see that
that particle is very far away
from its root particle.
And so that's where we
would iteratively resolve
between the collision constraint
and the length constraint
to find the proper particle position.
And then we look at the
previous frame's position
to get our velocity.
And we carry that forward,
and so on and so forth.
So for every frame we're gonna be kinda
going through that iteration.
So, that system kinda
has some limitations,
particularly when you're looking at it
for a bone-based system.
Which is what our goal was.
So the thing is, is that particles
are just positions in space.
They don't have an orientation.
And so if you wanna apply
some bending constraints
onto the bones that are in your system,
then that requires additional bookkeeping.
It's kind of outside of this system.
You can't model twist and
torsion with the particles.
Like, you won't be able to get any

Chinese: 
都不可能实现。
这是一个主要的限制。
幸运的是，基于位置的动力学
的最新扩展解决了这些问题。
那就是基于位置和方向的 Cosserat 杆。
它基本上是通过模拟弹性杆的
弯曲和扭转来实现扩展。
它向系统添加了
方向和角速度。
与基于位置的动力学粒子
及其速度并存。
因此，你可以将其视为两个系统
协同工作，一起创建最终的动画。
好的，我们还是用这个例子
来简单讲讲 Cosserat 杆。
我们在根骨骼和末端
建立粒子。
然后将获得与之前
相同的长度约束。
不同之处在于
插入系统的杆。
我们像之前一样更新粒子速度。
在这里找到粒子位置。
像之前一样生成碰撞约束，

English: 
of that kind of twisting or rotation.
So, that's kind of a major limitation.
So, fortunately, a recent extension
to position based dynamics
addresses those problems.
And that's position and
orientation based cosserat rods.
So, it basically extends it
by simulating both bending
and twisting of flexible rods.
And so it adds orientation
and angular velocity
into the system.
And it works alongside position
based dynamic particles
and their velocity.
So you can kind of think
of it as two systems
working together to create
your ultimate animation.
Okay, so, let's go
through the cosserat rods
in the same example.
So here we set up our particles
at the root and at the end.
And then we get the same length constraint
like we did before.
And then the new thing is that rod
that we insert into the system.
And so, just like before, we
update the particle velocities.
And we find our particle position here.
And we generate our collision
constraints just like before.

English: 
And we resolve our length constraint.
And now the new thing is that the rod,
it gets taken into a place.
And so if I just go in and
go back and forth here,
you can see that the particle and the rod
are becoming in a colinear space.
So they're resolving themselves together
so the rods have a stiffness in this place
so that you can see that
they don't quite meet each other,
but they're resolving themselves together.
And so we then move forward
with updating our particle velocities,
and also our rod angular velocities.
And we can carry those
forward to the next frame.
And so, again, we go through
and we add our gravity
to the particle to get
its new particle position.
We then add our angular
velocity to the rod,
and then we find the particle
is inside of our collision constraint,
so we pop that out.
And then we resolve its length constraint.
And then we resolve between the rod system

Chinese: 
然后分解长度约束。
现在，新的东西是这个杆，
它固定在一个地方。
如果我只是在这里来回移动，
你会看到粒子和杆
逐渐位于共线空间中。
它们会一起分解，
使杆在此位置得到一个硬度，
你可以看到
它们并没有完全相遇，
而是一起分解。
接下来我们继续
更新粒子速度和
杆的角速度。
我们可以将它们传递给下一帧。
好，我们再过一遍，向粒子施加重力，
获得新的粒子位置。
然后向杆施加角速度，
我们发现粒子
在碰撞约束内，
我们把它移出来。
分解它的长度约束。
然后在杆系统和基于粒子的

English: 
and the particle based dynamic system
to give us our ultimate end frame here.
And then, of course,
we carry forward our velocities
to the next frame and update.
And so, again, I just want to highlight
the difference between
position based dynamics
and cosserat rod system
is that the cosserat rod system has
the position based dynamics,
but it adds into it this
notion of these rods
to give us the control over
the bone stiffness themselves.
So we can apply, you know,
all kinds of twist and
bending constraints.
So that really helps,
especially when you're going to a system
that's based on bones.
So, with those two papers we were able
to develop rod dynamics.
And so now I'm gonna talk about
our implementation of rod dynamics.
And we'll start with some terminology.
So here we have a bone chain,
and here we apply the
particles to that bone chain.
This is what we call a strand.
So it's a strand of particles and rods.

Chinese: 
动力学系统之间进行分解，
得到最终的帧。
然后，
我们将速度
传递到下一帧并进行更新。
好，我想再次强调
基于位置的动力学
与 Cosserat 杆系统之间的区别在于
Cosserat 杆系统有
基于位置的动力学，
但是它加入了这些杆的概念，
让我们可以控制
骨骼的硬度。
我们可以应用
各种扭转和弯曲约束。
这非常有用，
当使用基于骨骼的系统时，
尤其如此。
根据这两篇论文，我们
开发出了杆动力学。
接下来，我将讨论一下
杆动力学的实现。
我们先来看一些术语。
这里有一串骨骼链，
我们将粒子应用于该骨骼链。
这就是我们所说的线。
线上有粒子和杆。

English: 
And here we have a strand root,
and, as a parent, we have
a root bone parent here.
So the reason that that
is important is because
we might wanna apply some
stiffness to that strand root,
and so we have to have a
reference to its parent bone
so it's stiff in relation to that.
And then in between the particles
we have the rods, of course.
And of course these are
the particles themselves.
Okay, so, like I said this is a strand.
And we have this novel feature
where we can add a strand width.
And so what this is, this is
still just a single bone chain,
but it has particles that are projected
out to the sides, there.
And so what that allows us to do
is if something were to
come and bump against
the left or the right
side of those particles,
it would create twist on that bone chain.
So that's really what those are for.
If you were to use this kind of a set-up
on, you know, maybe, a plane of cloth,
like a skirt that we have in the front,
maybe like a leather armor,
then it wouldn't really give
you any bending and folding

Chinese: 
这里是线根，
作为父子骨骼，我们有一个根骨骼父级。
这一点之所以很重要，是因为
我们希望对该线根施加一定的硬度，
因此必须参考其父骨骼，
所以它相对来说是坚硬的。
在粒子之间，
当然有杆。
当然，这些杆本身就是粒子。
好的，就像我说的那样，这是线。
我们拥有一个新功能，
可以添加线宽。
那这是什么，这仍然只是一串骨骼链，
但是它的粒子
投射到侧面，在这里。
因此，我们可以做的是
如果有东西撞到
这些粒子的左侧或右侧，
则会在该骨骼链上产生扭转。
这就是它们的作用。
如果你要使用这样的设置，
也许是在一块布料上使用，
例如前面的裙子
或是皮甲，
那么它实际上不会产生任何弯曲和折叠，

Chinese: 
因为它只是一条骨骼链。
它会扭曲和填充，
但实际上并不会实现正确的行为。
这样一来，就必须创建一个
像这样具有多条线的系统。
现在，问题在于
这些单独的线
彼此完全松散。
它们就像悬挂的链一样。
我们有必要将这些线
交联起来。
这里可以看到
它在粒子之间绘制了黄色线条。
我们可以控制它们彼此之间的距离，
以及彼此之间可以移动的距离。
因此，通过这样将系统捆绑在一起，
我们就可以开始创建布料系统了。
我还想谈谈
线的另一个功能，
称作末端锚固。
我们得到了一个根骨骼，
我们也可以将链的末端
绑到另一根骨骼上，这样它就可以摆动，
就好像它附加到了起始和末端骨骼。
因此，这对于我们已有的
许多角色设计来说，可以说是一项有用的功能。
对于碰撞对象，

English: 
because it is just a single bone chain.
So it would twist and stuff,
but it really wouldn't
give you proper behavior.
So that's when you would have to create
a system that has multiple
strands together like this.
Now, the problem with this though
is that those individual strands
are completely loose to each other.
They just act like
chains that are dangling.
And so we really need
to have cross-linking
between those strands.
And so here you can see
that it draws those yellow
lines between the particles.
And we can control how close
they get to each other,
and how far they can move
apart from each other as well.
And so by tying a system
together like this,
we can start to create a cloth system.
We have another feature with strands
that I wanted to talk about as well,
which is called end anchoring.
So we have a root bone,
but then we can also
tie the end of a chain
to a different bone so
that it, kinda, swings,
you know, as if it's attached
to the start and the end.
So that's kind of a useful feature
for a lot of the character
designs that we had as well.
So, for collision objects we have a number

English: 
of different objects,
so I'll talk through those.
So we have an infinite plane.
This looks like a finite plane,
but we just render it that way for,
just cause it gets so
cluttered on our screen
if it's truly infinite.
And then we have the major
collision capsule is,
pardon me, the major
collision object is a capsule.
And we use these primarily
over most of the other collision objects.
We also have cones,
and this is something that
we can use to keep strands
inside of or outside of cones.
And then, similarly, we have a frustrum,
which is just a shape like this.
Finally, we have a floor plane
which looks a lot like an infinite plane,
but the only special thing about that
is it follows along with the floor plane.
Which at times can be ramped.
So it can be up or down slopes.
Okay, so, all of this rod
dynamic set-up actually happens
in what we call a Post
Physics Animation Blueprint.
So this is an Animation
Blueprint that evaluates
after all of the animation systems

Chinese: 
我们有许多不同的对象，
我将逐一进行介绍。
我们有一个无限的平面。
这看起来像一个有限的平面，
但我们只是以这样的方式将它呈现出来，
因为如果它真的是无限的，
在屏幕上会显得非常混乱，仅此而已。
我们有一个主要的碰撞胶囊体，
抱歉说错了，主要的碰撞对象是一个胶囊体。
在大部分其他碰撞对象中，
我们主要使用这些胶囊体。
我们也有圆锥体，
可以用来将线保持在
圆锥体内部或外部。
同样，我们也有平截头体，
它是这样的一个形状。
最后，我们还有地平面，
它看起来非常像无限平面，
但唯一的特别之处在于
它沿着地平面的方向。
有时可以倾斜。
它可以向上倾斜，也可以向下倾斜。
所有这些杆动力学设置实际上都发生在
我们所说的“后期物理动画蓝图”中。
这是一个动画蓝图，它在
所有动画系统

English: 
and after all of the physics systems.
Then it runs a Post Physics graph,
which is, you know, the ideal location
for your dynamics to happen,
is at the end of all the
animation evaluation.
So, I'm gonna talk through
how we set these things up.
So this is a simple example of a cloth
that's on the front of this drone here.
And so you can see its got
some collision on his legs,
and it has some, a sheet of strands
on his front leather armor there.
And so I'm gonna talk
through each of these nodes
that is in the graph that represent that.
So here you can see I'm highlighting
the rod dynamics node itself.
And then we have strand
topology variables.
And so what that means is,
it's just the variable that can control
what is the bones that
are assigned into there
and its many parameters
to define a strand.
And then we also have collision variables,
and that's just the variable that has
the collision objects in it.
And then finally we have a wind variable,

Chinese: 
和所有物理系统之后进行评估。
然后，它会运行一个后期物理图形，
这是进行动力学处理的
理想位置，
并且在所有动画评估结束时进行。
下面，我将介绍如何进行设置。
这是该兽兵正面的
一块布料的简单例子。
大家可以看到它的腿部有一些碰撞体，
并且前部皮甲上
还有一片线。
下面我将介绍图中
表示线的每个节点。
这里你可以看到我突出显示了
杆动力学节点本身。
然后我们有线拓扑变量。
就是说，
这只是变量，它可以控制
分配到这儿的骨骼及其用于
定义线的许多参数。
此外，还有碰撞变量，
就是其中包含
碰撞对象的变量。
最后一个是风变量，

Chinese: 
可以用来控制风如何影响这些线。
所以，只看杆动力学节点，
就有很多参数。
我不会详细介绍这些内容，
但在基本层面，我们有重力
和风力等级等等。
这个杆动力学节点是否受到地板碰撞体的影响
通过一个复选框就可以控制。
我们有许多分解器参数，
但实际上我们并没有接触到。
我们通过前期制作
来找到合适的默认设置，
然后大部分时间都没有管它。
我们可能会接触到硬度分解器和迭代分解器，
但大多数都不需要使用。
此外，还有 alpha 控件。
这样可以让我们能够给
动画师一些可以控制
动力学的时间。
举个例子，假设一个角色
用手梳理头发，
我们通常通过动力学来梳理头发。
所以动画师可以在他们
想要控制头发的时候打开控件，
让头发自己动起来，
然后融入到动力学系统中。
这就是 alpha 插件的作用。

English: 
which we can use to control
how wind affects these strands.
So, looking at just the rod dynamics node
you can see there's a
lot of parameters there.
And I'm not gonna go through
all of them in detail,
but at a high level we
have things like gravity
and wind scale.
Whether or not this rod
dynamics node is impacted
with floor collision is simply a checkbox.
We have many solver parameters,
most of which we don't actually touch.
We did through our pre-production
to kinda find the right default settings,
and then we left it
alone for the most part.
We might touch solver stiffness
and solver iterations there,
but most of these didn't need to be used.
Then we also have alpha controls.
So what this does is it allows us
to give the animators moments
where they can take control
of the dynamics.
So, for example, let's say a character
runs their hand through their hair,
and we're running that hair
through dynamics normally.
So the animator would be able to turn on
when they'd wanna control that hair,
animate it themselves,
and then blend back
into the dynamic system.
And so this was the alpha plugin for that.

English: 
We also have control over
the teleportation settings
and maximum speed.
So, often our cinematics
characters are teleporting
from one location to another
for different camera cuts,
and so we'd have to tune those parameters
for that sometimes.
And then finally we
have LOD settings here.
So, sometimes dynamics are
just a little minor thing
that you might see close up,
but you'd never see 'em at a distance.
So we could definitely turn those off.
Okay, so, topology variables.
This represents the variables
that controls the strands.
So here you can see I've
highlighted three areas,
and that's where you would set
the root bone of the strand.
And the system goes through and it finds
all of the children of that
root bone that you specified.
So you don't have to
specify all of the bones.
Of course we also have
a filter on that too
if you needed it.
And then here we have what we
call child particle settings,
or child bone settings.
And so this is where you would
set the stiffness values,
and things like that,
for each of the particles.
And so here you can see child depth,

Chinese: 
我们还可以控制传送设置
和最大速度。
所以，我们的动画角色经常
会因不同的镜头剪辑而从一个位置传送到另一个位置，
因此有时我们必须
调整这些参数。
最后是 LOD 设置。
有时候，动力学只是一个很小的东西，
近距离才可能看到，
但距离较远时你绝不会看到。
所以我们可以将其关掉。
下面是拓扑变量。
它表示用于控制线的变量。
因此，在这里可以看到我突出显示了三个区域，
这就是设置线的根骨骼的位置。
然后系统进行遍历，
找到你指定的根骨骼的所有子骨骼。
因此，不必指定所有骨骼。
当然，如果需要，
我们也有相应的筛选器
然后这里有我们所说的子粒子设置
或子骨骼设置。
在这里可以为每个粒子
设置硬度值
以及类似的值。
在这里可以看到子级子深度，

English: 
and so what that means is
that at child depth zero
that's the root of the bone.
And then at the next one
it's child depth of two.
So that would mean it
steps down one bone child,
and then another bone child.
So that's two.
And you might notice that there isn't
a child bone settings for depth of one,
and that is because those values
interpolate down the chain.
So it's kind of a workflow optimization,
where we didn't need
to specify every bone.
We could kind of quickly set
up the beginning and the end,
or maybe the beginning and the middle,
and then it would copy the
middle down to the end.
So it would give us a little flexibility
for quickly iterating on these values.
Cause as you can see,
there's a lot of values there to control.
And that also works across strands.
So here you can see that there
is no child bone settings
for those other two stands.
And that means that it's gonna just use
the child bone settings that
are on that first strand.
So it also interpolates
across the strands.
Up at the top here you
can see we can control
damping and drag.
And so now I'm gonna move on
to our collision variables.

Chinese: 
这意味着，子级深度为零的地方
就是骨骼的根。
下一个的子级深度为 2。
这意味着它细分为一个骨骼子级，
然后再细分为一个骨骼子级。
也就是 2。
你可能会发现，深度为 1
没有子骨骼设置，
这是因为这些值是沿着链插入的。
这是一种工作流优化，
不需要我们指定所有骨骼。
我们可以快速设置起点和终点，
也可能是起点和中间点，
然后它会从中间点复制到终点。
它为我们提供了一些灵活性，
可以快速迭代这些值。
如大家所见，
因为有很多值需要控制。
这也适用于各条线。
这里显示了其他两条线
没有子骨骼设置。
这意味着它将仅使用
第一条线上的子骨骼设置。
因此，它还在各条线之间插值。
在顶部，你可以看到我们能够控制
阻尼和拖动。
接下来，我将继续讨论碰撞变量。

Chinese: 
这仅仅是我们定义
碰撞对象的方式。
这里我们为其设置了父骨骼，
在本例中，它是一个胶囊体。
但是，我们还可以对其进行控制，使其位于不同骨骼的
坐标空间中。
这真的非常有用。
例如，我们的踝关节骨骼是向下倾斜的，
但是相对于该角度移动胶囊体
可能很困难。
因此，我们可以将其放入平放在
地板上的其他骨骼中，
该骨骼仍将位于
我们设置为其父级的空间中，
但是我们修改了它相对于
坐标空间骨骼有关的位置。
这算是一个方便的功能。
这实际上是胶囊体的
起点和终点值，也是其半径值。
遗憾的是，事实上我们不得不输入
用于定义这些胶囊体的值，
这样做并不是很理想。
但我们只有那么多开发时间。
所以我认为在未来
开发某种 3D 小组件肯定很方便，

English: 
And so this is just simply how we define
our collision objects.
So, here you can see we
set what the parent bone
is for that, you know, in
this case it's a capsule.
But we can also control it
to be in the coordinate space
of a different bone.
And so this is really useful.
For example, our ankle bones
are kind of angled downwards,
but it can be awkward to kind of move
a capsule in relation to that angle.
So we could feed it into a different bone
that is lying flat on the floor,
and it'll be still in the space
of whatever we set as its parent,
but we're modifying its position
in relation to the coordinate space bone.
So that was kind of a handy feature.
This is literally the
values for the beginning
and the end of the capsule
and then also its radius.
And so, unfortunately, we
had to literally type in
the values for defining these capsules,
which is not ideal.
We only had so much time
for development, though.
So I think in the future
it would definitely
be handy for us to develop some kind of

English: 
a 3D widgets thing so we can literally,
you know, control it in view port.
But we lived with it as it was.
We had a lot of work to do, so, moving on.
So, wind variables.
So, Gears 5 has four levels of wind.
And so this allows us to set a
wind speed per level of wind.
And so you can see it has a minimum
and a maximum wind value.
And then there's also this gustiness,
and that would determine how
fast it goes back and forth
between that minimum-maximum.
And so we had this in-editor way
of being able to tune these things.
And so here you can see
that I've got a control
over what the wind strength is.
So if we dial that up
you can see we can go
all the way to, like,
crazy storm wind.
And then we can dial it down
to something that's still,
you know, pretty noticeable.
And we have a widget here
to be able to control the
direction of the wind as well.
And so if we select the
rod dynamics node itself

Chinese: 
这样我们就可以在视图端口中
真正对其进行控制。
但实际上我们一直还这么将就着。
我们还有很多事情要做，下面开始
讲讲风变量。
《Gears 5》有四个风级。
我们可以设置每个风级的风速。
你可以看到它具有最小和
最大风力值。
还有这种阵风性，
可以决定在最小值和最大值之间
往返的速度。
所以我们采用了这种编辑器内方法
来调整这些值。
这里你可以看到我已经控制了
风力强度。
如果我们把它调高，
就能发现它可以一直达到
暴风。
然后我们可以把它调低，
这个风力仍然很明显。
这里有一个小组件，
它能够控制风向。
如果我们选择杆动力学节点本身，

Chinese: 
该节点将向我们显示所有粒子和杆的位置
以及碰撞体。
所以这是一个非常方便的编辑器内工具，
能够调整风力参数。
好的，现在我们已经介绍了所有变量
以及插入杆动力学中的所有知识。
现在我想倒回去，讲讲
如何使用该系统设置角色。
首先，来看一下 Warden，
他是我们最具挑战性的角色之一，
这是因为
他穿了多层衣服。
可以看到这里有一件大斗篷，
然后是第二件斗篷覆盖在上面。
还有这两件衣物之间的链子。
所以这就像是一场动力学的“噩梦”，
我们要让它们彼此独立移动，
而不是互相夹在一起。
这是该角色
所有不同杆动力学节点的
动画图。
这最终意味着它非常耗钱。

English: 
that shows us where all of
our particles and rods are,
and the collision as well.
So that was a really handy in-editor tool
to be able to tune our wind parameters.
Okay, so now that we've talked
about all of the variables
and all of the things that
get plugged into rod dynamics,
now I wanna bring it
back to let's talk about
how we've made a character
set up with this system.
So I'll start with the Warden,
who was one of our most
challenging characters.
And he was one of the most challenging
because he had multiple
layers of clothing here.
So you can see he's
got a major cape there,
and then a secondary cape
kind of lying over top.
And then chains in
between those two things.
So that's kind of a dynamics
nightmare in terms of,
you know, making them all move
independently from each other
but not clipping through each other.
So this is the animation graph
for all of the different
rod dynamics nodes
that we had for this character.
And this ultimately meant
that it was pretty expensive.

English: 
This guy was pretty expensive.
He was our most expensive
dynamics character
in the game, for sure.
And so let's just walk through
the parts of the cape that
we had to set up here.
So here you can see, for
the main part of the cape,
we have three strands.
So you can kind of see
them kind of running down
from the root of his cape downwards.
And we set up the entire body to have
collision objects on it,
so that it would just
react to everything on him.
And then in between those strands
we have pretty tight cross-linking
because you don't want
those strands moving
too far towards each other or away,
or you get a lot of texture
stretching and sheering.
But you can see that in
this part of the cape,
it's pretty torn.
And so in that area we
can go through and say,
"Oh, you're allowed to have
a very wide cross-linking."
So it would kind of be able to move away
from the rest of the strands.
So we kinda had a level to
be able to control that.
So on the next layer here you can see

Chinese: 
这家伙很费钱。
他是游戏中成本最高的动力学角色，
这一点毫无疑问。
现在我们看看
必须设置的斗篷部分。
这里，你可以看到斗篷的主要部分，
有三条线。
它们从他斗篷的根节点
向下延伸。
我们将整个身体设置为
有碰撞对象，
这样他就可以对身上的所有东西做出反应。
然后这些线之间
有非常紧密的交联，
因为你不希望这些线
彼此之间移动地太远，
或者你得到了很多组织拉伸和转向。
但你可以看到，在斗篷的这一部分，
已经被撕破了。
因此在这个区域中，我们可以说：
“哦，你可以进行大范围的交联。”
于是可以将它
从其他线中移出。
我们可以控制它了。
在下一层中，你可以看到

Chinese: 
后面顶部的第二块布料。
所以这只是一条分成四个末端的线。
这四个末端，
仅仅是布料本身撕裂出来的，
因此它们不需要交联或其他任何操作。
它们的碰撞体在大斗篷上。
在这里可以看到那些碰撞胶囊体。
它们实际上与斗篷
主体上的骨骼相关。
因此，随着该斗篷的移动，
第二件斗篷也会相对移动。
然后，这里有两条线
用于中间的悬挂链。
你可以看到这些链
可以缠绕在他的手臂上，
但在红色的部分中它们也有碰撞体。
大斗篷上有碰撞体，
还有顶部的两种碰撞体。
它们代表第二件
斗篷的碰撞体。
所以它会在这之间来回移动，
防止它们互相夹住。

English: 
that second bit of cloth
up at the back top there.
So this is just one strand that
branches out into four ends.
And so those four ends are just,
they're kind of tears of the cloth itself,
and so they don't need to
be cross-linked or anything.
And their collision was
on the main cape itself.
And so you can see those
collision capsules there.
They're actually associated to the bones
that are on the major part of the cape.
So as the cape would move around,
this secondary cape would kind
of move in relation to that.
Then we had two strands
here for the dangling chains
that are in between.
And so you can see these chains
could wrap around his arms and all that,
but they also had collision
in the ones that are in red.
You can see there's collision
with the main bit of the cape,
and then those two kind
of at the top there,
those are representing the collisions
for that secondary bit of cape.
So it'd kind of move
around in between those
to kind of keep them from
clipping through each other.

Chinese: 
在下一块中，我们在这里
设置了一条很小的悬挂链。
这条链被绑在一根锁骨上
并固定在另一根锁骨上。
这样，当他来回移动肩膀时，
链子会视具体位置
变得更紧或更松。
如你所见，这两个斗篷上
也都有碰撞体。
这有点像将夹在
大斗篷和第二件斗篷之间。
好了，这是对我们 Warden 身上必须设置的
所有不同层的介绍。
让我们来看一下
他在游戏中的例子。
（振奋人心的音乐）
- [男人] 我们可能有麻烦了。
（棍棒在地面上猛烈撞击）
嗯，我们确实遇到麻烦了。
- [Kait] Warden！
（振奋人心的音乐）
（地面粉碎成碎片）

English: 
And so, for the next bit we had
this little dangling chain here.
And this one is tied from one clavicle
and is anchored to the other clavicle.
So that as he kind of moves
his shoulders back and forth,
that chain would kind
of get tighter or looser
depending on the position.
And so as you can see there's collision
on both the capes here as well.
So it's kind of sandwiching it between
the main cape and the secondary cape.
So that's kind of a view into
all of the different layers
that we had to set up on the Warden.
And let's just take a look at
an example of it in the game.
(dramatic music)
- [Man] We might have a problem.
(clubs banging heavily on ground)
Yeah, we definitely have a problem.
- [Kait] Warden!
(dramatic music)
(ground smashing to pieces)

Chinese: 
（Warden 凶猛打击并发出大声的咕哝声）
- 好了，我将介绍下一个角色，
我们称之为 Rejects。
Rejects 是被蜂族
感染的兽兵。
它们实际上有许多不同的外观。
这是我们这个角色的主要目标之一，
我们想要创建一个网格体，
它可以使被蜂族感染的兽兵
在各方面看起来都不一样，
但只使用一个网格体为我们带来视觉上的多样性。
幻灯片标题之所以叫动态动力学，
是因为我们确实制作了一个具有可替换区域的系统。
每个区域都有自己的动力学。
我们还需要玩游戏

English: 
(Warden swinging and grunting loudly)
- Okay, so the next character
that I'm gonna talk about
is what we called the Rejects.
And so the Rejects were robots
that were infested with the swarm.
And so they really have a lot
of different looks to them.
And so that was one of our
main goals with this character,
is that we wanted to create a mesh
that could look different
in all of the ways
that the swarm had infested them,
but with a single mesh so to
give us that visual variety.
And so that's why I called
this slide dynamic dynamics
because we really made a
system with swap-able regions.
And each of those regions
had their own dynamics.
And so we also had a game play need

English: 
to be able to shoot off his arms and legs,
and so on and so forth.
So this skeletal mesh
had to be very flexible,
and the dynamics had to
work along with that.
So here I've got an example
of a animation prototype
to just prove out the
functionality of the skeletal mesh.
And so here you can see we
can control the slider here
to separate his upper torso.
And we can also, you know,
twist it forward and backwards too.
So we would, you know, make sure
that we could give the control
to the animators to be
able to position this.
But we wanted to make sure that the mesh
would be able to do all these things.
And so you can see here
even the right side
is able to split apart.
And then we can take his
head portion of his torso
and make it attach to the
left side or the right side,
or even somewhere in between.
So we could really get a lot of variety
out of just changing
these kind of parameters.
And then we had swap-able parts here.
So here you can see on his face
that we break off a portion of it

Chinese: 
才能击落他的胳膊和腿，
进行关键帧动画处理。
因此，此骨架网格体必须非常灵活，
并且动力学必须与之配合。
这里有一个动画原型的例子，
仅用于证明骨骼网格体的功能。
你可以看到我们可以控制此处的滑块，
以将他的上半身分开。
此外，
我们也可以向前和向后扭转它。
我们要确保动画师
有权进行控制，
能够安排这个位置。
但我们要确保网格体
能够执行所有这些操作。
这样一来，即使在右侧
也可以分开。
然后我们可以取下他躯干上的头部，
让它连接到左边或右边，
甚至中间的某个地方。
因此，仅更改这些类型的参数
我们确实可以获得很多变体。
然后这里有可替换的零件。
从他的脸上可以看到
我们切开了一部分

Chinese: 
露出了一些新的触须和它们的动力学。
这里有一些胸部零件。
如果你看一下他的胸部，
会发现它将发生变化，
这里会有一个悬垂着的新触须，
一个非常粗糙的触须，挂在那儿。
现在，我们可以开始切断手臂，
切断它们也会暴露
新的触须动力学。
你也可以将角色的腿切断，
所以这里有他在地面上爬行的动画。
我们可以开始切断他的腿了。
当然，这也会暴露一些触须。
这些触须很小。
如果将他的整个骨盆都击落，那么你会看到
内脏和触须
都掉出来了。
所以这很棒。
骨架网格体在正常运行，
动力学系统在正常运行。
所以基本上准备好了这个原型，
然后我们开始将它连接到游戏。

English: 
and expose some new
tentacles and their dynamics.
And here we have some chest parts.
So if you take a look at his chest
you're gonna see that's gonna change
and there's gonna be a
new dangling tentacle,
a pretty gross one, hanging out of there.
And so here we can start
breaking off the arms,
and that would also expose
new tentacle dynamics
from breaking them off as well.
And then you can also shoot
this character's legs off,
so here we have an animation
of him crawling on the ground.
And we can start breaking his legs off.
And then that, of course,
exposes some tentacles.
These ones are kind of small.
If you shoot off his entire
pelvis then you can see
we get this rather gross looking guts
and tentacles hanging out of there.
So, that was great.
The skeletal mesh was working,
the dynamics systems were working.
So then basically provided this prototype
and then we started hooking
it up into the game itself.

Chinese: 
你可以在测试体育馆中看到
仅使用游戏来测试网格体的
这些功能。
现在我们可以将他的一些武器击落。
你可以看到如果给这个角色足够的破坏，
他就会自己毁灭。
所以现在我们射击他的腿，
他就会自己爆炸。
如果两次射击到骨盆，
你会发现盆骨碎掉，
然后飞入背景中。
这会使内脏和触须露出来，
就像我之前展示的那样。
然后我们现在就开始在这打斗，
让他追赶你。
（电子机器的声音）
这里我们有游戏功能。
我们可以射击头部，

English: 
And so here you can see in our test gym
just using the game itself
to test out these features
of the mesh.
So here we can shoot off some of his arms.
And you can see if you give
this character enough damage,
he's gonna kind of self-destruct.
And so here we shoot out his leg,
and he'll blow himself up.
So here if you shoot
him in the pelvis twice,
you can see that that
breaks off the pelvis
and it went flying off
into the background there.
And that exposes the guts and tentacles
like I showed before.
And then we can just start to combat here
so that he chases after you.
(electronic machine sound)
And so here we have a
game play feature, too.
So we can shoot off of the head,

Chinese: 
然后暴露此电源，
如果射击它，
就可以摧毁角色。
因此，我们有这些可替换的零件，
它们会影响游戏玩法以及动力学。
这儿有一个视频，我们在 E3 中展示过。
我想展示这个视频，是因为它囊括了
我所谈论的多样性，
不过这是一个非常紧张的场景。
下面让我们来看一下。
（水滴）
（枪射击）
好了，现在我将介绍多人角色。
我们的游戏中有很多多人角色。
你在这里看到的这些网格体，
这五个网格体，
它们均支持多人模式，
但它们也采用完全相同的网格体，
它们的动力学
在战役模式下将用作敌人。
因此我们并未创建它们的不同版本。
它们是相同的资源。

English: 
and then we can expose this power supply
and if you shoot that,
then that destroys the character.
So we have these
swap-able parts affecting,
you know, game play as well as dynamics.
So, here I have a video
that we showed at E3.
I wanted to show this
cause it shows the variety
that I've talked about,
although this is a pretty hectic scene.
So let's just watch this.
(water dripping)
(gun shooting)
Okay, so now I'm gonna move
on to multi-player characters.
And we have a lot of multi-player
characters in our game.
So these meshes that you're seeing here,
these five meshes,
these are playable as multi-player
but they're also the exact same meshes,
and their dynamics,
that are used as the enemies in Campaign.
So we didn't create
different versions of them.
They are the same assets.

Chinese: 
我们有很多角色。
在发布时推出了 66 个多人角色。
之后，我们又增加了 80 个。
未来还会有更多。
我们还有很多角色即将上线。
在开始播放此视频之前，
我想指出一点，那就是在游戏中我们设置了不同的身材比例，
我们必须予以支持。
在游戏中，Kait 是女主角，
她要比普通男性
或蜂族兽兵的标准尺寸小，
这是我们的多人模式尺寸。
所以我们必须创建一个
适合 Kait 战役模式尺寸的版本，
但我们还必须创建
其网格体的多人模式版本，
也就是更大的多人模式尺寸。
我们这样做的原因
是为了确保
我们的多人比赛是一场公平的战斗。
如果其中一个角色尺寸小于其他角色，
那就不公平。
这会给他们带来优势。
因此，这就是为什么我们必须创建他们。
我只想指出这一点，
当你观看视频时，
会看到某些角色看起来比其他角色更小或更大。
我想告诉大家视频中的另一个注意事项是，
当我回放此视频时，

English: 
And so we had a lot of characters.
What we shipped was 66
multi-player characters at launch.
And since then, we've added 80 more.
And there's a lot more coming.
We have a lot of characters coming still.
So, one thing before I
start playing this video.
I want to point out that we
have different proportions
in our game as well
that we have to support.
So, with Kait being the heroine here,
she is smaller than our regular male
or swarm drone kind of standard size,
which is our multi-player size.
And so we would have to
create a version of Kait
that is good for her Campaign size,
but then we'd also have to create
a multi-player version of her mesh
that is the larger, multi-player size.
And the reason that we do that
is because we want to make sure
that our multi-player
matches are a fair fight.
It's not fair if one of the characters
is smaller than the others.
It gives them an advantage.
So that's why we would
have to create them.
So I just wanted to call that out
so when you're looking
at the video you'll see
some of the characters look
smaller or larger than others.
The other video caveat I want to say is
while I'm playing back this video

English: 
you're gonna see some
preview of the dynamics.
You're gonna see the particles
and the collision objects.
And so when we display that in the game,
it kind of slows the simulation down.
And so you might see some cloth
that looks a little floaty,
like it's in water.
And so that is just a
drawback of displaying
those rod dynamics.
So please try to ignore that.
So here you can see we've got Kait
with her hair and her ponytail,
but we have multiple
versions of Kait as well.
So here's her desert uniform.
So you can see she's got an extra scarf
and little tassels on it as well.
So we had many different Kait outfits.
And then we have Lahni here,
who has a lot of dreadlocks, obviously.
But she has ropes and cloth
and her knife is moving,
and all that kind of stuff too.
So she has a lot of dynamics on her.
We have lots of different
kinds of characters.
So here you can see Lizzie
has a bunch of tools in her tool belt,
and her sweater arms are dangling as well.

Chinese: 
你将看到一些动力学预览。
还有粒子和碰撞对象。
当我们在游戏中显示它们时，
模拟速度会降低。
你可能会看到看上去有点轻薄的布料。
就像浮在水面上。
这是展示杆动力学时的
一个缺点。
所以请尝试忽略这一点。
这里你可以看到 Kait，
以及她的头发和马尾辫，
但我们也有很多版本的 Kait。
下面是她的沙漠制服。
还可以看到她身上还多了
一条围巾和小流苏。
我们为 Kait 准备了很多不同的服装。
接下来是 Lahni，
显然，她有很多辫子。
她也有绳子和衣服，她的刀动，
所有东西都在动。
因此，她有很多动力学效果。
我们有许多不同类型的角色。
这是 Lizzie，
她的工具腰带里有很多工具，
毛衣的袖子也飞来飞去。

English: 
And then, like I said, our
Drones were the same meshes
that were used in Campaign,
that were used in multi-player.
And so here's a good example of,
you can see those end
anchors on those chains
as you're swinging back and forth.
And similarly here on the Grenadier,
he's got that long bit of leather cloth
that's anchored at both ends.
So the Hunter, she was probably
our most complicated mesh
to deal with in terms of performance,
outside of the Warden.
And I'm gonna talk a
little bit about her later.
And here's our Warden.
So this was a multi-player
version of the Warden,
so we had to make a smaller version
because he's large in Campaign.
And we also had to optimize his dynamics
to run at our performance
goals for multi-player.
Course we have a lot of
classic Gears characters,
like the Kantus.
And Jermad is a new character for us
that was an interesting
challenge with his cloak.

Chinese: 
就像我刚才说的，我们的兽兵与
战役模式和多人模式中
使用的网格体相同。
这里有一个很好的例子，
来回摆动时，你可以看到这些链上
那些端部的锚具。
这里 Grenadier 也是这样，
他的两端都固定有
一块长皮革布。
这个 Hunter，她可能在性能方面
是除 Warden 之外，
最难处理的网格体。
我将在稍后介绍她。
这就是我们的 Warden。
这是多人模式版的 Warden，
所以我们需要制作一个更小的版本，
因为他在战役模式中很大。
此外，我们还必须优化他的动力学
以达到多人模式的性能目标。
当然，我们有很多经典的《Gears》角色，
例如 Kantus。
而 Jermad 是我们的新角色，
他的披风是个很有意思的挑战。

Chinese: 
我们就是从此时开始
不再怎么使用厚的皮革，
更多的是采用更轻薄的布料。
他也是如此。
这是我们在这个系统中
所做的新尝试。
它的效果很不错。
我们能够得到不错的外观。
好了，我现在
继续介绍 Carrier。
我之所以讲到 Carrier，
是因为他没有太多动力学效果，
但他有条大尾巴。
因此，该系统不只是用于
你期望的动力学效果，
例如头发和服装等等。
对于这个家伙，我们实际上需要用动力学
来控制他的尾巴，
因为我们没有动画资源
能够实现
在不同的坡度上攀爬
这个动作。
在《Gears 4》中，我们也有 Carrier。
在《Gears 5》中，他并不是新角色。

English: 
So this is kind of where we started
to get more away from thick leather
and more into, like,
you know lighter cloth.
And similarly for him.
So that, you know, was a new thing
that we had to try with this system.
And, you know, it works pretty good.
We were able to get a decent look here.
Okay, so, I'm gonna move on now
to talking about the Carrier.
And so the reason that I'm
talking about the Carrier
is he doesn't have a lot of dynamics,
but he has this big tail.
And so the system was
used for more than just,
you know, dynamics that you would expect
like hair and cloth
and so on and so forth.
So this guy, we actually
needed to control his tail
with dynamics because we just didn't have
the animation resources to
be able to make this work
in all of the different, you know,
slopes and climbing up on top of things,
and stuff like that.
So, in Gears 4 we also had the Carrier.
He wasn't a new character for Gears 5.

Chinese: 
我们使用 PhysX 物理运算来驱动他的尾巴。
现在我们可以看到从该角色删除物理运算时
会发生什么。
他的尾巴只是浮在地面上，
明显看起来不是很好。
所以在《Gears 5》中，我们在尾巴上增加了 Rod Dynamics。
大家可以在这里看到，
他的尾巴与体育馆的坡度贴合。
对于他来说，这是一个很陡的坡度，
也许有点太远了。
但这成功了，他的尾巴一直紧贴着地面。
因此，基本上我们只需设置
两个 Rod Dynamics 节点。
一个节点位于他的脊柱。
这个节点就像辅助轮一样
固定他的尾巴，
确保不会向前翻。
然后，我们设置了第二个 Rod Dynamics 节点，
以延长其尾巴末端的
扭曲寿命。
仅使用这两个节点，
我们就可以生成 Carrier
在所有不同环境中

English: 
And we drove his tail with PhysX physics.
And so here we can see what happens
when we remove the physics
from the character.
So his tail is just kind of
floating above the ground
and that doesn't look
very good, obviously.
And so for Gears 5 we added
Rod Dynamics to that tail.
And so here you can see
the tail is going to respect
that slope in our gym here.
It's kind of an extreme
slope for him to be going up
and it's kind of, maybe, a
little bit too far for him.
But it is working and it's
holding to the ground.
And so basically the
way that we set that up
is we just had two Rod Dynamics nodes.
So one for his spine.
And you can kind of see that there's this,
kind of like a training wheel for it
to kind of keep it so it
doesn't flip forward on itself.
And then we had a second Rod Dynamics node
to just give it a little
bit more twisting life
on the end of it there.
And so with just using those two nodes
we were able to generate all
of the procedural animation
that we needed for the
Carrier to move through

English: 
all of the different environments
that he has to work within.
And so here is an example
of him in Campaign on this,
this slope is actually
kind of running downwards.
It's kinda hard to tell
from this but you'll see.
(suspenseful music)
(Carrier growls loudly)
- [Delta Soldier] Oh, shit! Carrier!
Control, we could use those
reinforcements right about now!
- [Control] Condor's
almost within range, Delta.
(Carrier smashes ground)
Okay, kid, reinforcements incoming.
I've got Guardians or DR-1s.
What do you want?
(Carrier growls loudly)
- [Delta Soldier] Ah, drop in some DR-1s.
- [Control] You got it!
(Carrier smashes loudly)
- So you should never get too close
to the Carrier, obviously.
Okay, so now I'm gonna
move onto the next section.
I'm gonna talk about the
challenges that we ran into
with Rod Dynamics,
the main one being performance.

Chinese: 
进行移动所需的
全部过程动画。
这是他在战役模式中的一个例子，
这个坡度实际上是一个下坡。
虽然不是很明显，但我们可以看出来这是一个下坡。
（悬疑的音乐）
（Carrier 大声咆哮）
- [Delta 士兵] 哦，该死！Carrier！
控制台，我们现在需要增援！
- [控制台] Condor 快到射程内了，Delta。
（Carrier 砸碎地面）
别担心，伙计，增援马上就位。
Guardians 还是 DR-1，
你选一个吧！
（Carrier 大声咆哮）
- [Delta 士兵] DR-1 吧！
- [Control] 没问题！
（Carrier 粉碎产生的巨响）
- 显然，切记不要
离 Carrier 太近。
好的，现在我将介绍下一部分。
我要谈谈我们在 Rod Dynamics 方面
遇到的挑战。
主要挑战是性能。

Chinese: 
我们的目标是在所有游戏模式下
都实现每秒 60 帧的性能，
我们从一开始就知道
这是一个巨大的挑战。
这就是我们面临的主要挑战之一。
我还将讲讲我们在系统中
遇到的碰撞 bug。
由于我们有各种各样的碰撞体，
所以在将通用动画
插入到某些碰撞体时，
肯定会有一部分无法按预期的方式顺利工作。
我还将讲到，这是一个非常专业的系统。
除了我们，没有其他公司有。
我们开发了这个系统，它是一个非常专业化的工作流。
它有其自身的问题。
就性能而言，当我们开发出 Alpha 版时，
我们发现原本计划好的
代码优化
远远不够。
这并不能使我们达到预期的目标。
并且，我们发现最难实现的其实是
Lahni 以及她内心的许多恐惧。
我们在她身上花费的钱
差不多是预期的两倍。
就这样，我们确定了预算，
在 XBox One X 上，我们的性能预算为

English: 
I mean, with our performance
goals of 60 frames a second
in all game modes,
that was, we knew that
was gonna be a challenge
from the start.
So that was one of our main challenges.
I'll also talk about the collision bugs
that we were running into with the system.
Because we had such a
wide variety of things
of course there's gonna be some,
when you plug generic
animations onto things,
things might not work out
perfectly the way you expect.
And I'll also talk about, it's
a very specialized system.
Nobody has this system except for us.
We developed it and so it's
a very specialized workflow.
Which comes along with its own challenges.
So, for performance, by
the time we got to Alpha
we kind of discovered that
the planned code optimizations
that we had in mind,
they were just not enough.
It wasn't gonna get us to
the goal that we had in mind.
And so we found that
our worst-case content,
which at the time was actually
Lahni with her many dreads.
She was costing us, kind of, twice as much
as we wanted her to cost us.
And so we established
what our budget would be,
our performance budget on XBox One X,

Chinese: 
每个角色 0.38 毫秒。
但有一个角色例外，
那就是战役模式下的 Warden。
在战役模式下，Warden 之前为 0.49 毫秒。
正如我之前提到的，我们制作了
多人模式版的 Warden，
将他的性能预算降到了 0.38。
显然，他满足预算要求。
那么，我们如何解决这些问题以提高性能呢？
我想，主要的出发点是
减少分解器的迭代次数。
大家可以回忆一下之前我之前讨论的
那个逐帧例子，
可以发现我们是按碰撞约束、
脱离碰撞范围和长度约束
这个顺序
进行迭代分解的。
我们经历碰撞约束、
脱离碰撞范围
并重新应用长度约束这个全过程的次数
就是迭代次数。
我们的迭代次数为 8 次。
我们要先实现 8 次迭代。
然后，为了实现我们的性能预算，
我们需要将其减少到 2 次。

English: 
was 0.38 milliseconds per character.
And so we had one exception to that,
which was the Warden in Campaign.
So in Campaign the Warden
was 0.49 milliseconds.
We did, like I mentioned, we made
a multi-player version of the Warden
and we did get him down to 0.38.
So he fit into budget no problem.
So, how do we solve these
problems for performance?
Well, the main start
point, I guess, on this
is we reduced our solver iterations.
So if you remember back to
when I started talking through
the frame by frame example,
and I would say that we
would iteratively resolve
between the collision constraints,
getting outside of the collision,
and the length constraints.
Well, each of the, how
many times you go through
getting out of collision
and reapplying the length constraint,
that's the number of iterations.
And so we had a number of eight.
We had eight iterations to start with.
And then to get our
performance down we decided,
well, we need to take that down to two.

English: 
And so we took that down to two.
And that was pretty good performance gain
but obviously it's pretty drastic change.
We actually ultimately
ended up going down to one.
And so when you go down to one,
you find that there's
no real iteration here.
And so the only thing that
we were actually applying
on those examples,
on those cases where we
reduced to one, which is a lot,
was that we would get the
particles outside of collision.
But we wouldn't apply
the length constraint.
So we were kinda cheating
our own system in that sense
to get performance back.
But what we found is that
the bones themselves,
they're always, they're
not gonna be stretching.
So they're always gonna have
their own length constraint
kind of built into them.
What that means, though, is
that the particles positions
and the bone positions
weren't always, kind of,
in the right, you know,
same location to each other.
And so that was not great,
but if you think about it,
we're running, you know, many, many frames
over one second, right?

Chinese: 
因此，我们将其减少到了 2 次。
这显然是一个非常大的改变，
但确实大幅提升了性能。
实际上，我们最终将迭代次数减少到了 1 次。
减少到 1 次时，
你会发现实际上并不需要进行所谓的迭代。
因此当我们将迭代次数减少到 1 次时，
我们实际上
只需对这些例子应用一个过程，
那就是使粒子脱离碰撞范围。
但是，我们不会应用长度约束。
从某种程度上说，这实际上是在欺骗我们的系统，
以恢复性能。
但是我们发现骨骼本身
并不会被拉伸。
因此，它们始终内置有自己的
长度约束。
这意味着粒子和骨骼的
相对位置
并非始终相同。
这并不是很好，
但是大家知道
我们需要在一秒钟内
运行许多帧。

English: 
And so the iteration kinda
happens over multiple frames
instead of within one frame.
And so it kinda worked
all right, actually.
It was better than I expected.
When you think about it conceptually,
it's like well, that
sounds like a bad idea,
but it worked out.
We also discovered that each
of the Rod Dynamics nodes
that we had set up,
they had a major initialization cost.
So we'd have to go through that node
and gather all of the strands
and all the collisions
and kind of initialize all of that stuff.
And that cost, it added up quite a bit.
And so what that meant is that we had
to rearrange our content into fewer nodes.
Now, the problem with
that is the collision.
So, the main knock-on was the
collision set-ups for that.
And so what that means is that
if we start taking something
that's on our foot,
and we start adding it
to the Rod Dynamics node
that has something on its chest,
the collision has to
work for both of those
at the same time.
Because all of the collision applies
to all of the strands

Chinese: 
因此，迭代发生在多帧
而不是一帧之内。
实际上，它可以正常工作。
这比我预期的要好。
当你从概念上考虑它时，
听起来可能并不是一个好的解决方案，
但实际上却是可行的。
我们还发现，我们设置的
每个 Rod Dynamics 节点
都有很高的初始化成本。
我们必须检查该节点
并收集所有线和所有碰撞体，
然后对上述所有内容进行初始化。
这笔费用加起来相当高。
这意味着我们必须
将内容重新排列到更少的节点中。
现在，问题在于碰撞体。
主要的撞击是为碰撞体设置的。
这意味着，如果我们先在脚上
设置碰撞体，
并将其添加到 Rod Dynamics 节点，
再在胸部上设置，
则这两个位置
都会产生碰撞。
因为所有碰撞都会应用于
同一 Rods Dynamics 节点中的

Chinese: 
所有线。
这意味着我们必须停止使用无限平面、
无限圆锥体和无限平截头体之类的元素。
因为如果它们是无限的，
那么当有一架飞机压在腿上时，
由于胸部也设置了碰撞体
并且放在同一节点中，
胸部也会被
压在飞机之下。
这就是我们必须要做的，
也就是，我们必须弃用所有这些无限胶囊体、
无限平面等，用根据人体工程学定义的
更确切的胶囊体加以替代。
这就需要我们进行全面的返工
以提高系统性能。
在一些例子中，我们减少了骨骼的数量，
例如 Lahni 的头发，实际上我们确实必须
减少一些。
好消息是，这种情况并不是很多，
所以最终结果还算不错。
这样做确实使我们达到了性能目标。
这并不容易，但我们仍然完成了。
下一个挑战是我们的碰撞 bug。
正如我之前所提到的那样，我们有一些通用动画，

English: 
that are in that same Rods Dynamics node.
And so what that means is we
had to stop using things like
infinite planes and infinite
cones and infinite frustrums.
Because if they're
infinite, they're, you know,
if you had a plane to keep
something down on the leg,
while if you had taken
something in the chest
and put it in that same node,
well, the things that are in the chest
are gonna wanna get
underneath that thing too.
So, that's where we had to be like,
okay, rip out all of these
kind of infinite capsules,
planes and such, and
replace them with capsules,
which are, you know, kind
of more defined by the body.
So that was a lot of rework, I would say,
to kind of get that system performance.
There was a few examples where
we reduced the bone count,
like Lahni's hair we
actually did have to reduce
a little bit.
Not too bad, and not in too many cases.
So that wasn't super bad.
So, that did get us to
our performance goals.
It wasn't easy, but, you
know, we got it done.
So the next challenge
was our collisions bugs.
And so, like I mentioned,
we have generic animation,

English: 
especially in multi-player,
that gets applied across a whole bunch
of different characters.
And so, you know, one
character's range of motion
might not work very well on a
different character's motion,
depending on how that
character is designed.
And so here you can see
a simple example here.
And this is kind of a minor bug,
but you can see that his
front claw is clipping
right in through his leg there.
And so here we have this set-up,
and so you can see that the leg,
the way it's animated,
which is totally fine,
it's just that when we have
such cloth that's coming down
so low on the leg, well, the
leg just goes right over top
of where that root bone is for that claw.
And so we would have to
solve this by, you know,
pushing up the whole belt.
So that's what this second node here does.
And so you can see that now that belt
is moving up with the leg.
So the legs are pushing it up with,
here you can see it's a single bone
that has strand width on it,
so that the legs would push that thing up,

Chinese: 
尤其是在多人模式下，
这种动画可以应用于大量
不同的角色。
只是一个角色的运动范围
可能不适用于其他角色的运动，
具体取决于该角色的设计方式。
在这里，大家可以看到一个简单的例子。
这是一个小 bug，
大家可以看到他的前襟
夹在了腿下。
我们来细看一下，
大家可以看到腿的动画
是完全没问题的，
只是当前襟碰到腿时，
腿覆盖了前襟的
根骨骼。
因此，我们必须通过使整个腰带上移
来解决这个问题。
这就是第二个节点的作用。
大家可以看到腰带
现在随着腿向上移动。
腿向上移动时，腰带也上移，
大家可以看到这是一串骨骼，
上面有线宽，
这样腰带就会随着腿而上移，

English: 
allowing the cloth strand roots
to be outside of the legs to begin with.
So, we had a lot of, like,
little bugs like that
that we'd have to kind of fix.
And, you know, when you're
running around in game play
these are things that are kind of subtle,
you might not notice them right away.
But, it's still important to address
when you have certain close-ups.
Okay, so, the other
major problem that we had
was kind of a bigger problem,
was fast movement was causing our strands
to exit out on the opposite
side of the collision
from what we were intending.
So our game, especially in multi-player,
characters can move so fast.
They can bounce off of
walls, they can twist around,
they can flip around, they
can do all kinds of things.
And, so, you remember when I showed you
the frame by frame example,
and a particle was
inside of the collision.
Well, it would kind of want to get out
to the nearest exit of the collision.
But the problem was is that
with the characters moving so fast,
sometimes that particle would be,
kind of all the way into the
other side of the collision
and they would want to pop
out to the opposite side.

Chinese: 
使布料的线根
位于腿之上。
我们有很多这样的
小 bug 需要修复。
而且，当大家在游戏中跑来跑去时，
这些都是有些极小的问题，
可能并不会马上注意到它们。
但是，如果遇到特写镜头，
就必须解决这些问题了。
我们遇到的另一个主要问题，
也是更大的问题是，
快速移动导致线
从碰撞体的另一侧伸出，
这并不是我们想要的。
我们的游戏，尤其在多人模式下，
角色的移动速度非常快。
他们可以从墙壁上弹起，可以旋转，
可以翻转，可以做各种各样的动作。
大家可以回忆一下
那个逐帧例子，
我们的碰撞体中有粒子。
假设我们需要走到
最近的碰撞体出口。
但是问题在于，
由于角色的快速移动，
有时粒子会
进入碰撞体的另一侧，
而他们却想跳到另一侧。

English: 
And would get stuck there.
And so that was kind of a problem for us.
And so here you can see an example.
If you watch his hood here when
he goes up against the wall,
now one of those hood straps
is kind of stuck above his head
and it kind of wanted to stay there.
And so here you can see I'm trying to,
I'm testing this and I'm trying
to, like, make it go back.
And so I have to do some
more extreme motions.
And there, it popped back in.
But then I'm like, okay,
well how did that happen?
I tried to recreate it again,
and you can see I'm bouncing
around and it's not happening.
So it was like, it was one of those bugs
that when it happens, it's really bad.
But it was hard to find it,
and, you know, hard to find the situation
that was causing it.
And, so, our solution
to that, unfortunately,
was that we had to stiffen the strands up
so that they didn't move as much.
Which, you know, lowers
our quality a little bit,
but this was kind of
getting late in the game
and we kinda just had
to do what we had to do
in that situation.
And the reason that we had to
stiffen it on this character

Chinese: 
最终导致卡在那里。
这对我们来说是一个问题。
在这里，大家可以看到一个例子。
可以看出，在他靠墙的时候，
他头盔上的其中一条带子
卡在了头顶上方，
并且动不了。
在这里，你可以看到
我正在进行测试，尝试使其恢复原状。
有时，我们还必须做一些更极端的动作，
例如，突然弹出。
那么这是如何实现的呢？
我试图再次重建它，
你可以看到我虽然在执行弹跳动作，但并没有什么反应。
这样的 bug
是非常严重的。
但我们很难发现导致
这种 bug 的
原因。
这非常让人遗憾，
但我们的解决方案是加固线，
确保它们不会移动太多。
这可能会使我们的画质有小幅度的降低，
但没有办法，
我们必须解决
这种问题。
我们在这个角色的性能方面已经投入了大量资金，

Chinese: 
因此我们必须加固她的线。
她身上有很多皮带和道具，
我们没有其他更好的建议。
对于存在这种问题的其他角色，
我们有不同的解决方案。
这里的这个角色相对于该角色而言，
性能方面的障碍更少。
我们可以做的是，
增加她头部的碰撞体大小。
我们可以将她的头部分到两个不同的节点中。
我执行来回走动的动作，
现在你可以看到她左右两边的头发
设置了不同的碰撞体，
并且这些碰撞体位于不同的
Rod Dynamics 节点中。
现在，问题在于
每个 Rod Dynamics 节点都有各自的初始化成本，
我在前面也提到过这一点。
因此，我们只能在某些角色上这样做，
而对于 Hunter，由于她的整体成本太高，
我们无法将她分成这样的独立节点。
我们必须仔细研究每一个角色，
弄清楚可以怎样
尽可能地使他们的性能和外观
尽善尽美。
现在，我想谈谈另一部分，

English: 
is because she was so performance costly.
She has so many of these
straps and stuff on her
we couldn't come up with something else.
For other characters that had this problem
we had a different solution.
So here you can see a character
that doesn't have as much
performance hindrance to her.
And so what we could do,
is that we could increase
the collision size for her
head to be much larger.
And we would separate it
into two different nodes.
And I'm just kinda going back and forth
so you can see that the
left side of her hair
has a different collision set-up,
and a different Rod Dynamics node,
than her right side.
Now, the problem with that, of course,
is you remember, as I said,
each Rod Dynamics node
has its own initialization cost.
And so you can only do
this on certain characters,
whereas with the Hunter, since
she was so costly overall,
we couldn't separate her into
separate nodes like that.
So those are kind of
the, like, give and takes
you have to go through per character
to kinda figure out how to make
them perform and look good,
as good as you can make them.
Okay, so, the other part
that I wanted to talk about

English: 
is when you're developing
your own claw system,
or dynamic system, it comes
with its own set of challenges.
And, you know, it's
something to be aware of
right from the start.
And so this system, as we developed it,
it went through a lot of changes,
and a lot of churn.
And that meant for not
just the system itself
but also the content
that we were producing.
And, so, you saw that
there's a lot of parameters
to adjust for this system.
And, so, what this all means
is there's significant
training ramp-up time
for this system.
And so if you think about,
you have x number of riggers on your team,
and if you're going through
and you're changing the system,
and then you're changing the content,
and you're trying to keep
the whole team abreast
of all of those changes,
so that we're doing things consistently,
that's an extreme challenge.
It's really, really difficult.
And so for us, well, we didn't
go wide with the training

Chinese: 
也就是大家在开发自己的
动力学系统时会遇到的一系列挑战。
我们必须从一开始
就意识到这些挑战。
在我们开发
动力学系统时，
我们经历了很多得与失。
这不仅包括系统本身，
也包括我们正在制作的内容。
大家可以看到，我们针对这个系统
调整了很多的参数。
这都意味着，
这个系统需要大量的
训练准备时间。
试想一下，
如果你的团队拥有 x 个索具，
而你仔细研究后
想要更改系统和内容，
那么你必须尽量对整个团队
都进行这些更改，
以确保一致，
这是一个非常大的挑战。
我并不是在夸大其词。
因为我们自己都是在完成《Gears 5》

Chinese: 
并进入发布后才对这个系统展开了
全面的训练。
这样一来，我们的索具团队
就可以将精力集中在
其他需要完成的基本事项上，
而且这类事情肯定非常之多。
基本上，我自己完成了所有动力学设计，
斥巨资将工程部分外包给了
David Bollo 的开发团队。
我们与 David Bollo 的开发团队通力合作，完成了
系统、内容以及其他方面的更改，
并不是一味地将这些任务推给该团队。
这虽然让我忙到飞起，
但在我看来，
领导团队做好这一点无论如何都是最好的方法。
这也是为什么我在解决方案这里放一个问号的原因。
这个解决方案能解决问题吗？
我不知道。
无论如何，
当大家在开发自己的系统时，
都会产生相应的开发成本，
而你只需要考虑的一点是，
如果它一开始就无法工作，你应该怎么办，并做好对应措施。
接下来，我将展示游戏中的

English: 
on this system until literally
until we were done Gears 5
and were into post-launch.
And so that allowed us
to keep our rigging team
focused on basically
all of the other things
that needed to be done,
which is there's a lot there for sure.
Basically, I set up all
of the dynamics myself
because I was heavily invested
with the development team
of David Bollo was our engineer on this.
And so we worked together a
lot on making these changes
and changing the content, and
all of that kind of stuff,
without pushing those changes to the team.
Ultimately, it meant I was really busy,
but, leading the team and doing this,
but it was kinda the best
approach in my mind, anyways.
So that's why I put a
question mark as a solution.
Was that a solution?
I don't know.
Anyways, it's something to consider
when you're developing
your own system like this,
that it's gonna come with
its own development costs
in terms of, you just have to count on it
not working right the first
time and be prepared for that.
Okay, so now I'm gonna move
on to showing some results

English: 
that were in our game.
And so one of the new game modes
that we have in Gears 5 is Escape.
And so here you can
see our main characters
that were introduced for
the Escape game mode.
And here we have a video of Lahni
going through her intro cinematic,
right from the Character Select screen.
(dramatic music)
(electronic sounds)
(suspenseful music)
(Lahni breathes deeply)

Chinese: 
一些效果。
在《Gears 5》中，我们新增了一种游戏模式——
逃生模式。
在这里，大家可以看到逃生模式下
引入的主要角色。
这个视频是在“角色选择”屏幕
选择 Lahni，然后切入该角色的
过场动画。
（振奋人心的音乐）
（电子声音）
（悬疑的音乐）
（Lahni 深呼吸）

Chinese: 
- [Lahni] 好的，Venom 炸弹设好了。
我们该走了。
让他们浸泡一会儿吧！
Venom 想要腐蚀我们。
走吧！
我们去突袭他。
- 好的，这是一个多人模式的例子。
这就是我之前提到的 Hunter。
我还想在这个视频中展示的一点是，
我们能够使她的头盔带
与她手中握持的武器交织。
我们并不是在角色和他的武器之间
设置交织，
因为在可交换的资产之间
来回传递信息的成本
太高。
我们只是通过在角色的手上
添加一个碰撞胶囊体来模仿这种交织。
效果很好。
（大声的脚步声）

English: 
- [Lahni] Okay, Venom bomb set.
We need to go.
Gonna need a long soak after this.
Venom's gonna touch us.
Come on!
We've gotta raid him.
- Okay, so here we have an
example of multi-player.
And this is the Hunter that
I was talking about earlier.
And I wanna also show in this video
that we were able to make
her hood straps interact
with the weapon that
she's holding in her hand.
And so we don't have interaction
between a character and his weapons,
it's just too costly
to pass the information
back and forth between those assets
that are swap-able.
And so we just mimicked it
by adding a collision capsule
to the hand of the character itself.
And that worked out pretty good.
(loud footsteps)

English: 
And then here's an example
of one of our characters called Jermad.
This is the one with the cloak
that I was showing off earlier.
(loud footsteps)
- [Game Character] Gonna need a medic!
- So, we didn't just
use this dynamic systems
on our characters.
We also used it on our weapons
that had some little bits

Chinese: 
下面的一个例子是
我们的一个名为 Jermad 的角色。
这是我之前展示的
一个披风。
（大声的脚步声）
- [游戏角色] 我们需要一名医生！
- 因此，我们不仅在角色上使用了
动力学系统。
还在含可移动部件的武器上

English: 
that would move on it.
We also used it on the Skiff,
which was the main Campaign
vehicle that we have in Gears 5.
And so here you can see
that there's some ropes
that are dangling off of the sail,
so those were all driven by Rod Dynamics.
(vehicle motor sounds)
- [Female Character] Del, it's been hours.
Tell me we're getting close!
- [Delmont] Marcus'
coordinates put New Hope
in the valley up ahead.
So we're close!
- Okay, and then finally
here we have some cinematics.
And so, like I said, one of the main goals
that we had for this
system was also to work
in our cinematics in real-time.
And so in these video clips
that I have of two cinematics here,
I kinda swipe back and
forth between showing
the Rod Dynamics view, like you see here,
and not having them,
so you can actually see
how they're performing.
Yeah, so let's just watch this.

Chinese: 
使用了动力学系统。
我们还在“帆船”上使用了动力学系统，
这是《Gears 5》中的主要战役工具。
在这里，你可以看到帆船上
悬挂了一些绳子，
这些绳子全部由 Rod Dynamics 驱动。
（工具马达的声音）
- [女性角色] Del，已经几个小时了。
我们快到了吗？
- [Delmont] Marcus 的坐标显示
New Hope 就在前面的山谷。
我们应该快到了！
- 最后，我想展示一些过场动画。
就像我说的那样，
我们要在这个系统中实现的主要目标是
实时处理我们的过场动画。
这些视频剪辑中
有两个过场动画，
我会在前后对比显示
Rod Dynamics 视图，
方便大家了解
工作原理。
好的，让我们来看一下。

Chinese: 
（大声喘气）
（振奋人心的音乐）
- [Delmont]] Kait 还没准备好。
她几乎睁不开眼睛。
- [JD] 不用担心她。
她会准备好的。
（直升机螺旋桨旋转声）
- [游戏角色] 好的，就是这里了。
（直升机螺旋桨旋转声）
欢迎来到 Azura。
（振奋人心的音乐）
- [Marcus] 你上次睡觉的时间是什么时候？
- [Kait] 昨晚。

English: 
(gasps loudly)
(dramatic music)
- [Delmont] Kait is not ready for this.
She can barely keep her eyes open.
- [JD] Don't worry about her.
She'll be ready.
(helicopter blades spinning)
- [Game Character] Okay, we're
almost at those coordinates.
(helicopter blades spinning)
Welcome to Azura.
(dramatic music)
- [Marcus] When's the last time you slept?
- [Kait] Last night.

Chinese: 
只睡了八九分钟。
- 做噩梦了吗？
- 会好起来吗？
- 会好的。
（振奋人心的音乐）
（直升机螺旋桨旋转声）
（振奋人心的音乐）
- [JD] 好的，来看看是什么。
（直升机螺旋桨旋转声）
来吧，放悬梯！
（振奋人心的音乐）
- 谁先跳？
- [Delmont] 绝对不是你！
- Del，我可以的，好吗？
- 当然可以。

English: 
Got a good eight or nine minutes in.
- Nightmares?
- Does it get better?
- It gets tolerable.
(dramatic music)
(helicopter blades spinning)
(dramatic music)
- [JD] All right, let's see what we got.
(helicopter blades spinning)
Come on, time to hook in for the drop.
(dramatic music)
- So who's jumping first?
- [Delmont] Definitely not you!
- Del, I'm fine, okay?
- Sure you are.

Chinese: 
- 啊，该死！
谢谢，Del。
- Sam，我们下去了。
- [Sam] 收到！
我们在这儿待命。
- 一会儿见！
嘿 Dave，要来吗？
（大声呼吸）
（振奋人心的音乐）
- [女王 Reyna] 你太让我们失望了！
- 让你们失望？
你是谁！
- 你我是同类！

English: 
- Ugh, shit!
Thanks, Del.
- Sam, we're outgoing.
- [Sam] Roger that!
We're standing by up here.
- See you soon!
Hey, Dave, coming?
(breathes loudly)
(dramatic music)
- [Queen Reyna] You failed us!
- Failed us?
What are you?
- We are what you could have been!

Chinese: 
- Del，出击！
（大声的咕哝声）
- 我们是一个整体。
无处不在、
永垂不朽。
你本来有选择的，
可你却浪费了！
无论是生是死，
你都不能改变我们是同类的事实！
- 好的，总结一下。
我们制作了一个定制的动力学系统，
该系统会产生开发成本。
大家可以让工程师尝试进行开发，
让技术美工来学习
并在其基础上进行更改
等等。
在采用这种系统之前，

English: 
- Del, now!
(loud grunting)
- We are a complete being.
Connected.
Immortal.
You had a choice.
And you squandered it!
Alive or dead.
You belong to us!
- Okay, so to summarize.
We made a custom dynamic system,
and that system comes
with development costs.
There's the time for your
engineers to develop it,
there's the time for your
technical artists to use it
and to learn from it
and to suggest changes,
and all of that kind of thing.
And, so, those are
something that, you know,

English: 
you have to ask yourself
before you take on
some kind of a system like this.
So, ultimately, we have to ask ourselves,
was it worth it to develop this system?
And so the only way that I
really have to answer that is,
were we able to achieve our goals?
And, I'd say the answer is yes.
We were able to hit
our visual quality bars
that we were setting for ourselves.
We were able to hit performance
targets that we needed.
Which were very aggressive, I gotta say.
And then we also were able to
support all of the secondary,
like you saw there, for
the hair and the cloth
and all that kind of stuff,
in our real-time cinematics.
And we also were able
to make a unified system
by building this system.
So, yeah, it was worth it for us.
The cost was, you know, not outlandish.
It wasn't free.
So, it was somewhere in between those.
And it worked out pretty good, so.
So now I'll leave you
with a question slide
where you can't really ask the question
since this isn't a live
presentation, unfortunately.
But, if you want to reach out to me,
and I hope I don't regret this

Chinese: 
我们必须问自己
想要实现什么样目标。
然后，还必须问自己，
开发这种系统是否值得？
而事实上，我们只需要确定，
能否实现目标？
我的答案是肯定的。
我们肯定能够达到为自己设定的
视觉画质标准。
我们肯定能够达到所需的性能目标。
不得不说，这非常激进。
还有，我们肯定能够支持
实时过场动画中的所有次要事物，
例如头发、服装以及
所有此类元素。
通过构建这个系统，我们还可以创建一个
统一的系统。
这对我们来说非常值得。
我们也势必需要付出一些代价。
因为天底下没有免费的午餐。
我们必须在得与失之间实现平衡。
最终效果是不错的。
由于这不是现场演示，
我在后面放了一张提问幻灯片，
大家可以在该幻灯片上提出问题。
如果你想与我联系，
可以在领英上找到

Chinese: 
我的联系方式，
哈哈哈哈，希望我不会为这个决定感到后悔。
我会尽力回答
大家提出的所有问题。
大家还可以注意到，
这里有两个链接，
它们指向我们的 Rod Dynamic 系统所基于的论文，
你可以通过访问这些链接自己查阅相关内容。
非常感谢大家观看，希望对大家有帮助！

English: 
by getting too many questions,
but you can find me on LinkedIn, I'm sure.
And I'll try my best to answer
any questions that you may have.
You'll also notice that
I've linked in here
two links to the papers themselves
that our Rod Dynamic system was based upon
so that you can check
that out for yourselves.
So thanks very much for
watching, and have a good one.
(upbeat music)
