SlideShare uma empresa Scribd logo
1 de 178
Baixar para ler offline
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
株式会社スクウェア・エニックス 吉田 武史
U E 4 に お け る レ ベ ル 制 作 事 例
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
略称について
・『Unreal Engine 4』をスライド内では『UE4』と記載しています
・『PlayStation®4』も同様に『PS4』と記載しています
・一部『ブループリント』を『BP』と記載しています
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
本プロジェクトは UE4.17.2 を使用して作成されており
本スライドの内容もそれに準じて作られております。
最新バージョンでは挙動、もしくはソースコードが
変更されている可能性がありますのでご了承ください
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
まずは自己紹介
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
自己紹介
吉田 武史
プログラマー。
入社して現在ちょうど4年目。UE4 歴は5年目。
(1年はBPでの開発、残りはC++とBPの両方を触る)
元々はブループリントのサポート担当で配属されましたが
色々と雑務をしている内にレベルプログラム担当に。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
今回お話する内容について
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• ブループリント
• レベルの構成
• レベルストリーミング
• レベルの最適化
今回お話する内容
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• ブループリント
• レベルの構成
• レベルストリーミング
• レベルの最適化
今回お話する内容
オ ブ ジ ェ ク ト 継 承 の ブ ル ー プ リ ン ト と
レ ベ ル ブ ル ー プ リ ン ト を メ イ ン に
解 説 し て い き ま す 。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
どれくらい使っていた?
ブループリント
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
本プロジェクトでは
プランナー、デザイナー、プログラマー
どのセクションでも高い頻度で使っていました。
ブループリント
ど れ く ら い 使 っ て た ?
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
各セクションが
どういった感じで使っていたかというと……
ブループリント
ど れ く ら い 使 っ て た ?
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
プランナー
・「仕掛け」の作成
・ゲーム性検証
・ミニゲーム作成
・カメラ挙動作成
ブループリント
ど れ く ら い 使 っ て た ?
プログラマー
・「仕掛け」の作成
・ミニゲーム作成
デザイナー
・見た目の調整
・演出強化
こんな感じで使っていました。
・「仕掛け」とは……
ボタン等のプレイヤーからのアクセスで起動するオブジェクトや
プレイヤーの進行を阻害する為に動作しているオブジェクトの事を指す。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
使う上でのルール
ブループリント
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
BPのTickはなるべく使わない
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
BPのTickはなるべく使わない
理由は2つあり……
・処理負荷が上がるのでなるべく使いたくない
・Tick を使う = 複雑な物になりやすい
・呼び出しイベントから実行して終わる程度の
シンプルな流れで済ませたい
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
BPのTickはなるべく使わない
・「完全に使わない」ではなく「なるべく使わない」
・必要な場面であれば使用
・使用する場面のみON、使用後はOFFといった感じで
常にTickをONにするという事はほぼ無かった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
BPのTickはなるべく使わない
プログラマー側では
どの Tick が動いているか定期的に調査。
不要な物が見つかった場合は担当者に連絡し
実装方法に関してすり合わせをしていた。
最終的にこの流れが浸透し、Tick 使用率は自然と減少傾向に。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
親クラスはなるべくC++クラスに
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
親クラスはなるべくC++クラスに
・これも絶対ではなく「なるべく」
・重たい処理があってもC++に逃がしやすい
・C++であれば実機デバッグ時にコード修正だけで確認可能
・C++からの継承コンポーネントも除去可能
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
親クラスはなるべくC++クラスに
RazorCPU などのプロファイラーとも相性がよくなる。
コールスタックから、どのオブジェクトか判断が付きやすい。
本プロジェクトでは処理負荷はTest版で見ており
こちらで仕込んだマーカーで負荷を確認する事が大半だった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
親クラスはなるべくC++クラスに
その他 気になる点としてBPクラスロード時に
親BP が持つアセットを芋づる式に呼んでしまう問題がある。
C++クラスでも同じ作りは出来るが
コーディングルールとして禁止していた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
インプットイベントはエディター限定に
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
インプットイベントはエディター限定に
キーボードイベントを利用してのデバッグは
非常にお手軽で便利なのだが
製品版に残る可能性がある為
レベル上で設定できるインプットイベントは
エディター以外では無効にするようにした。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
BPマクロの活用
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
BPマクロの活用
・各作業者が独立した設計を避ける為にBPマクロを積極的に使用
・使用頻度の高いノードも事前にBPマクロでラッピングしている
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
BPマクロの活用
・ BPマクロの中身は定期的にプログラマー側で確認。
・整理できる部分は作成者と相談してリダクションする。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
定期的にBPの中身をプログラマーが確認
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
定期的にBPの中身をプログラマーが確認
・開発末期でもいいので確認する工程が必要
・奇想天外な物、複雑な物がよく見つかる。そういった場合
担当者と話し、最適な修正方法を話し合う必要がある。
使われてない変数が見つかったり
Transient フラグを付けた方がいい物が
いっぱいあった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 う 上 で の ル ー ル
定期的にBPの中身をプログラマーが確認
BPクラスへのCastも注意が必要。
Cast したクラスが BP クラスだった場合
その BP クラスを参照する形になりロード対象となってしまう。
BPをCastすると、このBPも読み
込み対象になってしまう。Castし
たBPがレベル上に存在するのであ
れば問題ないが、存在しないので
あれば無駄な読み込みとなる。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
使用して困った事
ブループリント
• 良かった所と悪かった所
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
「何でも出来る」それが仇になる場面も…
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
「何でも出来る」それが仇になる場面も……
ブループリントは実装が早い事が利点ではあるものの
チカラづくで実装された物も多く
後に現れる複雑な仕様に対応できず
大きな問題に発展する事も多々あった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
「何でも出来る」それが仇になる場面も……
そういった物の大半は
プログラマーから見ると簡単に対応できる案件だったり
コードで組んだ方が楽という物も多かった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
「何でも出来る」それが仇になる場面も……
何はともあれ
雲行きが怪しくなってきたら
プログラマーに相談するのが一番ベスト。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
パフォーマンス面で問題が多数
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
パフォーマンス面で問題が多数
ブループリントノード、コンポーネント周りで
想定外の使われ方をしている物が多数存在していた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
パフォーマンス面で問題が多数
特にコンポーネントは凄まじい数で
つけられている物があり
そこから発生する Tick 負荷や
アクター移動・回転時の
コリジョン負荷が目立っていた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
パフォーマンス面で問題が多数
この他では ChildActorComponent が起因の
バグ・処理負荷も多く起きていた。
根深い問題に関してはプログラマー側で作り直し
それ以外は相談して対応で済ませていった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
パフォーマンス面で問題が多数
最終的には知見が溜まっていき
パフォーマンス面の問題は発生しづらくなっていった傾向に。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
可読性の低い物が多く、作りに性格が出る
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
可読性の低い物が多く、作りに性格が出る
人間だもの。仕方がない。
※ 再現画像を用意しようと思いましたが再現が大変すぎて諦めました。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
使用しているセクションが多く
BPの習熟度は人それぞれ、かつ性格も出るので
バグの種類もバリエーション豊かに。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
思い出深いバグを下記に……
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
思い出深いバグを下記に……
・Latent( Delay )を多用しすぎて処理順が崩壊
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
思い出深いバグを下記に……
・Latent( Delay )を多用しすぎて処理順が崩壊
・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
思い出深いバグを下記に……
・Latent( Delay )を多用しすぎて処理順が崩壊
・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。
・イベント途中でアクターの表示をOFF → そのタイミングで
イベントスキップしたらイベント終了後に表示が消えっぱなし。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
思い出深いバグを下記に……
・Latent( Delay )を多用しすぎて処理順が崩壊
・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。
・イベント途中でアクターの表示をOFF → そのタイミングで
イベントスキップしたらイベント終了後に表示が消えっぱなし。
・バグを修正したが、対処が甘く他のバグを生み出した。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
多くのバグは人為的ミスによるものだったので
全てのカスタムイベントや特定のアクターの配置情報を
Csv、もしくはテキストで書き出すコマンドレットを作成。
それを参考に各セクションが人力で対処するという形で収まった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
設計ミスで発生した物はプログラマーが引き取り対処。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
使 用 し て 困 っ た 事
バグが非常に多かった
嬉しい誤算もあって
終盤ではどのセクションも多くの失敗経験をしたおかげで
簡単なバグならプログラマーを介さず対処できるようになっていた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
作成して有用だった機能
ブループリント
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
ある程度の規模のゲーム開発になると
想定していない所でフラグが書き換えられる事が多々ある。
表示周りだと
「OFFにしていたのに知らぬ間にONになっていた」
という事がよく発生する。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
ブループリントがある以上
他の作業者から書き換えられる事もあれば
システムを制御するマネージャーから書き換えられる事もあり
UE4標準の Bool での制御では耐えきれない事が
早期に分かっていた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
そこで一部の機能は Bool で扱うのではなく
Bit として扱うように改造。
「セクション」「カテゴリー」といった単位でビットを振り分け
1つでもビットが落ちている場合は
結果を False にするような仕組みを作成した。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
表示切替のサンプルを用意しました。
Hidden が Bit をどう扱うか。
Category がどの Bit を使うか。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
最終的に Bit へ機能変更した物は下記に。
・表示の切り替え
・コリジョンの切り替え
・TickのON、OFF
これらはアクター版、コンポーネント版の二種類がある。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
この機能が出来た事によりブループリントのノードも
UE4標準のものではなくプロジェクト専用の物に置き換えた。
機能作成前はフラグの切り替え周りで
ワーストケースが頭にちらついていたが
機能作成後は特に問題がなく運用できたので非常に良かった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリント
作 成 し て 有 用 だ っ た 機 能
『Bool』から『Bit』への機能修正
また、プロジェクトが末期になると
・特定の条件下で特定のオブジェクトの表示を消したい
といった案件もよくあり、その部分も本機能で乗り切れた事が多
かった。最終的には17ビット分の役割が当てられていたので活用
する場面は多かったと思える。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ブループリントのお話は以上です
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• ブループリント
• レベルの構成
• レベルストリーミング
• レベルの最適化
次にお話する内容
レベルに関する情報を
あっさり目に
説明していきます
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
1パーシスタントレベルのサブレベル数
少ない所で30、多い所で200弱程度。
サブレベルが多いと管理が大変で
特にレベルストリーミング周りの制御は非常に難航。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
1パーシスタントレベルのアクター数
アクター数は多い所で16000、少ない所で8000程。
これはエディター上で表示されている数値で
動的に配置されるアクターも存在するので
実際にはこれよりもうちょっとだけ多い。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
1パーシスタントレベルのアクター数
ただし、インゲームではレベルストリーミングの関係で
大部分のアクターが削られる。
実際のゲームではもっと少ないアクター数で動いている。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
サブレベルのカテゴリー
レベル構成
• 良かった所と悪かった所
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
・ゲームフロー
・エネミー
・背景
・エフェクト
・サウンド
・仕掛け
レベル構成
・リアルタイム演出
・カットシーン
・ボイス
・NPC
・宝箱
・ミニゲーム
・専用ミッション
・風
大まかに下記のようなカテゴリーで分けられている。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ゲームフローとは?
レベル構成
• 良かった所と悪かった所
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
ゲームフローとは?
下記をブループリントで作成する事を指します。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
ゲームフローとは?
下記をブループリントで作成する事を指します。
・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
ゲームフローとは?
下記をブループリントで作成する事を指します。
・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ
・各サブレベルとRemoteEventを使ってのやり取り
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
ゲームフローとは?
下記をブループリントで作成する事を指します。
・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ
・各サブレベルとRemoteEventを使ってのやり取り
・ボリュームとオーバーラップした際の処理
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
ゲームフローとは?
下記をブループリントで作成する事を指します。
・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ
・各サブレベルとRemoteEventを使ってのやり取り
・ボリュームとオーバーラップした際の処理
・ミニゲーム、カットシーン等のフロー
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
ゲームフローとは?
下記をブループリントで作成する事を指します。
・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ
・各サブレベルとRemoteEventを使ってのやり取り
・ボリュームとオーバーラップした際の処理
・ミニゲーム、カットシーン等のフロー
・レベル表示周り処理(レベルストリーミング含む)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
ゲームフローとは?
下記をブループリントで作成する事を指します。
・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ
・各サブレベルとRemoteEventを使ってのやり取り
・ボリュームとオーバーラップした際の処理
・ミニゲーム、カットシーン等のフロー
・レベル表示周り処理(レベルストリーミング含む)
プランナーが
左記の項目を
実装していた
(一部例外あり)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
サブレベルの切り分け
レベル構成
• 良かった所と悪かった所
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
サブレベルの切り分け
サブレベルは全て表示すると負荷的に耐えら
れない為、表示や地形的にキリが良い単位で
細かく分解、切り分けている。
※右図で説明すると各エリア単位で
サブレベルを用意している
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
サブレベルの切り分け
切り分けたサブレベルは
プレイヤーの立ち位置によって
表示・非表示を制御している。
・エリアAにいる時はエリアBを表示、エリアCを非表示
・エリアBにいる時はエリアAとエリアCを表示
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
サブレベルの切り分け
切り分けは各サブレベルの担当者が行っている。
例)「仕掛け」ならプランナー、「BG」 なら背景
コンセプト的に全ステージが
ユニークな形状をしているので
切り分けのルールはステージ毎に変わっていた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
サブレベルの切り分け
各レベルの表示制御はプランナーが担当。
・ボリュームに接触
・ゲームの進行状況に応じて
上記をトリガーにレベルの
表示・非表示を制御している。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成
サブレベルの切り分け
処理負荷、レベルストリーミングの関係で
問題が出る場所(※)もよくあったので
切り分けと表示周りの作業は終盤まで長引いた。
※表示されるべき物が表示されてない、
ロードが間に合わない。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベル構成のお話は以上です
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• ブループリント
• レベルの構成
• レベルストリーミング
• レベルの最適化
次にお話する内容
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
まず初めに
レベルストリーミング
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
難題が多く見送っていたレベルストリーミング
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
難題が多く見送っていたレベルストリーミング
・以前の検証結果ではスパイクが凄まじく商品として耐えられない
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
難題が多く見送っていたレベルストリーミング
・以前の検証結果ではスパイクが凄まじく商品として耐えられない
・一部のマップはレベルストリーミングを考慮してない作り
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
難題が多く見送っていたレベルストリーミング
・以前の検証結果ではスパイクが凄まじく商品として耐えられない
・一部のマップはレベルストリーミングを考慮してない作り
・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
難題が多く見送っていたレベルストリーミング
・以前の検証結果ではスパイクが凄まじく商品として耐えられない
・一部のマップはレベルストリーミングを考慮してない作り
・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持)
・アクター数がかなりある上、使用アセット数も膨大
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
難題が多く見送っていたレベルストリーミング
・以前の検証結果ではスパイクが凄まじく商品として耐えられない
・一部のマップはレベルストリーミングを考慮してない作り
・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持)
・アクター数がかなりある上、使用アセット数も膨大
・ストリーミングが間に合ってない時の事も考えないといけない
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
難題が多く見送っていたレベルストリーミング
・以前の検証結果ではスパイクが凄まじく商品として耐えられない
・一部のマップはレベルストリーミングを考慮してない作り
・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持)
・アクター数がかなりある上、使用アセット数も膨大
・ストリーミングが間に合ってない時の事も考えないといけない
上記が理由で対応していなかったのだが……
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
メモリが枯渇。実装しなければいけない状況に
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
メモリが枯渇。実装しなければいけない状況に
本プロジェクトでは1レベルにおけるアセット数が
凄まじく多く、マルチプラットフォーム故に
片方だけメモリが足りない状況も多々あり
結局対応せざるを得なかった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
使用する上で困ったところ
レベルストリーミング
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
スパイクの原因の大半はガベージの負荷。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
この問題はエンジン改造 + データ調整で対応。
・内容は以前 Epic Games Japan 様が講演された内容(※)とほぼ同じ
※「UE4におけるLoadingとGCのProfilingと最適化手法」
https://www.slideshare.net/EpicGamesJapan/420-ue4loadinggcprofiling-108367408
また本プロジェクトでは
UE4.20で実装された分散ガベージにも対応。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
ガベージの検索コストを削る為に下記も実行。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
ガベージの検索コストを削る為に下記も実行。
・UObjectは限りなく削る
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
ガベージの検索コストを削る為に下記も実行。
・UObjectは限りなく削る
・不要なコンポーネントは作成者とすり合わせ、徹底的に削る努力をする。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
他には下記変数をパーシスタントレベル毎に調整
・GAsyncLoadingTimeLimit
・GPriorityAsyncLoadingExtraTime
・GLevelStreamingActorsUpdateTimeLimit
・GLevelStreamingComponentsRegistrationGranularity
・GLevelStreamingComponentsUnregistrationGranularity
・GLevelStreamingUnregisterComponentsTimeLimit
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
しかし、これらを対応しても
まだまだスパイクが発生するのが実情……
原因を調べていくと2箇所が負荷が高まる所があった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
ひとつ目は ULevel::RouteActorInitialize 。
この関数は端的に言うと
レベルストリーミングのロード時のアクター初期化を行う部分。
この部分でスパイクが発生していた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
見るべきレベルもかなり多く
毎回プロファイラーで調べるのも苦だったので
ULevel::RouteActorInitialize が ある一定の負荷を超えた際
画面上にアクター名 + 処理負荷量付きで表示するように改造。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
また ULevel::RouteActorInitialize の中身の処理は
アクターによっては「 不要 」「 必要 」
と別れていたのでフラグを追加し
それを元に実行するかどうかを判断させるようにした。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
次に気になったのがナビゲーションメッシュの更新周り。
ストリーミングでアクター(※)が生まれてくる際に
ナビメッシュの更新を行うものがあった。
※ 主にNavLinkProxy、NavModifierVolume、
NavModifierComponent が付いているアクター
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
調べていくと UNavigationSystem::Tick 関数の
NavData->TickAsyncBuild(DeltaSeconds) 周辺が
スパイクの原因になっていたので
この処理の負荷が極端に上がった時は
画面上に負荷を表示するようにした。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
スパイク(処理負荷)
長きに渡る調整の結果
レベルストリーミングのスパイクは大きく軽減。
ただし調整後に敵の配置やレベル調整、アセット調整で
日によって結果が変わる為、ほぼ終わりまで監視する形になった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
パッケージを使用してのチェック
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
パッケージを使用してのチェック
限りなく製品版に近いアセット構成やプログラムでないと
実際のストリーミングの挙動が分からないので
Test版パッケージを使用して毎日チェックしていた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
パッケージを使用してのチェック
しかしパッケージは作るのに時間がかかるのがネック。
修正しても次回パッケージまで修正確認ができない。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
パッケージを使用してのチェック
更に苦しいのが
ロードが間に合わないからストリーミングの位置をずらした
といった理論的ではなく感覚的な修正が多くなるのも辛い所。
修正しても内容に満足できず
何度も繰り返し修正した所も多かった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
パッケージを使用してのチェック
唯一救いだったのが どのハードも
パッケージデータを使用してのプログラムのみ差し替え実行
が出来たのでプログラム的な問題は素早く対応できた。
ロードもエディターより早かったので一部のプログラマーは
エディターではなく実機での調整時間の方が長かった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
他のAsyncLoadと競合
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
他のAsyncLoadと競合
AsyncLoad 発生中にレベルストリーミングを行うと
先に行われた AsyncLoad が終わるまで
レベルストリーミングはサスペンド状態となる。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
他のAsyncLoadと競合
この問題の厄介な所は
パッと見では何故止まっているかが分からない点。
単純に「ロードが長いだけかも」と疑うだけで
終わってしまう可能性がある。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
他のAsyncLoadと競合
この後に紹介予定の
サブレベルの状態変更時に画面上に表示するデバッグを
作っていたおかげで中身があまり入ってないサブレベルなのに
異様にロードが長い時がある事が分かり
この問題の原因究明に繋がった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
使 用 す る 上 で 困 っ た と こ ろ
他のAsyncLoadと競合
本件は一部の場所で
動的にデータが読まれる事が原因だったので
プレイヤーが問題の場所にいる時に限り
動的に読み込まれるデータを常駐データ扱いにして
AsyncLoad が発生しないようにして対応した。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
作って便利だった機能
レベルストリーミング
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
作 っ て 便 利 だ っ た 機 能
サブレベルの状態を
画面上に表示するデバッグ機能
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
作 っ て 便 利 だ っ た 機 能
サブレベルの状態を画面上に表示するデバッグ機能
・レベルストリーミングを行っているレベルをテキストで左上に表示
・レベルストリーミングが発行されたタイミングで右上に
どういった発行内容だったか(ロード切替?表示切替?)を
3秒間テキストで表示
上記のデバッグ表示機能を作成。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
作 っ て 便 利 だ っ た 機 能
サブレベルの状態を画面上に表示するデバッグ機能
「 Stat Levels 」と違うのは
現在実行中の物しか表示されないので
見落としが少ないという点。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミング
作 っ て 便 利 だ っ た 機 能
サブレベルの状態を画面上に表示するデバッグ機能
このデバッグはQAチェック、
ストリーミング周りの不具合を調べる時に非常に重宝した。
レベルがどの順番で遷移しているかも見る事が可能で
「ロード」「表示」にどれくらい時間がかかっているか
簡単に分かるので有用なデバッグだった。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルストリーミングのお話は以上です
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• ブループリント
• レベルの構成
• レベルストリーミング
• レベルの最適化
次にお話する内容
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
入ってきた当初、処理負荷は100msを超えていた
自分が本プロジェクトに入ってきた時、実機での処理負荷は
Gameの負荷が100msを超えている状況。
原因の大半はレベルに配置されているアセットで
作業者各位がルールも特になく自由にアセットを作っている為
処理負荷の高いアセットが山ほど存在していた。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
入ってきた当初、処理負荷は100msを超えていた
自分も UE4 の処理負荷削減経験がなかった為
最初は何が重たいのか全く分からなかった。
ゲーム実装作業の裏で、それらを簡単に発見する為の
処理負荷計測用ツールや機能を充実させる事から始める事に。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
独自の処理負荷計測ツール & 機能 紹介
レベルの最適化
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
サブレベルデバッグUMG
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
サブレベルデバッグUMG
サブレベルを選んでロード・アンロード可能なデバッグUMGを作成。
ゲーム内の負荷が高い際に一つずつレベルをアンロードしていき
どのレベルが重たいか当たりをつける為に使用。
次のページで実際の画像を紹介します。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• レベルの最適化
• 独自の処理負荷計測ツール & 機能 紹介
• サブレベルデバッグUMG
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• レベルの最適化
• 独自の処理負荷計測ツール & 機能 紹介
• サブレベルデバッグUMG
実際の物より少し改造していますが
イメージはこんな感じです。
キーボードで操作する事を前提にしています。
今選択しているレベルを
「ロード」「アンロード」「表示切替」
する事ができます。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
サブレベルデバッグUMG
このデバッグ機能の良かった所は
どのセクションでも手軽に調べられ
どこが原因かを洗い出しやすいといった所。
実装も難しくなく、サブレベルを多く使っている
チームにオススメのデバッグです。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
負荷が高い物を 画面に表示
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
負荷が高い物を 画面に表示
既に何度か書いておりますが
手軽に見れるように負荷の高い物は画面上に
・アクター(or アセット or 関数)名+処理負荷付き
で表示するように改造。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
負荷が高い物を 画面に表示
UE4の場合 FAutoConsoleVariableRef を使えば
コンソールコマンドからデバッグのON・OFFが簡単に可能。
非常に便利なので使ってない方は是非使ってみてください。
※ FAutoConsoleCommand もオススメです。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
専用CPUプロファイラー
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
専用CPUプロファイラー
最適化班から専用CPUプロファイラーを用意していただきました。
リアルタイムに下記の要素が確認可能です。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
専用CPUプロファイラー
最適化班から専用CPUプロファイラーを用意していただきました。
リアルタイムに下記の要素が確認可能です。
・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
専用CPUプロファイラー
最適化班から専用CPUプロファイラーを用意していただきました。
リアルタイムに下記の要素が確認可能です。
・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる)
・各 TickGroup の Tick 数
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
専用CPUプロファイラー
最適化班から専用CPUプロファイラーを用意していただきました。
リアルタイムに下記の要素が確認可能です。
・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる)
・各 TickGroup の Tick 数
・登録された関数で負荷が高い物を順に表示する機能
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
専用CPUプロファイラー
最適化班から専用CPUプロファイラーを用意していただきました。
リアルタイムに下記の要素が確認可能です。
・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる)
・各 TickGroup の Tick 数
・登録された関数で負荷が高い物を順に表示する機能
・タイムライン( スパイク検知用 )
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介
専用CPUプロファイラー
最適化班から専用CPUプロファイラーを用意していただきました。
リアルタイムに下記の要素が確認可能です。
・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる)
・各 TickGroup の Tick 数
・登録された関数で負荷が高い物を順に表示する機能
・タイムライン( スパイク検知用 )
・ポーズ & 巻き戻し( スパイクが発生した際、巻き戻って何が重たいか確認可能 )
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
処理負荷を落とす為にやった事
レベルの最適化
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステム
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステム
本プロジェクトの中期以降に作られたシステムで
余ったCPUを活かす為に作成しました。
残念ながら完成した時期が遅かった為
一部のオブジェクトのみ、このシステムを使用しています。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステム概要
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステム概要
ゲームスレッドも使用して並列処理を行っています。また処理毎に
・ゲームスレッド専用処理
・どのスレッドでも実行可能処理
といった区分で分ける事が可能です。
ゲームスレッドと他スレッドを使って分散処理
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステム概要
どうしてもゲームスレッドから離せない処理は
「ゲームスレッド専用処理」に区分させます。
他スレッドでは別の処理が実行されているので
ゲームスレッド専用処理が増えすぎなければ処理は分散されます。
ゲームスレッドと他スレッドを使って分散処理
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステム概要
UE4の物とは別に専用の Tick カテゴリーを持っています。
なので処理順をある程度操作する事が可能です。
専用のTickカテゴリーを持っている
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステム概要
エンジン部分も適用したい場合は
エンジン内部で定義する必要はありますが
自分のプロジェクトだけ反映したい場合は
無改造でも簡単にできます。
作りはシンプルでエンジン無改造でも可能
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの効果
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの効果
500体ほどアクターが動き回るエリアがあり
全てTickを実行している所があったので
「PS4 Test版PGOなし」で処理負荷を計ってみました。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの効果
結果は下記となります。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの効果
結果は下記となります。
・UE4標準Tick実行 6.91 ms
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの効果
結果は下記となります。
・UE4標準Tick実行 6.91 ms
・並列TickをOFFで実行 6.04 ms( -0.87 ms )
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの効果
結果は下記となります。
・UE4標準Tick実行 6.91 ms
・並列TickをOFFで実行 6.04 ms( -0.87 ms )
・並列Tick実行 2.65 ms( -4.26 ms )
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの効果
結果は下記となります。
・UE4標準Tick実行 6.91 ms
・並列TickをOFFで実行 6.04 ms( -0.87 ms )
・並列Tick実行 2.65 ms( -4.26 ms )
4.26ms 減少は中々良い結果……!
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
最大の難点ともいえるべきかもしれません。
バグが出た時、原因を探りにくいといったデメリットもあります。
慣れてないと深刻なバグも引き起こしやすく
滅多に発生しない稀バグも並列化が原因の事が多いです。
バグを生み出しやすい
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
並列化したい部分が少ないとシングルスレッドで
回していた方が早い局面も多々あります。
特に実装し始めはこの問題に直面しやすく
「やる価値あるのだろうか」と心が折れがちです。
並列化したい部分が少ないと逆に遅くなる事も
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
パフォーマンスを出す為には処理順も考えなければいけません。
具体的には負荷の高い処理を先に、負荷の低い処理を後にするよう
にしなければいけません。
処理順も考慮しなくてはいけない
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
下図はよくない一例です。色の付いたバーが「処理」で、今回の例で
は三つ処理が動いているとお考えください。
処理順も考慮しなくてはいけない
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
最終的に全ての処理が終了しなければ次へ移行できません。現状はオ
レンジ色の処理が一番負荷が高く、最後に来ている為、終了処理への
移行が遅くなっています。
処理順も考慮しなくてはいけない
処理の終わりが
ここになってしまうので
処理負荷が増える。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
これを解決するにはオレンジを最初に処理させ、その裏で他の処理を
消化させるのがベストです。
処理順も考慮しなくてはいけない
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
並列Tickシステムの難点
本プロジェクトではこの問題を対応する為に
「各実行処理にプライオリティをつける」事や
「処理を分散して実行する機能」で対応しました。
処理順も考慮しなくてはいけない
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
距離による表示制御
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
距離による表示制御
距離に応じて一部のオブジェクトの
表示を制御(近ければON、遠いとOFF)するシステムがあります。
表示がOFFの時に TickもOFFにするオプションもあります。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
移動オブジェクトのコリジョン制御
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
移動オブジェクトのコリジョン制御
コリジョンを持つオブジェクトの
移動時の処理負荷が高かった為
・近距離でコリジョン ON
・遠距離でコリジョン OFF
と制御している物があります。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
移動オブジェクトのコリジョン制御
プレイヤーには飛び道具、ワープもあれば
仲間も自由に動いている為、安直な対応はできませんが
不自然にならない程度で対応しています。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
厳密なTick制御
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
厳密なTick制御
Tick は中身が何も記述されてなくても使用するだけで
それなりの処理負荷が発生するので
不要な物は徹底的に切っています。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
厳密なTick制御
動的な制御もしています。
例えば宝箱。
開ける時のアニメーションをしている時だけ
SkeletalMeshComponent の Tick を ON 、
それ以外では Tick を OFF にする等です。
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化
処 理 負 荷 を 落 と す 為 に や っ た 事
厳密なTick制御
その他ではマネージャーとなるシステムを用意し
特定のアクターの 更新関数 をまとめて呼んでいる物もあります。
アクターDの更新処理
アクターAの更新処理
アクターBの更新処理
アクターCの更新処理
マネージャー
のTick
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
レベルの最適化のお話は以上です
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
最後に
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ご清聴ありがとうございました!
UNREALはエピック・ゲームズ・インコーポレーテッドの商標または登録商標です。
PlayStationおよびPS4は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。
その他掲載されている会社名、商品名は、各社の商標または登録商標です。

Mais conteúdo relacionado

Mais procurados

UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!Masahiko Nakamura
 
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例Tatsuhiro Tanaka
 
UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-com044
 

Mais procurados (20)

UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法
 
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
 
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
 
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
 
[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
 
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
Unreal Engineを使用した商用タイトルで のノンフォトリアルレンダリング(NPR)事例
 
UE4モバイルブートキャンプ
UE4モバイルブートキャンプUE4モバイルブートキャンプ
UE4モバイルブートキャンプ
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について
 
UE4の色について v1.1
 UE4の色について v1.1 UE4の色について v1.1
UE4の色について v1.1
 
猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について
 
UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-
 

Semelhante a UE4におけるレベル制作事例

Game Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi ItaiGame Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi ItaiTakashi Itai
 
Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術kazuya noshiro
 
ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場Shota Suzuki
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜Kentaro Matsumae
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話和也 大木
 
VR端末開発研究
VR端末開発研究VR端末開発研究
VR端末開発研究Prolead_Terai
 
Game Creators Conference 2019 Koichi Miura
Game Creators Conference 2019 Koichi MiuraGame Creators Conference 2019 Koichi Miura
Game Creators Conference 2019 Koichi MiuraKoichi Miura
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術dena_study
 
誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発Namito Satoyama
 
Whomor portfolio
Whomor portfolioWhomor portfolio
Whomor portfolioMinaOmori
 

Semelhante a UE4におけるレベル制作事例 (20)

実行速度の最適化のあれこれ プラス おまけ
実行速度の最適化のあれこれ プラス おまけ  実行速度の最適化のあれこれ プラス おまけ
実行速度の最適化のあれこれ プラス おまけ
 
UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編) UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編)
 
UE4におけるエフェクトの基本戦略事例 前半
UE4におけるエフェクトの基本戦略事例  前半UE4におけるエフェクトの基本戦略事例  前半
UE4におけるエフェクトの基本戦略事例 前半
 
Game Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi ItaiGame Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi Itai
 
UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例
 
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
 
Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術
 
ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
 
UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編
 
UE4におけるアニメーション制作事例
UE4におけるアニメーション制作事例  UE4におけるアニメーション制作事例
UE4におけるアニメーション制作事例
 
UE4における自動プレイのポストモーテム
UE4における自動プレイのポストモーテム  UE4における自動プレイのポストモーテム
UE4における自動プレイのポストモーテム
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
 
VR端末開発研究
VR端末開発研究VR端末開発研究
VR端末開発研究
 
Game Creators Conference 2019 Koichi Miura
Game Creators Conference 2019 Koichi MiuraGame Creators Conference 2019 Koichi Miura
Game Creators Conference 2019 Koichi Miura
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発
 
Whomor portfolio
Whomor portfolioWhomor portfolio
Whomor portfolio
 
UE4における大規模レベル実装ワークフローとブループリント活用事例
UE4における大規模レベル実装ワークフローとブループリント活用事例UE4における大規模レベル実装ワークフローとブループリント活用事例
UE4における大規模レベル実装ワークフローとブループリント活用事例
 

Mais de エピック・ゲームズ・ジャパン Epic Games Japan

『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 

Mais de エピック・ゲームズ・ジャパン Epic Games Japan (20)

初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
 
UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)
 
Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
 
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
 
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMERVisual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
 
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMERUnreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMERバレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
 
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMERUE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMERオンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
 
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMERMetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
 
Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介
 
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
 
猫でもわかる Epic MegaGrants 応募への道
猫でもわかる Epic MegaGrants 応募への道猫でもわかる Epic MegaGrants 応募への道
猫でもわかる Epic MegaGrants 応募への道
 

UE4におけるレベル制作事例

  • 1. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 株式会社スクウェア・エニックス 吉田 武史 U E 4 に お け る レ ベ ル 制 作 事 例
  • 2. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 略称について ・『Unreal Engine 4』をスライド内では『UE4』と記載しています ・『PlayStation®4』も同様に『PS4』と記載しています ・一部『ブループリント』を『BP』と記載しています
  • 3. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本プロジェクトは UE4.17.2 を使用して作成されており 本スライドの内容もそれに準じて作られております。 最新バージョンでは挙動、もしくはソースコードが 変更されている可能性がありますのでご了承ください
  • 4. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. まずは自己紹介
  • 5. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介 吉田 武史 プログラマー。 入社して現在ちょうど4年目。UE4 歴は5年目。 (1年はBPでの開発、残りはC++とBPの両方を触る) 元々はブループリントのサポート担当で配属されましたが 色々と雑務をしている内にレベルプログラム担当に。
  • 6. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 今回お話する内容について
  • 7. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 今回お話する内容
  • 8. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 今回お話する内容 オ ブ ジ ェ ク ト 継 承 の ブ ル ー プ リ ン ト と レ ベ ル ブ ル ー プ リ ン ト を メ イ ン に 解 説 し て い き ま す 。
  • 9. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. どれくらい使っていた? ブループリント
  • 10. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本プロジェクトでは プランナー、デザイナー、プログラマー どのセクションでも高い頻度で使っていました。 ブループリント ど れ く ら い 使 っ て た ?
  • 11. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 各セクションが どういった感じで使っていたかというと…… ブループリント ど れ く ら い 使 っ て た ?
  • 12. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. プランナー ・「仕掛け」の作成 ・ゲーム性検証 ・ミニゲーム作成 ・カメラ挙動作成 ブループリント ど れ く ら い 使 っ て た ? プログラマー ・「仕掛け」の作成 ・ミニゲーム作成 デザイナー ・見た目の調整 ・演出強化 こんな感じで使っていました。 ・「仕掛け」とは…… ボタン等のプレイヤーからのアクセスで起動するオブジェクトや プレイヤーの進行を阻害する為に動作しているオブジェクトの事を指す。
  • 13. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 使う上でのルール ブループリント
  • 14. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル BPのTickはなるべく使わない
  • 15. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル BPのTickはなるべく使わない 理由は2つあり…… ・処理負荷が上がるのでなるべく使いたくない ・Tick を使う = 複雑な物になりやすい ・呼び出しイベントから実行して終わる程度の シンプルな流れで済ませたい
  • 16. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル BPのTickはなるべく使わない ・「完全に使わない」ではなく「なるべく使わない」 ・必要な場面であれば使用 ・使用する場面のみON、使用後はOFFといった感じで 常にTickをONにするという事はほぼ無かった。
  • 17. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル BPのTickはなるべく使わない プログラマー側では どの Tick が動いているか定期的に調査。 不要な物が見つかった場合は担当者に連絡し 実装方法に関してすり合わせをしていた。 最終的にこの流れが浸透し、Tick 使用率は自然と減少傾向に。
  • 18. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル 親クラスはなるべくC++クラスに
  • 19. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル 親クラスはなるべくC++クラスに ・これも絶対ではなく「なるべく」 ・重たい処理があってもC++に逃がしやすい ・C++であれば実機デバッグ時にコード修正だけで確認可能 ・C++からの継承コンポーネントも除去可能
  • 20. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル 親クラスはなるべくC++クラスに RazorCPU などのプロファイラーとも相性がよくなる。 コールスタックから、どのオブジェクトか判断が付きやすい。 本プロジェクトでは処理負荷はTest版で見ており こちらで仕込んだマーカーで負荷を確認する事が大半だった。
  • 21. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル 親クラスはなるべくC++クラスに その他 気になる点としてBPクラスロード時に 親BP が持つアセットを芋づる式に呼んでしまう問題がある。 C++クラスでも同じ作りは出来るが コーディングルールとして禁止していた。
  • 22. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル インプットイベントはエディター限定に
  • 23. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル インプットイベントはエディター限定に キーボードイベントを利用してのデバッグは 非常にお手軽で便利なのだが 製品版に残る可能性がある為 レベル上で設定できるインプットイベントは エディター以外では無効にするようにした。
  • 24. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル BPマクロの活用
  • 25. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル BPマクロの活用 ・各作業者が独立した設計を避ける為にBPマクロを積極的に使用 ・使用頻度の高いノードも事前にBPマクロでラッピングしている
  • 26. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル BPマクロの活用 ・ BPマクロの中身は定期的にプログラマー側で確認。 ・整理できる部分は作成者と相談してリダクションする。
  • 27. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル 定期的にBPの中身をプログラマーが確認
  • 28. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル 定期的にBPの中身をプログラマーが確認 ・開発末期でもいいので確認する工程が必要 ・奇想天外な物、複雑な物がよく見つかる。そういった場合 担当者と話し、最適な修正方法を話し合う必要がある。 使われてない変数が見つかったり Transient フラグを付けた方がいい物が いっぱいあった。
  • 29. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 う 上 で の ル ー ル 定期的にBPの中身をプログラマーが確認 BPクラスへのCastも注意が必要。 Cast したクラスが BP クラスだった場合 その BP クラスを参照する形になりロード対象となってしまう。 BPをCastすると、このBPも読み 込み対象になってしまう。Castし たBPがレベル上に存在するのであ れば問題ないが、存在しないので あれば無駄な読み込みとなる。
  • 30. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 使用して困った事 ブループリント • 良かった所と悪かった所
  • 31. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 「何でも出来る」それが仇になる場面も…
  • 32. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 「何でも出来る」それが仇になる場面も…… ブループリントは実装が早い事が利点ではあるものの チカラづくで実装された物も多く 後に現れる複雑な仕様に対応できず 大きな問題に発展する事も多々あった。
  • 33. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 「何でも出来る」それが仇になる場面も…… そういった物の大半は プログラマーから見ると簡単に対応できる案件だったり コードで組んだ方が楽という物も多かった。
  • 34. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 「何でも出来る」それが仇になる場面も…… 何はともあれ 雲行きが怪しくなってきたら プログラマーに相談するのが一番ベスト。
  • 35. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 パフォーマンス面で問題が多数
  • 36. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 パフォーマンス面で問題が多数 ブループリントノード、コンポーネント周りで 想定外の使われ方をしている物が多数存在していた。
  • 37. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 パフォーマンス面で問題が多数 特にコンポーネントは凄まじい数で つけられている物があり そこから発生する Tick 負荷や アクター移動・回転時の コリジョン負荷が目立っていた。
  • 38. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 パフォーマンス面で問題が多数 この他では ChildActorComponent が起因の バグ・処理負荷も多く起きていた。 根深い問題に関してはプログラマー側で作り直し それ以外は相談して対応で済ませていった。
  • 39. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 パフォーマンス面で問題が多数 最終的には知見が溜まっていき パフォーマンス面の問題は発生しづらくなっていった傾向に。
  • 40. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 可読性の低い物が多く、作りに性格が出る
  • 41. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 可読性の低い物が多く、作りに性格が出る 人間だもの。仕方がない。 ※ 再現画像を用意しようと思いましたが再現が大変すぎて諦めました。
  • 42. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった
  • 43. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 使用しているセクションが多く BPの習熟度は人それぞれ、かつ性格も出るので バグの種類もバリエーション豊かに。
  • 44. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 思い出深いバグを下記に……
  • 45. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊
  • 46. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊 ・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。
  • 47. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊 ・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。 ・イベント途中でアクターの表示をOFF → そのタイミングで イベントスキップしたらイベント終了後に表示が消えっぱなし。
  • 48. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 思い出深いバグを下記に…… ・Latent( Delay )を多用しすぎて処理順が崩壊 ・BeginPlayでイベントフラグを立てたままサブミット → 原因不明のバグに。 ・イベント途中でアクターの表示をOFF → そのタイミングで イベントスキップしたらイベント終了後に表示が消えっぱなし。 ・バグを修正したが、対処が甘く他のバグを生み出した。
  • 49. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 多くのバグは人為的ミスによるものだったので 全てのカスタムイベントや特定のアクターの配置情報を Csv、もしくはテキストで書き出すコマンドレットを作成。 それを参考に各セクションが人力で対処するという形で収まった。
  • 50. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 設計ミスで発生した物はプログラマーが引き取り対処。
  • 51. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 使 用 し て 困 っ た 事 バグが非常に多かった 嬉しい誤算もあって 終盤ではどのセクションも多くの失敗経験をしたおかげで 簡単なバグならプログラマーを介さず対処できるようになっていた。
  • 52. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 作成して有用だった機能 ブループリント
  • 53. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正
  • 54. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正 ある程度の規模のゲーム開発になると 想定していない所でフラグが書き換えられる事が多々ある。 表示周りだと 「OFFにしていたのに知らぬ間にONになっていた」 という事がよく発生する。
  • 55. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正 ブループリントがある以上 他の作業者から書き換えられる事もあれば システムを制御するマネージャーから書き換えられる事もあり UE4標準の Bool での制御では耐えきれない事が 早期に分かっていた。
  • 56. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正 そこで一部の機能は Bool で扱うのではなく Bit として扱うように改造。 「セクション」「カテゴリー」といった単位でビットを振り分け 1つでもビットが落ちている場合は 結果を False にするような仕組みを作成した。
  • 57. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正 表示切替のサンプルを用意しました。 Hidden が Bit をどう扱うか。 Category がどの Bit を使うか。
  • 58. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正 最終的に Bit へ機能変更した物は下記に。 ・表示の切り替え ・コリジョンの切り替え ・TickのON、OFF これらはアクター版、コンポーネント版の二種類がある。
  • 59. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正 この機能が出来た事によりブループリントのノードも UE4標準のものではなくプロジェクト専用の物に置き換えた。 機能作成前はフラグの切り替え周りで ワーストケースが頭にちらついていたが 機能作成後は特に問題がなく運用できたので非常に良かった。
  • 60. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリント 作 成 し て 有 用 だ っ た 機 能 『Bool』から『Bit』への機能修正 また、プロジェクトが末期になると ・特定の条件下で特定のオブジェクトの表示を消したい といった案件もよくあり、その部分も本機能で乗り切れた事が多 かった。最終的には17ビット分の役割が当てられていたので活用 する場面は多かったと思える。
  • 61. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ブループリントのお話は以上です
  • 62. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 次にお話する内容 レベルに関する情報を あっさり目に 説明していきます
  • 63. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 1パーシスタントレベルのサブレベル数 少ない所で30、多い所で200弱程度。 サブレベルが多いと管理が大変で 特にレベルストリーミング周りの制御は非常に難航。
  • 64. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 1パーシスタントレベルのアクター数 アクター数は多い所で16000、少ない所で8000程。 これはエディター上で表示されている数値で 動的に配置されるアクターも存在するので 実際にはこれよりもうちょっとだけ多い。
  • 65. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 1パーシスタントレベルのアクター数 ただし、インゲームではレベルストリーミングの関係で 大部分のアクターが削られる。 実際のゲームではもっと少ないアクター数で動いている。
  • 66. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. サブレベルのカテゴリー レベル構成 • 良かった所と悪かった所
  • 67. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ・ゲームフロー ・エネミー ・背景 ・エフェクト ・サウンド ・仕掛け レベル構成 ・リアルタイム演出 ・カットシーン ・ボイス ・NPC ・宝箱 ・ミニゲーム ・専用ミッション ・風 大まかに下記のようなカテゴリーで分けられている。
  • 68. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ゲームフローとは? レベル構成 • 良かった所と悪かった所
  • 69. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。
  • 70. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ
  • 71. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り
  • 72. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理
  • 73. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理 ・ミニゲーム、カットシーン等のフロー
  • 74. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理 ・ミニゲーム、カットシーン等のフロー ・レベル表示周り処理(レベルストリーミング含む)
  • 75. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 ゲームフローとは? 下記をブループリントで作成する事を指します。 ・パーシスタントレベルの BeginPlay からゲームが始まるまでの流れ ・各サブレベルとRemoteEventを使ってのやり取り ・ボリュームとオーバーラップした際の処理 ・ミニゲーム、カットシーン等のフロー ・レベル表示周り処理(レベルストリーミング含む) プランナーが 左記の項目を 実装していた (一部例外あり)
  • 76. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. サブレベルの切り分け レベル構成 • 良かった所と悪かった所
  • 77. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 サブレベルの切り分け サブレベルは全て表示すると負荷的に耐えら れない為、表示や地形的にキリが良い単位で 細かく分解、切り分けている。 ※右図で説明すると各エリア単位で サブレベルを用意している
  • 78. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 サブレベルの切り分け 切り分けたサブレベルは プレイヤーの立ち位置によって 表示・非表示を制御している。 ・エリアAにいる時はエリアBを表示、エリアCを非表示 ・エリアBにいる時はエリアAとエリアCを表示
  • 79. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 サブレベルの切り分け 切り分けは各サブレベルの担当者が行っている。 例)「仕掛け」ならプランナー、「BG」 なら背景 コンセプト的に全ステージが ユニークな形状をしているので 切り分けのルールはステージ毎に変わっていた。
  • 80. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 サブレベルの切り分け 各レベルの表示制御はプランナーが担当。 ・ボリュームに接触 ・ゲームの進行状況に応じて 上記をトリガーにレベルの 表示・非表示を制御している。
  • 81. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成 サブレベルの切り分け 処理負荷、レベルストリーミングの関係で 問題が出る場所(※)もよくあったので 切り分けと表示周りの作業は終盤まで長引いた。 ※表示されるべき物が表示されてない、 ロードが間に合わない。
  • 82. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベル構成のお話は以上です
  • 83. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 次にお話する内容
  • 84. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. まず初めに レベルストリーミング
  • 85. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 難題が多く見送っていたレベルストリーミング
  • 86. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない
  • 87. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り
  • 88. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持)
  • 89. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持) ・アクター数がかなりある上、使用アセット数も膨大
  • 90. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持) ・アクター数がかなりある上、使用アセット数も膨大 ・ストリーミングが間に合ってない時の事も考えないといけない
  • 91. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 難題が多く見送っていたレベルストリーミング ・以前の検証結果ではスパイクが凄まじく商品として耐えられない ・一部のマップはレベルストリーミングを考慮してない作り ・プレイヤーの移動速度は爆速(高速突進移動、ワープ技所持) ・アクター数がかなりある上、使用アセット数も膨大 ・ストリーミングが間に合ってない時の事も考えないといけない 上記が理由で対応していなかったのだが……
  • 92. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング メモリが枯渇。実装しなければいけない状況に
  • 93. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング メモリが枯渇。実装しなければいけない状況に 本プロジェクトでは1レベルにおけるアセット数が 凄まじく多く、マルチプラットフォーム故に 片方だけメモリが足りない状況も多々あり 結局対応せざるを得なかった。
  • 94. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 使用する上で困ったところ レベルストリーミング
  • 95. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷)
  • 96. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) スパイクの原因の大半はガベージの負荷。
  • 97. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) この問題はエンジン改造 + データ調整で対応。 ・内容は以前 Epic Games Japan 様が講演された内容(※)とほぼ同じ ※「UE4におけるLoadingとGCのProfilingと最適化手法」 https://www.slideshare.net/EpicGamesJapan/420-ue4loadinggcprofiling-108367408 また本プロジェクトでは UE4.20で実装された分散ガベージにも対応。
  • 98. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) ガベージの検索コストを削る為に下記も実行。
  • 99. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) ガベージの検索コストを削る為に下記も実行。 ・UObjectは限りなく削る
  • 100. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) ガベージの検索コストを削る為に下記も実行。 ・UObjectは限りなく削る ・不要なコンポーネントは作成者とすり合わせ、徹底的に削る努力をする。
  • 101. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) 他には下記変数をパーシスタントレベル毎に調整 ・GAsyncLoadingTimeLimit ・GPriorityAsyncLoadingExtraTime ・GLevelStreamingActorsUpdateTimeLimit ・GLevelStreamingComponentsRegistrationGranularity ・GLevelStreamingComponentsUnregistrationGranularity ・GLevelStreamingUnregisterComponentsTimeLimit
  • 102. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) しかし、これらを対応しても まだまだスパイクが発生するのが実情…… 原因を調べていくと2箇所が負荷が高まる所があった。
  • 103. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) ひとつ目は ULevel::RouteActorInitialize 。 この関数は端的に言うと レベルストリーミングのロード時のアクター初期化を行う部分。 この部分でスパイクが発生していた。
  • 104. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) 見るべきレベルもかなり多く 毎回プロファイラーで調べるのも苦だったので ULevel::RouteActorInitialize が ある一定の負荷を超えた際 画面上にアクター名 + 処理負荷量付きで表示するように改造。
  • 105. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) また ULevel::RouteActorInitialize の中身の処理は アクターによっては「 不要 」「 必要 」 と別れていたのでフラグを追加し それを元に実行するかどうかを判断させるようにした。
  • 106. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) 次に気になったのがナビゲーションメッシュの更新周り。 ストリーミングでアクター(※)が生まれてくる際に ナビメッシュの更新を行うものがあった。 ※ 主にNavLinkProxy、NavModifierVolume、 NavModifierComponent が付いているアクター
  • 107. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) 調べていくと UNavigationSystem::Tick 関数の NavData->TickAsyncBuild(DeltaSeconds) 周辺が スパイクの原因になっていたので この処理の負荷が極端に上がった時は 画面上に負荷を表示するようにした。
  • 108. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ スパイク(処理負荷) 長きに渡る調整の結果 レベルストリーミングのスパイクは大きく軽減。 ただし調整後に敵の配置やレベル調整、アセット調整で 日によって結果が変わる為、ほぼ終わりまで監視する形になった。
  • 109. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ パッケージを使用してのチェック
  • 110. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ パッケージを使用してのチェック 限りなく製品版に近いアセット構成やプログラムでないと 実際のストリーミングの挙動が分からないので Test版パッケージを使用して毎日チェックしていた。
  • 111. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ パッケージを使用してのチェック しかしパッケージは作るのに時間がかかるのがネック。 修正しても次回パッケージまで修正確認ができない。
  • 112. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ パッケージを使用してのチェック 更に苦しいのが ロードが間に合わないからストリーミングの位置をずらした といった理論的ではなく感覚的な修正が多くなるのも辛い所。 修正しても内容に満足できず 何度も繰り返し修正した所も多かった。
  • 113. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ パッケージを使用してのチェック 唯一救いだったのが どのハードも パッケージデータを使用してのプログラムのみ差し替え実行 が出来たのでプログラム的な問題は素早く対応できた。 ロードもエディターより早かったので一部のプログラマーは エディターではなく実機での調整時間の方が長かった。
  • 114. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ 他のAsyncLoadと競合
  • 115. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ 他のAsyncLoadと競合 AsyncLoad 発生中にレベルストリーミングを行うと 先に行われた AsyncLoad が終わるまで レベルストリーミングはサスペンド状態となる。
  • 116. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ 他のAsyncLoadと競合 この問題の厄介な所は パッと見では何故止まっているかが分からない点。 単純に「ロードが長いだけかも」と疑うだけで 終わってしまう可能性がある。
  • 117. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ 他のAsyncLoadと競合 この後に紹介予定の サブレベルの状態変更時に画面上に表示するデバッグを 作っていたおかげで中身があまり入ってないサブレベルなのに 異様にロードが長い時がある事が分かり この問題の原因究明に繋がった。
  • 118. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 使 用 す る 上 で 困 っ た と こ ろ 他のAsyncLoadと競合 本件は一部の場所で 動的にデータが読まれる事が原因だったので プレイヤーが問題の場所にいる時に限り 動的に読み込まれるデータを常駐データ扱いにして AsyncLoad が発生しないようにして対応した。
  • 119. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 作って便利だった機能 レベルストリーミング
  • 120. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 作 っ て 便 利 だ っ た 機 能 サブレベルの状態を 画面上に表示するデバッグ機能
  • 121. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 作 っ て 便 利 だ っ た 機 能 サブレベルの状態を画面上に表示するデバッグ機能 ・レベルストリーミングを行っているレベルをテキストで左上に表示 ・レベルストリーミングが発行されたタイミングで右上に どういった発行内容だったか(ロード切替?表示切替?)を 3秒間テキストで表示 上記のデバッグ表示機能を作成。
  • 122. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 作 っ て 便 利 だ っ た 機 能 サブレベルの状態を画面上に表示するデバッグ機能 「 Stat Levels 」と違うのは 現在実行中の物しか表示されないので 見落としが少ないという点。
  • 123. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミング 作 っ て 便 利 だ っ た 機 能 サブレベルの状態を画面上に表示するデバッグ機能 このデバッグはQAチェック、 ストリーミング周りの不具合を調べる時に非常に重宝した。 レベルがどの順番で遷移しているかも見る事が可能で 「ロード」「表示」にどれくらい時間がかかっているか 簡単に分かるので有用なデバッグだった。
  • 124. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルストリーミングのお話は以上です
  • 125. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • ブループリント • レベルの構成 • レベルストリーミング • レベルの最適化 次にお話する内容
  • 126. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 入ってきた当初、処理負荷は100msを超えていた 自分が本プロジェクトに入ってきた時、実機での処理負荷は Gameの負荷が100msを超えている状況。 原因の大半はレベルに配置されているアセットで 作業者各位がルールも特になく自由にアセットを作っている為 処理負荷の高いアセットが山ほど存在していた。
  • 127. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 入ってきた当初、処理負荷は100msを超えていた 自分も UE4 の処理負荷削減経験がなかった為 最初は何が重たいのか全く分からなかった。 ゲーム実装作業の裏で、それらを簡単に発見する為の 処理負荷計測用ツールや機能を充実させる事から始める事に。
  • 128. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 独自の処理負荷計測ツール & 機能 紹介 レベルの最適化
  • 129. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 サブレベルデバッグUMG
  • 130. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 サブレベルデバッグUMG サブレベルを選んでロード・アンロード可能なデバッグUMGを作成。 ゲーム内の負荷が高い際に一つずつレベルをアンロードしていき どのレベルが重たいか当たりをつける為に使用。 次のページで実際の画像を紹介します。
  • 131. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • レベルの最適化 • 独自の処理負荷計測ツール & 機能 紹介 • サブレベルデバッグUMG
  • 132. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • レベルの最適化 • 独自の処理負荷計測ツール & 機能 紹介 • サブレベルデバッグUMG 実際の物より少し改造していますが イメージはこんな感じです。 キーボードで操作する事を前提にしています。 今選択しているレベルを 「ロード」「アンロード」「表示切替」 する事ができます。
  • 133. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 サブレベルデバッグUMG このデバッグ機能の良かった所は どのセクションでも手軽に調べられ どこが原因かを洗い出しやすいといった所。 実装も難しくなく、サブレベルを多く使っている チームにオススメのデバッグです。
  • 134. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 負荷が高い物を 画面に表示
  • 135. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 負荷が高い物を 画面に表示 既に何度か書いておりますが 手軽に見れるように負荷の高い物は画面上に ・アクター(or アセット or 関数)名+処理負荷付き で表示するように改造。
  • 136. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 負荷が高い物を 画面に表示 UE4の場合 FAutoConsoleVariableRef を使えば コンソールコマンドからデバッグのON・OFFが簡単に可能。 非常に便利なので使ってない方は是非使ってみてください。 ※ FAutoConsoleCommand もオススメです。
  • 137. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 専用CPUプロファイラー
  • 138. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。
  • 139. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる)
  • 140. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数
  • 141. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数 ・登録された関数で負荷が高い物を順に表示する機能
  • 142. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数 ・登録された関数で負荷が高い物を順に表示する機能 ・タイムライン( スパイク検知用 )
  • 143. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 独 自 の 処 理 負 荷 計 測 ツ ー ル & 機 能 紹 介 専用CPUプロファイラー 最適化班から専用CPUプロファイラーを用意していただきました。 リアルタイムに下記の要素が確認可能です。 ・各スレッドの使用状況を表示(どのカテゴリーで処理を食っているか見れる) ・各 TickGroup の Tick 数 ・登録された関数で負荷が高い物を順に表示する機能 ・タイムライン( スパイク検知用 ) ・ポーズ & 巻き戻し( スパイクが発生した際、巻き戻って何が重たいか確認可能 )
  • 144. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 処理負荷を落とす為にやった事 レベルの最適化
  • 145. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステム
  • 146. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステム 本プロジェクトの中期以降に作られたシステムで 余ったCPUを活かす為に作成しました。 残念ながら完成した時期が遅かった為 一部のオブジェクトのみ、このシステムを使用しています。
  • 147. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステム概要
  • 148. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステム概要 ゲームスレッドも使用して並列処理を行っています。また処理毎に ・ゲームスレッド専用処理 ・どのスレッドでも実行可能処理 といった区分で分ける事が可能です。 ゲームスレッドと他スレッドを使って分散処理
  • 149. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステム概要 どうしてもゲームスレッドから離せない処理は 「ゲームスレッド専用処理」に区分させます。 他スレッドでは別の処理が実行されているので ゲームスレッド専用処理が増えすぎなければ処理は分散されます。 ゲームスレッドと他スレッドを使って分散処理
  • 150. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステム概要 UE4の物とは別に専用の Tick カテゴリーを持っています。 なので処理順をある程度操作する事が可能です。 専用のTickカテゴリーを持っている
  • 151. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステム概要 エンジン部分も適用したい場合は エンジン内部で定義する必要はありますが 自分のプロジェクトだけ反映したい場合は 無改造でも簡単にできます。 作りはシンプルでエンジン無改造でも可能
  • 152. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの効果
  • 153. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの効果 500体ほどアクターが動き回るエリアがあり 全てTickを実行している所があったので 「PS4 Test版PGOなし」で処理負荷を計ってみました。
  • 154. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの効果 結果は下記となります。
  • 155. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms
  • 156. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms ・並列TickをOFFで実行 6.04 ms( -0.87 ms )
  • 157. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms ・並列TickをOFFで実行 6.04 ms( -0.87 ms ) ・並列Tick実行 2.65 ms( -4.26 ms )
  • 158. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの効果 結果は下記となります。 ・UE4標準Tick実行 6.91 ms ・並列TickをOFFで実行 6.04 ms( -0.87 ms ) ・並列Tick実行 2.65 ms( -4.26 ms ) 4.26ms 減少は中々良い結果……!
  • 159. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点
  • 160. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点 最大の難点ともいえるべきかもしれません。 バグが出た時、原因を探りにくいといったデメリットもあります。 慣れてないと深刻なバグも引き起こしやすく 滅多に発生しない稀バグも並列化が原因の事が多いです。 バグを生み出しやすい
  • 161. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点 並列化したい部分が少ないとシングルスレッドで 回していた方が早い局面も多々あります。 特に実装し始めはこの問題に直面しやすく 「やる価値あるのだろうか」と心が折れがちです。 並列化したい部分が少ないと逆に遅くなる事も
  • 162. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点 パフォーマンスを出す為には処理順も考えなければいけません。 具体的には負荷の高い処理を先に、負荷の低い処理を後にするよう にしなければいけません。 処理順も考慮しなくてはいけない
  • 163. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点 下図はよくない一例です。色の付いたバーが「処理」で、今回の例で は三つ処理が動いているとお考えください。 処理順も考慮しなくてはいけない
  • 164. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点 最終的に全ての処理が終了しなければ次へ移行できません。現状はオ レンジ色の処理が一番負荷が高く、最後に来ている為、終了処理への 移行が遅くなっています。 処理順も考慮しなくてはいけない 処理の終わりが ここになってしまうので 処理負荷が増える。
  • 165. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点 これを解決するにはオレンジを最初に処理させ、その裏で他の処理を 消化させるのがベストです。 処理順も考慮しなくてはいけない
  • 166. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 並列Tickシステムの難点 本プロジェクトではこの問題を対応する為に 「各実行処理にプライオリティをつける」事や 「処理を分散して実行する機能」で対応しました。 処理順も考慮しなくてはいけない
  • 167. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 距離による表示制御
  • 168. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 距離による表示制御 距離に応じて一部のオブジェクトの 表示を制御(近ければON、遠いとOFF)するシステムがあります。 表示がOFFの時に TickもOFFにするオプションもあります。
  • 169. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 移動オブジェクトのコリジョン制御
  • 170. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 移動オブジェクトのコリジョン制御 コリジョンを持つオブジェクトの 移動時の処理負荷が高かった為 ・近距離でコリジョン ON ・遠距離でコリジョン OFF と制御している物があります。
  • 171. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 移動オブジェクトのコリジョン制御 プレイヤーには飛び道具、ワープもあれば 仲間も自由に動いている為、安直な対応はできませんが 不自然にならない程度で対応しています。
  • 172. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 厳密なTick制御
  • 173. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 厳密なTick制御 Tick は中身が何も記述されてなくても使用するだけで それなりの処理負荷が発生するので 不要な物は徹底的に切っています。
  • 174. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 厳密なTick制御 動的な制御もしています。 例えば宝箱。 開ける時のアニメーションをしている時だけ SkeletalMeshComponent の Tick を ON 、 それ以外では Tick を OFF にする等です。
  • 175. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化 処 理 負 荷 を 落 と す 為 に や っ た 事 厳密なTick制御 その他ではマネージャーとなるシステムを用意し 特定のアクターの 更新関数 をまとめて呼んでいる物もあります。 アクターDの更新処理 アクターAの更新処理 アクターBの更新処理 アクターCの更新処理 マネージャー のTick
  • 176. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. レベルの最適化のお話は以上です
  • 177. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 最後に
  • 178. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ご清聴ありがとうございました! UNREALはエピック・ゲームズ・インコーポレーテッドの商標または登録商標です。 PlayStationおよびPS4は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。 その他掲載されている会社名、商品名は、各社の商標または登録商標です。