© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
LOGO ILLUSTRATION:©1997 YOSHITAKA AMANO
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
※「Unreal Engine 4」は Epic games, Inc. の商標または登録商標です。
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
いずれかの条件でQAからバグとして報告されてしまう!!
条件1
条件2
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
QA
プロファイリング担当
修正担当者
(アーティスト・プログラマ)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
-
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Thread 優先度 アフィニティマスク
GameThread TPri_Normal MAKEAFFINITYMASK1(0)
RenderingThread TPri_Normal MAKEAFFINITYMASK1(1)
RHIThread TPri_Normal MAKEAFFINITYMASK1(2)
TaskGraphThread TPri_SlightlyBelowNormal MAKEAFFINITYMASK7(0, 1, 2, 3, 4, 5, 6)
PoolThread TPri_Lowest MAKEAFFINITYMASK4(3, 4, 5, 6)
AsyncLoadingThread TPri_BelowNormal MAKEAFFINITYMASK5(2, 3, 4, 5, 6)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
void UParticleSystemComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction)
{
// 省略...
AsyncWork = TGraphTask<FParticleAsyncTask>::CreateTask(nullptr, ENamedThreads::GameThread).ConstructAndDispatchWhenReady(this);
ThisTickFunction->GetCompletionHandle()->DontCompleteUntil(AsyncWork);
// 省略...
}
class FParticleAsyncTask
{
// 省略...
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent)
{
FGraphEventRef Finalize = TGraphTask<FParticleFinalizeTask>::CreateTask(nullptr, CurrentThread).ConstructAndDispatchWhenReady(Target);
MyCompletionGraphEvent->DontCompleteUntil(Finalize);
}
// 省略...
};
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
TickGroup
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
GameThread
TaskGraphThread
Tick
Async
Finalize
NullTask
このタスクがあると
他のタスク実行を
邪魔する
TickGroup
の終わり
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
UParticleSystemComponent::UParticleSystemComponent(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
// 省略...
AsyncTickFunction.Target = [this](float DeltaTime) {
ComputeTickComponent_Concurrent();
};
FinalizeTickFunction.Target = [this](float DeltaTime) {
FinalizeTickComponent();
};
// 省略...
}
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
void UParticleSystemComponent::RegisterComponentTickFunctions(bool bRegister)
{
// 省略...
if (bRegister)
{
if (SetupActorComponentTickFunction(&AsyncTickFunction))
{
AsyncTickFunction.AddPrerequisite(this, PrimaryComponentTick);
}
if (SetupActorComponentTickFunction(&FinalizeTickFunction))
{
FinalizeTickFunction.AddPrerequisite(this, AsyncTickFunction);
}
}
else
{
if (AsyncTickFunction.IsTickFunctionRegistered())
{
AsyncTickFunction.UnRegisterTickFunction();
}
if (FinalizeTickFunction.IsTickFunctionRegistered())
{
FinalizeTickFunction.UnRegisterTickFunction();
}
}
// 省略...
}
StartFrame TickGroup
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
GameThread
TaskGraphThread
Tick
Async
Finalize
TickGroup
の終わり
Tick
Async
Finalize
すべての
TickGroup前に
タスクの依存関係の
構築をするようになる
NullTaskがなくなり直接
TickGroupの終わりへ
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
UObjectの数 GCの負荷
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
int32 FEngineLoop::PreInit( const TCHAR* CmdLine )
{
// 省略...
UObject* StartupPackages = LoadPackage(NULL, TEXT("/Game/ResidentAsset"), LOAD_None);
if (GUObjectArray.IsOpenForDisregardForGC())
{
GUObjectArray.CloseDisregardForGC();
}
// 省略...
}
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Total:243350
対応前
Total: 140681
対応後
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
108.76
69.33
83.87
93.83
55.28
67.48
0
20
40
60
80
100
120
A地点 B地点 C地点
ミ
リ
秒
未対応 Disregard for GC
-14.93 ms
-14.05 ms
-16.39 ms
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
[/Script/Engine.GarbageCollectionSettings]
gc.ActorClusteringEnabled=True
// クラスタを作る
virtual bool UHoge::CanBeClusterRoot() const override { return true; }
// クラスタへ入れないようにする
virtual bool UHoge::CanBeInCluster() const override { return false; }
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Total:140681 Total:72345
対応後
対応前
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
93.83
55.28
67.48
84.07
43.71
58.03
0
10
20
30
40
50
60
70
80
90
100
A地点 B地点 C地点
ミ
リ
秒
Disregard for GC のみ GC Cluster + Disregard for GC
-9.76 ms
-11.57 ms
-9.45 ms
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
37.62
24.05
12.9
60.48
59.15 59.35
10.66 10.63 10.8
0
10
20
30
40
50
60
70
未対応 Disregard for GC のみ GC Cluster + Disregard for GC
ミ
リ
秒
PerformReachabilityAnalysis UnhashUnreachable その他
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
class UHoge : public UObject
{
// 省略...
virtual bool IsDestructionThreadSafe() const override { return true; }
// 省略...
};
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
84.07
43.71
58.03
20.52
16.83 18.04
0
10
20
30
40
50
60
70
80
90
A地点 B地点 C地点
ミ
リ
秒
GC Cluster + Disregard for GC すべての改善
-26.88 ms
-63.55 ms
-39.99 ms
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
12.9
10.82
59.35
0.45
10.8 10.25
0
10
20
30
40
50
60
70
GC Cluster + Disregard for GC すべての改善
ミ
リ
秒
PerformReachabilityAnalysis UnhashUnreachable その他
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
1 2 3 4
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
適用前 適用後
Frame Rate -2.42 FPS
Game -2.09 ms
Draw -1.53 ms
適用後は大幅な改善!!
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
22.1468 20.668
6.586
70.564
19.012 18.167
5.458
62.443
0
10
20
30
40
50
60
70
80
Game Thread Render Thread RHI Thread All TaskGraphThreads
ミ
リ
秒
適用なし PGO+LTO
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
-3.1348 ms -2.501 ms
-1.128 ms
-8.121 ms
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
Frame 2
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Frame 1
GameThread
FEngineLoop
Tick
AsyncLoadingThread
FrameSync
Loading
処理
FEngineLoop
Tick
FrameSync
Loading
処理
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Frame 3 Frame 4 Frame 5
Frame 2
Frame 1
GameThread
FEngineLoop
Tick
AsyncLoadingThread
Loading
処理
FEngineLoop
Tick
Loading
処理
FEngineLoop
Tick
Loading
処理
FEngineLoop
Tick
Loading
処理
FEngineLoop
Tick
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
class UHoge : public UObject
{
// 省略...
virtual bool IsPostLoadThreadSafe() const override { return true; }
// 省略...
};
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
OFF ON
12.453秒 6.447秒
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
OFF ON
6.447秒 1.926秒
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Character Movement Component
Skeletal Mesh Component
※ Root Motion と Parallel Evaluate Animation 使用時。Physics / Cloth は除く
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Game Thread で実行される Character Movement Component Tick
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Character Movement Component Tick で実行される Update Animation
(アニメーション時間更新と Root Motion 移動量計算)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Game Thread で実行される Skeletal Mesh Component Tick
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Skeletal Mesh Component Tick からタスクを積まれ、
Task Thread で実行される Evaluate Animation
(アニメーションポーズ評価)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Skeletal Mesh Component Tick からタスクを積まれ、
Evaluate Animation 完了後に実行される
Game Thread で実行される Complate Animation
(Component Transform 更新、Physics Scene 更新、Notify 呼び出し)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Character Movement Component
Skeletal Mesh Component
※ Root Motion と Parallel Evaluate Animation 使用時。Physics / Cloth は除く
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Task Thread で実行される Character Movement Component Tick
Update Animation も同タイミングで並列実行
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Game Thread で実行される Post Character Movement Update
シーンをクラスタ分割して必要なもの同士のみ押し当たりを実行
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Task Thread で実行される Skeletal Mesh Component Tick
※ Tick Manager によるスケジューリング時に投入されるのでオーバーヘッドが少ない
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Game Thread で実行される Skeletal Mesh Component Post Tick
※ Tick Manager によるスケジューリング時に投入されるのでオーバーヘッドが少ない
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
IK はどうする?
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
次のフレームまでに
まとめて実行
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
モーションA
モーションB
クロスフェード
モーションA モーションB
慣性補間
加算
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
直リファレンスは基本的に NG
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
FName name = TEXT("HogeHoge");
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
static const FName StaticName = TEXT("HogeHoge");
FName name = StaticName;
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
UCLASS()
class UMyClass : public UObject
{
GENERATED_BODY()
UPROPERTY()
TArray< FMyStruct > MyDataList;
TMap< int32, FMyStruct > MyDataMap;
virtual void Serialize(FArchive& Ar) override;
};
UCLASS()
class UMyClass : public UObject
{
GENERATED_BODY()
UPROPERTY()
TMap< int32, FMyStruct > MyDataMap;
};
実装イメージ
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
void UMyClass::Serialize(FArchive& Ar)
{
Super::Serialize(Ar);
// MyDataListはデシリアライズされたTArray
if (MyDataList.Num() > 0)
{
if (MyDataMap.Num() == 0)
{
MyDataMap.Reserve(MyDataList.Num());
for (auto& Elem : MyDataList)
{
// TMapへコピー
MyDataMap.Add(Elem.Id, Elem);
}
}
}
}
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
実行時間[ms]
対応前(TMap) 468.87
対応後(TArray) 193.84
約60%の改善
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
実行データ
(UDataTable)
コンバート
・C++クラスの自動生成
・uassetの更新
企画データ(Excel)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
コンバート
・C++クラスの自動生成
・uassetの更新
企画データ(Excel) 実行データ
(独自形式)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
struct MyDataTableRow
{
int32 HitPoint;
int32 MagicPoint;
bool GameFlag;
TArray<int32> SomeDataList;
void SaveOrLoad(FArchive &Ar);
};
void MyDataTableRow::SaveOrLoad(FArchive &Ar)
{
// 保存と読み出し
Ar << HitPoint;
Ar << MagicPoint;
Ar << GameFlag;
Ar << SomeDataList;
}
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
UCLASS()
class UMyDataTable : public UObject
{
GENERATED_BODY()
// 行データ
TMap<FName, FMyDataTableRow> RowDataMap;
virtual void Serialize(FArchive& Ar) override;
};
void UMyDataTable::Serialize(FArchive& Ar)
{
Super::Serialize(Ar);
if (Ar.IsSaving())
{
// 保存
int32 RowNums = RowDataMap.Num();
Ar << RowNums;
for (auto& Elem : RowDataMap)
{
FName RowName;
Ar << Elem.Key;
Elem.Value.SaveOrLoad(Ar);
}
}
else
//… 省略
}
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
データ型 ディスクサイズ[MB]
DataTable 171
独自形式 49.3
約70%の削減
データ型 平均実行時間[ms] 最大実行時間[ms]
DataTable 0.0364 13.305
独自形式 0.0082 4.528
約65%の改善
ファイルサイズの比較
デシリアライズ時間の比較
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
※「MotionBuilder」は Autodesk, Inc. の商標または登録商標です。
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
Shot 1 Shot 2 ….. Shot XX
Shot 1 Shot 2 ….. Shot XX
オーサリング用
シーケンサー
前半
シーケンサー
後半
シーケンサー
(※補足:ショットとは、カットシーンでカメラが切り替わる間の範囲)
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
• カットシーンパート
(再生中に後半シーケンサーをロード)
• チャプター開始
• フリー操作パート
• カットシーン前半部のロード
• 終了のトリガーを受け取り、
次のカットシーン前半部の
ロードを開始
• 以降、同様のゲームサイクル
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
表示切替トリガー
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
時間[s]
Frame 1 Frame 3
Frame 2 Frame 4
Frame 1 Frame 3
Frame 2 Frame 4
アクター表示
表示 表示 表示 表示
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
1フレ表示 分散表示
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.

『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER

  • 1.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI LOGO ILLUSTRATION:©1997 YOSHITAKA AMANO
  • 2.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 3.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. ※「Unreal Engine 4」は Epic games, Inc. の商標または登録商標です。
  • 4.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 5.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 6.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 7.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 8.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 9.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 10.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 11.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 12.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 13.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 14.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 15.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 16.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. いずれかの条件でQAからバグとして報告されてしまう!! 条件1 条件2
  • 17.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. QA プロファイリング担当 修正担当者 (アーティスト・プログラマ)
  • 18.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. -
  • 19.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 20.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 21.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 22.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 23.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 24.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Thread 優先度 アフィニティマスク GameThread TPri_Normal MAKEAFFINITYMASK1(0) RenderingThread TPri_Normal MAKEAFFINITYMASK1(1) RHIThread TPri_Normal MAKEAFFINITYMASK1(2) TaskGraphThread TPri_SlightlyBelowNormal MAKEAFFINITYMASK7(0, 1, 2, 3, 4, 5, 6) PoolThread TPri_Lowest MAKEAFFINITYMASK4(3, 4, 5, 6) AsyncLoadingThread TPri_BelowNormal MAKEAFFINITYMASK5(2, 3, 4, 5, 6)
  • 25.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 26.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 27.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. void UParticleSystemComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) { // 省略... AsyncWork = TGraphTask<FParticleAsyncTask>::CreateTask(nullptr, ENamedThreads::GameThread).ConstructAndDispatchWhenReady(this); ThisTickFunction->GetCompletionHandle()->DontCompleteUntil(AsyncWork); // 省略... } class FParticleAsyncTask { // 省略... void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) { FGraphEventRef Finalize = TGraphTask<FParticleFinalizeTask>::CreateTask(nullptr, CurrentThread).ConstructAndDispatchWhenReady(Target); MyCompletionGraphEvent->DontCompleteUntil(Finalize); } // 省略... };
  • 28.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 29.
    TickGroup © 2021 SQUAREENIX CO., LTD. All Rights Reserved. GameThread TaskGraphThread Tick Async Finalize NullTask このタスクがあると 他のタスク実行を 邪魔する TickGroup の終わり
  • 30.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 31.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. UParticleSystemComponent::UParticleSystemComponent(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { // 省略... AsyncTickFunction.Target = [this](float DeltaTime) { ComputeTickComponent_Concurrent(); }; FinalizeTickFunction.Target = [this](float DeltaTime) { FinalizeTickComponent(); }; // 省略... }
  • 32.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. void UParticleSystemComponent::RegisterComponentTickFunctions(bool bRegister) { // 省略... if (bRegister) { if (SetupActorComponentTickFunction(&AsyncTickFunction)) { AsyncTickFunction.AddPrerequisite(this, PrimaryComponentTick); } if (SetupActorComponentTickFunction(&FinalizeTickFunction)) { FinalizeTickFunction.AddPrerequisite(this, AsyncTickFunction); } } else { if (AsyncTickFunction.IsTickFunctionRegistered()) { AsyncTickFunction.UnRegisterTickFunction(); } if (FinalizeTickFunction.IsTickFunctionRegistered()) { FinalizeTickFunction.UnRegisterTickFunction(); } } // 省略... }
  • 33.
    StartFrame TickGroup © 2021SQUARE ENIX CO., LTD. All Rights Reserved. GameThread TaskGraphThread Tick Async Finalize TickGroup の終わり Tick Async Finalize すべての TickGroup前に タスクの依存関係の 構築をするようになる NullTaskがなくなり直接 TickGroupの終わりへ
  • 34.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 35.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 36.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 37.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 38.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 39.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. UObjectの数 GCの負荷 © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 40.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 41.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. int32 FEngineLoop::PreInit( const TCHAR* CmdLine ) { // 省略... UObject* StartupPackages = LoadPackage(NULL, TEXT("/Game/ResidentAsset"), LOAD_None); if (GUObjectArray.IsOpenForDisregardForGC()) { GUObjectArray.CloseDisregardForGC(); } // 省略... }
  • 42.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Total:243350 対応前 Total: 140681 対応後
  • 43.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 108.76 69.33 83.87 93.83 55.28 67.48 0 20 40 60 80 100 120 A地点 B地点 C地点 ミ リ 秒 未対応 Disregard for GC -14.93 ms -14.05 ms -16.39 ms
  • 44.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. [/Script/Engine.GarbageCollectionSettings] gc.ActorClusteringEnabled=True // クラスタを作る virtual bool UHoge::CanBeClusterRoot() const override { return true; } // クラスタへ入れないようにする virtual bool UHoge::CanBeInCluster() const override { return false; }
  • 45.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 46.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Total:140681 Total:72345 対応後 対応前
  • 47.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 93.83 55.28 67.48 84.07 43.71 58.03 0 10 20 30 40 50 60 70 80 90 100 A地点 B地点 C地点 ミ リ 秒 Disregard for GC のみ GC Cluster + Disregard for GC -9.76 ms -11.57 ms -9.45 ms
  • 48.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 49.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 37.62 24.05 12.9 60.48 59.15 59.35 10.66 10.63 10.8 0 10 20 30 40 50 60 70 未対応 Disregard for GC のみ GC Cluster + Disregard for GC ミ リ 秒 PerformReachabilityAnalysis UnhashUnreachable その他
  • 50.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 51.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. class UHoge : public UObject { // 省略... virtual bool IsDestructionThreadSafe() const override { return true; } // 省略... };
  • 52.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 53.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 54.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 84.07 43.71 58.03 20.52 16.83 18.04 0 10 20 30 40 50 60 70 80 90 A地点 B地点 C地点 ミ リ 秒 GC Cluster + Disregard for GC すべての改善 -26.88 ms -63.55 ms -39.99 ms
  • 55.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 12.9 10.82 59.35 0.45 10.8 10.25 0 10 20 30 40 50 60 70 GC Cluster + Disregard for GC すべての改善 ミ リ 秒 PerformReachabilityAnalysis UnhashUnreachable その他
  • 56.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 57.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 58.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 59.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 60.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 1 2 3 4 © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 61.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 適用前 適用後 Frame Rate -2.42 FPS Game -2.09 ms Draw -1.53 ms 適用後は大幅な改善!! © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 62.
    22.1468 20.668 6.586 70.564 19.012 18.167 5.458 62.443 0 10 20 30 40 50 60 70 80 GameThread Render Thread RHI Thread All TaskGraphThreads ミ リ 秒 適用なし PGO+LTO © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. -3.1348 ms -2.501 ms -1.128 ms -8.121 ms
  • 63.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 64.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 65.
    Frame 2 © 2021SQUARE ENIX CO., LTD. All Rights Reserved. Frame 1 GameThread FEngineLoop Tick AsyncLoadingThread FrameSync Loading 処理 FEngineLoop Tick FrameSync Loading 処理
  • 66.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 67.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 68.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Frame 3 Frame 4 Frame 5 Frame 2 Frame 1 GameThread FEngineLoop Tick AsyncLoadingThread Loading 処理 FEngineLoop Tick Loading 処理 FEngineLoop Tick Loading 処理 FEngineLoop Tick Loading 処理 FEngineLoop Tick
  • 69.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. class UHoge : public UObject { // 省略... virtual bool IsPostLoadThreadSafe() const override { return true; } // 省略... };
  • 70.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 71.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. OFF ON 12.453秒 6.447秒 © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 72.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 73.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. OFF ON 6.447秒 1.926秒 © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 74.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 75.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 76.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 77.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Character Movement Component Skeletal Mesh Component ※ Root Motion と Parallel Evaluate Animation 使用時。Physics / Cloth は除く
  • 78.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Game Thread で実行される Character Movement Component Tick
  • 79.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Character Movement Component Tick で実行される Update Animation (アニメーション時間更新と Root Motion 移動量計算)
  • 80.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Game Thread で実行される Skeletal Mesh Component Tick
  • 81.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Skeletal Mesh Component Tick からタスクを積まれ、 Task Thread で実行される Evaluate Animation (アニメーションポーズ評価)
  • 82.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Skeletal Mesh Component Tick からタスクを積まれ、 Evaluate Animation 完了後に実行される Game Thread で実行される Complate Animation (Component Transform 更新、Physics Scene 更新、Notify 呼び出し)
  • 83.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 84.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Character Movement Component Skeletal Mesh Component ※ Root Motion と Parallel Evaluate Animation 使用時。Physics / Cloth は除く
  • 85.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Task Thread で実行される Character Movement Component Tick Update Animation も同タイミングで並列実行
  • 86.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Game Thread で実行される Post Character Movement Update シーンをクラスタ分割して必要なもの同士のみ押し当たりを実行
  • 87.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Task Thread で実行される Skeletal Mesh Component Tick ※ Tick Manager によるスケジューリング時に投入されるのでオーバーヘッドが少ない
  • 88.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Game Thread で実行される Skeletal Mesh Component Post Tick ※ Tick Manager によるスケジューリング時に投入されるのでオーバーヘッドが少ない
  • 89.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 90.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 91.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 92.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 93.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. IK はどうする?
  • 94.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 95.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 次のフレームまでに まとめて実行
  • 96.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 97.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 98.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 99.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 100.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 101.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 102.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 103.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. モーションA モーションB クロスフェード モーションA モーションB 慣性補間 加算
  • 104.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 105.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 106.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 107.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 108.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 109.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 110.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 直リファレンスは基本的に NG
  • 111.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 112.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 113.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 114.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 115.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 116.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 117.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. FName name = TEXT("HogeHoge");
  • 118.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. static const FName StaticName = TEXT("HogeHoge"); FName name = StaticName;
  • 119.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 120.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. UCLASS() class UMyClass : public UObject { GENERATED_BODY() UPROPERTY() TArray< FMyStruct > MyDataList; TMap< int32, FMyStruct > MyDataMap; virtual void Serialize(FArchive& Ar) override; }; UCLASS() class UMyClass : public UObject { GENERATED_BODY() UPROPERTY() TMap< int32, FMyStruct > MyDataMap; }; 実装イメージ
  • 121.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. void UMyClass::Serialize(FArchive& Ar) { Super::Serialize(Ar); // MyDataListはデシリアライズされたTArray if (MyDataList.Num() > 0) { if (MyDataMap.Num() == 0) { MyDataMap.Reserve(MyDataList.Num()); for (auto& Elem : MyDataList) { // TMapへコピー MyDataMap.Add(Elem.Id, Elem); } } } }
  • 122.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 実行時間[ms] 対応前(TMap) 468.87 対応後(TArray) 193.84 約60%の改善
  • 123.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 124.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 実行データ (UDataTable) コンバート ・C++クラスの自動生成 ・uassetの更新 企画データ(Excel)
  • 125.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. コンバート ・C++クラスの自動生成 ・uassetの更新 企画データ(Excel) 実行データ (独自形式)
  • 126.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. struct MyDataTableRow { int32 HitPoint; int32 MagicPoint; bool GameFlag; TArray<int32> SomeDataList; void SaveOrLoad(FArchive &Ar); }; void MyDataTableRow::SaveOrLoad(FArchive &Ar) { // 保存と読み出し Ar << HitPoint; Ar << MagicPoint; Ar << GameFlag; Ar << SomeDataList; }
  • 127.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. UCLASS() class UMyDataTable : public UObject { GENERATED_BODY() // 行データ TMap<FName, FMyDataTableRow> RowDataMap; virtual void Serialize(FArchive& Ar) override; }; void UMyDataTable::Serialize(FArchive& Ar) { Super::Serialize(Ar); if (Ar.IsSaving()) { // 保存 int32 RowNums = RowDataMap.Num(); Ar << RowNums; for (auto& Elem : RowDataMap) { FName RowName; Ar << Elem.Key; Elem.Value.SaveOrLoad(Ar); } } else //… 省略 }
  • 128.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. データ型 ディスクサイズ[MB] DataTable 171 独自形式 49.3 約70%の削減 データ型 平均実行時間[ms] 最大実行時間[ms] DataTable 0.0364 13.305 独自形式 0.0082 4.528 約65%の改善 ファイルサイズの比較 デシリアライズ時間の比較
  • 129.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 130.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 131.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. ※「MotionBuilder」は Autodesk, Inc. の商標または登録商標です。 © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 132.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 133.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. Shot 1 Shot 2 ….. Shot XX Shot 1 Shot 2 ….. Shot XX オーサリング用 シーケンサー 前半 シーケンサー 後半 シーケンサー (※補足:ショットとは、カットシーンでカメラが切り替わる間の範囲)
  • 134.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. • カットシーンパート (再生中に後半シーケンサーをロード) • チャプター開始 • フリー操作パート • カットシーン前半部のロード • 終了のトリガーを受け取り、 次のカットシーン前半部の ロードを開始 • 以降、同様のゲームサイクル
  • 135.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 136.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 137.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 表示切替トリガー
  • 138.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 139.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 140.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 141.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 時間[s] Frame 1 Frame 3 Frame 2 Frame 4 Frame 1 Frame 3 Frame 2 Frame 4 アクター表示 表示 表示 表示 表示
  • 142.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. 1フレ表示 分散表示
  • 143.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved. © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI
  • 144.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.
  • 145.
    © 2021 SQUAREENIX CO., LTD. All Rights Reserved.