UE4におけるレベル制作事例【UE4を用いた大規模開発事例紹介 ~スクウェア・エニックス様をお招きして~ 2019】

2.8K Views

March 20, 19

スライド概要

※本セッションには多くの動画が含まれていたり、ノートに備考が記載されている可能性があります。実際の講演で行われたスライドが下記からダウンロード可能ですので、是非そちらをご覧頂けますと幸いです。
講演パワーポイントリンク: https://epicgames.box.com/s/1ywmmc4oyeknaqvejdq5zwczfnwl7ywr

登壇者
吉田 武史さま

内容 
ブループリント、レベル周りのワークフローや最適化関係をお話させていただきます。


本スライドは2019年3月15日に行われた「UE4を用いた大規模開発事例紹介 ~スクウェア・エニックス様をお招きして~」にてスクウェア・エニックス様に講演していただいたものです。

profile-image

エピック ゲームズ ジャパン

@EpicGamesJapan

スライド一覧

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

UE4におけるレベル制作事例 株式会社スクウェア・エニックス ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 吉田 武史 VFX STUDY GROUP

2.

略称について ・『Unreal Engine 4』をスライド内では『UE4』と記載しています ・『PlayStation®4』も同様に『PS4』と記載しています ・一部『ブループリント』を『BP』と記載しています ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

3.

本プロジェクトは UE4.17.2 を使用して作成されており 本スライドの内容もそれに準じて作られております。 最新バージョンでは挙動、もしくはソースコードが 変更されている可能性がありますのでご了承ください ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

4.

まずは自己紹介 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

5.

自己紹介 吉田 武史 プログラマー。 入社して現在ちょうど4年目。UE4 歴は5年目。 (1年はBPでの開発、残りはC++とBPの両方を触る) 元々はブループリントのサポート担当で配属されましたが 色々と雑務をしている内にレベルプログラム担当に。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

6.

今回お話する内容について ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

7.

今回お話する内容 • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

8.

今回お話する内容 • ブループリント • レベルの構成 オブジェクト継承のブループリントと レベルブループリントをメインに • レベルストリーミング 解説していきます。 • レベルの最適化 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

9.

ブループリント どれくらい使っていた? ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

10.

ブループリント どれくらい使ってた? 本プロジェクトでは プランナー、デザイナー、プログラマー どのセクションでも高い頻度で使っていました。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

11.

ブループリント どれくらい使ってた? 各セクションが どういった感じで使っていたかというと…… ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

12.

ブループリント どれくらい使ってた? こんな感じで使っていました。 プランナー プログラマー デザイナー ・「仕掛け」の作成 ・「仕掛け」の作成 ・見た目の調整 ・ゲーム性検証 ・ミニゲーム作成 ・演出強化 ・ミニゲーム作成 ・カメラ挙動作成 ・「仕掛け」とは…… ボタン等のプレイヤーからのアクセスで起動するオブジェクトや プレイヤーの進行を阻害する為に動作しているオブジェクトの事を指す。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

13.

ブループリント 使う上でのルール ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

14.

ブループリント 使う上でのルール B PのTick はな る べく 使 わな い ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

15.

ブループリント 使う上でのルール BPのTickはなるべく使わない 理由は2つあり…… ・処理負荷が上がるのでなるべく使いたくない ・Tick を使う = 複雑な物になりやすい ・呼び出しイベントから実行して終わる程度の シンプルな流れで済ませたい ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

16.

ブループリント 使う上でのルール BPのTickはなるべく使わない ・「完全に使わない」ではなく「なるべく使わない」 ・必要な場面であれば使用 ・使用する場面のみON、使用後はOFFといった感じで 常にTickをONにするという事はほぼ無かった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

17.

ブループリント 使う上でのルール BPのTickはなるべく使わない プログラマー側では どの Tick が動いているか定期的に調査。 不要な物が見つかった場合は担当者に連絡し 実装方法に関してすり合わせをしていた。 最終的にこの流れが浸透し、Tick 使用率は自然と減少傾向に。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

18.

ブループリント 使う上でのルール 親クラスはなるべ く C ++ ク ラス に ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

19.

ブループリント 使う上でのルール 親クラスはなるべくC++クラスに ・これも絶対ではなく「なるべく」 ・重たい処理があってもC++に逃がしやすい ・C++であれば実機デバッグ時にコード修正だけで確認可能 ・C++からの継承コンポーネントも除去可能 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

20.

ブループリント 使う上でのルール 親クラスはなるべくC++クラスに RazorCPU などのプロファイラーとも相性がよくなる。 コールスタックから、どのオブジェクトか判断が付きやすい。 本プロジェクトでは処理負荷はTest版で見ており こちらで仕込んだマーカーで負荷を確認する事が大半だった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

21.

ブループリント 使う上でのルール 親クラスはなるべくC++クラスに その他 気になる点としてBPクラスロード時に 親BP が持つアセットを芋づる式に呼んでしまう問題がある。 C++クラスでも同じ作りは出来るが コーディングルールとして禁止していた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

22.

ブループリント 使う上でのルール インプットイベン ト はエ デ ィタ ー 限定 に ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

23.

ブループリント 使う上でのルール インプットイベントはエディター限定に キーボードイベントを利用してのデバッグは 非常にお手軽で便利なのだが 製品版に残る可能性がある為 レベル上で設定できるインプットイベントは エディター以外では無効にするようにした。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

24.

ブループリント 使う上でのルール B Pマクロの活用 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

25.

ブループリント 使う上でのルール BPマクロの活用 ・各作業者が独立した設計を避ける為にBPマクロを積極的に使用 ・使用頻度の高いノードも事前にBPマクロでラッピングしている ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

26.

ブループリント 使う上でのルール BPマクロの活用 ・ BPマクロの中身は定期的にプログラマー側で確認。 ・整理できる部分は作成者と相談してリダクションする。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

27.

ブループリント 使う上でのルール 定期的にB Pの中身 を プロ グ ラマ ー が 確 認 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

28.

ブループリント 使う上でのルール 定期的にBPの中身をプログラマーが確認 ・開発末期でもいいので確認する工程が必要 ・奇想天外な物、複雑な物がよく見つかる。そういった場合 担当者と話し、最適な修正方法を話し合う必要がある。 使われてない変数が見つかったり Transient フラグを付けた方がいい物が いっぱいあった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

29.

ブループリント 使う上でのルール 定期的にBPの中身をプログラマーが確認 BPクラスへのCastも注意が必要。 Cast したクラスが BP クラスだった場合 その BP クラスを参照する形になりロード対象となってしまう。 BPをCastすると、このBPも読み 込み対象になってしまう。Castし たBPがレベル上に存在するのであ れば問題ないが、存在しないので あれば無駄な読み込みとなる。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

30.

ブループリント • 良かった所と悪かった所 使用して困った事 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

31.

ブループリント 使用して困った事 「何でも出来る」 そ れが 仇 にな る 場面 も … ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

32.

ブループリント 使用して困った事 「何でも出来る」それが仇になる場面も…… ブループリントは実装が早い事が利点ではあるものの チカラづくで実装された物も多く 後に現れる複雑な仕様に対応できず 大きな問題に発展する事も多々あった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

33.

ブループリント 使用して困った事 「何でも出来る」それが仇になる場面も…… そういった物の大半は プログラマーから見ると簡単に対応できる案件だったり コードで組んだ方が楽という物も多かった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

34.

ブループリント 使用して困った事 「何でも出来る」それが仇になる場面も…… 何はともあれ 雲行きが怪しくなってきたら プログラマーに相談するのが一番ベスト。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

35.

ブループリント 使用して困った事 パフォーマンス面 で 問題 が 多数 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

36.

ブループリント 使用して困った事 パフォーマンス面で問題が多数 ブループリントノード、コンポーネント周りで 想定外の使われ方をしている物が多数存在していた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

37.

ブループリント 使用して困った事 パフォーマンス面で問題が多数 特にコンポーネントは凄まじい数で つけられている物があり そこから発生する Tick 負荷や アクター移動・回転時の コリジョン負荷が目立っていた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

38.

ブループリント 使用して困った事 パフォーマンス面で問題が多数 この他では ChildActorComponent が起因の バグ・処理負荷も多く起きていた。 根深い問題に関してはプログラマー側で作り直し それ以外は相談して対応で済ませていった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

39.

ブループリント 使用して困った事 パフォーマンス面で問題が多数 最終的には知見が溜まっていき パフォーマンス面の問題は発生しづらくなっていった傾向に。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

40.

ブループリント 使用して困った事 可読性の低い物が 多 く、 作 りに 性 格 が 出 る ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

41.

ブループリント 使用して困った事 可読性の低い物が多く、作りに性格が出る 人間だもの。仕方がない。 ※ 再現画像を用意しようと思いましたが再現が大変すぎて諦めました。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

42.

ブループリント 使用して困った事 バグが非常に多か っ た ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

43.

ブループリント 使用して困った事 バグが非常に多かった 使用しているセクションが多く BPの習熟度は人それぞれ、かつ性格も出るので バグの種類もバリエーション豊かに。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

44.

ブループリント 使用して困った事 バグが非常に多かった 思い出深いバグを下記に…… ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

45.

ブループリント 使用して困った事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

46.

ブループリント 使用して困った事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊 ・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

47.

ブループリント 使用して困った事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊 ・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。 ・イベント途中でアクターの表示をOFF → そのタイミングで イベントスキップしたらイベント終了後に表示が消えっぱなし。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

48.

ブループリント 使用して困った事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊 ・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。 ・イベント途中でアクターの表示をOFF → そのタイミングで イベントスキップしたらイベント終了後に表示が消えっぱなし。 ・バグを修正したが、対処が甘く他のバグを生み出した。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

49.

ブループリント 使用して困った事 バグが非常に多かった 多くのバグは人為的ミスによるものだったので 全てのカスタムイベントや特定のアクターの配置情報を Csv、もしくはテキストで書き出すコマンドレットを作成。 それを参考に各セクションが人力で対処するという形で収まった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

50.

ブループリント 使用して困った事 バグが非常に多かった 設計ミスで発生した物はプログラマーが引き取り対処。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

51.

ブループリント 使用して困った事 バグが非常に多かった 嬉しい誤算もあって 終盤ではどのセクションも多くの失敗経験をしたおかげで 簡単なバグならプログラマーを介さず対処できるようになっていた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

52.

ブループリント 作成して有用だった機能 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

53.

ブループリント 作成して有用だった機能 『B ool 』から 『Bit 』 への 機 能修 正 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

54.

ブループリント 作成して有用だった機能 『Bool』から『Bit』への機能修正 ある程度の規模のゲーム開発になると 想定していない所でフラグが書き換えられる事が多々ある。 表示周りだと 「OFFにしていたのに知らぬ間にONになっていた」 という事がよく発生する。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

55.

ブループリント 作成して有用だった機能 『Bool』から『Bit』への機能修正 ブループリントがある以上 他の作業者から書き換えられる事もあれば システムを制御するマネージャーから書き換えられる事もあり UE4標準の Bool での制御では耐えきれない事が 早期に分かっていた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

56.

ブループリント 作成して有用だった機能 『Bool』から『Bit』への機能修正 そこで一部の機能は Bool で扱うのではなく Bit として扱うように改造。 「セクション」「カテゴリー」といった単位でビットを振り分け 1つでもビットが落ちている場合は 結果を False にするような仕組みを作成した。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

57.

ブループリント 作成して有用だった機能 『Bool』から『Bit』への機能修正 表示切替のサンプルを用意しました。 Hidden が Bit をどう扱うか。 Category がどの Bit を使うか。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

58.

ブループリント 作成して有用だった機能 『Bool』から『Bit』への機能修正 最終的に Bit へ機能変更した物は下記に。 ・表示の切り替え ・コリジョンの切り替え ・TickのON、OFF これらはアクター版、コンポーネント版の二種類がある。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

59.

ブループリント 作成して有用だった機能 『Bool』から『Bit』への機能修正 この機能が出来た事によりブループリントのノードも UE4標準のものではなくプロジェクト専用の物に置き換えた。 機能作成前はフラグの切り替え周りで ワーストケースが頭にちらついていたが 機能作成後は特に問題がなく運用できたので非常に良かった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

60.

ブループリント 作成して有用だった機能 『Bool』から『Bit』への機能修正 また、プロジェクトが末期になると ・特定の条件下で特定のオブジェクトの表示を消したい といった案件もよくあり、その部分も本機能で乗り切れた事が多 かった。最終的には17ビット分の役割が当てられていたので活用 する場面は多かったと思える。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

61.

ブループリントのお話は以上です ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

62.

次にお話する内容 • ブループリント レベルに関する情報を • レベルの構成 あっさり目に • レベルストリーミング 説明していきます • レベルの最適化 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

63.

レベル構成 1パーシスタントレベルのサブレベル数 少ない所で30、多い所で200弱程度。 サブレベルが多いと管理が大変で 特にレベルストリーミング周りの制御は非常に難航。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

64.

レベル構成 1パーシスタントレベルのアクター数 アクター数は多い所で16000、少ない所で8000程。 これはエディター上で表示されている数値で 動的に配置されるアクターも存在するので 実際にはこれよりもうちょっとだけ多い。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

65.

レベル構成 1パーシスタントレベルのアクター数 ただし、インゲームではレベルストリーミングの関係で 大部分のアクターが削られる。 実際のゲームではもっと少ないアクター数で動いている。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

66.

レベル構成 • 良かった所と悪かった所 サブレベルのカテゴリー ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

67.

レベル構成 大まかに下記のようなカテゴリーで分けられている。 ・ゲームフロー ・リアルタイム演出 ・専用ミッション ・エネミー ・カットシーン ・風 ・背景 ・ボイス ・エフェクト ・NPC ・サウンド ・宝箱 ・仕掛け ・ミニゲーム ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

68.

レベル構成 • 良かった所と悪かった所 ゲームフローとは? ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

69.

レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

70.

レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

71.

レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

72.

レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

73.

レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理 ・ミニゲーム、カットシーン等のフロー ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

74.

レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理 ・ミニゲーム、カットシーン等のフロー ・レベル表示周り処理(レベルストリーミング含む) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

75.

レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理 ・ミニゲーム、カットシーン等のフロー プランナーが 左記の項目を 実装していた (一部例外あり) ・レベル表示周り処理(レベルストリーミング含む) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

76.

レベル構成 • 良かった所と悪かった所 サブレベルの切り分け ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

77.

レベル構成 サブレベルの切り分け サブレベルは全て表示すると負荷的に耐えら れない為、表示や地形的にキリが良い単位で 細かく分解、切り分けている。 ※右図で説明すると各エリア単位で サブレベルを用意している ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

78.

レベル構成 サブレベルの切り分け 切り分けたサブレベルは プレイヤーの立ち位置によって 表示・非表示を制御している。 ・エリアAにいる時はエリアBを表示、エリアCを非表示 ・エリアBにいる時はエリアAとエリアCを表示 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

79.

レベル構成 サブレベルの切り分け 切り分けは各サブレベルの担当者が行っている。 例)「仕掛け」ならプランナー、「BG」 なら背景 コンセプト的に全ステージが ユニークな形状をしているので 切り分けのルールはステージ毎に変わっていた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

80.

レベル構成 サブレベルの切り分け 各レベルの表示制御はプランナーが担当。 ・ボリュームに接触 ・ゲームの進行状況に応じて 上記をトリガーにレベルの 表示・非表示を制御している。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

81.

レベル構成 サブレベルの切り分け 処理負荷、レベルストリーミングの関係で 問題が出る場所(※)もよくあったので 切り分けと表示周りの作業は終盤まで長引いた。 ※表示されるべき物が表示されてない、 ロードが間に合わない。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

82.

レベル構成のお話は以上です ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

83.

次にお話する内容 • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

84.

レベルストリーミ ン グ まず初めに ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

85.

レベルストリーミ ン グ 難題が多く見送っていたレベルストリーミング ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

86.

レベルストリーミ ン グ 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

87.

レベルストリーミ ン グ 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

88.

レベルストリーミ ン グ 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

89.

レベルストリーミ ン グ 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持) ・アクター数がかなりある上、使用アセット数も膨大 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

90.

レベルストリーミ ン グ 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持) ・アクター数がかなりある上、使用アセット数も膨大 ・ストリーミングが間に合ってない時の事も考えないといけない ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

91.

レベルストリーミ ン グ 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持) ・アクター数がかなりある上、使用アセット数も膨大 ・ストリーミングが間に合ってない時の事も考えないといけない 上記が理由で対応していなかったのだが…… ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

92.

レベルストリーミ ン グ メモリが枯渇。実装しなければいけない状況に ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

93.

レベルストリーミ ン グ メモリが枯渇。実装しなければいけない状況に 本プロジェクトでは1レベルにおけるアセット数が 凄まじく多く、マルチプラットフォーム故に 片方だけメモリが足りない状況も多々あり 結局対応せざるを得なかった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

94.

レベルストリーミ ン グ 使用する上で困ったところ ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

95.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負 荷 ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

96.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) スパイクの原因の大半はガベージの負荷。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

97.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) この問題はエンジン改造 + データ調整で対応。 ・内容は以前 Epic Games Japan 様が講演された内容(※)とほぼ同じ ※「UE4におけるLoadingとGCのProfilingと最適化手法」 https://www.slideshare.net/EpicGamesJapan/420-ue4loadinggcprofiling-108367408 また本プロジェクトでは UE4.20で実装された分散ガベージにも対応。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

98.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) ガベージの検索コストを削る為に下記も実行。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

99.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) ガベージの検索コストを削る為に下記も実行。 ・UObjectは限りなく削る ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

100.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) ガベージの検索コストを削る為に下記も実行。 ・UObjectは限りなく削る ・不要なコンポーネントは作成者とすり合わせ、徹底的に削る努力をする。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

101.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) 他には下記変数をパーシスタントレベル毎に調整 ・GAsyncLoadingTimeLimit ・GPriorityAsyncLoadingExtraTime ・GLevelStreamingActorsUpdateTimeLimit ・GLevelStreamingComponentsRegistrationGranularity ・GLevelStreamingComponentsUnregistrationGranularity ・GLevelStreamingUnregisterComponentsTimeLimit ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

102.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) しかし、これらを対応しても まだまだスパイクが発生するのが実情…… 原因を調べていくと2箇所が負荷が高まる所があった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

103.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) ひとつ目は ULevel::RouteActorInitialize 。 この関数は端的に言うと レベルストリーミングのロード時のアクター初期化を行う部分。 この部分でスパイクが発生していた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

104.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) 見るべきレベルもかなり多く 毎回プロファイラーで調べるのも苦だったので ULevel::RouteActorInitialize が ある一定の負荷を超えた際 画面上にアクター名 + 処理負荷量付きで表示するように改造。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

105.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) また ULevel::RouteActorInitialize の中身の処理は アクターによっては「 不要 」「 必要 」 と別れていたのでフラグを追加し それを元に実行するかどうかを判断させるようにした。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

106.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) 次に気になったのがナビゲーションメッシュの更新周り。 ストリーミングでアクター(※)が生まれてくる際に ナビメッシュの更新を行うものがあった。 ※ 主にNavLinkProxy、NavModifierVolume、 NavModifierComponent が付いているアクター ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

107.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) 調べていくと UNavigationSystem::Tick 関数の NavData->TickAsyncBuild(DeltaSeconds) 周辺が スパイクの原因になっていたので この処理の負荷が極端に上がった時は 画面上に負荷を表示するようにした。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

108.

レベルストリーミ ン グ 使用する上で困ったところ スパイク(処理負荷) 長きに渡る調整の結果 レベルストリーミングのスパイクは大きく軽減。 ただし調整後に敵の配置やレベル調整、アセット調整で 日によって結果が変わる為、ほぼ終わりまで監視する形になった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

109.

レベルストリーミ ン グ 使用する上で困ったところ パッケージを使用 し ての チ ェッ ク ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

110.

レベルストリーミ ン グ 使用する上で困ったところ パッケージを使用してのチェック 限りなく製品版に近いアセット構成やプログラムでないと 実際のストリーミングの挙動が分からないので Test版パッケージを使用して毎日チェックしていた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

111.

レベルストリーミ ン グ 使用する上で困ったところ パッケージを使用してのチェック しかしパッケージは作るのに時間がかかるのがネック。 修正しても次回パッケージまで修正確認ができない。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

112.

レベルストリーミ ン グ 使用する上で困ったところ パッケージを使用してのチェック 更に苦しいのが ロードが間に合わないからストリーミングの位置をずらした といった理論的ではなく感覚的な修正が多くなるのも辛い所。 修正しても内容に満足できず 何度も繰り返し修正した所も多かった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

113.

レベルストリーミ ン グ 使用する上で困ったところ パッケージを使用してのチェック 唯一救いだったのが どのハードも パッケージデータを使用してのプログラムのみ差し替え実行 が出来たのでプログラム的な問題は素早く対応できた。 ロードもエディターより早かったので一部のプログラマーは エディターではなく実機での調整時間の方が長かった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

114.

レベルストリーミ ン グ 使用する上で困ったところ 他のAsyncLo ad と 競 合 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

115.

レベルストリーミ ン グ 使用する上で困ったところ 他のAsyncLoadと競合 AsyncLoad 発生中にレベルストリーミングを行うと 先に行われた AsyncLoad が終わるまで レベルストリーミングはサスペンド状態となる。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

116.

レベルストリーミ ン グ 使用する上で困ったところ 他のAsyncLoadと競合 この問題の厄介な所は パッと見では何故止まっているかが分からない点。 単純に「ロードが長いだけかも」と疑うだけで 終わってしまう可能性がある。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

117.

レベルストリーミ ン グ 使用する上で困ったところ 他のAsyncLoadと競合 この後に紹介予定の サブレベルの状態変更時に画面上に表示するデバッグを 作っていたおかげで中身があまり入ってないサブレベルなのに 異様にロードが長い時がある事が分かり この問題の原因究明に繋がった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

118.

レベルストリーミ ン グ 使用する上で困ったところ 他のAsyncLoadと競合 本件は一部の場所で 動的にデータが読まれる事が原因だったので プレイヤーが問題の場所にいる時に限り 動的に読み込まれるデータを常駐データ扱いにして AsyncLoad が発生しないようにして対応した。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

119.

レベルストリーミ ン グ 作って便利だった機能 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

120.

レベルストリーミ ン グ 作って便利だった機能 サブレベルの状態 を 画面上に表示する デ バッ グ 機能 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

121.

レベルストリーミ ン グ 作って便利だった機能 サブレベルの状態を画面上に表示するデバッグ機能 ・レベルストリーミングを行っているレベルをテキストで左上に表示 ・レベルストリーミングが発行されたタイミングで右上に どういった発行内容だったか(ロード切替?表示切替?)を 3秒間テキストで表示 上記のデバッグ表示機能を作成。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

122.

レベルストリーミ ン グ 作って便利だった機能 サブレベルの状態を画面上に表示するデバッグ機能 「 Stat Levels 」と違うのは 現在実行中の物しか表示されないので 見落としが少ないという点。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

123.

レベルストリーミ ン グ 作って便利だった機能 サブレベルの状態を画面上に表示するデバッグ機能 このデバッグはQAチェック、 ストリーミング周りの不具合を調べる時に非常に重宝した。 レベルがどの順番で遷移しているかも見る事が可能で 「ロード」「表示」にどれくらい時間がかかっているか 簡単に分かるので有用なデバッグだった。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

124.

レベルストリーミングのお話は以上です ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

125.

次にお話する内容 • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

126.

レベルの最適化 入ってきた当初、処理負荷は100msを超えていた 自分が本プロジェクトに入ってきた時、実機での処理負荷は Gameの負荷が100msを超えている状況。 原因の大半はレベルに配置されているアセットで 作業者各位がルールも特になく自由にアセットを作っている為 処理負荷の高いアセットが山ほど存在していた。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

127.

レベルの最適化 入ってきた当初、処理負荷は100msを超えていた 自分も UE4 の処理負荷削減経験がなかった為 最初は何が重たいのか全く分からなかった。 ゲーム実装作業の裏で、それらを簡単に発見する為の 処理負荷計測用ツールや機能を充実させる事から始める事に。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

128.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

129.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 サブレベルデバッ グ UM G ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

130.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 サブレベルデバッグUMG サブレベルを選んでロード・アンロード可能なデバッグUMGを作成。 ゲーム内の負荷が高い際に一つずつレベルをアンロードしていき どのレベルが重たいか当たりをつける為に使用。 次のページで実際の画像を紹介します。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

131.

• レベルの最適化 • 独自の処理負荷計測ツール & 機能 紹介 • サブレベルデバッグUMG ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

132.

• レベルの最適化 • 独自の処理負荷計測ツール & 機能 紹介 • サブレベルデバッグUMG 実際の物より少し改造していますが イメージはこんな感じです。 キーボードで操作する事を前提にしています。 今選択しているレベルを 「ロード」「アンロード」「表示切替」 する事ができます。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

133.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 サブレベルデバッグUMG このデバッグ機能の良かった所は どのセクションでも手軽に調べられ どこが原因かを洗い出しやすいといった所。 実装も難しくなく、サブレベルを多く使っている チームにオススメのデバッグです。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

134.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 負荷が高い物を 画面に表示 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

135.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 負荷が高い物を 画面に表示 既に何度か書いておりますが 手軽に見れるように負荷の高い物は画面上に ・アクター(or アセット or 関数)名+処理負荷付き で表示するように改造。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

136.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 負荷が高い物を 画面に表示 UE4の場合 FAutoConsoleVariableRef を使えば コンソールコマンドからデバッグのON・OFFが簡単に可能。 非常に便利なので使ってない方は是非使ってみてください。 ※ FAutoConsoleCommand もオススメです。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

137.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 専用CPU プロファイ ラ ー ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

138.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

139.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

140.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

141.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数 ・登録された関数で負荷が高い物を順に表示する機能 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

142.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数 ・登録された関数で負荷が高い物を順に表示する機能 ・タイムライン( スパイク検知用 ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

143.

レベルの最適化 独自の処理負荷計測ツール & 機能 紹介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数 ・登録された関数で負荷が高い物を順に表示する機能 ・タイムライン( スパイク検知用 ) ・ポーズ & 巻き戻し( スパイクが発生した際、巻き戻って何が重たいか確認可能 ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

144.

レベルの最適化 処理負荷を落とす為にやった事 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

145.

レベルの最適化 処理負荷を落とす為にやった事 並列Tick シ ステ ム ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

146.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステム 本プロジェクトの中期以降に作られたシステムで 余ったCPUを活かす為に作成しました。 残念ながら完成した時期が遅かった為 一部のオブジェクトのみ、このシステムを使用しています。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

147.

レベルの最適化 処理負荷を落とす為にやった事 並列Tick シ ステ ム 概要 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

148.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステム概要 ゲームスレッドと他スレッドを使って分散処理 ゲームスレッドも使用して並列処理を行っています。また処理毎に ・ゲームスレッド専用処理 ・どのスレッドでも実行可能処理 といった区分で分ける事が可能です。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

149.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステム概要 ゲームスレッドと他スレッドを使って分散処理 どうしてもゲームスレッドから離せない処理は 「ゲームスレッド専用処理」に区分させます。 他スレッドでは別の処理が実行されているので ゲームスレッド専用処理が増えすぎなければ処理は分散されます。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

150.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステム概要 専用のTickカテゴリーを持っている UE4の物とは別に専用の Tick カテゴリーを持っています。 なので処理順をある程度操作する事が可能です。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

151.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステム概要 作りはシンプルでエンジン無改造でも可能 エンジン部分も適用したい場合は エンジン内部で定義する必要はありますが 自分のプロジェクトだけ反映したい場合は 無改造でも簡単にできます。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

152.

レベルの最適化 処理負荷を落とす為にやった事 並列Tick シ ステ ム の効 果 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

153.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの効果 500体ほどアクターが動き回るエリアがあり 全てTickを実行している所があったので 「PS4 Test版PGOなし」で処理負荷を計ってみました。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

154.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの効果 結果は下記となります。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

155.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

156.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms ・並列TickをOFFで実行 6.04 ms( -0.87 ms ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

157.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms ・並列TickをOFFで実行 6.04 ms( -0.87 ms ) ・並列Tick実行 2.65 ms( -4.26 ms ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

158.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms ・並列TickをOFFで実行 6.04 ms( -0.87 ms ) ・並列Tick実行 2.65 ms( -4.26 ms ) 4.26ms 減少は中々良い結果……! ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

159.

レベルの最適化 処理負荷を落とす為にやった事 並列Tick シ ステ ム の難 点 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

160.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの難点 バグを生み出しやすい 最大の難点ともいえるべきかもしれません。 バグが出た時、原因を探りにくいといったデメリットもあります。 慣れてないと深刻なバグも引き起こしやすく 滅多に発生しない稀バグも並列化が原因の事が多いです。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

161.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの難点 並列化したい部分が少ないと逆に遅くなる事も 並列化したい部分が少ないとシングルスレッドで 回していた方が早い局面も多々あります。 特に実装し始めはこの問題に直面しやすく 「やる価値あるのだろうか」と心が折れがちです。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

162.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの難点 処理順も考慮しなくてはいけない パフォーマンスを出す為には処理順も考えなければいけません。 具体的には負荷の高い処理を先に、負荷の低い処理を後にするよう にしなければいけません。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

163.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの難点 処理順も考慮しなくてはいけない 下図はよくない一例です。色の付いたバーが「処理」で、今回の例で は三つ処理が動いているとお考えください。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

164.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの難点 処理順も考慮しなくてはいけない 最終的に全ての処理が終了しなければ次へ移行できません。現状はオ レンジ色の処理が一番負荷が高く、最後に来ている為、終了処理への 移行が遅くなっています。 処理の終わりが ここになってしまうので 処理負荷が増える。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

165.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの難点 処理順も考慮しなくてはいけない これを解決するにはオレンジを最初に処理させ、その裏で他の処理を 消化させるのがベストです。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

166.

レベルの最適化 処理負荷を落とす為にやった事 並列Tickシステムの難点 処理順も考慮しなくてはいけない 本プロジェクトではこの問題を対応する為に 「各実行処理にプライオリティをつける」事や 「処理を分散して実行する機能」で対応しました。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

167.

レベルの最適化 処理負荷を落とす為にやった事 距離による表示制 御 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

168.

レベルの最適化 処理負荷を落とす為にやった事 距離による表示制御 距離に応じて一部のオブジェクトの 表示を制御(近ければON、遠いとOFF)するシステムがあります。 表示がOFFの時に TickもOFFにするオプションもあります。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

169.

レベルの最適化 処理負荷を落とす為にやった事 移動オブジェクト の コリ ジ ョン 制 御 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

170.

レベルの最適化 処理負荷を落とす為にやった事 移動オブジェクトのコリジョン制御 コリジョンを持つオブジェクトの 移動時の処理負荷が高かった為 ・近距離でコリジョン ON ・遠距離でコリジョン OFF と制御している物があります。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

171.

レベルの最適化 処理負荷を落とす為にやった事 移動オブジェクトのコリジョン制御 プレイヤーには飛び道具、ワープもあれば 仲間も自由に動いている為、安直な対応はできませんが 不自然にならない程度で対応しています。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

172.

レベルの最適化 処理負荷を落とす為にやった事 厳密なTick 制御 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

173.

レベルの最適化 処理負荷を落とす為にやった事 厳密なTick制御 Tick は中身が何も記述されてなくても使用するだけで それなりの処理負荷が発生するので 不要な物は徹底的に切っています。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

174.

レベルの最適化 処理負荷を落とす為にやった事 厳密なTick制御 動的な制御もしています。 例えば宝箱。 開ける時のアニメーションをしている時だけ SkeletalMeshComponent の Tick を ON 、 それ以外では Tick を OFF にする等です。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

175.

レベルの最適化 処理負荷を落とす為にやった事 厳密なTick制御 その他ではマネージャーとなるシステムを用意し 特定のアクターの 更新関数 をまとめて呼んでいる物もあります。 アクターAの更新処理 マネージャー のTick アクターBの更新処理 アクターCの更新処理 アクターDの更新処理 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

176.

レベルの最適化のお話は以上です ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

177.

最後に ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

178.

ご清聴ありがとうございました! UNREALはエピック・ゲームズ・インコーポレーテッドの商標または登録商標です。 PlayStationおよびPS4は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。 その他掲載されている会社名、商品名は、各社の商標または登録商標です。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP