157.3K Views
May 27, 21
スライド概要
動画アーカイブ:
https://www.youtube.com/watch?v=naaDgfKKzFU
講演内容:
本セッションでは、FINAL FANTASY VII REMAKE という大規模タイトルにおいて処理負荷にまつわる様々な問題に対し、どのようなワークフローで取り組んだのか、どのような対応を行ったのかという事例について説明します。まずはワークフローやプロファイリングツールを紹介し、その後にローレベル、アニメーション、カットシーンやレベル制御等で行った具体的な対応について説明します。
講演者:
波能 智人 (株式会社スクウェア・エニックス リードテクニカルプログラマー)
原 龍 (株式会社スクウェア・エニックス リードアニメーションプログラマー)
田原 篤史 (株式会社スクウェア・エニックス ゲームプログラマー)
UNREAL FEST EXTREME 2021 SUMMER公式サイト:
https://unrealengine.jp/unrealfest/timetable/game-squareenix.html
#ue4fest
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
© 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.
条件1 条件2 いずれかの条件でQAからバグとして報告されてしまう!! © 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.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
TickGroup GameThread TaskGraphThread Tick TickGroup の終わり Finalize Async NullTask このタスクがあると 他のタスク実行を 邪魔する © 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(); } } // 省略... } © 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
StartFrame TickGroup Tick GameThread Tick Async Finalize Finalize TaskGraphThread Async すべての TickGroup前に タスクの依存関係の 構築をするようになる NullTaskがなくなり直接 TickGroupの終わりへ © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. 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.
© 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: 140681 Total:243350 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
-14.93 ms 120 -16.39 ms 108.76 100 -14.05 ms 93.83 83.87 80 69.33 ミ リ 秒 60 67.48 55.28 40 20 0 A地点 B地点 未対応 Disregard for GC © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. C地点
// クラスタを作る virtual bool UHoge::CanBeClusterRoot() const override { return true; } // クラスタへ入れないようにする virtual bool UHoge::CanBeInCluster() const override { return false; } [/Script/Engine.GarbageCollectionSettings] gc.ActorClusteringEnabled=True © 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.
-9.76 ms 100 90 93.83 -9.45 ms 84.07 -11.57 ms 80 67.48 70 60 ミ リ 秒 58.03 55.28 50 43.71 40 30 20 10 0 A地点 B地点 Disregard for GC のみ GC Cluster + Disregard for GC © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. C地点
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
70 60.48 59.35 59.15 60 50 40 ミ リ 秒 30 37.62 24.05 20 10.66 10.63 12.9 10.8 10 0 未対応 Disregard for GC のみ PerformReachabilityAnalysis UnhashUnreachable © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. GC Cluster + Disregard for GC その他
© 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.
-63.55 ms 90 84.07 -39.99 ms 80 -26.88 ms 70 58.03 60 ミ 50 リ 秒 40 43.71 30 20.52 16.83 20 18.04 10 0 A地点 B地点 GC Cluster + Disregard for GC C地点 すべての改善 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
70 59.35 60 50 40 ミ リ 秒 30 20 12.9 10.8 10.82 10.25 10 0.45 0 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 © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. 4
適用前 適用後 © 1997, 2020 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI Frame Rate Game Draw -2.42 FPS -2.09 ms -1.53 ms 適用後は大幅な改善!! © 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
-8.121 ms 80 70 70.564 60 62.443 50 ミ リ 40 秒 -3.1348 ms -2.501 ms 30 20 -1.128 ms 22.1468 19.012 20.668 18.167 10 6.586 0 Game Thread Render Thread 適用なし 5.458 RHI Thread PGO+LTO © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. All TaskGraphThreads
© 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.
Frame 1 GameThread AsyncLoadingThread FEngineLoop Tick FrameSync Frame 2 FEngineLoop Tick Loading 処理 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. FrameSync Loading 処理
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
GameThread AsyncLoadingThread Frame 1 Frame 2 Frame 3 Frame 4 Frame 5 FEngineLoop Tick FEngineLoop Tick FEngineLoop Tick FEngineLoop Tick FEngineLoop Tick Loading 処理 Loading 処理 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. Loading 処理 Loading 処理
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.
ON OFF © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI 12.453秒 6.447秒 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
OFF ON © 1997, 2021 SQUARE ENIX CO., LTD. All Rights Reserved. CHARACTER DESIGN:TETSUYA NOMURA/ROBERTO FERRARI 6.447秒 1.926秒 © 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 モーションA モーションB © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. モーションB 加算
© 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()
UCLASS()
class UMyClass : public UObject
{
GENERATED_BODY()
UPROPERTY()
TArray< FMyStruct > MyDataList;
UPROPERTY()
TMap< int32, FMyStruct > MyDataMap;
TMap< int32, FMyStruct > MyDataMap;
virtual void Serialize(FArchive& Ar) override;
};
};
© 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 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. 約60%の改善
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
企画データ(Excel) コンバート ・C++クラスの自動生成 ・uassetの更新 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. 実行データ (UDataTable)
企画データ(Excel) コンバート ・C++クラスの自動生成 ・uassetの更新 © 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
Ar
Ar
Ar
保存と読み出し
<< HitPoint;
<< MagicPoint;
<< GameFlag;
<< 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.
デシリアライズ時間の比較 データ型 平均実行時間[ms] 最大実行時間[ms] DataTable 0.0364 13.305 独自形式 0.0082 4.528 ファイルサイズの比較 データ型 ディスクサイズ[MB] DataTable 171 独自形式 49.3 約70%の削減 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. 約65%の改善
© 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 ※「MotionBuilder」は Autodesk, Inc. の商標または登録商標です。 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.
オーサリング用 シーケンサー 前半 シーケンサー Shot 1 Shot 1 後半 シーケンサー Shot 2 ….. Shot XX 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.
アクター表示 Frame 1 Frame 2 表示 表示 表示 表示 Frame 1 Frame 2 Frame 3 Frame 4 Frame 3 © 2021 SQUARE ENIX CO., LTD. All Rights Reserved. Frame 4 時間[s]
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.
© 2021 SQUARE ENIX CO., LTD. All Rights Reserved.