Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた【UNREAL FEST EAST 2018】

38.5K Views

October 18, 18

スライド概要

講演動画:https://www.youtube.com/watch?v=UPzeHX3VaHY

2018年10月14日に行われた「UNREAL FEST EAST 2018」における株式会社アクワイア様の講演で使用されたスライドです。

●公式サイト
https://unrealengine.jp/unrealfest/
===
2018年7月13日に発売されたNintendo Switch用ソフト『OCTOPATH TRAVELER』の開発会社であるアクワイアからアート編、プログラマ編の2つの視点から、UE4による開発事例をご紹介致します。

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

Nintendo Switch 『OCTOPATH TRAVELER』 はこうして作られた #ue4fest

2.

オクトパストラベラーとは ハード:Nintendo Switch 体験版1 2017/09 体験版2 2018/06 製品版 2018/07/13 日/英/伊/仏/独/西の6ヶ国語対応 世界同時発売 使用しているUE4 バージョン 4.18.1 #ue4fest

3.

Nintendo Switch 『OCTOPATH TRAVELER』 はこうして作られた 【アート編】 #ue4fest

4.

自己紹介 株式会社アクワイア アーティスト / テクニカルアーティスト 飯塚 三華 印刷・Web業界を経て2005年にアクワイア入社。 今作『OCTOPATH TRAVELER』ではリードアーティストとして、 各種アセットの制作からテクニカルな部分まで幅広く担当。 主な開発タイトル 2006『神業』(UI) 2011『侍道4』(キャラクター・チーフ) 2006『忍道 焔』(パッケージイラスト) 2011『忍道 散華』(エフェクト) 2008『侍道3』(キャラクター) 2014『ロード・トゥ・ドラゴン』(テクニカル) 2008『天誅4』(UI) 2016『AKIBA'S BEAT』(Live2D) 2008『勇者のくせになまいきだor2』(モーション) など #ue4fest

5.

アジェンダ【アート編】 「HD-2D」が出来るまで • HD-2Dとは • HD-2Dが出来るまで UE4を使った絵作り • キャラクター • マテリアル • ポストエフェクト • 地形の作成 • 室内表現 • バトル演出 #ue4fest

6.

アート編 「HD-2D 」が出来るまで #ue4fest

7.

HD-2Dとは ドット絵の進化系 昔ながらの“ドット絵”に“3DCG”の画面効果を加えた、幻想的な世界 #ue4fest

8.

HD-2Dが出来るまで • プロジェクト初期はSwitch発表前 • ミドルウェアも決まっていない Mayaでビジュアルの試作 #ue4fest

9.

#ue4fest

10.

この段階から • ドット絵にリッチなマテリアルを適応させよう • 動的でリッチなライティングをしよう • ポストエフェクトでミニチュアっぽい見せ方をしよう という方針 #ue4fest

11.

HD-2Dが出来るまで • ミドルウェアがUE4に決定 ビジュアル作りをMayaからUE4へ #ue4fest

12.

#ue4fest

13.

#ue4fest

14.

スケール感が違う #ue4fest

15.

スケールの違和感 1. 広い画角 2. 人物と同じスケールの家 3. 高低差が乏しいレベルデザイン #ue4fest

16.

スケール感の調整は大事。 また、調整には時間がかかった。 #ue4fest

17.

HD-2Dが出来るまで プロトタイプの制作へ • 1~2時間遊べる • 2タウン、3フィールド、3ダンジョン #ue4fest

18.

#ue4fest

19.

ドットが見えるような調整 • 海、バトル などのエフェクトもドット • 暗いところもテクスチャが見えるライティング • 被写界深度深め(近くも遠くもくっきりしたドット) #ue4fest

20.

なんか旧世代的 #ue4fest

21.

求められたのは「思い出補正」 された次世代グラフィック #ue4fest

22.

UE4 の力を使うしかない!! #ue4fest

23.

プロトタイプ 製品版 #ue4fest

24.

「HD-2D 」が出来るまで • リッチなライティング、マテリアル、ポストエフェクト • 画面の密度・スケール感 • 思い出を壊さない次世代感のバランス ダンジョン試作 タウン試作 プロトタイプ 製品版 #ue4fest

25.

アート編 UE4を使った絵作り #ue4fest

26.

UE4を使った絵作り • • • • • • キャラクター マテリアル ポストエフェクト 地形の作成 室内表現 バトル演出 #ue4fest

27.

UE4を使った絵作り【 キ ャ ラ ク タ ー 】 • キャラクターはUE4のPaperFlipBookを使用 • 量産にはPhotoshopのパペットワープ機能を使用 • メモリ問題が起きたので、カスタム化 → プログラム編にて • ボーンにスプライトを張る形式のアニメーションも検討した が不採用となった #ue4fest

28.

キャラクターモーションの量産 キャラクターをパーツ毎に分解 差し替え パペットワープであらかじめ 作成したモーションポーズ モーションポーズのパーツを 任意のキャラクターに差し替え #ue4fest

29.

キャラクターモーションの量産 ドット崩れは人の手で直した #ue4fest

30.

UE4を使った絵作り • • • • • • キャラクター マテリアル ポストエフェクト 地形の作成 室内表現 バトル演出 #ue4fest

31.

UE4を使った絵作り【 マ テ リ ア ル 】 • 3Dアセットのマテリアルはほぼ1つのマスターマテリアルか ら作成されている • 機能別にスイッチを切り替えた子マテリアル、実際のパラメ ータやテクスチャを設定した孫マテリアルの構成 https://www.slideshare.net/EpicGamesJapan/byking-ue4dd • マテリアルはほぼアーティストが作成した #ue4fest

32.

ワールドUV • オブジェクトは回転したいが、ドットのテ クスチャは回転したくない • 特に地面は目立つ • WorldPositionOffsetを使ってZ方向からプロ ジェクションで張り付けたようなUVになる ように調整 #ue4fest

33.

ワールドUV #ue4fest

34.

ワールドUV #ue4fest

35.

アルファ処理 • キャラクターより手前にあるオブジェクト に対して、ScreenPositionで円形のアルフ ァがかかるようになっている • マップチェンジ付近でズレないように、UV オフセット出来るようなパラメーターを準 備し、PGにコントロールしてもらっている #ue4fest

36.

アルファ処理 PGにコントロールしてもらっているパラメーター カメラがロックされても、キャラクターのオフセットをかけることが出来る #ue4fest

37.

アルファ処理 #ue4fest

38.

ベクター処理 • オブジェクトの上面(Z+)方向に対して、任 意のテクスチャを適応することが出来る • PixelNormalWSを使用 #ue4fest

39.

ベクター処理 #ue4fest

40.

ベクター処理 #ue4fest

41.

揺れもの • 揺れはWorldPositionOffsetで作成 • 頂点カラーで色を付けた部分にのみ揺れが 適応される • 揺れは3種あり、RGBの頂点カラーによっ て使い分けたり、ブレンドしたりしている #ue4fest

42.

グラデーション • パターンのテクスチャだけだと単調になり がちなオブジェクト(家など)にグラデー ションを適応 • ActorPosition を使い、アクター単位でグラ デーションをかけることができる #ue4fest

43.

エミッシブと明滅 • マスクテクスチャの部分にエミッシブが掛 けられるようになっている • エミッシブは強さを変えたり、任意の長さ で明滅させることが出来る #ue4fest

44.

UE4を使った絵作り • • • • • • キャラクター マテリアル ポストエフェクト 地形の作成 室内表現 バトル演出 #ue4fest

45.

UE4を使った絵作り【 ポ ス ト エ フ ェ ク ト 】 • すべてUE4のPostProcessVolumeにあるものを使用 • 一部ゲーム内のオプションでパラメーターを変えられるよう にしている • マップによって値の調整が入っている項目もある #ue4fest

46.

ColorGrading ColorGradingなし ColorGradingあり #ue4fest

47.

Bloom Bloomなし Bloomあり #ue4fest

48.

Depth of Field(Bokeh) ↑玉ボケ 画像はUDKより引用 #ue4fest

49.

Lens Flares #ue4fest

50.

Ambient Cubemap AmbientCubemapなし AmbientCubemapあり #ue4fest

51.

Vignette 画面四隅の暗さデフォルト 画面四隅の暗さ少なめ #ue4fest

52.

UE4を使った絵作り【 ポ ス ト エ フ ェ ク ト 】 BaseColorのみ +ライティング +ポストエフェクト ポストエフェクトがヴィジュアルの大きなキー #ue4fest

53.

UE4を使った絵作り • • • • • • キャラクター マテリアル ポストエフェクト 地形の作成 室内表現 バトル演出 #ue4fest

54.

UE4を使った絵作り【 地 形 の 作 成 】 • 一部の重要なマップはグレーモデルにレタッチしてもらった 物をベースに作成 • 地形の作成には自社開発したマップエディターを使用 • ランドスケープやランドスケープスプライン、Foliageなどの UE4の機能を多く使用している #ue4fest

55.

グレーモデルからのレタッチ #ue4fest

56.

グレーモデルからのレタッチ #ue4fest

57.

グレーモデルからのレタッチ #ue4fest

58.

グレーモデルからのレタッチ グレーモデル レタッチ 製品版 #ue4fest

59.

マップエディター • 1マス100x100の単位でブロックを生成できる • 斜め面の作成、立体交差作成も可能 • マテリアルブレンドを使った道の作成も可能 #ue4fest

60.

#ue4fest

61.

マップエディター デメリット • 地形がブロック的になりやすい • データが重い • 手間がかかる 道になる部分はマップエディターで作成 マップエディター素材で作成された モジュラーアセットを配置 #ue4fest

62.

ランドスケープによる地形 #ue4fest

63.

スプラインによる川 #ue4fest

64.

UE4を使った絵作り【 室 内 表 現 】 • • • • • • キャラクター マテリアル ポストエフェクト 地形の作成 室内表現 バトル演出 #ue4fest

65.

#ue4fest

66.

室内表現 室内はスケール1/2になっている #ue4fest

67.

室内表現 • 室内と室外はシームレスに切り替えている • ドア部分のトリガーで以下を切り替えている • • • • • ライト ポストエフェクト 表示非表示オブジェクト カメラ距離 キャラクターサイズ #ue4fest

68.

#ue4fest

69.

UE4を使った絵作り【 バ ト ル 演 出 】 • • • • • • キャラクター マテリアル ポストエフェクト 地形の作成 室内表現 バトル演出 #ue4fest

70.

#ue4fest

71.

バトル演出【カメラ】 • 通常時は真正面ではなく、少し斜めにしたカメラが常時少し ゆらゆらしている • ブースト+アビリティで、カメラ演出が入る • カメラの場所や回転、スピードはアートで調整できるように なっている #ue4fest

72.

バトル演出【ライト】 • ブーストすると、キャラクター足元のライトが発光 • ライト演出が入る際は、マップに配置されている太陽光源が オフになる→負荷対策でもある • 動的な影の変化を表現するため、バトル専用ポイントライト をレベルに配置 #ue4fest

73.

バトル演出【ポストエフェクト】 • カメラ演出に合わせてDOFも動的に変化している • BREAK時はさらにChromaticAberrationを使っており、 アートでパラメーター調整が可能になっている #ue4fest

74.

#ue4fest

75.

#ue4fest

76.

アジェンダ【アート編】 「HD-2D」が出来るまで • HD-2Dとは • HD-2Dが出来るまで UE4を使った絵作り • キャラクター • マテリアル • ポストエフェクト • 地形の作成 • 室内表現 • バトル演出 アート編おしまい #ue4fest

77.

Nintendo Switch 『OCTOPATH TRAVELER』 はこうして作られた 【プログラム編】 #ue4fest

78.

自己紹介 株式会社アクワイア プログラマ 渡邊 裕 2008年 アクワイア入社。 『侍道4』『rain』『絶対迎撃ウォーズ』などコンシューマを中心に開発に携わる。 『OCTOPATH TRAVELER』ではリードプログラマを担当。 主な開発タイトル 2008『勇者のくせになまいきだwww』(全般) 2009『100万トンのバラバラ』 ( AIなど) 2011『侍道4』(夜這い、拷問など) 2011『忍道 散華』(オブジェクトなど) 2012『rain』(リード、キャラなど) 2014『絶対迎撃ウォーズ』 (リード) 2016『ロード・トゥ・ドラゴン』 #ue4fest

79.

アジェンダ 1. ローディング時間について 2. Flipbookの最適化について 3. GarbageCollectionについて #ue4fest

80.

アジェンダ 1. ローディング時間について 2. Flipbookの最適化について 3. GarbageCollectionについて #ue4fest

81.

プロジェクト的なオーダー #ue4fest

82.

プロジェクト的なオーダー • ゲーム起動後、暗転状態からすぐにローディングアイコンが 出てほしい。(約5秒以内ぐらい) • ローディングアイコンが消えた後、 タイトル画面が出るまではロード待ちしたくない。 • タイトルを抜け、ゲーム開始する際はロード待ちしても良い (長すぎるのはNG) #ue4fest

83.

ゴールイメージ 5秒以内 すぐに入力を受け付ける ロード待ち #ue4fest

84.

• 体験版1 2017/09 • 体験版2 2018/06 • 製品版 2018/07/13 #ue4fest

85.

【課題】 ゲーム起動するまでが とにかく遅い #ue4fest

86.

体験版1 改善前 ここの時間を短くしなければならない 30秒 5秒 #ue4fest

87.

体験版1 改善前 • GameModeのBeginPlayが呼ばれるまで30秒近くかかっていた • 起動直後にローディングUIを出したいが、呼び出すことができない #ue4fest

88.

体験版1 問題点 • GameMode、GameInstance、PlayerControllerからの参照が多い • Assetを直接参照しているものが大量にあった #ue4fest

89.

GameModeのリファレンスビューアー #ue4fest

90.

PlayerControllerのリファレンスビューアー #ue4fest

91.

参照関係がめちゃくちゃ #ue4fest

92.

参照を整理する #ue4fest

93.

Assetをハード参照からソフト参照へ変更 DataTableにアサインされている アセットをソフト参照に変更して 読み込みフローの整備を行いまし た。 Assetをハード参照から ソフト参照へ変更 #ue4fest

94.

BPのインターフェース経由でアクセス 入力系などの根っこの方は参照が肥大化しがち。 インターフェースを継承したActorComponentをメンバとして保持。 インターフェース関数を呼び出して、実際の実装は継承先で行う。 Interface関数呼び出し Interface継承して実装 #ue4fest

95.

C++化する BPを廃止 極力C++からの呼び出しに変更 #ue4fest

96.

参照整理後のGameMode GameMode GameInstance PlayerController などエンジン起動に 必要なオブジェクトの参照減らす #ue4fest

97.

参照を整理する GameMode、GameInstance、PlayerController などエンジン起動に必要なオブジェクトの参照を外す。 Assetをハード参照からソフト参照へ変更 Interfaceを一枚噛ませて、実装はInterface継承先に記述 ブループリントのC++化 #ue4fest

98.

体験版1 起動ロード改善後 3秒 20秒 #ue4fest

99.

体験版1 起動ロード改善後 改善前 30秒 5秒 改善後 3秒 20秒 #ue4fest

100.

体験版2と製品版では Persistentレベル GameMode,GameInstance, PlayerController +ローディングUIのみ作成 ResidentBaseレベル タイトル画面起動に必要な 最低限の管理クラス生成 テキスト、UI管理など ResidentGameレベル ロゴシーケンス その他のクラス生成 Titleレベル ロゴシーケンス その他タイトル画面処理 ゲーム開始前にResidentGameで走らせた常 駐物のロード待ち のManager生成 #ue4fest

101.

最終的なロード時間 10秒 タイトル画面起動に必要な最低限の 管理クラス生成(テキスト、UI管理など) 5秒 その他の管理クラス生成。初期化 終了待ち #ue4fest

102.

なんとかなった! #ue4fest

103.

ロード時間についてまとめると • 初期段階からの設計が重要 • いつ、どこで、どのクラスが必要なのかを明確化 • 何でもかんでも参照をしないようにする • 定期的にReferenceViewerで確認 #ue4fest

104.

アジェンダ 1. ローディング時間について 2. Flipbookの最適化について 3. GarbageCollectionについて #ue4fest

105.

Flipbookの最適化について オクトパストラベラーではPaperFlipbookで キャラを表示している #ue4fest

106.

PaperFlipbook UPaperFlipbook ・フリップブックアニメーション1つ分の情報。 ・ キーフレームレーム配列 FPaperFlipbookKeyFrame アニメーションのキーフレーム1つ分の情報。 UPaperSpriteのポインタと表示フレーム数を持つ。 #ue4fest

107.

PaperFlipbook UPaperSprite ・テクスチャのポインタ ・UV、Dimension ・描画用のメッシュ情報 (AlternateMaterialSplitIndex, BakedRenderData) (頂点6つ分) FSpriteDrawCallRecord UPaperSpriteから BakedRenderData を貰って描画に渡している。 #ue4fest

108.

1キャラの1ジョブ分のSpriteデータ #ue4fest

109.

問題点 FPaperFlipbookKeyFrame UPaperFlipbook FPaperFlipbookKeyFrame FPaperFlipbookKeyFrame FPaperFlipbookKeyFrame UPaperSprite ・テクスチャのポインタ ・UV、Dimension ・描画用のメッシュ情報 #ue4fest

110.

問題点 FPaperFlipbookKeyFrame UPaperFlipbook FPaperFlipbookKeyFrame FPaperFlipbookKeyFrame FPaperFlipbookKeyFrame UPaperSprite ・テクスチャのポインタ ・UV、Dimension ・描画用のメッシュ情報 PaperSpriteが大量にロードされ メモリがかなり断片化していた #ue4fest

111.

【課題】 Spriteのロードに手を入れ メモリの断片化を防ぐ #ue4fest

112.

キャラに必要なFlipbookをテーブル化 キャラごとのFlipbookデータ配列 #ue4fest

113.

Flipbook内のデータをテーブル化 Flipbookに含まれる再生レート(fps) キーフレーム毎のフレーム数 スプライトラベル名の配列をまとめたものを あらかじめデータテーブルとして出力しておく #ue4fest

114.

スプライトのデータテーブル PaperSpriteのアセット名をキー値 各種テクスチャ スプライト描画用の頂点情報まとめたテーブル #ue4fest

115.

改善後 テクスチャ キーフレーム情報 キーフレーム分作成 データテーブル Ucustom PaperSprite UCustom PaperFlipbook Ucustom PaperSprite Ucustom PaperSprite #ue4fest

116.

断片化対策前 断片化対策後 #ue4fest

117.

Flipbook まとめ • Flipbookをロードすることで引っ張られるSpriteを自前管理 ⇒ 断片化の防止のため • キーフレームやSprite情報など、アニメーションに必要なもの をテーブル化しておく。 • 描画の部分は元のFlipbookに任せる #ue4fest

118.

アジェンダ 1. ローディング時間について 2. Flipbookの最適化について 3. GarbageCollectionについて #ue4fest

119.

長時間プレイしているとメモリがどんどん増えていく・・・ #ue4fest

120.

調査 #ue4fest

121.

Obj List #ue4fest

122.

Class Count NumKB MaxKB アニメーション前 UMGSequencePlayer 61 115.33 115.33 アニメーション後 UMGSequencePlayer 81 153.14 53.14 UMGのアニメーションをさせるたびにメモリが増えているのが分かった #ue4fest

123.

Obj List Class=UMGSequencePlayer 指定したクラスのみのオブジェクトリストが コンソールに出力される #ue4fest

124.

なぜオブジェクトが解放されない? UUserWidgetがアニメーション再生タイミングでUMGSequencePlayerを NewObjectしたあとにAddしているが、再生終了時にはRemoveしているだ けだった GabergeCollection呼ばないといけない #ue4fest

125.

UE4でのGCの呼び出し ・自動で定期的にGCを呼び出してもらう ・自前で呼び出す #ue4fest

126.

オクトパス体験版1では • タイトル画面通過後、ゲームにおけるアセットはほぼ常駐になってい るため、読み捨てを行うことがあまりなかった。 • GCを呼び出す際、ヒッチがひどかったので、 体験版1ではマップチェンジの際やバトル終了後など ゲームのシーケンス内で自前でGCを呼び出していた。 #ue4fest

127.

オクトパス体験版1では マップチェンジ時 バトル終了時 暗転中、カクツキが気にならないタイミングでGC #ue4fest

128.

ここまでの話 • 長時間プレイしているとメモリが足りない • UMGのアニメーション再生しているだけでメモリが増えている • やはりGCを定期的に呼ばなければならない • GCを呼ぶにはヒッチをなんとかしなければならない #ue4fest

129.

GCのヒッチ対策 #ue4fest

130.

https://www.slideshare.net/EpicGamesJapan/ue4loadinggcprofiling #ue4fest

131.

UE4におけるLoadingとGCのProfilingと最適化手法 より引用 GCについて https://www.slideshare.net/EpicGamesJapan/ue4loadinggcprofiling UE4のGCはUobjectを一次元配列で管理している GCの際、この一次元配列からオブジェクトを検索し、不要になったものを削除 GCのコスト = 検索コスト + 削除コスト #ue4fest

132.

UE4におけるLoadingとGCのProfilingと最適化手法 より引用 https://www.slideshare.net/EpicGamesJapan/ue4loadinggcprofiling GCについて 削除コストについて 削除コスト = 依存関係の切断 + 実際のオブジェクトの削除 フレーム分散可能 #ue4fest

133.

GCのコストを調べる #ue4fest

134.

stat dumphitches ヒッチ時のCPU負荷がログとして出力される t.HitchThreshold 0.075 と指定することで閾値を変更することができる LogStats: ------------------Thread Hitch 1, Frame 6209 97.0ms --------------LogStats: ------------------ Game Thread 95.52ms LogStats: 95.517ms ( 4) - Thread_1db0_0 - GameThread - STATGROUP_Threads - STATCAT_Advanced LogStats: 95.497ms ( 2) - FrameTime - STAT_FrameTime - STATGROUP_Engine - STATCAT_Advanced LogStats: 85.568ms ( 1) - Pump Messages - STAT_PumpMessages - STATGROUP_Threading LogStats: 85.090ms ( 1) - ProcessKeyUp - STAT_ProcessKeyUp - STATGROUP_Slate LogStats: 77.635ms ( 1) - CollectGarbageInternal - STAT_CollectGarbageInternal - #ue4fest

135.

log LogGarbage log GCの時に以下ログが出る 検索コスト LogGarbage: Collecting garbage 削除コスト LogGarbage: 71.938257 ms for GC LogGarbage: 1.394206 ms for unhashing unreachable objects. GCで削除後のオブジェクト数 Clusters removed: 0. Items 0 Cluster Items 0 LogGarbage: GC purged 0 objects (432826 -> 432826) #ue4fest

136.

コマンドでもGCが呼べます #ue4fest

137.

デバッグメニュー デバッグメニュー 有 LogGarbage: 237.232555 ms for GC LogGarbage: 6.752085 ms for unhashing unreachable objects. Clusters removed: 0. Items 51 Cluster Items 0 LogGarbage: GC purged 51 objects (518055 -> 518004) デバッグメニュー 無 LogGarbage: 159.892604 ms for GC LogGarbage: 5.186930 ms for unhashing unreachable objects. Clusters removed: 0. Items 51 Cluster Items 0 LogGarbage: GC purged 51 objects (349664 -> 349613) 検索コスト 約78ms オブジェクト数 17万 削減 #ue4fest

138.

Testビルド Developmentビルド LogGarbage: 159.892604 ms for GC LogGarbage: 5.186930 ms for unhashing unreachable objects. Clusters removed: 0. Items 51 Cluster Items 0 LogGarbage: GC purged 51 objects (349664 -> 349613) Testビルド LogGarbage: 97.840209 ms for GC LogGarbage: 2.903227 ms for unhashing unreachable objects. Clusters removed: 0. Items 51 Cluster Items 0 LogGarbage: GC purged 51 objects (349571 -> 349520) 検索コスト 約62ms 削減 #ue4fest

139.

さらに検索コストを減らす #ue4fest

140.

UE4におけるLoadingとGCのProfilingと最適化手法 より引用 https://www.slideshare.net/EpicGamesJapan/ue4loadinggcprofiling #ue4fest

141.

UE4におけるLoadingとGCのProfilingと最適化手法 より引用 https://www.slideshare.net/EpicGamesJapan/ue4loadinggcprofiling #ue4fest

142.

UE4におけるLoadingとGCのProfilingと最適化手法 より引用 https://www.slideshare.net/EpicGamesJapan/ue4loadinggcprofiling #ue4fest

143.

DisregardGCObjectで計測 [/Script/Engine.GarbageCollectionSettings] gc.MaxObjectsNotConsideredByGC=1 LogUObjectArray: 35412 objects as part of root set at end of initial load. LogUObjectAllocator: 5887376 out of 0 bytes used by permanent object pool. #ue4fest

144.

DisregardGCObjectで計測 DisregardGCObject なし LogGarbage: 97.840209 ms for GC LogGarbage: 2.903227 ms for unhashing unreachable objects. Clusters removed: 0. Items 51 Cluster Items 0 LogGarbage: GC purged 51 objects (349571 -> 349520) DisregardGCObject あり LogGarbage: 79.324480 ms for GC LogGarbage: 2.894010 ms for unhashing unreachable objects. Clusters removed: 1. Items 21 Cluster Items 30 検索コスト 約18ms LogGarbage: GC purged 51 objects (314159 -> 314108) オブジェクト数 3万5000 削減 #ue4fest

145.

Clustering • • Actor Clustering BluepringClustering #ue4fest

146.

Clustering 結果 ActorClustering LogGarbage: 78.352761 ms for GC LogGarbage: 2.659634 ms for unhashing unreachable objects. Clusters removed: 1. Items 21 Cluster Items 30 LogGarbage: GC purged 51 objects (314160 -> 314109) BPCluster LogGarbage: 35.832137 ms for GC LogGarbage: 2.722394 ms for unhashing unreachable objects. Clusters removed: 1. Items 21 Cluster Items 30 LogGarbage: GC purged 51 objects (314160 -> 314109) 検索コスト 約44ms 削減 #ue4fest

147.

対応前と対応後 検索 コスト (ms) 削除 コスト(ms) オブジェクト数 対応前 237.232555 6.752085 518004 対応後 36.404271 3.052086 326776 検索コスト 約200 ms オブジェクト数 19万 削減 #ue4fest

148.

オクトパスでは 結局ヒッチが30数ミリと完全に抑えることができなかった。 UI操作中、バトル中、イベント中などはほぼ気にならなくなっ たがカメラが動くフィールド中は少し気になるレベル。 #ue4fest

149.

オクトパスでは 自前でタイマー更新を行うようにした 動的生成 オブジェクト数 カクつき GC間隔 タイトル画面 普通 少なめ 気にならない 5分 フィールド時 少なめ 普通 気になる 10分 メインメニュー 多め 多め 気にならない 1分 バトル 普通 普通 気にならない 3分 #ue4fest

150.

オブジェクトの数は少ない方が良い • Uproperty削減 • Obj listでボトルネックを探す • Blueprint Stats Plugin で探す #ue4fest

151.

https://www.slideshare.net/EpicGamesJapan/ue4loadinggcprofiling #ue4fest

152.

まとめ 設計、検証はプロジェクト初期から行っていく必要がある パフォーマンス、メモリなどの計測は定期的に行う UE4はデバッグ機能、ツールが豊富なので活用する #ue4fest

153.

ご清聴ありがとうございました #ue4fest