
Chinese: 
♫ 虚幻徽标音乐 ♫
>>Mattias Worch：早上好
非常感谢大家光临
这是我们今天的第1场
Epic Games技术讲座
讲座的题目是
制造混乱：
虚幻引擎4中
物理和破坏效果的未来
我叫Mattias Worch
是Epic的特别项目组的设计主管
我今天来和你们谈谈
使用Chaos进行设计
我们还有另外三个演讲者
在我之后上来演讲的是
Jim VanAllen
他是资深技术美术师
他会谈一下破坏的艺术
然后是首席物理程序员
Michael Lentine
他将会介绍Chaos背后的技术
最后是来自英特尔的Jeff Rous
他会给你们讲一下
我们为了提高Chaos的
速度所做的工作
我们刚在State of Unreal
主旨演讲中
向全世界展示了Chaos
大家刚才都看到了
你们中间万一有人没看到
我这里就快速介绍一下
Chaos是虚幻引擎即将推出的
新物理系统

English: 
>> Alright, let’s kick this off,
then. Good morning.
Welcome to our tech talk.
This session is Causing Chaos:
The Future of Physics
and Destruction in Unreal 4.
I’m Jack Oakman,
Senior Technical Artist
at Epic Games, Special Projects,
and I’m here with my colleagues
Benn Gallagher,
Senior Physics Programmer,
and Kelly D. Gawne,
Game Performance
Engineer at Intel.
Our aim today is
to introduce you to Chaos,
Epic’s new
and improved physics system.
To that end, we are going
to be looking
at our recent destruction
demo of the same name.
We’re going to give
a high-level overview
of the kind of tools
we used and of the system
Unreal users can expect to see
in the coming months.
We will explore the workflows
we typically used
and we will introduce you
to a few foundational concepts
along the way,
so hopefully this should
give you a decent grounding
as you prepare for
Chaos’s imminent arrival.

Japanese: 
>> それでは始めましょう
おはようございます
技術トークにようこそ
このセッションは
「カオスの発生： Unreal Engine 4 に
おける物理および破壊の未来」です
私は Jack Oakman と申しまして
Epic Games の特別プロジェクトの
シニア テクニカル アーティストです
同僚のシニア物理プログラマーの
Benn Gallagher と
Intel の
ゲーム パフォーマンス エンジニアの
Kelly D. Gawne にも来てもらっています
今日の趣旨は Epic の新しい改良版の
物理システムである Chaos を
ご紹介することです
そのために 同じ名前の破壊デモを
ご覧いただくことになっています
そして 私たちが使ったツールと
Unreal ユーザーの皆さんにあと数か月で
お見せできるシステムについての
あらましをお伝えするつもりです
私たちがよく使うワークフローをたどりながら
基本的なコンセプトをいくつか紹介するので
間近に迫る Chaos 公開に備えて
一定の基礎を身に着ける
お役に立てば幸いです

Japanese: 
皆さんの中には GDC で
行われた Unreal の基調講演の中で
Chaos の発表をご覧になった方も多いはずです
ご覧になっていない方のために
まず Chaos とは何か
そして Chaos に対する現在の弊社の
取り組みについて説明しましょう
既にご存じかもしれませんが
Chaos は Unreal 4 の
新しい物理システムです
現在もまさに開発中なので
ここでお見せするのは
実際にはアルファ版からのものです
最初のプレビュー バージョンは
Unreal 4.23 で出荷する予定なので
ご期待ください
Chaos は破壊にとても適しているので
Chaos のデモでは
その面に焦点を当てることにしました
この Chaos のデモは
つい最近の GDC の基調講演において
生のゲームプレイ デモと一緒に紹介されました
繰り返しますが 皆さんの中にはまだ
ご覧になっていない方もいるかもしれないので
何はともあれ そのデモのハイライト動画を
ご覧いただきましょう
[デモ動画が音声抜きで再生される]

English: 
Many of you will have seen
our announcement of Chaos
in our State of Unreal
Keynote at GDC.
In case you didn’t, let’s first
establish what Chaos is
and where we currently
are with it.
Chaos, if you’ve
already gathered,
is Unreal 4’s
new upcoming physics system.
It is still
in active development,
so what you will see here is
representative of
our alpha version, really.
We’ll be shipping
the first preview version
with Unreal 4.23
so stay tuned for that.
Chaos lends itself really
well towards destruction
so we decided
to focus our demo
around that aspect
of the system.
We recently introduced it
with a live gameplay demo
at our GDC Keynote.
Again, not all of you
might have seen that,
so first of all, let’s have
a look at the highlights reel.
[Demo video plays with no sound]

Chinese: 
它目前正在积极开发中
我们都在从事关于它的工作
我们准备在4.23版中
发行它的预览版
所以你们可以做好准备了
这是一套全面的物理系统
它能够出色地做到你对物理系统
期待的一切
而且它特别擅长做破坏效果
当我们考虑
要怎样向全世界公布这个系统时
我们想到应该做一个街机小游戏
一个小型射击游戏
能让你把各种东西打烂
刚才我们就在这个讲台上
在主旨演讲中
实时展示了这个游戏
如果你们没有看到这个主旨演讲
别担心
以后会有很多视频
而现在我们从这里的截图
也能看到一些
你们在这里看到的一切
都是在引擎中实时计算的
我将会给你们稍微讲一下
然后你们还会看到许多视频
真正展示这套系统的实际效果
这个演示背后的设计主旨
是很简单的
我们想对那些
轻松的老式射击游戏致敬
允许你打烂各种东西
允许你实现某个目标

Chinese: 
你要追杀这个小机器人
她叫
Cha-O-S 也就是Chaos
你要想方设法追杀她
在这么做的过程中
要使用破坏作为一种手段
现在你们在这些镜头中看到的一切
一切都可以在我们的展区玩到
顺便说一下
我强烈建议你们去一下展区
我们有两台大型游戏机
让你们玩这个游戏
我现在已经
把这个游戏玩了200多次
还是觉得没玩够
你们能够在游戏里做的一切事情
都是完全
在虚幻引擎中创建的
全都是在虚幻中完成的
你们如果想做出
类似的精彩游戏
只需要
下载免费的虚幻引擎4
然后就可以开工了
我之所以喜欢
看到一切都在编辑器里
那是因为这样可以让你看到
Chaos和引擎其他部分的集成
是多么完善
Chaos可以和其他所有系统通信
其他所有系统都可以和Chaos通信
比方说 如果我们要制作一些
和破坏玩法相关的东西
这是极为重要的
所以我们回头会再说一下
你们在这些镜头中看到的一切

English: 
Cool.
Let’s do it quietly, though.
[Laughter]
[Demo video plays with no sound]
Just imagine the explosions.
K-POW.
[Demo video plays with no sound]
She said something
really funny there.
[Demo video plays with no sound]
There it is! Quietly,
but pretty.
[Applause and laughter]

Japanese: 
いいですね
でも 音はなしですけどね
[笑い声]
[デモ動画が音声抜きで再生される]
爆発を想像してみてください
ドカーン！
[デモ動画が音声抜きで再生される]
このロボットはあそこで
面白いことを言っているんですよ
[デモ動画が音声抜きで再生される]
以上です
音はしませんが かわいいでしょう
[喝采と笑い声]

Japanese: 
さて 最初の課題はもちろん
このデモを製作する上での
私たちの目標を定めることです
私たちが何よりもやりたかったのは
Chaos によって
Unreal コミュニティ全体が
自分のプロジェクトで実現できるシーンは
どのようなシーンなのかをお見せすることでした
それを実現するために
採用した創作上のモチーフは
とても単純なものです
私たちは アーケード風の
古典的なライトガン シューティング ゲームの
オマージュを作りたかったのです
そのようなゲームは
Chaos の破壊を主なツールとして
町全体を破壊するための
とても良い口実になります
このデモでお見せしたメッシュの
破砕から破壊シミュレーションまでの
すべてが Unreal で作られました
もう Unreal の外で複雑な破砕の
階層を作る必要もなければ
事前に定義された
シミュレーションをインポートする
理由もありません
今や そのようなことは
すべてエディタ自体の中で可能になりました
もう 1 つ注目すべき点は
今日ご覧になったものはすべてリアルタイムで
レンダリングされているということです

Chinese: 
都是可以在展区玩到的
它们也都是实时运行的
我们是在一台普通的
高端游戏PC上渲染的
这样的机器
你们现在去商店马上就能买到
这不是什么未来才有的东西
我们在这里所说的一切
都是可以立刻实现的
另外还有许多可伸缩性选项
允许我们把这种系统
放在比较低级的平台上运行
稍后你们会听到
Michael Lentine
介绍这方面的更多信息
我们知道
在运行时实时地
渲染某些东西--
我们做过很多这样的工作--
与实时模拟某些东西
是有区别的 对吧？
因为一个有很多物理效果的系统
比如我们这里的这个破坏系统
需要实际地做许多运算
如果我们深入了解一下它
我这里向你们保证
你们所能看到的
玩到的一切
在主旨演讲上看到的一切
也是在实时地模拟
当然 要提醒一下
所有东西都是在我们需要的时候
才会实时模拟
这是一个非常有趣的差别
所以我要稍微讲得深入一点
因为如果你们理解了这一点
就能真正理解为什么Chaos
功能如此强大 如此惊人

English: 
Ok, so of course
the first point of order
was to define what our aims
were in creating the demo.
Of course primarily
we wanted
to preview
the kind of spectacle
that Chaos would enable
the whole Unreal community
to achieve
in their own projects.
The creative context
we chose to achieve
that was really
a pretty simple one.
We like to create an homage
to sort of an arcade-style
classic light gun game
type of thing,
which is a pretty good excuse
to smash up an entire city
with Chaos destruction
as its primary tool.
From fracturing Meshes
to destruction simulation,
everything we showed you
there was created in Unreal.
There is no longer the need
to create complex fracture
hierarchies outside of it
and no reason to import
predefined simulations either.
All of that is possible
in the Editor itself now.
Another thing of note is
that everything you saw today
was rendered in real time

English: 
on a regular, albeit
high end, gaming PC
that you could buy
in stores right now.
On the simulation side,
we’ve introduced
a level of flexibility
that we’re all
pretty excited about.
Everything we’ve shown you today
was simulating in real time
as well when
we wanted it to be.
To explore
what I mean by that,
we should probably have
a generalized look
at the three sequences
we just saw there.
In the first sequence,
where we’re chasing Chaos
through the streets,
everything is simulating
at runtime.
Here have obviously
a very controlled
game flow through the space.
We need to work at a pretty
high level of fidelity,
so this is close-up work.
That said, the player’s response
will always be
somewhat random, right?
We can guide their actions
but that doesn’t necessarily
mean that they’re predictable.
They’ll shoot wherever,
whenever they want,
and that means that all of the
destructible Assets in the scene
have to be ready to simulate
at the press of a button.
In the second sequence,
the same general rules apply,

Japanese: 
使用したのは ハイエンドではありますが
店頭で今すぐ購入できる
通常のゲーミング PC です
シミュレーションの方では
関係者みんながわくわくするような
レベルの柔軟性を導入しました
今日お見せしたものは
必要な部分に関してはすべて
シミュレーションもリアルタイムで行われています
それがどういうことかを説明するためには
おそらく 今ご覧いただいたデモの
3 つの場面を
総括して見るのがいいでしょう
1 つ目の場面では
K-OS を街中で追いかけていますが
この場面はすべて実行時に
シミュレートされています
この場面のゲームの流れは明らかに
空間的に厳しく管理されています
この場面はクローズアップなので
がんばってハイファイを実現する必要がありました
とは言っても プレイヤーの反応は
常に多少ランダムなものになります
プレイヤーの動作を誘導することはできますが
だからと言ってその動作が
予測可能だとは限りません
プレイヤーは好きな時に
好きな場所を撃つことができます
と言うことは シーン内の
被破壊性のアセットはすべて
プレイヤーがボタンを押した瞬間から
シミュレートを開始できなければならない
ということです  2 つ目の場面でも
同じ原則が当てはまりますが

Chinese: 
我们这个演示分为3个部分
来看最开始的这第1部分
你穿过一个街道场景追杀Chaos
你要设法打死她
你把环境打得稀烂
在这里你们看到的一切--
都是100%在运行时
渲染和模拟的
我想你们肯定马上就能想到
这么做的原因 对吧？
我们不知道你会朝哪里开火
所以我们必须确保
这是一个完全可破坏的环境
你可以把所有这些都打烂
然后来看第2部分
Chaos想要躲在几个建筑里
她想要从我们手中逃脱
我们干脆打烂整幢大楼
把她逼出来
同样 这两座大楼--
你们在这里看到的一切
都是100%实时渲染和模拟的
包括Robo-Ready总部
然后我们来看第3个序列
在这里我们做的事稍微有点不同
因为这是一段过场动画

Chinese: 
我们在这里把整个街区都炸平了
在这里我们实际做的工作是
预先模拟
这里每一座建筑的
每一处破坏效果
我们把它保存下来
缓存了它
然后我们就实时播放
这样听起来好像
它和第1段、第2段序列
有明显的不同
前两段是玩家自己搞破坏
而在这个过场里
发生的事情却不一样
但是如果你们真正
了解一下背后的原理
就会发现完全不是这么回事
Chaos可以预烘焙模拟
并在运行时播放
这对我们来说大有好处
因为这允许我们对这类
爆破场面进行美术指导 对吧
我们可以完美地控制节奏
我们实际上是在Sequencer里把这
第三段序列编排出来的
所以我们可以具体编排各种效果
并且在我们需要的地方安排音效
所以它允许我们创作一些
高性能运行的东西
用于序列 
可以把场面设置得像这个演示一样大
这里是一整个街区
顺便说一下
好在这里没有人
这是个建设中的区域

English: 
but structurally
we’ve moved away
from the more
close-up interactions
of stand-alone pillars
and street furniture
and we’ve panned back
to introduce full facades.
Because we spend a little
time at these buildings,
we also need
to account for depth
because it’s entirely feasible
for a player
to shoot the same spot
over and over again
and burrow deep into
the interior of the structure.
Since we have distance
we can now balance
our fidelity of the assets
to suit that
and we control
the breakup of the assets
to balance performance.
Then lastly we arrive
at a cinematic cutscene
whereupon we see an entire
city block collapsing.
Here we have
presimulated destruction
and we’ve done that
in the Editor
and we’re playing
that result back from a cache.
You might wonder, then,
if that sequence
would therefore have a very
different authoring approach,
but at its heart its very much
the same as the scenes that went

Japanese: 
構造としては
個別の柱やストリートファニチャーとの
近距離でのやりとりから離れて
カメラがパンし
ビル正面の全体像が視野に入ってきます
このへんのビルでは
少し時間を消費しているので
プレイヤーが同じ場所を繰り返し撃って
ビルの内側深くまで
穴をあけることはまったくありえます
ですから ビルの中の方まで
構築する必要があります
この場面では距離が離れているので
それに釣り合うようにアセットの
忠実度を設定することができます
そして パフォーマンスに
釣り合うようにアセットの破壊を
制御しています
そして最後に 街区全体が崩壊する
シネマティックスのカットシーンにたどり着きます
この場面では
破壊を事前にシミュレートしました
そのシミュレーションはエディタの中で行い
その結果をキャッシュから再生しています
ですから この場面は
かなりオーサリングの方法が
違っていると思う方も
いらっしゃるかもしれませんが
その中核の部分は前に
お見せしたシーンとほとんど

Chinese: 
不过这里有5座摩天大楼
全塌下来了
我甚至不知道我们
在这个序列里有多少个刚体
我们就是用这种方式让它运行的
让一切都始终不脱离游戏过程
从来没有真正播片的时候
Chaos真正了不起的地方是
它的工作原理
我们提供序列1、2、3的方式
其实并没有差别
我们使用的是同样的工具
我们按完全相同的方式
将各种东西破坏掉
我们使用了一种新的
资源类型
叫作几何体集合
可以说每当你想要
在虚幻引擎中破坏什么东西的时候
你就要使用几何体集合
你们将会听到更多关于它的介绍
不过几何体集合并不真正关心
如何破坏和如何模拟
它并不关心某样东西是预烘焙的
还是即时模拟的
Chaos真正了不起的地方在于
任何一个部分
即使是预烘焙模拟的部分
都可以随时成为活动的
也就是说
即使在某些东西是预先模拟的情况下
破坏和Chaos也从来不是静态的

English: 
before it’s just how we choose
to interact
with the result that changes.
The prime benefits of prebaking
sims in this way are as follows.
Of course we can art-direct
the demolition.
We can control the pacing, play
extra effects when we want to.
Things happen
exactly as we intend,
which of course is very crucial
when we’re following
a narrative structure.
In fact this whole scene
was hooked up to Sequencer
in order to line up the effects.
What this means is we can create
huge destruction set pieces
which wouldn’t
otherwise run at perf.
We’re flattening
an entire city block, after all,
so that’s a huge
number of assets.
But under the hood there
isn’t really any difference.
Any of the scenes beforehand
could equally have had
a predefined series of events,
caused their destruction.
We could have recorded those.
We could have tweaked them,
if we wanted to, rerecorded,
and played them back.
The reason we have
that flexibility
is because every building
was created

Japanese: 
同じです
違うのは どのようにして結果との
やりとりの方法を選んだか ということだけです
このようにシミュレーションを事前ベイクすることの
主な利点は 次のようなものです
言うまでもありませんが 破壊の
アートディレクションが可能になるということ
展開の速さも制御できますし
必要なら追加のエフェクトも再生できます
この破壊は正確に
こちらの意図どおりに起こっていますが
それが物語の筋書きを追っているときには
きわめて重要なのは言うまでもありません
実際 エフェクトを順に実行するために
このシーン全体が
シーケンサーに組み込まれています
これが意味するのは さもないと
高いパフォーマンスで実行できないような
巨大な破壊シーンを作成できるということです
ここでは街の一区画全体を破壊しているので
そのアセットの数は莫大です
でも 内部の仕組みはまったく変わりません
どのシーンでも同じように 事前に
定義された一連のイベントがあったはずで
それが破壊を引き起こしています
そして そのイベントを記録することも
できたはずです 必要があれば
そのイベントを変更して
記録して 再生することができたはずです
そのような柔軟性を確保できるのは
あらゆる建物が
まったく同じツールと同じタイプのアセットを

Japanese: 
使って作成されているからです
そのアセットのタイプは
GeometryCollection と言います
GeometryCollection を使った破壊は
事前にベイクするかしないかに
かかわらず同じです
Chaos の非常に優れたところは
事前にベイクされたシミュレーションの中の
任意のジオメトリをいつでも
アクティブにできるところです
シミュレーションを事前ベイクする理由は
パフォーマンスのバランスをとるため
かもしれませんが
事前ベイクされた破壊や
Chaos が静的になることはありません
シミュレーションは
プレイヤーの武器のような外部刺激の
影響を受ける可能性があるので
Chaos では動的なワールドの
状態を考慮できます
動的になるのはシミュレーションの内の
影響を受けた部分だけなので
パフォーマンスが
大きく損なわれることはありません
これは言うまでもなく好都合です
このような美しいアートディレクションが施された
破壊イベントの中にプレイヤーを配置して
プレイヤーが落ちてくる残がいを
破壊しなくてはならないような
ゲームプレイを作成したい場合でも

Chinese: 
如果你在系统中输入一个刺激信号
比方说玩家对某样东西开火
那么Chaos就可以作出反应
特定的那一部分模拟就会激活
Chaos可以对
动态的场景状态做出反应
你们不必费心
提前处理场景
它实际上可以对你们创建的
每一部分运行时模拟
在这个爆破事件运行前
就作出反应
这就保证了所有部分的
性能都特别高
即使在这第3个片段里也不例外
因为我们预烘焙了5座摩天大楼
垮塌下来的场景
但是因为只有和我们交互的部分
才会真正激活
所以我们只增加了一点点开销
一切东西的性能
还是非常、非常出色
这样一来我们就能梦想大场面
通过这种方法
我们就创作出了这个场景
比方说我们可以用这种方法回到
Robo-Ready总部
我们可以把这变成
非常好看的美术指导破坏场景
我们完全按合适的方式设置炸点
那么这可能就会成为
我们游戏里一段非常精彩的过场

English: 
using exactly the same tools
and same Asset type.
This Asset type is called
a GeometryCollection.
Destruction using
a GeometryCollection
is the same regardless,
whether we prebake or not.
What’s really cool about Chaos
is that any geometry
in a pre-baked simulation
can become active at any time.
You might prebake a simulation
because you want to art-direct
the initial spectacle
or to balance performance,
but prebaked destruction
and Chaos is never static.
Outside stimuli
like player weapons
can affect the simulation
so Chaos can take the dynamic
World State into account.
Because only the parts
of the simulation
that you’re affecting
become dynamic,
things are
still super performant,
which is very handy, of course.
If we want to put the player
in beneath
that beautifully art-directed
demolition event,
and then create gameplay where
the player has to destroy
incoming debris before it lands
on them—something

Chinese: 
而我们通过Chaos可以做的
是定位玩家
如果我们就想把她
放在这座大楼的底下
想让她处在这个破坏事件的
影响范围里
我们就能做到这一点
如果我们想要增加游戏性
我们可以创作出
玩家必须泼洒弹雨的场景
因为这里有这么碎砖烂瓦
朝她砸落下来
她活下来的唯一办法
就是保证打碎所有
砸向她的瓦砾
那么我们就能做到这一点
因为这些碎砖烂瓦
无论她站在哪个地方
像雨点一样砸向她的碎砖烂瓦
都将成为活动的
她只要打碎它们就能活下来
这将会真正改变游戏
是的
我们以前就做不到这种事
通过Chaos
玩家可以始终成为活动的参与者
我们再也不必用空气墙挡住玩家
或者把玩家放在一个泡泡里
我们以前这么做是因为担心
她会发现我们是在静态播片
我们只是在从另一个程序播放
以前就是这样
这完全是骗人的把戏
而Chaos中的一切
都是真正实时运行的
Chaos能够做到这一点
因为它是一个系统

English: 
like
that, that’s entirely possible.
We have the freedom
to keep the player
as an active participant
all the time, if that
is what we want to do.
I think the result
that you’ll come up
with that property alone
will be pretty astonishing,
actually.
Chaos can do all that
because it’s a system.
It’s a First Class Citizen
of Unreal Engine.
It lives alongside all of
the other run time systems
already simulating
your Game World.
Chaos can be triggered.
It can be queried.
It can send events.
This creates some
incredibly tight integration
between all the systems,
like for example Niagara,
where break Events
can trigger dust and debris
and velocities
can power dust trails.
Chaos allows you to create
run time systems
and behaviors that know how
to interact with demolition.
It can modify NavMesh,
for example.
AI can react to debris,
so flinches, damage events,
that kind of thing.
It can also detect debris,

Japanese: 
まったく可能です
Chaos では もしそうしたければ
プレイヤーを常にアクティブな
参加者のままでいさせる自由があります
そのような性質から
生み出される結果だけでも
相当に驚異的なものになると思います
Chaos にこのようなことができるのは
Chaos がシステムだからです
Unreal Engine で
最も重要なシステムの 1 つです
Chaos は ゲーム ワールドの
シミュレーションを実行中の
他のあらゆるランタイム システムと
共存しています
Chaos はトリガーすることもできます
Chaos にクエリを発行することもできます
イベントを送信することもできます
これにより あらゆるシステムとの驚異的に
密接な統合が生み出されます
たとえばナイアガラの場合
破壊イベントが埃や残がいをトリガーし
速度が砂煙を引き起こします
Chaos を使うと
破壊との間のインタラクションの
方法を知っているランタイム システムや
挙動を生み出すことができます
たとえば 破壊によって
NavMesh を変更することもできます
残がいに対する狼狽やダメージ イベントなどの
リアクションを AI に実行させることもできます
また AI に残がいを検出させて

English: 
and use it to their advantage,
like take cover.
Designers can detect
destruction Events
and create logic
around those Events.
The potential ways
to leverage this are countless.
Of course we will be
providing some content examples
around this and other subjects
in the near future.
Lastly,
let’s address networking.
It is important to note
that this particular demo
did not actually have
a networking requirement,
but I should clarify the point
that since
Chaos is Epic’s physics
system of the future,
it was certainly built
with networking in mind,
so networking will be supported.
Right, so the art side of
things.
Of course we can’t
have destruction
without first
having something to destroy,
so let’s walk through
that process
and we’ll explore the tools
we currently have
at our disposal.
Once we decided upon
the context of the demo,
it was possible to plan
the environments
and the assets
required to produce it.

Chinese: 
它是一个物理系统
它是虚幻引擎4中的一等公民
它和所有其他运行时系统是并列的
你们已经在使用
那些系统模拟你们的场景了
已经在你们的游戏中运行了
Chaos可以被触发
Chaos可以被查询
而且Chaos可以发送事件
这就使它与所有其他
游戏性系统有着非常紧密的集成
这对我们来说特别重要
我们从一开始就希望确保
这可以实现
因为我们作为设计师
作为游戏性工程师
都知道
可以围绕这样的系统
创造出真正的游戏性
让我们打开天窗说亮话吧--
这很棒
但是也有点吓人 对吧？
如果我现在就坐在观众席里
我想作为一个设计师
我的第一反应就是
爆破效果很棒
但是这本质上是一个混沌的系统
混沌系统有趣的地方就在于
它们是不可预测的
它们很少会按同样的方式运行
如果它们是真实的系统
也许从来都不会按同样方式云行

Japanese: 
弾除けなどに利用させることもできます
デザイナーは破壊イベントを検出して
そのイベントを中心に
ロジックを組み立てることができます
ですから Chaos の
潜在的な活用法は無数にあります
もちろん近い将来には
この話題に関係するコンテンツの例も
提供する予定です
最後に ネットワーキングについて
触れておきましょう
実はこのデモにはネットワーキングは必要ない
ということには注意すべきですが
Chaos は Epic の
将来の物理システムであり
間違いなくネットワーキングを
念頭において構築されているので
ネットワーキングもサポートされる
予定だという点は
はっきりさせておいた方がいいでしょう
では アート面の話に移りましょう
言うまでもありませんが
まず何か破壊する対象がなければ
破壊を行うことはできません
そこで その過程をたどって
現在利用できるツールについて
調べてみましょう
デモのコンセプトが決まれば
それを製作するために必要な背景やアセットの
予定を立てることができます

Japanese: 
でも そこには多少のジレンマがあります
おわかりでしょうか
それは 破壊は本質的に
無秩序だということです
破壊の際は ランダムなジオメトリを対象にし
ランダムな方法で破壊し
ランダムなユーザーがランダムな場所で
ランダムな力で撃てるようにしたいわけです
でも このような結果がすべて
予測可能な望ましい結果になることを
予見したいのです これは実質的に
自分勝手な猫の群れを調教するようなものです
この調教に成功するために
私たちが実際に追求していることが
1 つあります それは「コントロール」です
破壊の見た目は無秩序である
必要がありますが
破壊の挙動は予測可能で
リアルタイムに実行でき
デザイン チーム、背景チーム
エンジニアリング チームの要求を
同時に満たす そのようなパラメータを
構成する必要があります
私たちにとって このシステムのすべては
「コントロール」に集約されます
そのコントロールはここから始まります
水を一杯飲ませてください
先ほども触れましたが
ジオメトリ コレクションについて見てみましょう

Chinese: 
一旦我在那个场景中添加了玩家
我们不知道她会朝哪里射击
她会把摄像机朝向哪里
等等
我们添加了一大堆不确定性
归根结底 这是很酷的
这就是为什么我们要这么做
这就是为什么我们热爱物理系统
和破坏 
喜欢把它们当成玩具 对吧？
我们可以通过这种方法
把破坏作为工具
创作出越来越多
很有表现力的游戏性体验
我们可以在它的基础上
把表现力提高一个层次
但我们想要确保
我们能够真正管理这一切
我们想在非常早期的阶段就确保
做好了这一切额外的工作
从而保证我们能够控制
我们实际制造的这一切混沌
当然 我们做到这一点的
办法是创建运行时系统
和行为 它们真正了解这些爆破
可以和它交互
能够克服我们可能
毫不夸张地讲
仍在它前进道路上的障碍 对吧？
我们甚至可能
用这种方式创建系统
来利用这种爆破
我给你们举些例子
这个话题实在太宽泛了
我也许可以说上几个小时
这里我们只是谈点皮毛

English: 
But there’s a bit of dichotomy
at work here, right?
Destruction is by
its very nature chaotic.
We want to take random geometry,
fracture it in random ways,
and we want to allow
a random user to hit it
with random forces
in random locations.
But we want to know
that any of those results
will feed into a desired
predictable result.
In effect, we are herding cats.
To be successful in doing that,
we’re really looking
for one thing: control.
We need the appearance of chaos,
but we need
to organize its parameters
so that it behaves predictably,
runs in real time,
and meets the needs of design,
environment,
and engineering teams alike.
For us, everything
in this system
revolves around that control.
That starts here.
With a drink of water.
I mentioned them earlier.
Let’s have a look at Geometry
Collections.

English: 
Geometry Collections are built
specifically for destruction
in Unreal.
Benn will actually expand
a bit further
on this subject in a bit,
but from an artist’s
perspective,
this is the bottom line.
Geometry Collections
can be created
from one or more Static Meshes,
including those gathered
within Blueprints
or even from Blueprints
within Blueprints.
Geometry Collections let the
artist choose what to simulate.
They also offer
incredible flexibility
in terms of how you organize
and author your destruction.
In this first example here,
you can see we’ve chosen
three Geometry Collections
to represent a pillar.
We’ve separated the internal
from the external faces,
and this allows us to sort of do
a bit of chopping and changing
until we hit the appropriate
fidelity and behavior
that we like.
In a second example,
we see a more modular approach.
We have got Assets
that are repeated
and gathered together
to form the full building.
It’s worth noting that
though many of these Assets

Chinese: 
不过我要给你们举一些例子
来自你们在这里看到的真实演示
让你们了解我们是怎么创作的
你们可以怎样做好准备
因为我是游戏设计师
我要给你们看的第1张
幻灯片丑得可怕
这是我从编辑器里直接拿来的
我已经警告过你们了--
这里有一大片绿色--
不过这是一个销毁场
我之所以最先把它拿出来展示
是因为它是一个很好的例子
说明如果你不想
改变游戏的其他任何方面
可以非常有选择性地清理场景
假设你希望有一个很棒的破坏
过场就在这里播放
然后你知道将会有
一场很精彩的遭遇战
某些人已经为它花了很大工夫
你担心爆炸效果会
以某种形式影响那场遭遇战
那么 因为在Chaos里
任何东西都不是静态的
你可以非常有选择性地
把一个销毁场
放在遭遇战争有发生的地方
这样你就可以仅仅销毁
在关卡的那个特定部分产生的瓦砾
可以把它去掉
你可以把它变成更小的瓦砾碎片
让它和你刚才看到的
在你周围发生的

Japanese: 
ジオメトリ コレクションは
Unreal 内の破壊専用に
作られています
この話題については
すぐ後で Benn が
もっと詳しく話してくれると思いますが
アーティストの視点からすると
これがすべてです
ジオメトリ コレクションは
1 つ以上のスタティックメッシュから
作ることができます
これには ブループリント内に
集められたものが含まれます
また ブループリント内の
ブループリントからも作成できます
ジオメトリ コレクションを使うと
シミュレートすべき対象を選ぶことができます
そして 破壊を構成したり
オーサリングしたりする上で
驚くべき柔軟性も発揮します
この 1 つ目の例では
1 本の柱を表現するために
3 つのジオメトリ コレクションが
選ばれていることがわかります
内側の面と外側の面を分けたので
必要に応じて適切な忠実度と挙動を
実現するまで試行錯誤することが
可能になっています
2 つ目の例では
よりモジュール的なやり方をしています
ここには アセットの繰り返しを
集めることによって
ビル全体を構成しています
この中のアセットの多くは繰り返されていますが

English: 
are repeated,
we have the flexibility
to control their behavior
independently of each other.
Then in the third example,
intended more for
a cached playback,
we have broken
the entire structure
into twelve Geometry
Collections.
This helps us
to consolidate draw calls
and it gives us
a manageable number of caches
to manipulate later on.
Once we have
our Geometry Collection,
we want to break it
into pieces of course.
You can see the coloration
on this example,
the various Static Meshes
that were picked up
to create
this particular object.
While we’re here,
it’s probably a good idea
to underline
a few recommendations
we have for the structures,
particularly of this type.
Firstly, we want geometry
to be water tight, right?
Solid, contiguous Meshes
with no holes.
If you could 3D print it,
it’s likely going to be
a pretty good fit here.
You want to avoid intersection
where possible,
but in fact Chaos can cope
with intersections

Chinese: 
大规模破坏景象仍然保持一致
但是关卡的这个特定部分
现在已经清理完毕
而且什么都没有变
当然 我现在希望
你们会想办法把这种爆破
用在和游戏性相关的情境中 对吧？
就这个问题 
我想深入一点
探讨基础系统
或者你们将会感兴趣的
一些基本系统
让我们先从寻路说起
因为这可以说是AI与这种爆破
交互时的绝对基础
这非常简单
寻路已得到全面支持
我们已经确保
寻路网格体能在几何体集合上工作
如果你们愿意
还可以创建动态的寻路网格体
可以让你们生成的碎块
真正修改寻路网格体
在你们看到的这个镜头中--
我看到它的绿色更多了
很抱歉--
 这里有三个寻路网格体岛
其中两个在几何体集合中
还有一个实际上是在静态网格体上
如果你们朝这里的这座桥射击
就可以切入这个寻路网格体
站在桥上的家伙可以掉下来
可能直接摔死
所有的碎片都会落到
下面的寻路网格体上

Japanese: 
各アセットの挙動を
独立に制御できる柔軟性があるということは
特筆すべきでしょう
3 つ目の例では
キャッシュの再生を意識しており
構造物全体を 12 個の
ジオメトリ コレクションに分けています
これは描画コールの集約を助け
後で操作するキャッシュの数を
管理可能な数にしています
ジオメトリ コレクションを用意したら
もちろん それを破片に
分解する必要があります
この例では この特定のオブジェクトを
作成するために選ばれた
さまざまなスタティックメッシュが
色分けされていることがわかると思います
せっかく皆さんがいらっしゃるので
特にこの種の構造物についての推奨事項を
強調しておくのもよいのではないかと思います
まず ジオメトリは
ウォータータイトである必要があります
つまり ソリッドで穴のない連続したメッシュです
3D プリントが可能なメッシュであれば
この条件に
ぴったり当てはまる可能性が高いです
交差もできるだけ避けたいと思うでしょうが
実際には Chaos は交差にも対応できます

Japanese: 
でも 予測可能性と整合性を維持するため
交差はできるだけ避けることをお勧めします
また ジオメトリの負荷は
なるべく増やさない方がいいです
このような推奨事項の多くは
過去になんらかの破壊を
扱ったことのある方にとってはお馴染みでしょう
角の部分を片っ端から
面取りしたりするのは望ましくありません
微妙な細部の多い領域は
別のメッシュに分離しておいたほうがいいでしょう
そうすれば 構造物のより大きな
より単純な部分からそのメッシュが
切り離されるところを制御できるからです
特定の面を切り分けた瞬間
その面のトポロジ数は基本的に 2 倍になります
つまり 破壊の負荷は アセットの数とともに
指数関数的に増大する可能性があるので
メッシュの大部分を単純なままにして
そこに破壊を集中させた方がいいということです
他の多くの環境特性と同じように
モジュール性も大事です
ここでは モジュール化されたメッシュを
選択して組み合わせているので
破砕を含むモジュール全体として
衝突を実行することができます
でも 必要な場合には
忠実度の異なるより
小さなモジュールを対象とすることも
簡単にできます
モジュール性は高い柔軟性の
維持につながります

Chinese: 
你就可以真正修改那个网格体
然后你的AI可以实际对它作出反应
并相应进行决策
现在我们发现
实际上我们不必为
这个演示这样做
我们发现我们可以
做一些更简单的事
我们喜欢把它叫做排障器
或扫雪机
因为我们发现
对于这个演示中的
这种可游玩区域
我们制造出的碎片从来不会大到
能把路完全堵死的程度
我们意识到
如果干脆就让AI和它碰撞
把它踢掉 滚下路面
可以说
这种方法是完全有效的
在Chaos演示中
所有掉到地上的碎块
一旦碰到地面
就会进入休眠状态
因为这就是我们保持高性能的办法
不过这里要再说一遍
它永远不会变成静态得
它永远不会完全脱离模拟
一旦我们的某个AI碰到碎片
他可以真的把它踢开
在我们看来这真的已经够好了
如果你确实需要比这大得多的碎块
请记住 你可以100%查询所有碎片
查询Chaos为你生成的一切 对吧？
如果你让很大的碎块掉下来

English: 
but for the sake of
predictability and consistency,
we’d recommend you avoid
that as much as possible.
It’s also best to keep things
on the cheap side.
A lot of this
will be quite familiar
to anyone who has done
any destruction before.
You don’t want to be
chamfering all of your edges.
You want to try and keep
higher detailed areas
sort of isolated
to separate Meshes
because you’ll be able
to control their breakup
out with the larger,
simpler bulk of the structure.
The moment you slice one face
you have basically doubled
the topology count of that face.
This means destruction
can get exponentially expensive
over a range of Assets,
so try to keep the bulk areas
of Meshes simple
and concentrate fractures there.
Modularity, as with many
environmental features,
is a good idea.
Here we have combined
a selection of modular Meshes
so we can hit them
with fractures as a whole.
But we could easily
target smaller modules
if we wanted to
with a different fidelity,
if that’s what we want.
Modularity does keep things
very flexible.

English: 
I’d absolutely recommend
standardizing widths
and heights,
that sort of thing.
And organizing pivots
to obey Unreal’s grid system.
You’ll save yourself
a lot of time
if you do that out of the gate.
Lastly, materials.
This one is important.
A window frame is metal.
A wall is brick
or concrete or marble.
Even if they’re sharing
the same textures,
you are going to need
to make sure you account
for all the material types
and apply those appropriately.
When we create
a Geometry Collection,
any shared materials will always
be consolidated into one ID,
and a second slot is then
slotted underneath that
into which we can put
our fracture materials.
When we slice
through a piece of metal,
we can put metal in there.
In a wall, concrete or whatever.
Also, another note,
we also support preskinned
vertex position as well,
so there’s room to experiment
with your shaders there too.
So all that out the way,
the moment we have our Geometry
Collection, we can fracture it.

Chinese: 
掉进可游玩区域
而你想做一些工作来真正处理它
如果玩家想要开出一条路
就要朝它射击
或者他们可以爬到碎块上面
或者翻过去
可以实际用它作为
动态的寻路网格体
如果你要想要制作现在出现的那种
新一代掩体射击游戏
可以让巨大的碎块砸到地上
可以摧毁各种建筑
最终它们都会
成为可游玩区域中的动态掩体
玩家和AI都可以利用它
通过Chaos就可以实现这种游戏
说完寻路以后
我们当然还想把破坏作为工具使用
你们知道接下来是什么 对吧？
你们想看到的第一件事
就是我们可以怎样利用它来杀人
我要再一次为视频的
低质量抱歉
我是游戏设计师
这个视频实际上是我们第一次
在一个测试关卡中
把所有这些东西串联起来做成的
我们这里可以看到
一个简单的几何体集合
从天上掉下来
把下面的人砸死
如果你们想要创造出有深度的破坏

Japanese: 
また 幅や高さなどはぜひとも
標準化しておくことをお勧めします
そして Unreal のグリッド システムに
従ってピボットを配置することもお勧めします
最初にそれをすれば
大幅な時間の節約になるでしょう
最後はマテリアルです
これは重要です
窓枠は金属です
壁はレンガやコンクリートや大理石です
これらが同じテクスチャを共有していたとしても
あらゆるマテリアルのタイプを設定して
適切に適用することが必要になります
ジオメトリ コレクションの作成時には
共有マテリアルはすべて
1 つの ID に統一され
その下に割り当てられた第 2 のスロットには
破砕マテリアルを配置することができます
ですから 金属の破片を切断したら
そのスロットに金属を配置することができます
壁の場合はコンクリートなど何でも配置できます
また もう 1 つ注意してほしいのは
スキニング前の頂点位置もサポートしているので
そこにもシェーダーで実験する
余地があるということです
さて 本題に戻りまして
ジオメトリ コレクションの用意ができたら
それを破砕することができます

Chinese: 
Chaos会给你们提供
关于碎片的所有信息
和你们需要的数学
这些断裂事件中
每一个都会告诉你
真正击中你的碎块有多大
它会告诉你它是从哪里来的
速度是多少
如果它足够大 就会触发死亡
比如这里发生的事
但是如果你想让它小一些
可以运行一个flinch
或某种命中反应
如果你想让什么东西砸在AI旁边
我们可以把事件从
Chaos发送到AI系统
它们可以播放相应的结果
同样 因为你得到了位置信息
如果它是从天上掉下来的
你也可以对它作出反应
这只是一些例子
是这样的--
我们已经做了所有的繁重工作
我在这里想说的就是这个
我们确保了Chaos和
其他游戏性系统
之间的通信
已经全为你们准备好了
现在这是AI自主作出反应
它们能够对这作出反应
这一点对我们来说很重要
因为一旦AI

Japanese: 
各部分を別々に破砕することも
特定のパターンを複数の
破片に適用することもできるし
それを好きな回数だけ行うことができます
とりあえず標準的なボロノイ破砕もありますが
アーティストが特定の見た目にするための
一連のオプションも開発しました
ご覧のように 放射状の破砕
クラスタ化したボロノイ破砕
自然な結果を得るためにノイズを使った平面カット
などがあります あるいは
それらを全部組み合わせることもできます
制約の厳しい環境では
二次破砕を使えば
どこに複雑性を加えるかを
アーティストが決めることができます
二次破砕を行うたびに
ジオメトリ コレクションには
追加のレベルが挿入されます
Chaos システムは 各下位レベルを追跡して
その情報をアーティストが制御できる
クラスタと呼ばれるものに保存します
これは 各破砕レベルが
固有のクラスタのセットに
まとめられたメッシュの例です
Chaos ソルバーが他の
システムと少し違うのは

English: 
We can fracture
each part individually
or we can apply a pattern
across multiple pieces,
and we can do that
as many times as we like.
At the moment we have
Standard Voronoi fracture,
but we have also developed
a suite of options
that allow our artists
to dial in a specific look.
You can see here
we’ve got Radial fracturing,
Clustered Voronoi fracturing,
and Planar cutting
using more noise
to get a natural result. Or
a combination of all of them.
In a budget-conscious
environment,
sub-fracturing
allows the artist
to decide
where to add complexity.
Each time you sub-fracture,
an extra level is inserted
into the Geometry Collection,
and the Chaos system keeps
track of each subsequent level
and stores that information
into something an artist
can control—a cluster.
Here is an example of a Mesh
where each fracture level
is combined into
its own set of clusters.
These are a bit different
from other systems

Japanese: 
より小さなノードへの破壊が生じるのに
十分なひずみが加わるまでは
各クラスタ ノードを単一の
オブジェクトのように扱うという点です
この Level 1 のシミュレーションでは
システムはこのような
ノードしか計算していません
逆に クラスタリングを完全に無効にすると
リーフノードのすべてが崩壊します
それほど効率的でもないし
もちろん見た目も良くありません
つまり クラスタの強度値を調整することにより
できる限り最適なパフォーマンスで
さまざまな結果を得ることができます
ソルバーはそのようなクラスタを
単一のオブジェクトとして扱うので
被破壊性オブジェクトの
LOD 方式のような可能性が生じます
ですから このような
300 個のノードから成るオブジェクトを
その半分の数のクラスタに
まとめることも簡単にできます
遠くのインスタンスをさらに少なく抑えたいなら
必要ならその距離に応じて
たとえば 8 個とか
3 個とかに絞り込むこともあります
このような判断はとても流動的でよく変わります

English: 
in that the Chaos solver treats
each cluster node
as a single object
until enough strain is applied
to cause a break
into smaller nodes.
When we’re simulating
Level 1 here,
the system is only
calculating those pieces.
Conversely, if we turn off
clustering altogether,
every single leaf node
falls. Not super-efficient,
of course, doesn’t look great.
By tweaking cluster
strength values
we can therefore get
a varied result
that performs
as optimally as possible.
Since the solver treats
each cluster as a single object,
this also opens up a kind of a
destructible lodding
approach, so an object
like this made of 300 nodes
can easily be clustered
to half that number,
and if we want to keep
distant instances
to even less than that, we might
gate
that to, say, eight,
or even three if we want,
depending on the distance.
That decision is very much
a fluid and changeable one.

Chinese: 
真正开始对这些断裂事件
以及场景中被引发的
各种混沌现象作出反应
就真正提高了一个档次 对吧？
因为如果AI知道
场景中在发生什么
那么实际的破坏也会变得更强力
这些是你们创建的自主系统
但有时候作为设计师
你们也希望能够
探测所有这些东西
我要给你们举一个例子
来说明我们在这个特定的
演示中是怎么做的
我们创建了这个小小的类蓝图
我们称它为破坏检测器
我们可以把它放在演示中的任何部分
比如在这个立柱周围
这个立柱是个几何体集合
然后我们可以侦听
在那个特定的几何体集合
的体积中受到了多少伤害
然后 右边这是虚幻编辑器
你们可以侦听另一个事件
可以对它作出处理
在这个例子中
我侦听的是
这根立柱什么时候被摧毁--
我们把立柱11标记为被摧毁
你们在展区玩这个演示的时候
将会实际看到许多
像这样逐步发生的破坏
当Chaos躲在一个
这样的立柱后面时
我们会要你摧毁立柱
然后我们继续射击

Japanese: 
どこかの段階で クラスタ階層を単純化して
プロシージャルな
自動クラスタリング ツールを使って
リーフノードを集めて
必要な値にすることができます
このツールを使うと
建物全体に破砕を適用した上で
後からそれを選別することができます
レベルは必要な数だけ作れるので
下位の各レベルの密度は
明示的に制御できます
レベルを分解する難しさを制御したり
インスタンスごとに任意のところで
レベルをロックできるということは
パフォーマンスとビジュアルの美しさの釣り合いが
簡単にとれるということです
もう 1 つ導入したコンセプトは接続グラフです
これは ライトウェイトな接続マップで
破壊シミュレーションとは
少し違うパラダイムです
このシーンの端の方には
静的に固定された構成要素も多少ありますが
それ以外の構成要素は
すべて動的になる可能性があります
他のいろいろなシステムのように 状態を
キネマティックからダイナミックに変換する代わりに
このシステムでは ひずみを加え

Chinese: 
这里就是系统内部发生的事情
我们不仅检测伤害
实际上还检测了数量
生成的碎块数量
但最后在演示中用得不是很多
因为我发现使用伤害
来做出逐渐破坏的效果更方便
但是你们完全可以这么做
你们可以使用同样的破坏检测器
你们可以侦听
在这个体积中
实际产生了多少碎砖
然后你们可以进入蓝图--
这是一个蓝图范例--
你们可以在其中观察
Chaos断裂事件
可以看到它将会给你们
提供一大堆信息
但重要的是
他将会告诉你们
破坏在这个体积中
实际产生了多少碎块我是
如果你要把一个容器
放在街上的某个地方
你想要检测是否有人
把足够的碎片丢进那个容器中
然后你想要在容器装满时
推动渐进效果
那么你就要把一个
这样的破坏检测器放进容器里
它会告诉你什么时候装满
不过它只能累计碎片数量

English: 
At any point we can simplify
our cluster hierarchy
and use procedural
auto-clustering tool
to gather the leaf nodes
into the values that we want.
This basically allows us
to spam
an entire building
with fractures
and we can sort that out
after the fact.
Because you have
as many levels as you want,
you can explicitly control
the density
of each successive level.
Controlling how difficult it is
to break those levels up
and to lock them
at any point per instance
means it’s easy
to balance performance
and visual aesthetic.
Another concept to introduce
is the Connection Graph.
This is a lightweight
connectivity map
that’s a bit of
a different paradigm
for destruction simulation.
Here we have a few
statically anchored pieces
at the edges there,
but everything else in the scene
is potentially dynamic.
Rather than swapping
from kinematic to dynamic State
like many other systems,
our system applies strain,

English: 
which in turn breaks connections
and allows nodes to know
when they’re no longer
sufficiently supported.
This is a really good way
to maximize interactivity
while retaining control
over the amount of active
rigid bodies in the scene.
We have everything set up
and we can see sort of
how that works.
How do we interact with it?
The answer
to that is Fields.
Fields are the way that artists
and designers alike
can directly interact
with control simulations.
Fields can be used to control
pretty much any attribute
or any part of
your Geometry Collection.
If you want
to vary your mass,
make something static,
make the corner of a building
more breakable than the middle,
you just want to apply 
some Force, even.
Introduce another Field
and you can apply that change.
These are the foundations
of how we interact
with Geometry Collections.
It’s because we have that
that we can
author Sequences of destruction
that we can then record
and play back.
When we’ve done that,

Chinese: 
你还是要根据他来触发一个事件
现在如果我们把这和
先前的寻路示例放在一起
这也是我们使掩体失效的方法
我们有这些掩体点
它们分布在整个场景里
它们特别标准
而我们创建了简单的机制
让它们和这些
破坏检测器真正挂钩
你们总是可以找到办法让它
更为通用化
不过在我们这个例子里
我们只侦听破坏检测器
它告诉我们立柱什么时候被摧毁
它会使掩体失效
AI就通过这种方式确定
现在不能再躲在这个立柱后面了
因为它已经被打成碎片了
这是一些简单的示例
但是希望它们能让
你们很好地认识到
作为设计程序员或游戏性程序员
你们要怎样和系统交互
我们这里只是讲了些皮毛
我可以就这个问题讲上一个小时
如果你们来逛一下展区
希望我们在某个时候继续这一个讨论
不过我希望这个讲座
能让你们很好地了解到
我们用Chaos设计时
实际上是在做什么
现在 在我交接以前
我还要说一个话题

Japanese: 
そのひずみが接続を破壊することにより
ノードはいつ十分な支持が
なくなったかを知ることができます
これは シーン内の
アクティブな剛体の量に対する
コントロールを維持しながら
インタラクティビティを
最大化するすばらしい方法です
さて 破壊の材料はすべて揃いましたし
その仕組みもだいたいわかりました
では その破壊と
どのようにしてやりとりすればよいのでしょうか？
その答えはフィールドです
フィールドは
アーティストもデザイナーも同じように
制御シミュレーションと
直接やりとりできる手段です
フィールドを使うと ジオメトリ コレクションの
ほとんど任意の属性もしくは
任意の部分を制御できます
質量を変化させたり
何かを動かないようにしたり
ビルの真ん中より角の方を
より壊れやすくしたりしたい場合もあれば
力を均等に加えたい場合すらあります
フィールドを取り入れれば
そのような変更を適用できます
このフィールドこそがジオメトリ コレクションと
やりとりする方法の基礎です
記録して再生できるような
破壊のシーケンスをオーサリングできるのは
このフィールドのおかげです
それをやった上で

Japanese: 
実行時にさらなるフィールドを
導入することもできます
たとえば武器を発射することによって
剛体を事前に
オーサリングされた軌道から切り離して
動的な状態にするとか
ここでは Chaos のごく表面的な部分だけを
紹介させていただきました
Unreal Engine のコミュニティで
どのような反響があるかや
このシステムの結果として
必ずや登場するであろう
大量の作品を見るのが
とても楽しみです
ということで Benn Gallagher に
代わりたいと思います
Benn は Chaos システムについて
さらに順を追って説明し
私がここで取り上げた話題の
一部ももっと掘り下げてくれるはずです
ご清聴ありがとうございました
[拍手]
>> 私は Benn Gallagher と申します
Epic Games の
シニア物理プログラマーです
Chaos 物理エンジンの開発に直接
携わっているエンジニアの一人です
この話の中で
Chaos デモを製作するために構築した
システムの技術的な側面を簡単にご紹介します
では始めましょう

English: 
we can introduce more Fields
at run time.
Weapons fire, for example,
and pull the targeted,
rigid bodies
off of their preauthored track
and into a dynamic State.
Now we’ve only begun
to scratch the surface here.
I’m very excited to see
how the community responds
as well as an awesome 
amount of stuff
that I know
that’s going to come out
and emerge
as a result of this system.
With that, I’m going to hand
over to Benn Gallagher,
and he’s going to walk you
through the system further,
and also expand on some of
the areas I’ve introduced here.
Thank you very much
for your time.
[Applause]
>> I’m Benn Gallagher.
I’m a Senior Physics Programmer
at Epic Games.
I’m one of the engineers
working directly
on the Chaos physics engine.
As part of the talk,
I’ll briefly explore
some of the technical aspects
of the systems we built
to produce the Chaos demo,
so let’s get started.

Chinese: 
可能某些人已经想到了
那就是--
它的所有工作都是通过联网做的
我们真的不想讲得太深入
不过我可以告诉你们
这将是
Epic未来的物理系统
我们从一开始就考虑了联网
因为你们也知道
我们做的游戏是什么类型的
请放心
如果你把这看作物理系统
应该首先思考联网游戏
它们将会得到Chaos的支持
我已经讲得够多了
请来展区玩一下这个游戏
我们将会在那里回答你们的问题
我非常高兴讨论更多
以这个系统为基础
可以用来实现
具有惊人表现力的游戏性的方法
现在请不要去展区
因为我们要让Jim VanAllen上台
他将会告诉你们
我们是怎么使这一切
看起来这么棒的
谢谢
[掌声]
>>Jim VanAllen：大家好
今天我很高兴能来到这里

Chinese: 
和你们谈谈
制作这个演示时的美术部分
我们有一个非常天才的团队
做这个项目
我可以告诉你们
最近几个月
我天天都在玩这个演示
玩得很开心
在最近一个月左右吧
我也说不准
你们在我的工作站上
基本上都会看到这个
我会加载关卡
然后开始试玩
来测试这个或那个东西
然后 在10分钟以后
我会意识到
我完全忘记自己在干什么了
我只是在朝一切东西开火
我把这个演示做出来
就开始问自己
作为一个美术师
我对破坏系统的真正要求是什么？
这就是我的要求
我想要看到任何随机的几何体
我想把它打成随机的碎片
让一个随机用户用随机的力量
从任何随机位置打中它
并控制它的实际外观
归根到底
我发现一切都是
围着这个关键字转的

English: 
When we decided to forge
our own physics solution
and then to build a destruction
system on top of that,
we wanted to make sure
we created a system
that empowers
our content creators
in new ways and was scalable
from small scale simulation
to huge cinematic scenes.
Running on limited
hardware devices like phones,
up to super powerful enthusiast
PCs and beyond.
I’m going to work through
a number of solutions
we developed
to reach these goals.
Non-convex collisions
are often modelled
as a combination
of smaller convex parts.
But this can become
prohibitively expensive.
It would be necessary
to support non-convex collisions
to reach the level of complexity
we’re looking for
when fracturing objects.
We needed true 
non-convex collisions
that were heavily optimized.
Here we see an example of some
trail object interacting 
with a port.
These are each single,
concave objects.
They don’t rely on
any convex decomposition
and it just works
as you expect.
As soon as you have
the geometry,
you can simulate it
with non-convex collisions.
Fields were mentioned
earlier in the talk,
so we’ll go over them
a little bit more
from the technical standpoint.

Japanese: 
弊社が独自の物理ソリューションを開発し
その上に破壊システムを構築することを
決めたときには
新たな形でコンテンツ クリエイターを
支援するような
小規模なシミュレーションから
巨大なシネマティックスのシーンまで
スケーリング可能なシステムを
確実に作ることを望んでいました
スマートフォンのような制限された
ハードウェア デバイスから
超強力なマニア向け PC を超えた
マシン上でまでも動作するようなものを
この目標を達成するために
私たちが開発したさまざまなソリューションを
順に説明して行こうと思います
非凸型のコリジョンはよく
より小さな凸部分の組み合わせとして
モデル化されます
でも この方法だと負荷が
法外に大きくなる可能性があります
非凸型のコリジョンのサポートは
オブジェクトを破砕したときに
必要なレベルの複雑性を
実現するために必要になります
私たちは高度に最適化された
真の非凸型のコリジョンを必要としていました
ご覧いただいているのは
柱と相互作用する複数の
[認識不能] オブジェクトの例です
これらの一つ一つが凹型のオブジェクトです
この処理は凸分解に頼ってはおらず
まさに期待どおりに動作します
ジオメトリがあればすぐ
非凸型コリジョンのシミュレートができます
フィールドの話はこのトークの
最初の方でも出てきましたが
それを技術的な立場から
さらに掘り下げてみましょう

Chinese: 
这就是我真正的要求
我想要一些
在我看来是完全混沌的东西
但它们实际上的表现
符合我要求的方式
实时地运行
然后可能满足设计、环境美术
和工程团队的需求
以及所有其他人的需求
对我来说
这一整套系统中的一切
都是围着这个转的
那么首先这里
就要有一种新的资源
我们称之为几何体集合
几何体集合
在虚幻引擎中是专门为破坏构建的
Mike将会详细讲解
它们的工作原理
以及它们实际做的事
不过美术师要知道几个要点
它们可以从一个或多个
静态网格体构建
包括那些聚集在蓝图中的
甚至嵌套蓝图中的
你们可以在左边看到
有成百上千个网格体
单击按钮
然后你就得到一个几何体集合
供你使用
通过它们
你可以选择哪些是要模拟的
哪些是可以忽略的
它们在组织和编写破坏方面
给了你很多灵活性

Japanese: 
フィールドはシミュレーションと
やりとりする方法です
フィールドは Chaos 用のきわめて
総合的なインタラクションのシステムです
フィールドは空間内の領域で
その中のオブジェクトの
さまざまなパラメータに対して
プログラム可能な影響を及ぼすことができます
このデモでは 武器の爆発で
ビルを破壊し破片をまき散らすため
直線力および角度力を持つ
ひずみフィールドを使っています
このデモの中のそれ以外のフィールドの応用
についてもすぐ後で取り上げます
このようなフィールドは
ゲームイベントやブループリントから
トリガーすることもできます
フィールドは 先ほど Jack が触れたように
いかなるパラメータにも影響を与えられます
スリープ閾値、速度、拘束パラメータ
質量なども変更できます
物理オブジェクトのパラメータなら
何でも変更できます
もっとおもしろい使い方として
フィールドを組み合わせて
複数種類のフィールドから成る合併集合を
構成することもできます
たとえば フォールオフ フィールドを
ノイズ フィールドと組み合わせて
フィールド内の構造が規則的に
ならないようにすることもできます
このデモ プロジェクトで使った
いくつかのフィールドを見てみましょう
1 つ目はアンカーです
先ほどお見せした接続グラフには
アンカー ノードがいくつかありましたが
あのようなアンカーはフィールドを
介して作成しました

English: 
This is how we interact
with the simulations.
Fields are a very generalized
interaction system for Chaos.
They’re a region of space
that can have
some programmable effect
on various parameters
of the objects inside them.
In the demo we used
Strain Fields
with linear
and angular Force Fields
for the explosions
from the weapons
to break up buildings
and fling pieces around,
among some other applications
that I’ll cover soon.
These Fields can also be
triggered from Game Events,
from Blueprints.
Fields can affect
just about any parameter
as Jack mentioned before.
You can change sleep thresholds,
velocities,
constraint parameters, mass.
If it’s a parameter
on the physics object,
you can change it.
They can also be combined
in more interesting ways
to form unions comprised
of many Field types,
such as Falloff Fields
combined with Noise Fields
so you don’t get such a regular
structure inside the Field.
We’ll take a look
at a few of the Fields
we used in the demo project.
First of all, Anchors.
Earlier the Connection Graph was
shown with a few anchored nodes
and we built these 
Anchors through Fields.

English: 
Anchor Fields force any eligible
particle within the Field
to become an Anchor for
the other particles around it
as a supporting piece
of the object that it’s part of.
The normal place where
the destructive object
connects to the rest
of the World as a World Support.
In the example here,
we use Anchor Fields
to lock the top
and bottom of the pillars
and the walls to control
how they collapse
and where they are
supported from.
Anchors are often the foundation
upon which structures are built.
They have another benefit
in leaving
some interesting footprints
when a structure
has been brought down
where something is very strong
and supports the rest
of the structure.
Having a spacial tool to build
these Anchors can be a lot
more intuitive than setting
a World Support check box
somewhere on an object,
as you can see the structure
of the whole scene
and where you’ve put
your World Support.
Strain Fields, as mentioned
previously, will apply
internal forces to the edges
on that Connection Graph
you saw earlier within
the Geometry Collection.
Enough strain and you can break
the connection
between the pieces
and they will fall.

Japanese: 
アンカー フィールドは フィールド内の
パーティクルを強制的に
周囲の他のパーティクルのアンカー
つまり その所属するオブジェクトを
支える構成要素にします
アンカーは普通 破壊可能なオブジェクトが
World Support としてワールドの
他の部分とつながっている部分に配置されます
この例では アンカー フィールドを使って
柱や壁の上下端を固定し
建物がどのように崩壊するか
そして 建物がどこで支えられているかを
制御しています
アンカーはしばしば構造物が
建てられる基礎となります
アンカーには
建物が倒壊したときに
建物の他の部分を支えていた
非常に強度の高い場所に
おもしろい跡が残るという
もう 1 つの利点もあります
このようなアンカーを
構築するための空間ツールは
オブジェクトのどこで
World Support のチェックボックスを
設定するよりもはるかに直観的です
というのは シーン全体の構造や
World Support を
どこに配置したかを
表示することができるからです
ひずみフィールドは 先ほど触れたように
ジオメトリ コレクションの中で
先ほどお見せした
接続グラフの辺に内力を加えます
十分なひずみが生じると 構成要素の間の
連結が壊れて崩落します

Chinese: 
在演示的第1段中
我们展示的几乎每一个静态网格体
都自成一个几何体集合
因为这样管理起来最方便
在中间一段
有更多模块
然后在最后一段
因为我们处理的是
整幢整幢简装的建筑
所以我们把它们分解成
多达12个几何体集合
这东西真的很酷
它让你有能力
来决定要怎么管理这些东西
我们有了我们的几何体集合
接下来要做的事
就是把它分解成碎片
关于这个系统
我最喜欢的地方之一是
除了少数
手工建模成大块碎片的东西
我们在这个演示中
打碎的每一样东西
都是在虚幻引擎中制作的
我们可以分别打碎每个部分
我们可以跨多个碎片应用模式
我们有标准的Voronoi断裂
不过我们还有一套很好的工具
让你得到特定的外观
你可以使用径向断裂

English: 
One of the interesting features
of the Strain system
is that the Strain requires 
the breakage cluster
to be tuned individually
by the artist,
by the content creator.
This allows you to specifically
configure the simulation
for either aesthetic quality,
gameplay interactivity,
or performance as required.
Pillar materials till tend
to crumble really easily
into smaller and smaller pieces,
where sturdy materials
will require
more Strain to break off.
If the scene
is getting too busy,
you notice a performance
degradation,
the Strain limits can be raised
to release less material
into the scene
and take the pressure
off the simulation.
In this example,
we have a Strain Field
which is being animated upwards
and applying a Strain
to the Geometry Collection
as it expands.
The box underneath
is a Culling Field,
which means that we just end up
with a hemispherical region
rising up through the object.
Since this is all
Blueprint driven
we can just expose all of these
parameters of the interaction
until we reach
the desired result.
Sleep Fields put particles
to sleep
based on the threshold
of our choosing

Chinese: 
一些集群Voronoi
我最喜欢的是平面断裂
它让你得到漂亮的、有机的外观
你完全可以自己根据你的系统需求
来决定需要怎样的外观
在一个有预算意识的场景中
次级断裂让你能控制
要在哪些地方添加细节
所以你可以在网格体中选择
我们让这个碎成10块
然后你可以选择其中一部分
进行次级断裂
就这样一直碎下去
这个系统有一点很酷
Chaos系统会跟踪每一个后续级别
把这些信息存储到
你可以控制的东西里面
也就是一个群集
这里有一个网格体的示例
其中每个断裂级别
都自成一组群集
这和其他许多系统不同
在那些系统中
这些东西都是混在一起的
所有单独的碎片都是一起处理的
在我们的系统中
我们将每个节点视作一个对象
在施加足够的应力之前

Japanese: 
このひずみシステムの
興味深い特徴の 1 つは
各クラスタを破壊するために必要なひずみを
コンテンツ クリエイターであるアーティストが
個別に調整できることです
これにより 具体的に必要な美観や
ゲームプレイのインタラクティビティや
パフォーマンスに応じて
シミュレーションを設定することが可能になります
柱のマテリアルは
簡単に粉々に砕けがちですが
頑丈なマテリアルを壊すには
より大きなひずみが必要です
シーンがごちゃごちゃになりすぎると
パフォーマンスの劣化が目立つようになりますが
ひずみ限度を上げれば
シーンに解放されるマテリアルを少なくして
シミュレーションにかかる圧力を
軽くすることができます
この例では ひずみフィールドは
アニメーションで上の方に移動して
拡大しながら
ジオメトリ コレクションにひずみを加えています
下にあるボックスはカリング フィールドです
つまり オブジェクトの中を半球型の領域が
登っていくことになります
これはすべてブループリントによって
駆動しているので
望ましい結果に達するまでの間
あらゆるパラメータを公開して
おくことができます
スリープ フィールドは

Chinese: 
它仍然是作为一个整体来处理的
你们可以看到
我们在这里模拟级别1
它只计算这些碎片
相反
如果我们把群集功能完全关闭
你们就可以看到
每一个叶节点掉下来
这不是特别快
看起来也不是很好
然后通过调整数值
你可以得到
看起来漂亮
性能也很好的结果
这个视频显示了实际效果
美术师对它进行了更仔细的微调
如果你们和我一样
很没有条理
或者用我的说法是
太艺术
不想一丝不苟地跟踪
每一个断裂和级别
以及所有这些东西
我们还有一个很棒的工具
允许你把这一切完全平摊成一个东西
然后程序性地设置群集
这实际上就允许你
在整个建筑中成群制造断裂
事后再整理
你可以减少复杂断裂
比如我甚至不知道这里有多少

Japanese: 
オブジェクト自体の中の速度や
エネルギーに基づいて選ばれた閾値に基づいて
パーティクルをスリープ状態に移行します
スリープ状態のパーティクルは
以後インタラクションには参加しなくなりますが
コリジョンの対象にはなっています
そのようなパーティクルが
他のオブジェクトに衝突すると
スリープ状態は解除され
シーンとのやりとりを再開します
無効化フィールドはこれより少し厳しくなります
無効化フィールドは オブジェクトを
シミュレーションから完全に削除します
そのオブジェクトはシミュレーションの一部で
はなくなり 衝突もしなくなります
でも フィールドは無効化されたオブジェクトを
再アクティブ化することもできます
というのは フィールドはパラメータに
影響を与えられますが
オブジェクトが無効かどうかというのも
1 つのパラメータだからです
でも シミュレーション内の
他のオブジェクトにはそのようなことはできません
無効化されたパーティクルに
衝突したオブジェクトは
それを通り抜けることになります
無効化フィールドは少し注意して
よく考えて使う必要があります
ここでも 空間内の領域を組み立てているので
処理をどの程度積極的に
行うかを指定しています
レベル内のどの点にもさまざまな値と
さまざまな形状のフィールドがあります
スリープ フィールドと無効化フィールドについて
もう少し詳しく説明しましょう
先ほど触れたように
スリープ状態のオブジェクトは
オブジェクトやフィールドに衝突すると
スリープ状態から復帰します
無効化は単なるフィールドです
無効化フィールドは 見た目に関しては

English: 
based on the velocities
or energy of the object itself.
A sleeping particle
is one that no longer
participates in integration
but it still works
with collision.
If they get hit by another
object they can wake up
and start interacting
with the scene again.
Disable Fields
are a little more severe.
They completely remove objects
from the simulation,
they do not integrate,
and they no longer collide.
They can be reactivated
by Fields, however,
because Fields
can affect parameters
and whether an object
is disabled
is a parameter on the object.
But not other objects
in the simulation.
Anything hitting
a disabled particle
will go straight through it.
You have to be a little bit
careful with Disable Fields
and use them judiciously.
Again, because we’re assembling
an area of space,
we define how aggressive
the process is.
At any single point,
we can have different values
and different shapes
of Fields across the level.
Expanding a little bit on Sleep
and Disable Fields,
as we mentioned,
the sleeping objects wake up
if they get hit
by an object or a Field.
Disable is just a Field.
Aesthetically, this can keep
your pieces from rolling
around away from your scene
and being distracting.

Chinese: 
不过你们可以把这个建筑
碎成5000块
然后一级一级
减到2000块、1500块--
 一直到5~10块
这可以让你显式地控制
每个级别的密度
允许你控制性能
真正了不起的地方是
因为我们可以控制这些东西
所以当我们需要
性能的需求
和美术的需求兼顾时这就很有趣
因为你真的不希望有太多小碎片
浮在周围
这看起来很糟糕
如果有太多大碎片浮在周围
看起来会很糟糕
接下来我要讲的是连接图表
这是一种轻量级连接图
它是一种稍有不同的
破坏模拟模式
在这里你们可以看到
我们在底部和顶部
有一些静态固定的碎片
但这个场景中
其他的一切都是悬空的
等待成为动态

English: 
Obviously if you have got
a cutscene coming off
just to the side
you can make sure
that you don’t end up
with stray debris
rolling around
in your cutscene.
Primarily, it allows us
to actually control
the performance of a scene
in a much more directed manner
to make good looking scenes
that perform well.
You can keep the guys
working on the physics engine
happy by making sure
that you have less objects
simulating so their performance
metrics stay in the green.
You see here in this example,
we are now able to completely
destroy this area
without any noticeable
drop in performance
because of well directed
use of Sleep and Disable Fields.
Let’s take an example
of how to actually build
some of these Fields.
Fields are built using
a number of Field nodes
combined together
to form a final Field union
which can then be applied using
the Applied Physics Field node.
Here we’ve got
a Field system created
as a combination
of multiple simpler Fields.
We have a Radial Falloff Field
that creates sort of a linear
falloff in the desired radius

Japanese: 
破片がシーンの外に向かって転がっていって
邪魔になることを防ぎます
もちろん カットシーンがすぐ横にある場合に
散らばった残がいがカットシーンに
転がっていかないように
できます
無効化フィールドは主に
実際にシーンのパフォーマンスを
よりピンポイントで制御して
パフォーマンスを維持しつつシーンの
見た目を良くすることを可能にします
これにより シミュレートする
オブジェクトの数を少な目に維持して
パフォーマンスの指標が
赤信号にならないことを保証し
物理エンジンを扱う担当者たちに
不満を持たせないことができます
この例ではご覧のとおり
目立ったパフォーマンスの低下もなく
この一帯を完全に破壊できていますが
それはスリープ フィールドと無効化フィールドを
ピンポイントで使っているからです
このようなフィールドを
実際にどのように構築するかについての
例を挙げてみましょう
フィールドは 多数のフィールド ノードの
組み合わせから成る
最終的なフィールドの集合を使って構築され
Apply Physics Field ノードを
使って適用することができます
これは 複数のより単純な
フィールドの組み合わせで
作られたフィールドのシステムです
必要な半径のある種の線形フォールオフを
生み出す放射状フォールオフ フィールドがあり

Japanese: 
その後 そのフィールを使って
ベクター フィールドをカリングしています
これが最終的に角トルクの
パラメータに適用されています
このフィールドの効果は
フィールドの原点のまわりの
限られた半径の内側のフィールド内に
一連の角トルクが適用されるというものです
フィールドは単なるボリュームではなく
放射状フォールオフのように
スケールを評価したり
ランダム ベクター フィールドのように
ベクトルを評価したりすることもできます
ご想像のとおり
フォールオフ フィールドを組み合わせると
ランダムのベクトルの
スケーリングが簡単になります
もっと複雑な例を少し見てみましょう
この例はもう少し先まで続きます
これは ジオメトリ コレクションに
爆発する兵器が衝突するという
実際にゲームの中で使われる
エフェクトにより近いです
ここでは 2 つのパラメータが
順に影響を及ぼしています
先ほど説明したひずみは
ジオメトリ コレクションの破壊を引き起こします
直線力は 新しい動的なリーフ ノードに
爆発力を加えます
放射状フォールオフ ボリュームは
ひずみや力が加わるかどうかを制御します
直線力のフィールドで影響を与えたいのは
内部のリーフ ノードなので
直線力が内部リーフ ノードに対してしか
評価されないことを保証するために
カリング フィールドも使っています

English: 
and then we use that Field
to cull around a Vector Field.
This is finally applied
to the angular torque perimeter.
The effect of the Field
is that in a limited radius
around the Field origin,
around the angular torque,
will be applied to particles
within this Field.
Fields aren’t simply
just a volume,
they can evaluate scale,
as like the radial falloff
or vectors like
the Random Vector Field.
When combined,
the Falloff Field scales
the random vectors easier,
as you might expect.
Let’s take a look at a bit
of a more complex example.
This example here has
a little more going on.
It’s closer to an effect that
you might actually use in a game
for an explosive weapon
hitting a Geometry Collection.
We’re sequentially affecting
two parameters here.
Strain, as described earlier,
will cause the Geometry
Collection to break apart.
Linear Force will apply
an explosive Force
to the new dynamic leaf nodes.
Radial falloff volumes control
whether Strain and Force
are applied.
We’re also using a Culling Field
to ensure that we only evaluate
the linear Force
for the internal leaf nodes
since they are the ones we are
going to affect with the Field.

Chinese: 
和系统其他系统不一样
我们的系统不是从
从动力切换到动态
而是施加应力
应力断开连接
继而引发混沌
我们发现这是很好的方法
既能大大提高交互性
又能对被激活的刚体数量
保持控制
它还可以检测到
什么时候某些东西自身悬空
然后就让它掉下来
这很酷
好
我们已经设置好了一切
可以来试玩它了
我们怎么和它交互？
答案就是使用场
场是美术师
直接交互和控制模拟的方式
场可以用于控制
几何体集合的任何部分的任何属性
如果你要让碎片有所变化
要把某些东西设置成静态或动态
要让角落更容易被打破
或者不容易被打破--
基本上你想做任何事情
施加一些力--
那么场就是答案

Chinese: 
场是通过蓝图创建和控制的
在这里的这个示例中
我们施加了一些应力
然后是一些线性力
我们有径向掉落场
它基本上是球体
控制施加这些力的位置
因为这是个模块化系统
很棒的一点
所以你可以
把所有这些东西堆在一起
你可以添加噪点乘数
添加你能想象的任何东西
这里的示例是一个武器的基础
只是一种一般的武器
但是 比方说
可以在里面设置一个延迟
然后你就有了粘性炸弹
就像我们在演示里用的那个
你可以把它乘以1000
然后你就有了高速加农炮
最后我们也用了
好 现在我要给你们介绍三种
我们在这个演示中使用的场
这个是锚定场
你们基本上能猜到它的作用
它们会把体积中的
任何节点锁定在原位
它们有点无聊
但它们是我们用来

English: 
The Field system
is a very powerful system
and it will expand
as we further develop Chaos
and add new features
and new simulation types.
Moving on a little bit
from Fields,
we wanted to make sure
that Niagara integration
was a first class
citizen in the system
as the VFX simulations
can add a lot of depth
and realism to your worlds.
For example,
when a building breaks apart,
it generates a large amount
of dust and debris
as the pieces interact.
To achieve this,
we transferred data from
the physics system to Niagara,
especially when objects collide,
when they break
and when they enter
a trailing State,
which is when they have
a velocity
over a trailing threshold
when they’re flying
through the air.
This allows us to generate
interesting looking
secondary effects
that you see here
in this example.
Note that the events
are not restricted to Niagara
but a general event data store.
Other systems can access this.
This is how,
as Jack described earlier,
we can have AI reactions
to these things,
they can take cover behind them,
affect dynamic navigation.

Japanese: 
フィールドのシステムは非常に強力なシステムで
Chaos の開発が進むとともに拡張されて
新しい機能やシミュレーションの
種類が追加される予定です
フィールドについてはこのへんにしまして
次は ワールドに深みとリアリズムを
与えることができる
VFX シミュレーションという意味で
ナイアガラとの統合がこの
システムの根幹であることを
はっきりさせておきたいと思います
たとえば ビルが崩壊すると
構成要素の相互作用により
大量の埃や残がいが生じます
これを実現するために
オブジェクトが衝突したり、壊れたり
空中を飛んでいるときに
速度がトレイル閾値を超えてトレイル状態に
入ったりしたときに
物理システムからナイアガラに
データを転送するようにしました
そのおかげで
この例でお見せしているような
おもしろい見た目の副次的エフェクトを
生成できるようになりました
このイベントはナイアガラだけに限定されておらず
一般的なイベント データストアに保存されます
それは他のシステムからもアクセスできます
先ほど Jack が説明したように
このようなエフェクトに対して
AI がリアクションして
残がいの後ろで弾をよけたり
動的なナビゲーションに影響を
与えたりできるのはそのためです

English: 
Blueprints can query this data,
so it’s not just for effects.
As mentioned before
we wanted to scale really well.
You can’t run a lot
of these simulations
on low-powered hardware.
We wanted to create large,
cinematic-scale destruction
in games
without having it
be completely scripted,
and obviously just a recording
playing back
as if it was a Skeletal Mesh
that you’d exported
from a DCC tome.
To this end we built the system
to record the results of
simulation inside Unreal,
and played the results
back in later sessions.
These results are stored
as a cache Asset inside Unreal
and are essentially like
a highly optimized
transform track like we use
in animations.
Once the simulation is playing
we can also begin
to reactivate kinematic
elements of the playback.
That means that content creator
can meticulously author
a very specific
destruction Event.
If they want their building
falling down
just in the right manner
and they want six pieces
over here
and twelve pieces over here,

Japanese: 
これはエフェクトだけのためのものではありません
このデータはブループリントから
取得することもできるので
先ほど触れたように
私たちはスケーラビリティも求めていました
このようなシミュレーションは
たくさん走らせることはできません
私たちは 完全な台本を作るのでもなく
もちろん単に録画を再生するのでもなく
DCC ツールからエクスポートした
スケルタルメッシュと同じようにして
ゲーム内で巨大なシネマティックス規模の
破壊を生み出したかったのです
その目標を実現するため
Unreal 内のシミュレーションの結果を
記録するシステムを構築して
その結果を後のセッションで再生しました
そのような結果は キャッシュ アセットとして
Unreal 内に保存されます
保存された結果は実質的に
アニメーションで使う変換トラックを
高度に最適化したようなものです
シミュレーションの再生が始まると
その再生内のキネマティックな要素も
再びアクティブ化され始めます
つまり コンテンツ クリエイターは
破壊イベントを具体的に細部まで
オーサリングできるということです
ビルを正確に崩壊させたい
あっちに破片を 6 個配置し
こっちに破片を 12 個配置したい
といった場合も

Chinese: 
设置一切的构件
在这个关卡里
我们使用锚定场
锁定立柱和墙壁的顶部和底部
这样我们就可以控制
它们坍塌的程度
以及它们会坍到哪里
这个是我最喜欢的
这是应力场
它们的对几何体集合施加应力
前面我们说过
只要应力足够
就可以断开连接
然后破坏就开始发生了
这个系统有一个很酷的功能
那就是打破每一个群集
所需要的应力
都可以由美术师来调整
这样你就可以具体调整你的模拟
根据需要来提高美学质量
游戏交互性和性能
在这个示例中
这个脸很吓人的家伙就是应力场
 他一边向上运动
一边施加应力
它下面的方框是美术师添加的
那就是剔除场
它阻止力被施加到那里
这样就不会出现完全混乱的局面

Japanese: 
そのようなイベントを設定することができ
実行時の見栄えもとても良くなり
変換を更新する際の
パフォーマンスの負荷もとても低くなります
プレイヤーは落下する残がいに
反応することができ
その反応の仕方はコンテンツ クリエイターが
自由に選ぶことができます
シミュレーションは 必要なところ
プレイヤーが反応を決めたところから
その先を動的に引き継ぐことができます
また 好きなだけたくさんの
ものをシミュレートするために
Unreal 内のマルチスレッドによる
物理の処理を
ある種全面的に考え直す必要もありました
今までは フレームごとに物理シミュレーションの
開始や終了を行う責任は
ゲーム スレッドにありました
Unreal 内のティックごとに
シミュレーションの前
最中 後という物理イベントがあります
Chaos では スレッディング モデルを
どのようにするかを
アプリケーションごとに決めることができる
拡張可能なフレームワークを構築しました
そのフレームワークに
ゲームスレッドから完全に独立して
物理スレッドを実行できるような
完全に独立したスレッディング モデルを
追加しました
つまり 物理スレッドが遅くなっても
ゲームプレイや入力の処理は
遅くならないということです
同じように ゲーム スレッドの処理が忙しくても
物理スレッドとは完全に独立しているので
物理スレッドのフレーム時間に
影響を与えることはありません

English: 
they can set that Event up
and then at run time
the destruction
looks really good
and we get
a very low performance cost
for updating the transforms.
A player can then interact
with the falling debris
in any way they choose
and the simulation dynamically
takes over where it needs to,
where the player
has decided to interact.
Also, in order to simulate
as many things as we wanted to,
we kind of needed to rethink how
we handle multi-threaded physics
entirely in Unreal.
Until now, the Game Thread
has been responsible
for starting and completing
physics simulations each frame.
You have a pre, during,
and post physics Event
throughout your tech
inside Unreal.
For Chaos, we built
an extensible framework
that let us decide
per application
what our threading model
actually looks like.
On top of that framework,
we added a fully decoupled
threading model
that lets physics
run completely independent
from the game thread.
This means that if your physics
flow is down,
your gameplay, your input
handling, doesn’t get sluggish.
Similarly, if the Game 
Thread gets busy,
it doesn’t start to affect
the frame time of the physics
because it’s completely
independent.

Chinese: 
这只是一个示例
我真心希望看到大家
掌握这个系统后能做出什么
最后是休眠场--
这又是一个很直白的概念
它们能让各种东西休眠
不过这是一种很强大的工具
这里又有一个视频来向你们展示
任何运动速度低于预定速度的物体
都会休眠
关于这些东西
很棒的一点是
如果你朝它们射击
或者有一个大碎片落在它们上面
就可以唤醒它们
它们实际上没有从模拟中去除
但是在它们休眠的时候
你不必付出
计算它们的成本
作为美术师 从美学角度来看
这真的很棒
因为这可以防止各种碎片
不停地滚来滚去
把画面搞得一团糟
而最后 
这也会成为
整个关卡直接的性能调节器
如果运行速度有点慢
没有达到你的性能要求

Japanese: 
その上 Chaos はコア数の多さを
全面的に生かすように設計されています
Chaos のシミュレーションは
徹底的に並列化されています
でも 以前のスレッディング モデルの
制御を改善する必要がある場合や
特定のアプリケーション用に
独自のスレッディング モデルを
書きたいというような場合にも
このモデルを中心とした
新しいフレームワークならすべて可能です
このフレームワークでは
物理の更新方法を私たちが
指示するのではなく
物理エンジンの実行方法の
選択肢を開発者に与えます
次はジオメトリ コレクションです
Jack が先ほど触れましたが
ジオメトリ コレクションは
私たちがより破壊に重点を
置いたシステムを作り始めたときに
私たちが結集した技術を
ベースにして構築されました
ジオメトリ コレクション構築のためには
評価やレンダリングの負荷ができるだけ
小さいようなオブジェクトの表現が必要でした
ジオメトリ コレクション オブジェクトは
このトークの中で何度も触れたように
高水準で見れば
時間の経過とともに剛体変換可能な
スタティックメッシュの集合です
ジオメトリ コレクションでは 効率化のため
コレクション内のマテリアルを共有する三角形を
1 回の描画コールにまとめています

English: 
Beyond this,
Chaos has been designed
to take full advantage
of high core counts.
It’s a heavy
parallelized simulation.
However, if the game needs
to have increased control
from a previous threading model
or if someone wants to write
their own threading model
for a specific application
they have,
that’s all possible with the
new framework around that model.
It gives the choice
of how the physics engine
runs to the developer
rather than us dictating how
the physics is going to update.
Geometry Collections.
Jack mentioned these earlier
and essentially we built these
on top of the underlying
technology we put together,
and as we began to build things
that were more geared
towards destruction.
To build this we needed
a representation for the object
that was as cheap as possible
to evaluate and to render.
We created the Geometry
Collection objects,
as has been mentioned
many times throughout the talk,
which at a high level
is a set of Static Meshes
that can be rigidly
transformed over time.
It will group triangles with a
shared material inside a
Collection with a single 
draw call for efficiency,

Chinese: 
你就可以提高你的休眠场
你可以增加那些阈值--
基本上这就给了你
获得所需性能的一站式控制
有一件很好玩的事是把它关掉
看着所有人抓狂
然后再把它打开--
嘿 我拯救了大家
那真的很棒
我只是这样做过几次
没有做过太多--
他们全都疯了
我只是开玩笑的
你们在这里可以看到
我可以像这样射一整天
我没有做过
但是可以这么做
你们不会看到性能有任何下降
你们可以把这个关卡彻底炸平
这真是一个很棒的工具
我要谈的最后一个东西
是大规模模拟缓存
通过缓存功能
高保真度的模拟
可以预先缓存起来
然后实时播放
结果不是播片或静态的东西
而是动态的几何体集合
也就是说你可以
编写大规模的破坏事件
但是仍然允许玩家
和环境互动

English: 
so every interior material
is one draw call,
every exterior material
can be one draw call
depending on
how you set up the Mesh.
It makes it
substantially cheaper
than either
a set of Static Meshes
or a fully-skinned
Skeletal Mesh.
A set of Static Meshes
would be many more draw calls
and transform updates,
and Skeletal Meshes are
more complex when rendered
because they support
multi-influenced skinning,
morph targets in clothing,
and ingest a shader
with more cost also
in the component itself.
Once we had the representation
we needed some tools
to allow people to actually
break these things up
into sets of smaller chunks.
Behind me here, we’ve got
an example of a Voronai fracture
being set up
on multiple chunks of a
Geometry Collection,
just in the edit there,
so all this coloring comes up
and you can select
your individual chunks
and perform whichever fracture
algorithm you want on them.
Beyond just the normal
Voronai fracture,
we’ve got a bunch
of different types,
we have radial fracture,
image based fracture,
we have plane
cutting with noise,

Japanese: 
ですから 内部のマテリアルごとに
描画コールは 1 回
外部のマテリアルもメッシュの設定によっては
1 回の描画コールで済みます
そのおかげで ジオメトリ コレクションの負荷は
スタティックメッシュや完全にスキニングされた
スケルタルメッシュのセットよりも
相当小さくなります
スタティックメッシュのセットでは
描画コールやトランスフォームの
更新回数がはるかに多くなりますし
スケルタルメッシュのセットでは
シェーダーの中で複数の
インフルエンスを持つスキニングや
クロス内のモーフ ターゲットをサポートしている
ので レンダリングがもっと複雑になり
シェーダー内の負荷だけでなく
コンポーネント自体の中の負荷も高くなります
表現が決まると
オブジェクトを実際により
小さなチャンクの集合に分解できる
ツールが必要になりました
後ろに表示されているのは
ジオメトリ コレクションの複数のチャンクに
設定されたボロノイ破砕の例です
エディタの中では
このような色分けが表示されるので
個別のチャンクを選択して
どれでも好きな破砕アルゴリズムを
実行することができます
通常のボロノイ破砕だけでなく
さまざまな種類の破砕があります
放射状破砕や画像ベースの破砕もあれば
ノイズによる平面カットもあります

Chinese: 
我就讲这些
希望这能让你们了解
美术师可以如何控制这个系统
我迫不及待地想看到你们今后
在虚幻引擎中做出的破坏效果
这是Michael Lentine
我们的首席物理程序员
他要来说说这套系统的技术方面
[掌声]
>> 谢谢你Jim
我叫Michael Lentine
我在Epic Games管理物理团队
我要说一下
我们刚才展示的演示背后的技术
在开始构建物理系统
和破坏系统时
我们要想明白
我们主要想实现的东西是什么？
我们总是会第1个想到的目标
基本上就是
为我们的内容创作者提供能力
也就是说我们必须创建几种新功能
用于这套系统的
物理方面及破坏方面
我们还要确保这套系统能够伸缩
这意味着两件不同的事

Japanese: 
そのパターンは先のスライドでもお見せしました
このツールの一部として
コンテンツ クリエイターが
スケーラビリティの高いアセットを構築する機能
しかも 必要なことの実現が
複雑になりすぎないように
簡単にアセットを構築できる
機能が必要でした
より標準的なジオメトリの LOD に加えて
複数の破壊レベルを使って
オーサリングすることにより
スケーラブルなアセットを構築できます
最初のレベルは
数個の破片に分解されるだけですが
その下のレベルは
もっとたくさんのオブジェクトを
保持するようにオーサリングされます
このために自動クラスタ化は最適です
というのは クラスタ間の相互作用について
厳密に考える必要がないからです
単に目標とするクラスタの数を
指定すればいいだけです
ここに柱が何本かあります
支えがなくなると柱のより大きな部分が落下し
その後の衝突の繰り返しが
内部ノードにかかるひずみを増やしたとき
さらに崩壊する
可能性があります
シミュレーションの負荷のスケーリングは
破壊の最大レベルを制限することにより
プラットフォームごとに簡単に制御できます
こちらはちょっとおもしろい例です
このデモでは 120mm キャノン砲という

Chinese: 
一方面 我们希望这套系统能够
从低端设备扩展到高端设备
但是我们也希望这套系统能够
扩展到数十万个可模拟的
Object
这一点目前我们
还没有能力做到
首先我们必须想出
一种方法来处理非凸性碰撞
通常我们只能处理非常简单的
碰撞Object
有时候这可能很难处理
比方说有人必须编写
十万个Object
他们通常必须手工
梳理和编写大多数东西
才能得到他们需要的那种外观
但是
我们决定做的是
设计一个基本上完全不同的系统
考虑这三个目标
这必须是在美术指导下的
所以如果你要
打碎这座大楼这样的东西
可以创造出
完全符合你的要求的碎片
避免先前Jim所说的那种情况
基本上都是猜测
只有随机的几何体
和随机的破碎模式
这个系统必须是精确的
因为如果它不精确
那么当大楼开始破碎时
你就会得到各种不协调的效果
这个系统必须快速

English: 
which the pattens were shown
in a previous slide.
As part of the tools
we needed
to have the ability
of content creators
to build Assets
that scale really well
and make it easy for them
to build these Assets
without making it
too complex for them
to achieve
what they needed to do.
In addition to the more 
standard geometric LODs,
you can do that
by authoring them
using different levels
of destruction.
The first level
can be broken in up
into only a few pieces
and each subsequent level
is authored to contain
many more objects.
The auto-cluster
is very good for this
because no one has to think
about exactly how
the clusters interact.
We can just say we’re targeting
a number of clusters.
Here we have got some pillars.
We have larger sections
of the pillars
falling as the supports
are removed,
and they can further
break down afterwards
as repeated collision events
increase the strain
on the internal nodes.
It could be controlled
per platform
to easily scale
the costs of assimilation
by restricting
the maximum destruction level.
Here is a bit of a fun
example to end up here.
We had a large radius 
explosive weapon,

Chinese: 
我们不一定要付出传统方法的成本
使用完整网格器进行碰撞
和诸如此类的事情
我们想出了一种完全不同的
碰撞表示法
可以处理这三个不同的问题
从而得到
你们在这个视频里看到的那种行为
另一个你们已经听说了一点的东西
就是场系统
我们在展示的这个演示里
大量使用了这种系统
场其实是一个比我们
目前的使用更为通用化的概念
它们实际上就是空间中的一个区域
可以是球体 也可以是方框
或者你能想到的任何几何体
而且它会影响该区域中的某些参数
我们在演示中使用这种系统实现
破坏模拟中的应力值
实现各种力
但它也可以用来影响其他东西
假设你需要这个地板上的特定区域
有和地板上其他区域
不同的摩擦值--
你可以就在那个区域设置一个场
来指定需要的那种摩擦数值

English: 
a 120mm cannon in the demo.
Here we have attached
that to the chain gun
so it fires
an awful lot faster.
Just to kind of show
exactly how much destruction
was in the scene
that we created.
For this first alcove here,
all of the pillars, benches,
pillars, walls, and signs
were completely destructible.
The pillars and walls were made
from multiple collections
with different materials
so you had granite tiles
on the exterior of the walls
and the pillars, and sort of
a concrete with rebar inside.
On the walk to the second alcove
here we had more of the same.
We had pillars, walls, benches,
they’re all destructible.
The pillars and walls had
the multiple Geometry Collection
set up with the granite tiles
on the outside.
As you move into
the second alcove,
again, just about everything
in the scene
that isn’t on the floor
is destructible,
including the entire sky bridge,
all of the windows inside it.
It gets a little bit crazy
when you have got a weapon

Japanese: 
爆発半径の大きな兵器があります
ここでは それをチェーンガンに
装填しているので
はるかに高速に発射できるようになっています
これは 私たちが作ったシーンの中で
どの程度の破壊が行われているかを
ある種正確に示すためのものです
この 1 つ目のアルコーブの 柱や椅子や壁や
[識別不能] や標識は
すべて完全に破壊可能です
柱や壁は 異なるマテリアルの
複数のコレクションでできています
ですから
壁や柱の外装は花崗岩のタイルになっていて
内側は鉄筋コンクリートになっています
この 2 つ目のアルコーブに
歩いていく途中もだいたい同じです
柱や壁や椅子があって すべて破壊可能です
柱や壁には 外装が花崗岩のタイルになった
複数のジオメトリ コレクションが
設定されています
2 つ目のアルコーブに入っていくと
ここでもシーンの中にあるものは
床の上にあるもの以外は
連絡通路やその中の窓も含めて
ほとんどすべて破壊可能です
このシーンのように
ここまで強力な兵器があると

Japanese: 
かなりメチャメチャになりますが
これは砲撃による破壊の規模を示しています
お話ししたいことはまだまだあり
それは Chaos 全体の開発が
進めばさらに増えるでしょう
Unreal のコミュニティが
この新しいシステムを使って
びっくりするようなシーンを
製作してくれるのを楽しみにしています
それでは Intel 社の
Kelly さんに代わってもらって
Chaos をどのようにして
高速化したかを説明してもらおうと思います
ありがとうございました
[拍手]
>> すばらしいお話でしたね
Intel が Epic さんに
協力した仕事の 1 つは
CPU 全般のパフォーマンスについてです
これは CPU を
実際に利用する何かにとっては
すばらしい機会です
Epic さんのお手伝いをさせて
いただいたことはワクワクする体験でした
Intel では基本的に この巨大なシステムで
コアを最大限に活用したかったので
低水準のデータ ソルバー、データ構造、
スレッドの並列処理全般を
担当しました
その過程で私たちが学んだことを

Chinese: 
这比Jim展示的例子更简单
只是讲一下我们在这个演示中
实际做过的最简单的事情之一
这是我们的一个力施加场
它非常简单
我们有一个径向掉落场
所以我们在一定半径内从中心开始
我们使震动的量级
从圆心到圆的边缘递减
然后我们有一个随机矢量场
那个随机矢量场
基本上作用就是给我们的力施加
增加噪点
我们可以把这两个场简单合并
创造出每当你在我们的
Chaos视频中用武器开火时
都会出现的力效应之一
这套系统有一个特别重要的方面
就是能与虚幻引擎的其他方面集成
对于爆炸这样的事情
最重要的
就是与Niagara粒子效应
集成的功能
我们通过在Chaos物理系统中
捕获几种不同的事件
来做到这一点
最重要的两种事件
一个是碰撞事件--
每当一个Object撞上另一个Object

English: 
that powerful in this scene,
but it does kind of show
the scale of the destruction
that we hit there.
There’s so much more
to talk about
and there will be even more
to come as Chaos
as a whole develops
and we’re looking forward
to the incredible scenes
that the community start
to create with the new system.
For now I’ll hand it off
to Kelly from Intel
to discuss how
we make Chaos fast.
Thank you very much.
[Applause]
>>  Awesome. One of the things
that we worked on
with Epic is we care a lot about
CPU performance
in general at Intel,
so this is a great opportunity
for something
that’s really going
to work your CPU.
We’re really excited
to help out.
Largely, we were working on some
of our low level data solvers
as well as the data structures
and general thread parallelism
because we really wanted
to fill up the cores
on this giant system.
Some things that we learned

English: 
along the way—If you 
haven’t tried it
before C++
is naturally not very good at
SIMD, or Single 
Instruction, Multiple
Data programming, which is
something that happens a lot
when you’re doing, for instance,
collision detection
or intersection testing,
so things that are very
important for a physics system.
One of the things that is good
for that, though,
is something we call
Intel ISPC,
which makes it really easy
to write nicely parallel code
on any compiler
and I’ll talk about that
in a second.
Some other things
to think about—
one of those cases where you
really need to let your data
show you the right thing to do,
you would think
that using a TSet
would be nice for having
a good unique
set to use
for intersection testing,
but we actually found
in our testing
that we were spending
so much time
on the hashing function that
it wasn’t actually worth it.
We switched to using a TArray
and a Sort
and RemoveSwap in order
to get rid of non-unique members
for our intersection testing.

Chinese: 
你基本上就会得到一个事件
包含发生的时间
以及各种属性
比如位置和质量
诸如此类
我们还记录断裂事件
每当一个小碎片
或一个大碎块被炸出
比方说一座大楼
你就会得到一个事件
它表示发生的时间
以及和它相关的属性
这就使我们很容易模拟
在摧毁大型建筑的时候应该会出现的
尘土和烟雾之类的东西
不过也可以从各种子系统来运用它
我们在这个演示中大量使用的
另外两种子系统
是Mattias先前
谈过一点的游戏性系统
它会捕获这些事件
用它们生成角色反应
或者杀死角色
以及处理音频
每次你让这样的一个事件
向我们的音频系统发送事件
就可以根据事件的属性
播放各种音效
我们在传递数据的时候
遇到的一个问题是
当你要处理10万个Object
或者同样规模的其他东西时
你传递的数据量将是天文数字
这可能很快就会拖慢运行速度

Japanese: 
まだ試したことのない方のために教えますが
C++ は本質的に SIMD つまり
単一命令多重データ処理の
プログラミングにはあまり向いていません
そのような事態は
たとえば 衝突検出や交差判定のような
物理システムにとっては
とても大事なことを行う際によく生じます
その対策として優れた方法の 1 つは
Intel ISPC と呼ばれるもので
任意のコンピュータ上で
効率的な並列コードを
書くことをとても簡単にします
ISPC については後でお話しする予定です
他に考えなくてはならないこととしては
…これはデータに基づいて
やるべきことを判断する
必要のあるケースの 1 つですが…
交差判定に使う一意の
集合を保持するために
TSet を利用するのは良い方法だと
思う方がいらっしゃるかもしれませんが
TSet を使うとハッシュ関数に
消費される時間が多すぎて割に合わない
ということが私たちのテストによって判明しました
私たちは 交差判定用の配列から
一意でない要素を取り除くために
TArray と Sort と
RemoveSwap を使う方法に切り替えました

English: 
Also, ParallelFor, though it can
be powerful for multi-threading
in some ways is very easy
to overuse
and very easy to use it
to hide bad cache behavior.
This is another case where
you want to let your tools show
you what’s going on
and so we found
that when you’re
oversubscribing like that,
you end up
with much more thrash,
you can have thousands of jobs,
so batching is helpful
in this case,
especially if you have nice,
friendly data access patterns.
What is ISPC?
That is Intel Single Program
Multiple Data Program Compiler.
I didn’t name it.
But basically, computers—CPUs
in particular—have had vector
instructions
since the early 2000s.
But they’ve been a bit
of a monster to program for.
Basically these vector
instructions will allow you
to do like eight floating point
adds in a single instruction

Chinese: 
我们为了避免这一点
设置了可以
应用到这些不同系统的
数字和过滤器
比如 当我们传送
事件到Niagara时
我们使用一个空间过滤器
所以如果你在大楼左侧的小角落里
有10个不同的碰撞事件
基本上就可以登记为一个事件
对于音频也差不多
我们基本上可以
根据质量对事件排序
然后为最大的几个Object
运行音频事件
这样我们就不会不断地听到
各种东西碰相互碰撞的噪声
只会听到在模拟中发生的
各种重要大事件的声音
关于这个我们已经说过一点了--
交互式缓存也是
我们想通过这个系统实现的功能
这可以实现从
低端设备扩展到高端设备
同时保持一切交互性的目标
很显然 如果你是在低端设备上
根本没有运行大量模拟的计算能力
你能做的就是预先将模拟

Japanese: 
また 場合によってはマルチスレッディングにとって
強力な武器になりうる ParallelFor は
とても濫用されやすく
これを使うとキャッシュの良くない
挙動がいとも簡単に隠蔽されてしまいます
これは ツールを使って処理の状態を
調べるべきもう 1 つのケースで
そのように
オーバー サブスクリプション状態になると
スラッシングがより多く生じることになって
数千のジョブが発生する可能性があります
このような場合
特にデータアクセスのパターンが
バッチ処理向きである場合は
バッチ処理が役に立ちます
では ISPC とは何でしょうか
ISPC とは Intel の
SPMD プログラム用のコンパイラです
私が付けた名前ではありません
でも コンピュータ 特に CPU には
2000 年代初期からベクトル命令が
装備されていました
でも ベクトル命令のプログラミングは
やっかいなものであり続けてきました
このようなベクトル命令は
データをベクトルとしてロードして
単一の加算の代わりに
ベクトル加算を利用することにより

English: 
by loading them into a vector
and then using a vector
add instead of a single add,
which is super powerful.
The problem is getting
the compiler to do it correctly
on whatever
compiler version you’re on,
and then the compiler updates,
and you have to rewrite
all of the code.
It makes it really hard to do
in things like Unreal Engine,
where you are cross-platform,
cross-hardware
and trying to make all of these
things scale very naturally.
This is what the ISPC compiler
is so good at.
Essentially what it does is it
gives you implicit parallelism
in a language that looks like
a GPU shader language,
but it’s running on the CPU,
which allows you to parallelize
really nicely.
Like a shader language, it’s
going to assume SIMD by defaults
and it’s going to act
a lot like GPU shaders
in the way that it executes.
There are a couple of caveats
that I’ll talk about
in a second, too.
One of the big benefits is that
programmers can write
the ISPC code once
and compile the vectorized
desctructions to any 
vectorized instruction

Chinese: 
记录在虚幻引擎中
然后播放
在任何时候
这些Object中的任何一个
都可以开始交互
它的工作原理是
当我们开始模拟的时候
实际上是让我们的所有Object
进入某种休眠状态
然后当那些Objects
开始和其他Objects交互
或者和玩家交互的时候
它们就开始变成活动的
通过这种方法
从某种意义上讲
我们就能模拟数十万个Object
但只需要付出模拟
其中比较小的一部分的计算能力
这样做的基本目标就是让我们获得
任何环境 任何设置中的
交互式场景
这个系统的另一个重要方面是
因为它是完全
在虚幻引擎内部编写的
编写这些资源的迭代时间
非常短
因为你不需要不停地
在第三方软件包之间切换
关于departure
这不是什么
需要过多演示的东西
它是我们在引擎中
进行多线程物理计算的方式

Japanese: 
1 回の命令で浮動小数点数
8 個の加算を実行することを可能にします
これは超強力です
問題は コンパイラのバージョンにかかわらず
これを正しくコンパイルさせることです
さもないと コンパイラが更新されると
あらゆるコードを
書き直さなくてはならなくなります
このことは Unreal Engine のような
クロス プラットフォーム、クロス ハードウェアの
環境で開発していて
このような計算を自然にスケーラブルに
しようとしている場合には とても難しくなります
これこそが ISPC コンパイラが
非常に得意とすることです
ISPC がやっているのは
要するに GPU のシェーダー言語に似た
ただし CPU 上で動作する言語に
暗黙の並列性を導入することで
それによりとても
効率的な並列化が可能になります
ISPC では シェーダー言語と同じく
デフォルトで SIMD を想定し
その実行の方法においても
GPU シェーダーと同じように動作します
ただし 注意すべきことも多少あるので
それについても少し後でお話しします
ISPC の大きな利点の 1 つは
プログラマーが
1 度 ISPC のコードを書くだけで
ベクトル化された破壊を
SSE4、AVX、AVX2 などサポートされる

Japanese: 
任意のベクトル化命令セットに
コンパイルできることです
したがって
どのようなハードウェアで作業していても
とても簡単に更新できます
複数の命令セット向けにコンパイルしている場合
CPU がサポートしている命令セットを検出し
その命令セット向けにコンパイルできるような
自動検出メカニズムがあります
つまり 新しい命令セットが追加されるたびに
組み込み命令を更新する
必要はない ということです
その恩恵はすぐに受けられます
ISPC は物理エンジンの中で
重点的に使われていましたが
物理エンジン専用ではないので
まもなく全 Unreal プロジェクトで
利用できるようになる予定です
ISPC は 幅広い CPU を
使いたいときにいつでも使えます
私たちは Unreal の
他のもっと効率的に並列化したい
部分にも ISPC を
取り入れる作業しているところです
ISPC のいいところは
導入がとても簡単なことです
基本的に ISPC モジュールを
build.cs の中にインクルードして
ISPC ファイルをプロジェクトの
インクルードに追加します
そうすると C++ 用のヘッダが生成されるので
そのヘッダをコードを書くファイルに
インクルードするだけで
後は Unreal の
ビルド ツールが面倒を見てくれます

Chinese: 
目前引擎有两个主要的线程
一个渲染线程和一个游戏线程
我们的游戏线程
在很大程度上负责
我们的物理模拟
但这限制了可以和物理
一起处理的游戏性事件
我们添加的功能
不是要求
而是增加了一个物理线程
这就给了我们几种有趣的能力
一是
有了三个不同的线程可以利用
进行扩展就很方便
而且这也给了你必要的稳定性
可以让你在对物理tick时使用
和引擎其他部分
的tick完全不同的速度
如果要按固定的时间步幅tick
在新系统里完全做得到
如果你要按 
比方说120赫兹来tick
因为你希望你的物理效果特别准确
而且场景里的物理效果也不是很多
那也是完全能做到的
如果要按60赫兹
对Gameplay进行tick
按30赫兹对物理效果tick
这也是完全可以实现的
到目前为止
我们已经谈过一点几何体集合了
几何体集合是引擎中一个新的类型
它介于骨架网格体的概念
和静态网格体的概念之间

English: 
set that’s been supported
so—SSE4, AVX,
AVX2—which makes it very easy
to update
with whatever hardware you
are working on.
If you are compiling
for multiple instruction sets,
there is an auto-detect
mechanism that can detect
whatever your CPU supports
and compile for that, too,
which means you don’t have
to update your intrinsics
every time you get
a new instruction set.
You can take advantage of it
right away.
This was heavily used
in the physics engine
and will be available
for all Unreal projects soon
because this isn’t just
something to use for physics.
This is something to use
any time
that you want to go
really wide on the CPU.
We are working on integrating
it into other parts of Unreal
that we want to better
parallelize as well.
The nice thing about ISPC,
too,
is that it’s super easy
to integrate.
Essentially you include
the module in your build.cs,
you add the files 
to the project,
that will generate
a C++ header
that you include in that file
where you wrote the code,
and the Unreal Build Tool
will handle all of the rest.

English: 
We had a GDC talk about this.
You are welcome
to check that out.
I believe it’s already up.
Also, we’ll continue to put out
some more literature
for you guys
as this becomes more robust.
When to use ISPC?
When you’re thinking about ISPC
and where to use it
in your code,
you want to think about places
that have dense
compute-bound workloads.
Heavy math like physics
intersection testing,
and cloth or vertex transforms—
anything where you are really
putting your CPU to work
and have a lot of work to do.
It works best when
you don’t have data dependencies
between operations
so it’s not having to wait on
a previous operation to finish.
It is especially useful when
you combine it with ParallelFor
and a batching scheme,
because all of these things
are going to help solve
different optimization problems.
Remember I said that ISPC acts
a lot like GPU shaders,
and they do, but with
some important differences.

Japanese: 
私たちはこれに関する
GDC トークも実施しています
関心がある方はチェックしてみてください
もうアップロードされているはずですから
また 皆さんのために
ISPC が安定したらさらなる文献の
公開を続けて行くつもりです
ISPC はどのようなときに
使えばいいのでしょうか ISPC について検討し
自分のコードのどこで使えば
いいのかを考えるときには
計算負荷が集中している場所を
検討するとよいでしょう
物理的な交差判定やクロスや
CPU による頂点変換のような
重い計算がある場所
CPU を全面的に働かせていて
やるべき仕事もたくさんある場所で
使うことを検討してください
ISPC は 演算の間のデータ依存性がなくて
先の演算の完了を待つ
必要がないような場合に最も有効に働きます
ISPC は ParallelFor や
バッチ処理方式と組み合わせたとき
特に役に立ちます
というのは これらはすべて
さまざまな最適化問題の解決に役立つからです
ISPC は GPU シェーダーと
同じように働くと言ったことを覚えているでしょうか
確かにそのとおりなのですが
重要な違いがいくつかあります

Chinese: 
静态网格体是非常简单的Object
非常适合用于
基本上完全不会改变或移动的东西
这就意味着它们很难用于
可破坏的资源
除非你在破坏的每一个部分
都使用一个静态网格体
但这会很快造成大量开销
目前在虚幻引擎中存在的
另一个概念是骨架网格体
它的处理成本相当大
因为它们的真正用途是
用于角色扫描之类的东西
我们做的事就是
创建了一个轻量级的可伸缩系统
系统中可以有几十万个
这样骨骼式的元素
可以简化计算
对这种特定的资源
可以将它看作一个几何体集合
你基本上只需要付出绘图成本
基本上由在这个建筑中
的材质数量决定
但是我们仍然可以把它炸掉
让所有碎片独立运动

English: 
Whereas on the GPU
all the shaders
are going to run independently
once you send them off,
each SIMD lane and ISPC
is going to perform in lockstep.
If one of those lanes
isn’t going to take a branch,
but the others are,
it’s just going to stop and wait
until the other lanes
finish that branch
and then it will pick back up
afterwards,
which is actually faster
than it sounds
when you’re on a CPU
instead of a GPU.
Another neat thing about
this convergence
is that it gives the ability to
do reductions across SIMD lanes.
For example, if you are trying
to find the sum of an Array
of integers or the min
or the max, it’s super fast,
and that was something we used
a lot to make Chaos faster.
What you see on the bottom
there is our actual ISPC code
on the
left—the not scary-looking one.
Essentially all you have
to do is add those uniforms.
There are two key words, uniform
and varying, which again,
I invite you to look at
the white papers and literature
about how to use those properly.

Japanese: 
GPU 上では そのようなシェーダーは
起動後はすべて独立して動作しますが
SIMD レーンと ISPS は
それぞれロックステップ方式で実行されます
要するに 分岐のあるレーンとない
レーンがあるような場合には
分岐のないレーンは他のレーンの
分岐が終わるまで停止して待機し
終わってから再開します
この処理は
実際に GPU の代わりに
CPU で実行しているときは 意外と高速です
この収束に関するもう 1 つのいいところは
SIMD レーン全体のリダクションを
行う機能を与えてくれるところです
たとえば 整数配列の合計や
最小値や最大値を求めようとすると
超高速に計算されます
これは Chaos の高速化に
多用された機能です
この画面の左下に表示されているのは
実際の ISPC のコードです
それほどとっつきにくいものではありません
やっているのは要するに
uniform の加算です
ISPC には uniform と varying 
という 2 つのキーワードがあります
このようなキーワードを正しく使う方法については

Chinese: 
作为这个系统的一部分
我们希望确保
迭代时间很短
而且我们希望在虚幻引擎中
直接整合一些剪切工具
当这些工具发行的时候
你们就可以把引擎中存在的
任何静态网格体打碎
并且随意摆弄
我们先前已经说过一点了
所以我不会过于详细地
介绍我们目前可以打碎东西的
各种不同方式
这包括Voronoi破碎
平面剪切和基于图像的破碎
另一个对系统很重要的
和可伸缩性目标有关的
就是可破坏LOD
可破坏LOD算是个新概念
和几何LOD之类的概念不太一样
后者显然只是说
当某些东西离远时
你可以改变你的渲染表示
而这种LOD关系到
Jim先前提到的层级
当你拿到一个破碎网格体
可以把它分解成
一些小块
比方说6块
然后你可以把这6个碎块

Chinese: 
再分别碎成10块
这10块分别再碎成10块
就这样一直类推下去
这就给了你两个能力
首先它让你能够实现许多
次级断裂
这让人很满意
你们可以在这些示例中看到
当我们朝立柱上下射击的时候
有这些大的碎块掉出来
然后你可以在碎块掉下后
继续摧毁这些立柱
它还让我们能够通过一种
从美术角度创建的设置方便地缩放
如果你有一种低端设备
和一种高端设备
你想把这个设置成
6到60到600
或者你要分解的任何数量
你都可以把低端设备拿来
然后说
我绝不希望这个资源的模拟
超过六个Object
这时候实际上就锁定了你的LOD
但是你可以允许高性能的设备
进一步分解这些碎片
模拟600个Object
这意味着你可以有
一个从美术角度创建的设置
所以你不必另外创建
用于这种设备的破坏

English: 
You just add those key words
to indicate
how you would like it
to compile into the proper
vectorized instructions
and it will turn into that code
you see on the right.
Super easy to use and hopefully
you guys find it useful
for what you’re
working on as well.
That is ISPC.
We were really excited to work
with the Chaos team
and get this demo out there
and so excited
to see what you guys are going
to do with all of this.
Thank you, everybody.
Would you like
to close this out?
[Applause]
>> Beautifully done. Lovely.
>> Thank you very much
for coming to the session.
We are really looking forward
to what this technology can do
when it’s in more hands
than ours
Our artists sort of blew us away
so we’ll see
what everyone else can do.
We’re looking forward
to the kind of things
you guys can create.
Thank you very much.

Japanese: 
関連のホワイトペーパーや文献を
ご覧になることをお勧めします
このようなキーワードを追加するのは単に
適切なベクトル命令に
コンパイルする方法を指定するためです
その結果生成されたのが右側のコードです
ISPC の使い方は超簡単ですので
皆さんのお仕事にも
役に立つことを期待しています
これが ISPC です
Chaos チームと一緒に働いて
このデモを発表できたことは
すばらしい経験でした
それを皆さんがどう生かしてくれるのかを
見るのが楽しみです
皆さんありがとうございました
最後に一言お願いします
[拍手]
>> すばらしかったです
最高
>> このセッションに参加していただいて
ありがとうございました
このテクノロジーが
私たち以外の皆さんのところに届いた時
何ができるのかとても楽しみです
弊社のアーティストはぶっ飛ばすような
作品を作ってくれたので
他の皆さんにもできるでしょう
皆さんが作る作品を
楽しみにしています
どうもありがとうございました

Chinese: 
和用于这种设备的破坏
以及用于这种设备的破坏
这样你就有了
在低端和高端平台之间的伸缩性
最后
我们还必须想出一种方法
执行动态的流送求值
这很重要 因为当我们在几何体数量
上达到很大规模的时候
要完全手工编写这些东西
就太可怕了
我们做的是
构建了一种连接图表
你们已经在Jim的幻灯片上看到了
图表中每个连接
基本上都有一个允许的应力
这种允许的应力可以通过场来设置
可以设置为Object本身的参数
或者以引擎中的
其他几种方式来设置
然后我们就在
有任何东西与那个几何体集合
交互的时候对应力求值
如果交互在连接上产生的应力
大于内部的阈值
我们就将连接断开
这样我们就有了自动将各种东西
打碎的能力
这也带来了有趣的效果

Japanese: 
[拍手]

English: 
[Applause]

Chinese: 
比方说
如果你有一个建筑
作为一个几何体集合
然后炸掉
比方说那座建筑的整个中心
那么整个屋顶都会开始掉下来
因为连接图表
现在与地面断开连接了
实际上没有什么东西能支撑屋顶了
为了让你们感受一下这个系统
能做到什么
我要给你们放一个小视频
它是我们刚才放过的演示
的修改版本

Chinese: 
通过它你们可以看到
尽管我们心里有非常具体的目标
当我们要创作这个演示的时候
我们实际上可以处理
相当多的Object
它们都是实时模拟的
而且实际上可以
使用系统的其他部分编写
现在我要把讲台交给我的同行Jeff
他来自英特尔
他会稍微讲一下我们
怎样提高Chaos的速度
[掌声]
>> 谢谢 Michael
我叫Jeff Rous
我是英特尔的
资深开发者关系工程师
我们在这个演示上和Epic
进行了十分密切的合作
为的是进一步提高它的速度

Chinese: 
我们和Epic
合作优化了低级解算器
数据结构和线程
并行
我们帮助他们尽量发挥出了
CPU的性能
因为这个演示是
在一个很高端的机器上运行的
我们究竟做了什么？
学到了什么？
我主要的心得是 
虽然C++
是一种低级语言
但是它在SIMD方面真的很差
我们集成了一种来自英特尔的技术
叫做ISPC
它是什么呢？
它能让你走宽敞大路
我会很快地讲解一下
我们在许多关键领域
看到了3倍增益
第2件事是TSet
如果你们熟悉虚幻容器就知道它
它在高性能情况下
可能表现很差
当你断开和寻找
Object之间的交集时
你需要把这些东西放进数组里
对它们排序并移除
不是守卫重复

Chinese: 
而是用TSet之类的东西来移除
因为我们花了很多时间
进行散列计算
这不是我们想要的
我们想要的是
在屏幕上显示更多东西
另外一个很重要的心得是
ParallelFor可能被过度使用
它非常非常善于
隐藏错误的缓存代码
而且有一些超额预订也是好事
但你不应该用成千上万个作业
来做过头
如果你的数据访问模式对缓存友好
批处理特别有帮助
而且还能够进行测试
确保如果你使用ParallelFor
那么仅仅在一个线程上运行
不会加快速度
在很多情况下这是有可能的
CPU自从21世纪初以来
就有矢量单元
程序员可以利用它们加速代码运行
这就是所谓的单指令多数据
比方说可以让你用一条指令
做八次浮点加法
C++的一个问题是
很难获取对任何东西
进行矢量化的编译器
编译器之间的差异意味着

Chinese: 
性能的差异
通常的解决办法是使用
编译器内部函数
但你必须用新的指令集更新它们
这时候ISPC编译器就派上用场了
ISPC编译器是英特尔的单程序
多数据程序编译器--
我们在英特尔使用一些很棒的名称
ISPC能给你什么呢？
它能让你在一种像是着色器语言的
语言中实现隐式并行
但它是在CPU上运行的
这对Chaos这样的系统来说很关键
和着色器语言一样
它默认假定SIMD
ISPC的执行方式和GPU着色器也很像
只不过有一些重要的差异
我稍后会讲
一个很大的优点是
程序员可以编写ISPC一次
然后编译到许多矢量化的指令集
例如SSE4、AVX、AVX2以及Neon
而且它支持PS4和Xbox
所以它在任何地方都能运行
如果你们为多个指令集编译
它还会审核你的计算机
使用的最高指令集技术

Chinese: 
因此它会使用对你的CPU最快的一个
你们不必再更新内部函数了
只要重新编译就行
我们在新的物理引擎中
大量使用了它
很快它就会面向所有
在虚幻引擎中工作的程序员提供
基本的工作流程是
在你的构建CS中包含一个模块
把ISPC文件添加到你的项目
包含生成的标头文件
它们会链接ISPC和C++
然后虚幻构建工具就会处理其他工作
包括把Object文件打包到项目中
所有这一切工作都是为了
方便你们大家使用它
ISPC除了用于Chaos
还有什么好处呢？
它非常适合密集的
受计算量限制的工作负载
例如Chaos为了寻找物理交集
布料或CPU顶点变换
而进行的大量数学计算
如果你将它配合连续的内存
受操纵的存储使用
能够最好地发挥它的优点
比如使用TArray的时候

Chinese: 
它最适合用在运算之间
没有数据依赖性的时候
而且它尤其适合与Parallel 4
和某些类型的批处理配合使用
而且要确保你的算法
是对缓存友好的
还记得我说过
ISPC和GPU着色器很像吗？
它们确实很像
不过有一些重要的差异
着色器都是独立运行的
而ISPC中每个SIMD
运行程序的一个实例
区别在于ISPC在锁定步骤中
运行所有SIMD LAN
而且始终保证在最后收敛
GPU着色器会在不同时间完成执行
如果你的代码中有分支
那些不使用分支的会关闭
然后在分支作用域结束时重新打开
然后所有都会继续--
这其实比听起来更快
关于这种收敛
有一个很妙的事
就是跨SIMD LAN做减法的能力
比如 如果你想非常快地找到
某个整数数组的总和
或是最小值或最大值
我们就大量使用了它
来使Chaos更快

Chinese: 
这里最下面的图显示了
ISPC代码的样子
和它生成的内容
我们有一个RGB到灰色
转换N个值和存储
通过三次乘法和两次加法
借助AVX
你可以用一次运行八个这样的运算
其中两个累加可以融合到
FMA指令中
这样的速度基本上是
定标器实现的八倍
所以你们可以在下面看到
ISPC代码将会转成什么
这就是相关的内容
关于英特尔为了帮助优化Chaos
演示所做的工作
请大家关注
在即将推出的UE4发行版中
的变化和使用ISPC的功能
另外也要去看看Epic的展区
玩玩这个非常酷的演示
非常感谢来自Epic的共同演讲者
我要把他们重新请到台上来
感谢大家来听这个讲座！
[掌声]

Chinese: 
>>Mattias：感谢英特尔
所有帮助我们优化它的人
我认为成果本身就很能说明问题
我的意思就是
这看起来真是太棒了
我们的讲座到此结束
很遗憾
我们的时间不够进行真正的
问答环节
我们真心希望你们去展区看看
那里安排了两台这样的游戏机
你们还可以喝啤酒
可以吃爆米花,
可以打烂一些东西
不过同样重要的是
我们还设置了许多
这样的工作站
请找一个开发者
如果你们有更多问题或意见
请来找我们
我们将会非常高兴地和你们对话
祝大家在GDC过得愉快
谢谢！
[掌声]
♫ 虚幻徽标音乐 ♫
