『野狗子: Slitterhead』の開発事例【UNREAL FEST 2024 TOKYO】

11.3K Views

November 14, 24

スライド概要

本講演へのアンケートにご協力をお願いします:
https://docs.google.com/forms/d/e/1FAIpQLSeeq3O53ausrSoHXHluKskiabOlucYgXBajAhVQ2IbL__Km7Q/viewform
(11月22日〆)


Youtube URL:https://youtu.be/SFs6ATg0QwY


講演内容:
■Gameplay Ability Systemで作るプレイヤーアクション:松下
Gameplay Ability Systemの基本的な仕組みと『野狗子: Slitterhead』での実例の紹介。
■UE環境でのカットシーン制作:スティーブン
シーケンサーを使用したカットシーン制作フローについて。
外部協力会社との共同制作用の別プロジェクト運用についても紹介。

講演者:
松下 達也(プログラマー(株式会社ボーカゲームスタジオ))
Stephen Oberheim Jr.(カットシーンテクニカルアーティスト(株式会社ボーカゲームスタジオ))

株式会社ボーカゲームスタジオについてはこちら:
https://bokehgamestudio.co.jp/en/

UNREAL FEST 2024 TOKYO 公式サイト:
https://unrealengine.jp/unrealfest/2024/

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

「野狗子:Slitterhead」の開発事例 UNREAL FEST 2024 TOKYO #uefest

2.

会社紹介 ボーカゲームスタジオ Bokeh Game Studio 『サイレントヒル』、『SIREN』シリーズ、『GRAVITY DAZE』シリーズの生みの親である 外山圭一郎が2020年8月に設立したゲーム開発スタジオです。

3.

自己紹介 マツシタ タツヤ 松下 達也 2021年1月 ボーカゲームスタジオ入社 『野狗子: Slitterhead』ではゲームプログラマーとして参加。 プレイヤーキャラクターの制御を中心としたゲームプレイに関わる分野を担当しています。

4.

「野狗子:Slitterhead」 Gameplay Ability Systemで作るプレイヤーアクション Tatsuya Matsushita

5.

本セッションでは… Gameplay Ability System について 「野狗子:Slitterhead」での活用事例を 交えながら紹介いたします。

6.

TOPICS ①「野狗子:Slitterhead」について ② Gameplay Ability System について ③ Gameplay Ability System で作る 「野狗子:Slitterhead」のプレイヤーアクション ④ まとめ

7.

1 「野狗子:Slitterhead」について ゲームの説明 7

8.

ゲーム全体の概要

9.

「野狗子:Slitterhead」について 発売日:2024年11月8日(金) ジャンル:アクションアドベンチャー エンジン:Unreal Engine 5 開発期間:プロト1年+プロダクション3年=4年 概要:猥雑さを色濃く残す街「九龍」を舞台に、 記憶と肉体を失った「憑鬼」となって、 人間に擬態する怪物「野狗子」殲滅に奔走する バトルアクションアドベンチャー。

10.

『憑鬼』とは プレイヤーは『憑鬼』という実体を持たない思念体であるため、 人間の体に『憑依』することで、現実世界へと物理的干渉をします。 この能力によって多数のプレイアブルキャラクターを 切り替えながら操作することができます。

11.

プレイアブルキャラクター:稀少体 「憑鬼」と高いシンクロニシティを持つヒーロー的な存在 全8種類でスキルなどの固有能力を持っている

12.

プレイアブルキャラクター:モブ 街中に存在する一般人で稀少体と比べると体力も攻撃力も低い 大きく分けて男女の2種類で外見のバリエーションが多数ある

13.

野狗子 人に擬態して脳を喰らう非常に強力な怪物 戦闘状態の野狗子に通常の人間の身体能力で対抗するのは困難

14.

プレイヤーアクション

15.

プレイヤーアクションの種類 ● 移動アクション ○ 歩き/走り/ダッシュ ○ 乗り越え/よじ登り ○ フックアクション ● 近接攻撃 ○ コンボ攻撃 ○ 強攻撃 ○ ダッシュ攻撃などの特殊攻撃 ● 防御 ○ 構え ○ 弾き ○ 回避 ● スキル ○ アクティブスキル ○ パッシブスキル ● バフ/デバフ ○ プレイヤーのスキルによるバフ ○ 敵の攻撃によるデバフ ● リアクション ○ 敵の攻撃によるダメージリアクション ○ モブや敵との衝突リアクション ● 特殊アクション ○ 回復/蘇生 ○ インタラクション

16.

プレイヤーアクションの種類 移動アクション 近接攻撃 防御 スキル バフ/デバフ × 稀少体 8種類 モブ 2種類 リアクション 特殊アクション 膨大な量のアクション!

17.

プレイヤーアクションを実装するときの課題 ● アクションの量産 ○ 複数人での作業時のファイルの競合をなるべく避けたい ○ 類似するアクションを効率的に実装したい ジュリーのコンボ攻撃1段目 ≒ アレックスのコンボ攻撃1段目

18.

プレイヤーアクションを実装するときの課題 ● アクションの同士の依存関係 ○ アクションAの実行中にアクションBの実行をブロックしたい ○ アクションAの実行をアクションCの実行でキャンセルしたい 攻撃アクション Block Cancel 回避アクション 攻撃アクション ダメージリアクション

19.

プレイヤーアクションを実装するときの課題 これらの問題を解決できる Gameplay Ability System を 開発初期の段階で採用しました。

20.

2 Gameplay Ability Systemについて フレームワークの概要 20

21.

Gameplay Ability Systemについて ● アクションを構築するためのフレームワーク ○ 攻撃、アビリティ、ダメージリアクション、バフ/デバフなどを実装するためのプラグイン ○ RPG、MOBAなど向けに設計されているが、様々なプロジェクトに適用可能 ○ マルチプレイヤー ゲームのレプリケーションもサポート ● 「Fortnite」「Atomic Heart」「Paragon」などでの利用実績 ○ 既に複数タイトルでリリースされているので安心して利用できる https://dev.epicgames.com/documentation/ja-jp/unreal-engine/understanding-the-unreal-engine-gameplay-ability-system https://www.unrealengine.com/en-US/tech-blog/unreal-s-gameplay-ability-system-is-at-the-heart-of-atomic-heart

22.

GameplayAbilitySystemについて Gameplay Ability Systemの構成要素 ● Ability System Component ● Gameplay Ability ● Gameplay Attribute ● Gameplay Cue ● Gameplay Effect ● Gameplay Tag

23.

GameplayAbilitySystemについて Gameplay Ability Systemの構成要素 ● Ability System Component ● Gameplay Ability ● Gameplay Attribute ● Gameplay Cue ● Gameplay Effect ● Gameplay Tag

24.

Ability System Component GameplayAbilitySystemを使用する際に必須となるComponent ● このComponentを介してGameplay Ability Systemとのやり取りをする ● ActorにC++上でComponentを持たせる必要がある

25.

Gameplay Ability 特定のアクションやスキルを実装するためのBPのアセット ● 実行内容や発動条件の定義 ○ アニメーションやエフェクトの再生などのロジック ○ Gameplay Tagによるキャンセルやブロックなどの設定 ● データドリブンな設計 ○ 1つのアクションごとに1つのアセットで実装する ○ アクションごとにアセット管理できるので整理しやすい = 回避アクション

26.

Gameplay Tag Gameplay AbilityやActorやイベントに対して設定する階層的なタグ ● 階層構造になっている ○ 開発者で任意の構造にすることができる ○ 例)回避のGameplay AbilityのTagはAbility.Action.Dodge ● 主な用途 ○ Gameplay Abilityの識別 ○ Gameplay Abilityをブロックする条件 ○ Gameplay Abilityをキャンセルする条件 ○ Actorの状態管理 ○ イベントの送受信

27.

3 Gameplay Ability Systemで作る 「野狗子:Slitterhead」のプレイヤーアクション Gameplay Ability Systemの活用事例 27

28.

Gameplay Tagの設計

29.

Gameplay Tagの設計 プロジェクト全体でのGameplay Tagの設計 プレイヤーとエネミーとモブでGameplay Tagsの階層を分けた ● 階層を分けた理由 ○ 実装者のセクションが異なるので競合を避けたい →プレイヤー用 ○ アクションの重複が少ない →エネミー用 ● 共通のタグを使用するという選択もあり得る ○ アクションの構成が類似している場合 ○ 実装者間で綿密な連携と設計ができる場合 →モブ用

30.

Gameplay Tagの設計 プレイヤーセクションでのGameplay Tagの設計  Action:主に移動や戦闘時に使用するGameplay AbilityのTag  Block:特定のGameplay AbilityをブロックするためのTag  Buff:バフのGameplay AbilityのTag  Debuff:デバフのGameplay AbilityのTag  Event:イベントの送受信に使用するTag  PassiveSkill:パッシブスキルのGameplay AbilityのTag  Reaction:リアクションのGameplay AbilityのTag  Skill:アクティブスキルのGameplay AbilityのTag  State:Actorの状態を示すためのTag

31.

Gameplay Tagの設計 プレイヤーセクションでのGameplay Tagの設計  Action:主に移動や戦闘時に使用するGameplay AbilityのTag  Block:特定のGameplay AbilityをブロックするためのTag  Buff:バフのGameplay AbilityのTag  Debuff:デバフのGameplay AbilityのTag  Event:イベントの送受信に使用するTag  PassiveSkill:パッシブスキルのGameplay AbilityのTag  Reaction:リアクションのGameplay AbilityのTag  Skill:アクティブスキルのGameplay AbilityのTag  State:Actorの状態を示すためのTag

32.

Gameplay Tagの設計 Action:主に移動や戦闘時に使用するGameplay AbilityのTag Gameplay AbilityのAbility Tagsに設定し、キャンセルやブロックの条件として使う ● Ability Tags ○ Gameplay Abilityを識別するためのTag ○ 例)回避はAbility.Action.Dodge、ガードはAbility.Action.Guard ● Cancel Abilities With Tag ○ 実行時にこのTagがAbility Tagsに設定されている Gameplay Abilityをキャンセルする ○ 例)回避はガードなどをキャンセルする ● Block Abilities With Tag ○ 実行中にこのTagがAbility Tagsに設定されている Gameplay Abilityをブロックする ○ 例)回避中はガードをブロックする 回避のGameplay Abilityの設定

33.

Gameplay Tagsの設計 Block:特定のGameplay AbilityをブロックするためのTag Gameplay AbilityのActivation Owned Tagsに設定し、ブロックの条件として使う ● Activation Owned Tags ○ Gameplay Abilityの実行中にActorに付与するTag ○ 例)回避をブロックするTagは(Ability.Block.Dodge) ● Activation Blocked Tags ○ ActorがこれらのTagを持っている場合ブロックされる ○ 例)回避中は回避をブロックする(Ability.Block.Dodge) 回避のGameplay Abilityの設定

34.

Gameplay Tagsの設計 スキルキャンセルのイベント送受信 Event:イベントの送受信に使用するTag イベントの送受信用の関数でイベントを識別するために使う ● Send Gameplay Event ○ Gameplay Abilityに対してイベントを送信する関数 ○ 特定のGameplay Abilityに対して送信される ● Send Gameplay Event to Actor ○ Actorに対してイベントを送信する関数 ○ すべてのGameplay Abilityに対して送信される ● Wait Gameplay Event ○ Gameplay Abilityでイベントを受信する関数 ○ 一度だけ受信するか、何回でも受信するか選べる

35.

基本的なGameplay Abilityの実行手順

36.

基本的なGameplay Abilityの実行手順 Phase1 Gameplay Abilityの付与 ActorやComponent Gameplay Ability Give Ability Phase2 Gameplay Abilityの発動 Phase3 Gameplay Abilityの実行 Try Activate Phase5 Gameplay Abilityの後処理 Phase4 Gameplay Abilityの終了 End Ability On Activate Ability End Ability On End Ability 関数 イベント

37.

基本的なGameplay Abilityの実行手順 ActorやComponent Gameplay Ability Phase1 Gameplay Abilityの付与 Phase2 Gameplay Abilityの発動 Give Ability Try Activate Phase3 Gameplay Abilityの実行 Phase4 Gameplay Abilityの終了 Phase5 Gameplay Abilityの後処理 End Ability On Activate Ability End Ability On End Ability 関数 イベント

38.

基本的なGameplay Abilityの実行手順 Phase1. Gameplay Abilityの付与 ● Give Ability ○ Gameplay Abilityを付与するだけ ○ 繰り返し発動する事ができる ○ 近接攻撃や回避など使用頻度の高いアクションに使用 ● Give Ability And Activate Once ○ Gameplay Abilityを付与して即座に発動 ○ Gameplay Abilityが終了したら削除される ○ ダメージリアクションなど使い捨てのアクションに使用 ActorやComponentで呼び出す

39.

基本的なGameplay Abilityの実行手順 ActorやComponent Gameplay Ability Phase1 Gameplay Abilityの付与 Phase2 Gameplay Abilityの発動 Give Ability Try Activate Phase3 Gameplay Abilityの実行 Phase4 Gameplay Abilityの終了 Phase5 Gameplay Abilityの後処理 End Ability On Activate Ability End Ability On End Ability 関数 イベント

40.

基本的なGameplay Abilityの実行手順 Phase2. Gameplay Abilityの発動 ● Try Activate Ability ○ Gameplay Ability Spec Handleを指定して発動 ● Try Activate by Tag ○ Gameplay Tagを指定して発動 ● Try Activate by Class ○ Gameplay Abilityのクラスを指定して発動 ○ 主にこの関数を使用していた ActorやComponentで呼び出す

41.

基本的なGameplay Abilityの実行手順 ActorやComponent Gameplay Ability Phase1 Gameplay Abilityの付与 Phase2 Gameplay Abilityの発動 Give Ability Try Activate Phase3 Gameplay Abilityの実行 Phase4 Gameplay Abilityの終了 Phase5 Gameplay Abilityの後処理 End Ability On Activate Ability End Ability On End Ability 関数 イベント

42.

基本的なGameplay Abilityの実行手順 Phase3. Gameplay Abilityの実行 ● On Activate Ability ○ Gameplay Abilityが正常に発動した際に呼ばれる ○ アニメーションやエフェクトの再生などアクションに必要な処理を行う Gameplay Abilityのイベント

43.

基本的なGameplay Abilityの実行手順 ActorやComponent Gameplay Ability Phase1 Gameplay Abilityの付与 Phase2 Gameplay Abilityの発動 Give Ability Try Activate Phase3 Gameplay Abilityの実行 Phase4 Gameplay Abilityの終了 Phase5 Gameplay Abilityの後処理 End Ability On Activate Ability End Ability On End Ability 関数 イベント

44.

基本的なGameplay Abilityの実行手順 Phase4. Gameplay Abilityの終了 ● End Ability ○ Gameplay Abilityを終了させる関数 ○ アニメーションの再生終わりなど任意のタイミングで呼び出し ● 他のGameplay Abilityの発動によるキャンセル ○ Cancel Abilities with Tagに設定されたTagを持つ Gameplay Abilityがキャンセルされる ○ 内部的にEnd Abilityが呼び出される Gameplay Ability、もしくはActorや Componentで呼び出す

45.

基本的なGameplay Abilityの実行手順 ActorやComponent Gameplay Ability Phase1 Gameplay Abilityの付与 Phase2 Gameplay Abilityの発動 Give Ability Try Activate Phase3 Gameplay Abilityの実行 Phase4 Gameplay Abilityの終了 Phase5 Gameplay Abilityの後処理 End Ability On Activate Ability End Ability On End Ability 関数 イベント

46.

基本的なGameplay Abilityの実行手順 Phase5. Gameplay Abilityの後処理 ● On End Ability ○ Gameplay Abilityが終了した際に呼ばれる ○ アニメーションの強制終了や終了イベントの送信などの後処理 Gameplay Abilityのイベント

47.

Gameplay Abilityの量産

48.

Gameplay Abilityの量産 キャラクター毎の実装 近接攻撃のクラス継承を使ったバリエーション対応 ● ベースの実装 ○ 基本的なロジック ○ カスタマイズ可能なパラメータの定義 ● 攻撃タイプ毎の実装 ○ Gameplay Tagの設定 ○ 親クラスで定義されたパラメータの設定 ● キャラクター毎の実装 ○ アニメーションアセットの差し替え ○ 親クラスで定義されたパラメータの設定 攻撃タイプ毎の実装 ベースの実装

49.

Gameplay Abilityの量産 近接攻撃のベースの実装 ● 近接攻撃のロジックはすべてここに集約されている ● アニメーション再生、Motion Warpingの設定、パラメータの設定など基本的な処理

50.

Gameplay Abilityの量産 近接攻撃の攻撃タイプ毎の実装 Gameplay AbilityのTagの設定 ● Ability Tags ○ 攻撃タイプを識別するために設定 ○ 例)ダッシュ攻撃はAbility.Action.Melee.Dash ● Activation Required Tagの設定 ○ 攻撃を実行するための条件として設定 ○ 例)ダッシュ攻撃はAbility.State.Move.Dashを Actorが持っていると実行できる ● Activation Blocked Tagsの設定 ○ 他の攻撃タイプとの競合を避けるための条件として設定 ○ 例)ダッシュ攻撃はAbility.State.FallをActorが 持っているとブロックされる

51.

Gameplay Abilityの量産 キャラクター毎の実装 ● アニメーションの差し替え ● 近接攻撃の性能やMotion Warpingなどのパラメータ調整

52.

Gameplay Abilityの量産 Gameplay Abilityの総数:380個 ● 移動アクション:11個 ● 近接攻撃:151個 ● 防御:36個 ● スキル:51個 ● バフ:12個 ● デバフ:16個 ● リアクション:64個 ● 特殊アクション:39個

53.

4 まとめ 本セッションの振り返り 53

54.

GameplayAbilitySystemを活用して感じたメリット ● 効率的にアクションを実装できる ● 複数人での作業にも向いている ● システムの実装や整備にコストを抑えられる →とても汎用性が高く使いやすいシステムだった。 これからも継続的に利用していきたい。

55.

GameplayAbilitySystemを使う際の注意点 ● システムが複雑なので学習コストが少し高め ● ある程度のC++の知識が必要 ● Gameplay Tagsの設定が重要 →調べながら動かすことが一番理解につながります。 気になる方はぜひ一度試してみてください!

56.

参考資料 ● 公式ドキュメント ○ ゲームプレイ アビリティ システム ● YouTube ○ Using the Gameplay Ability System | Unreal Fest Europe 2019 | Unreal Engine ○ Exploring the Gameplay Ability System (GAS) with an Action RPG | Unreal Fest 2022 ● Gameplay Ability Systemの導入 ○ UE4 BPプロジェクトに Gameplay Ability System を導入する方法 ● サンプルプロジェクト ○ Action RPG ○ GASShooter

57.

Thank you for listening!

58.

「野狗子:Slitterhead」 UE環境でのカットシーン制作 Stephen Oberheim Jr.

59.

自己紹介 オーバーハイム ジュニア スティーブン Stephen Oberheim Jr. 2022年9月 ボーカゲームスタジオ入社 野狗子:Slitterheadではカットシーンテクニカルアーティストとして参加。 カットシーンにおいては演出やアセット作成から管理、DCC・UEのパイプラインツール開発や 実装など担当しています。

60.

TOPICS ①制作環境 ②アセットの準備 ③各フェーズの紹介

61.

制作環境 61

62.

制作環境 ムービーの種類について 本作では大きく分けて3つのムービーシーンがあります。 ・スクリプトデモ イベント班作成、簡易イベント(アセットはモーション班作成) ・イベントシーン モーション班作成、リアルタイムのムービー ・カットシーン(今回はこちらについて) カットシーン班作成、UEで作成したプリレンダムービー

63.

制作環境 UEプロジェクトについて UE5.2.1、本編と共通のエンジン、カットシーンは別uprojectで作成。 ソースコントロールはSVNを使用。 基本的には従来のカットシーンと大きく作り方は変えず、 シーケンサーで作成をしています。 ほとんどのカットシーンはリアルタイムでは動くようにはなってますが、 レンダリング前提なので最適化はしてません。 とは言え無駄に重いデータになるような作り方は避けてます。

64.

制作環境 プリレンダにした経緯 本作では外部協力会社との制作が前提でした。 外部会社と共同制作との事でアセットのやり取りが多くなると予想していました。 そのため本編のUEプロジェクトとは分けて作業する事にしました。 最適化や実装コストを抑えれるのと外部作業者をメインで作成するカットシーンは映像素材 としてゲームに入れ込む方が無難と判断しました。

65.

制作環境 使用DCCツールについて ・MotionBuilder 2022 ・Maya 2022(社内外のツールサポート) ・Houdini 19.5 ・Adobe After Effects 2024

66.

制作環境 カットシーン班の構成 ・カットシーンディレクター ・カットシーンTA ・カットシーンアーティスト ・カットシーンPM 社内アート班からはUI、コンセプトアート、キャラクター、背景、モーション、エフェクトチーム からも協力していただきました。 実作業者は社内アート班と外部であわせてピーク20人前後でした。

67.

制作環境 外部会社用の制作環境 データ提供 フィードバック アセット管理 仕様書更新 スケジュール確認・更新 納品データ チェックムービー アセット更新 仕様書確認 スケジュール確認・更新 社内 外部 ■チャットツール(Google Workspace) ・チャット:Google Chat ・データの受け渡し:SVN+Google Drive ・スケジュール、アセット管理:Google Sheets

68.

制作環境 外部会社用の制作環境 ■連絡について ・週1回:定例会議で両社スケジュールのすり合わせ、アセットや進捗の確認。 ・いつでもOK:両社作業者、各リードやディレクター陣に連絡できるスペースの用意。 ・いつでもOK:Google Meetでの通話も可能。 ■チェックや納品連絡 ①Google Driveに関連データのアップ ②Google Chatのスペースへ連絡 ③Google Sheetsのステータス変更。

69.

制作環境 外部会社用の制作環境 ■データの受け渡しについて ・Google Drive →作業データ、CSV、FBXデータ、チェックやOKムービー Maya作業データやExportツールによって出力されたデータはGoogle Drive経由での納品。 ・SVN →リポジトリA:アートアセット DCC作業データ(Maya用リグ、背景、キャラデータなど)※更新のみ可、読み取り専用 →リポジトリB:ゲームアセット Unreal関連データ(カットシーン専用uproject)※更新・コミット可

70.

制作環境 外部会社用の制作環境 ■リポジトリAについて(アートアセット) 外部スタッフ用にはカットシーン専用ディレクトリーを用意し、アクセス権をCutsceneフォルダ以下に制限しています。 アセットの更新をカットシーン作業のタイミングに合わせる為になります。 社内スタッフが使用しているアセットや階層をCutscene以下のディレクトリーにバッチでコピーします。(必要アセットのみ) カットシーン専用アセットもこちらのディレクトリーに追加していきます。 テクスチャやリファレンスの参照があるアセットに関してはバッチでCutscene以下のパスに再設定しています。 リポA リポA/Characters リポA/Cutscene リポA/Cutscene/Characters Characters Enemy Characters Enemy Motion Main Motion Main Cutscene Env

71.

制作環境 外部会社用の制作環境 ■リポジトリBについて(ゲームアセット) エンジンはゲーム本編と同じ物を使用しますが、uprojectは別途カットシーン用に用意されています。 外部スタッフはリポBの共通エンジンフォルダとCutsceneフォルダのみのアクセスになります。 リポAと違いリポBでは直接UE内での作業をする為、コミットも行います。 コミットはカットシーンプロジェクトフォルダ内の担当CS毎に分けて行います。 (/Game/Cutscene/以下のみのアセット) リポB リポB/Game リポB/Cutscene 共通エンジン Game用 uproject カットシーン用 uproject Game アクセス権なし Cutscene アクセス権あり ■社内外の更新対象アセットについて Subversion(サーバー)に設定されたアカウントのアクセス 権によって取得可能データを分けていただきました。 大きいデータのやり取りが多い為、 カットシーン関係者以外には取得されないようにしました。 アクセス可能なパターンとして3つ用意されました。 ・外部スタッフ:カットシーン環境のみ ・内部ゲームスタッフ:ゲーム環境のみ ・内部カットシーンスタッフ:ゲーム+カットシーン環境

72.

外部会社が触れる範囲をちゃんと決める。 実現するには管理者も必要。

73.

アセットの準備 73

74.

アセットの準備 インゲームアートアセットの使用:マイグレート ■UEアセットのマイグレート マイグレートはアートアセットのみ、ゲームロジックを含むBPなどは対象外。 その為ゲーム本編で使用しているマップなどはそのままマイグレートは行わず、 アートアセットのみが含まれているサブレベルのマイグレートをしました。 共通エンジン ゲーム本編uproject マイグレート カットシーン専用uproject

75.

アセットの準備 インゲームアートアセットの使用:マイグレート ■UEアセットのマイグレート マイグレート時に対象アセットをcsvに登録しています。 バッチでカットシーンプロジェクトとゲームプロジェクトのアセットのリビジョンの確認が可能です。 マイグレートのAsset Reportの表示の拡張をしています。 マイグレートするのに危険があるアセットのアイコンが変更されるようになっています。 ・マイグレートしたときに対象ファイルが最新版ではない(!) ・ローカルでチェックアウト中(✓) ・指定されたパス以下:UI、BP、EUWやカットシーンには必要ないアセットなど( )

76.

アセットの準備 インゲームアートアセットの使用:マイグレート ■マイグレートアセット運用 マイグレートされたアセットを直接編集するのはNGです。 定期的にゲーム本編のプロジェクトからマイグレートを行うので編集しても上書きされます。 マテリアルやスケルタルメッシュに変更を加えたい場合はカットシーンアセット用ディレクトリ ーにへコピーしてから編集をします。 コピーしたアセットは必ずリネームします。同名アセットは避けたい為。

77.

アセットの準備 インゲームアートアセットの使用:UE→Maya ■背景データについて 背景データは基本的にUE内で配置される為、 Mayaでレイアウト作業を行う際にUEからFBXの出力が必要です。 ■FBX出力 全マップにカットシーンの演技エリア内にアクターが配置されている為、 それらの座標をcsvに登録しています。演技エリア周辺の背景アクターを取得し、出力をします。 UE(EUW+Python)→ mayabatch(.bat) → クリーンアップ処理(.py) 出力時にmayabatchで背景データのクリーンアップを合わせて行います。 不要なLODの削除やマテリアルとテクスチャの割り当てをします。 クリーンアップ後、maya binaryファイルとして保存します。

78.

アセットの準備 インゲームアートアセットの使用:UE→Maya ■テクスチャの割り当て FBX出力のタイミングでマテリアルに設定されている各エレメントのベースカラーのテクスチャもあわせて出力しました。 あわせて割り当てができるようにマテリアルと繋がっているテクスチャをそれぞれcsvに登録します。 UEで使用しているテクスチャは大きいのでアスペクト比は維持しつつ幅を512にリサイズしたテクスチャの保存しなおしてます。 UE Maya

79.

アセットの準備 インゲームアートアセットの使用:UE→Maya ■演技エリアからの出力 演技エリア毎に出力したい範囲の指定もできるようにしました。 Mayabatchからでもさらに範囲を削れるようにしてます。(必要であれば) 以下をもとにアクターのクラスで選択される物をフィルター: unreal.EditorActorSubsystem().get_all_level_actors() static_class().get_name()

80.

Mayaのシーンが重い。 メッシュのリダクションや出力範囲をさらに絞りました。

81.

アセットの準備 インゲームアートアセットの使用:UE(Game)→UE(Cutscene) ■カットシーン用レベルの作成:サブレベルの再利用 Maya用のFBX出力時にPLで使用しているサブレベルもcsvにまとめておきます。 csvをもとにカットシーンプロジェクトのレベルを作成する際に使用します。 CSV

82.

アセットの準備 インゲームアートアセットの使用:UE(Game)→UE(Cutscene) ■カットシーン用レベルの作成:専用サブレベル ゲームプロジェクトで使用しているサブレベルにはBPなどのマイグレート対象外の物も含まれます。 その為別途背景アクター取得しcsvに登録します。 BPアクター内の背景オブジェクトのワールド座標と使用しているStatic Meshを取得します。 カットシーンプロジェクトではcsvをもとに別途専用サブレベルを作成し、 スタティックメッシュの再配置を行いました。 Unreal Game CSV BPアクター Unreal Cutscene

83.

アセットの準備 アセット管理 CSV ■アセット管理データ アクター名 リグのパス リファレンス名 など カットシーン毎に使用アセットがリストアップされているcsvを用意してます。 Maya作業者はシーン構築ツールを使用して必要アセットの読み込みを行います。 ツール以外でのアセットなどのリファレンス読み込みは基本NGです。 カットシーン毎のアセットリストはUEのシーン構築でも使用します。 CSV Maya UE Google Sheets

84.

アセットの準備 アセット管理 ■シーン構築ツール csvデータをもとに必要な アセットの読み込みを行います。

85.

各フェーズ紹介 85

86.

各フェーズ紹介 プリプロ シナリオ 字コンテ Vコンテ プレビズ 絵コンテ イメージボード モーキャプ DCC(Maya作業) レイアウト サウンド仮当て アニメーション フェイシャル 揺れ物 Unreal作業 UEシーン実装 アニメーション データ更新 揺れ物 エフェクト ライティング フェイシャル 最終調整 レンダリング コンポジット サウンドFIX 字幕調整 ゲーム用データ コンバート 完成 ■Maya ・レイアウト ・アニメーション ・フェイシャル ・揺れ物 ■Unreal ・UEシーン実装 ・アニメーションデータ更新 ・エフェクト ・ライティング ・揺れ物 ・フェイシャル

87.

各フェーズ紹介 プリプロ シナリオ 字コンテ Vコンテ プレビズ 絵コンテ イメージボード モーキャプ DCC(Maya作業) レイアウト サウンド仮当て アニメーション フェイシャル 揺れ物 Unreal作業 UEシーン実装 アニメーション データ更新 揺れ物 フェーズ1 フェーズ2 フェーズ3 エフェクト ライティング フェイシャル フェーズ4 最終調整 レンダリング コンポジット サウンドFIX 字幕調整 ゲーム用データ コンバート 完成 ■Maya ・レイアウト ・アニメーション ・フェイシャル ・揺れ物 ■Unreal ・UEシーン実装 ・アニメーションデータ更新 ・エフェクト ・ライティング ・揺れ物 ・フェイシャル

88.

各フェーズ紹介 各社担当範囲について 大きくわけてMaya班とUE班で作業者を分けました。 エフェクトとライティングはそれぞれ2段階(前半、後半)の作業に分けました。 前半は最低限の要素を揃えます。エフェクトの仮配置とライトの方向性確認。 後半に最終調整。 制作スケジュールのタイミングなどもあって外部会社は前半までの制作を行い、 後半作業は社内のチームで完成まで持っていく形にしました。 ■外部 ■社内 ・Maya ・Maya レイアウト、アニメーション(プライマリー) プレビズ、プライマリ以降のセカンダリ(揺れもの)、 ※一部専用モデル作成 ・UE エフェクト(前半)、ライティング(前半) めり込み調整、フェイシャル ・UE エフェクト(後半)、ライティング(後半)、揺れ物、 フェイシャル、レンダリング

89.

担当範囲の制限 ・触れる箇所を制限して混乱を減らす ・ミスや手間がかかるような作業は自動化やツールを用意 社内外でアーティストができるだけ作業に集中できるようにしたかった為です。

90.

参考シーン

91.

フェーズ1 91

92.

各フェーズ紹介、フェーズ1 レイアウト:Maya作業 ■シーン構築 構築ツールでシーンの用意をします。 シーン毎に各キャラクターの導線情報や配置位置の確認ができる仕様書を用意しています。 演技エリア付近にはキャラの立ち位置のガイドも予め背景データに配置しています。

93.

各フェーズ紹介、フェーズ1 レイアウト:Maya作業 ■キャラクターデータの出力 キャラの配置情報をcsvに登録します。 シーン内に配置されているキャラ全員が対象になります。 出力時にキャラは原点に移動してからアニメーション出力を行います。 ※配置用コントローラーは位置情報のみ出力、アニメーションつけるのはNGです。

94.

各フェーズ紹介、フェーズ1 レイアウト:Maya作業 ■カメラデータの出力 カメラデータは一度スタートフレームを0にオフセットしてから出力しています。 UEでレベルシーケンス毎に0フレームスタートにする為になります。 尺はカメラシーケンサーから取得します。 ※カメラのインポートもできるだけ自動化したい為、UEの方でずらしたりはせずFBXデータの方で合わせました。

95.

各フェーズ紹介、フェーズ1 レイアウト:レベルシーケンスの自動生成 ■シーケンサー生成に必要なデータ アセットリスト CSV 登録されているキャラクターのBPをマップに配置、アクター名の指定 カット情報 CSV カット毎にキャラを配置しなおす モーションデータ FBX アクターと該当するモーションデータの割り当て

96.

各フェーズ紹介、フェーズ1 レイアウト:レベルシーケンスの自動生成 ■各レベルシーケンスの構成 マスターシーケンス カット毎のレベルシーケンス サブシーケンス(キャラ、エフェクト、ライティング)

97.

各フェーズ紹介、フェーズ1 レイアウト:マスターシーケンス ■マスターシーケンス構成 マスターシーケンスに各カットのレベルシーケンスを配置 カットを跨ぐ必要がある物の一部エフェクトやライトは マスターシーケンス内に配置しています。 カット内で完結する物はカットのサブシーケンスに含めてます。

98.

各フェーズ紹介、フェーズ1 レイアウト:カット用シーケンス ■レベルシーケンス構成 カットのベースのレベルシーケンス サブシーケンスとカメラを配置します。 カメラは自動生成時に作成され、 FBXのインポートを行います。 カットの尺はカメラのキーフレーム(+1)に合わせます。 フィルムバック設定もMayaのカメラと同様の物に設定します。 フォーカス(DOF)はUE内で調整を行います。

99.

各フェーズ紹介、フェーズ1 レイアウト:尺について 尺はレイアウトのタイミングでFIXします。 レイアウト以降での尺変更はNGです。 こちらは会社によって認識が違ったりしていたので早いうちに決めておきました。 レイアウトの尺をもとにサウンドやボイス収録、エフェクトのベース作成に入っていきます。 影響範囲がかなり広い為、変更はできるだけしません。

100.

各フェーズ紹介、フェーズ1 レイアウト:アニメーションインポート ■レベルシーケンス構成 アニメーションデータはキャラクター毎にフォルダを作成しています。 CSID キャラID_A キャラID_B FBXディレクトリ CSID/キャラID_A <キャラID_A>_<CSID>_<CutID>

101.

各フェーズ紹介、フェーズ1 レイアウト:サブシーケンス(キャラ) ■レベルシーケンス構成 CHR(キャラクター+座標+アニメーション) カット情報 Transform Animation Visibility

102.

各フェーズ紹介、フェーズ1 レイアウト:サブシーケンス(エフェクト) ■レベルシーケンス構成 EFF(エフェクト関連)

103.

各フェーズ紹介、フェーズ1 レイアウト:サブシーケンス(ライティング) ■レベルシーケンス構成 LTG(ライティング関連)

104.

各フェーズ紹介、フェーズ1 レイアウト:マスターシーケンス ■ベースのレベルシーケンス完成 必要な要素が揃ったのでマスターシーケンス画面に戻ります。 先ほど用意したレベルシーケンスをマスターシーケンスに順番に 並べます。尺は最後のレベルシーケンスのエンドに合わせます。

105.

各フェーズ紹介、フェーズ1 レイアウト:UE補助ツール ■Editor Utility Widget CS Scene Selector 作業したいシーンのPersistent Levelを開いてくれる物になります。 マスターシーケンスもそのまま開けます。 ドロップダウンからCSIDを指定してから、 ①選択されているシーンを開く ②開いたシーンのマスターシーケンスを開く ※コンテンツブラウザからPLなどを探りにいくのを避けたかった。

106.

各フェーズ紹介、フェーズ1 レイアウト:UE補助ツール ■Editor Utility Widget CS Scene Selector(BP) ・マップのロード こちらはシンプルにブループリントで作成。 パスはほぼ決まっているので、ユーティリティウィジェットの コンボボックスに登録している文字列をもとにマップを開きます。 ・マスターシーケンス こちらは現在開いているPL名を取得し、 マスターシーケンスが存在する場合開きます。

107.

各フェーズ紹介、フェーズ1 レイアウト:UE補助ツール ■Editor Utility Widget CS Tools シーケンスの自動生成から生成された後の調整用。 こちらはEUW+Pythonで作成しています。 ・Reload - Pythonスクリプトのリロード。 ・Create Directory - 作業中のシーンのディレクトリをFBXデータの物と合わせます。 ・Create Sequence - シーケンスの自動生成。先ほどの流れを一通り行います。 ・Select Seq Actor - レベルシーケンス内のアクターを全て選択します。 ・Set Actor Pos - カット情報csvをもとにアクターの配置します。(自動配置してから更新された場合) ・Set Duration - カットの尺を変更した場合、一括で関連サブシーケンスも尺変更を行います。 ・Rename Cut – あまり使用はしてないですが、一括で関連サブシーケンスのカット名を変更します。 ・Set Animation – キャラ変更やアニメーションクリップ配置しなおしたい場合に使用。 ・Reimport Anim - レベルシーケンス内のアクターのアニメーションを再インポート。

108.

各フェーズ紹介、フェーズ1 レイアウト:UE補助ツール ■Editor Utility Widget CS Tools シーケンスの自動生成から生成された後の調整用。 こちらはEUW+Pythonで作成しています。

109.

全体のデータフロー CSV アセットリスト Unreal Cutscene FBX 背景 Maya FBX モーション CSV レベルリスト CSV カット情報 Unreal Game

110.

フェーズ2 110

111.

各フェーズ紹介、フェーズ2 アニメーション:Maya作業 ■レイアウトデータ→アニメーション作業準備 レイアウト作業時に使用していた仮モデルを正式のモデルに差し替え。 シーン構築時に使用したインポートツールからアセットに変更があるかの確認が可能。 リファレンス先の変更が必要な場合も対応してます。(共通モブモデルから専用モデルへ)

112.

各フェーズ紹介、フェーズ2 アニメーション:UE作業 ■アニメーションデータ更新 シーケンス内で使用されているアニメーションシーケンスを一括で再インポートします。

113.

フェーズ3 113

114.

各フェーズ紹介、フェーズ3 フェイシャル ■フェイシャルキャプチャー フェイシャルはiPhoneで撮影を行っています。 MocapXを使用しました。 ライブ撮影でMayaに反映することも可能ですが、録画機能を主に使いました。

115.

各フェーズ紹介、フェーズ3 フェイシャル ■フェイシャルデータ フェイシャルはブレンドシェイプのみを使用しています。 UEへはFBX出力時にrootに全ブレンドシェイプの値をアトリビュートとして 登録しています。 アニメーションアセットではカーブとして表示されます。

116.

各フェーズ紹介、フェーズ3 揺れ物 ■クロス+ジョイントで調整 UE標準のChaos Clothを使用ました。 キャラクターの衣装や触手などでも使用しました。 どうしてもめり込みや暴れすぎる場合は ジョイントを追加してMayaで調整しました。

117.

フェーズ4 117

118.

各フェーズ紹介、フェーズ4 エフェクト エフェクトは主にナイアガラで作成しています。 一部表現はHoudiniで作成をして、ジオメトリキャッシュをシーケンサーに配置してます。 使用ツールは作業者が使いやすい方で作成していただきました。

119.

各フェーズ紹介、フェーズ4 ライティング インゲームの背景はライトマップを使用していますが、カットシーンではLumenを使用しました。 その為一部ライトの見え方、特にエミッシブまわりがゲームと見た目が異なった為、まずはLumen環境でゲームの見た目 をある程度再現しました。 一括でエミッシブの調整をできるブループリントを用意し、シーケンサーでカット単位で調整できるようにしました。 ライティング作業ではライトの配置以外にポストプロセスボリュームの調整とキャラのマテリアル調整をカット単位で行 えるようにしています。

120.

各フェーズ紹介、フェーズ4 ライティング ライティング作業ではライトの配置以外にポストプロセスボリュームの調整とキャラのマテリアル調整をカット単位 で行えるようにしています。 一部キャラBPから調整できるようにしたパラメーターの紹介をします。 血の色味や量、目の虹彩や瞳孔、あとは明るさなどをカット単位で調整できるようにしました。 キーも打てるようにしています。

121.

各フェーズ紹介、フェーズ4 ライティング:アクターBP ■シーケンサー用変数 カット単位でのキャラクターのマテリアルの調整はDynamic Material Instanceで行ってます。 ほとんどはインゲームでも使用しているLayer Parametersをシーケンサーから 制御できるようにパラメーターを出しておきました。 マテリアルのパラメーターであればそのままシーケンサーでトラック追加が可能ですが、 マテリアルレイヤーやマテリアルレイヤーブレンドはシーケンサーからそのまま参照が できなかった為、 BPから制御できるようにしています。

122.

各フェーズ紹介、フェーズ4 ライティング:アクターBP ■シーケンサー用変数 シーケンサーで変数をトラックとして追加、編集を簡単に 行えるように図のように変数と関数を用意しました。 ・変数 EditIrisColor, Expose to Cinematicsにチェック ・関数 SetEditIrisColor, Call in Editorにチェック UEの標準機能で「Set+変数名」の関数を作成すれば シーケンサーから値の変更を行う事が可能です。

123.

最後に 123

124.

最後に 小規模ならではの工夫が多く必要でした。 外部協力会社や社内インゲーム班との共同作業でなんとか完成まで持っていく事ができました。 「野狗子:Slitterhead」でのカットシーンは最終的にプリレンダの映像としてゲームに入れ込みましたが、 リアルタイムの手法からは大きく変わらない為、少しでもUnreal Engineでのカットシーンの作成方法の 参考になれば幸いです。 2024年11月8日(金)発売!

125.

ご清聴頂きありがとうございました! 講演アンケートも宜しくお願い致します。 125