94.9K Views
November 08, 21
スライド概要
講演アーカイブ:
https://www.youtube.com/watch?v=PcZEeBSSQ1s&list=PLr_Cbd4sUDTyMGAtfqRojwzFxkVXuU-_L&index=6
講演内容:
今年6月に発売されたRPG「Caligula 2」のイベントシーン制作には、UE4と連携することを前提とした社内スクリプトエンジン"AeroScript"が使用されています。AeroScriptとその周辺制作環境には、スクリプターが効率よくイベントを作成できる機能や、収録台本の自動生成などの機能が揃っています。本講演では、それらの紹介と本タイトルで行った機能拡張と効率化についてお話しいたします。
講演者:
佐々木 瞬(株式会社ヒストリア 代表取締役/プロデューサー/ディレクター )
馬場 俊行 (株式会社ヒストリア エンジニア/レベルデザイナー)
西尾 雅也 (株式会社ヒストリア ゲームデザイナー)
UNREAL FEST EXTREME 2021 WINTER公式サイト:
https://unrealengine.jp/unrealfest/extreme2021winter/
#uefest
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
UE4と融合されたスクリプトシステム! 「Caligula2」イベントシーン開発事例 株式会社ヒストリア 佐々木 瞬(代表取締役/プロデューサー/ディレクター) 馬場 俊行(エンジニア/レベルデザイナー) 西尾 雅也(ゲームデザイナー) © FURYU Corporation.
自己紹介 佐々木 瞬 株式会社ヒストリア 代表取締役/プロデューサー/ディレクター AeroScript アーキテクチャ設計 馬場 俊行 株式会社ヒストリア エンジニア/レベルデザイナー AeroScript Caligula2実装主導 西尾 雅也 株式会社ヒストリア ゲームデザイナー AeroScript Caligula2使用者 家庭用ゲームのリードエンジニアを経て、2013年に Unreal Engine専門の開発会社、株式会社ヒストリア を設立。ゲーム、ノンゲームコンテンツのプロデュ ーサー/ディレクターを行う。「Caligula Overdose」、 「Caligula2」では制作ディレクターを担当。 2014年ヒストリアに入社以来、主に家庭用ゲーム機 のRPG開発に携わる。プログラムの他レベルデザイ ンも行う。「Caligula Overdose」、「Caligula2」では リードエンジニアとして従事。 株式会社ヒストリアのゲームデザイナー。大学で映 像演出を学びながら、自主制作でUE4に触れ、2020 年に入社。「Caligula2」ではスクリプトを用いたイ ベント制作に従事。 © FURYU Corporation.
「Caligula2」の紹介 プラットフォーム:PS4、Switch ジャンル:RPG 発売日 :2021年6月24日 メーカー:フリュー株式会社 開発 :株式会社ヒストリア https://www.cs.furyu.jp/caligula2/ © FURYU Corporation.
シナリオを語る2種類のシステム Sequencer AeroScript カットシーン 気合を入れた魅せシーン。 アーティストが制作。コスト大。 イベントシーン 物語を語るシーン。量産が大事。 スクリプターが制作。コスト小。 © FURYU Corporation.
シナリオを語る2種類のシステム Sequencer AeroScript カットシーン 気合を入れた魅せシーン。 アーティストが制作。コスト大。 イベントシーン 物語を語るシーン。量産が大事。 スクリプターが制作。コスト小。 © FURYU Corporation.
AeroScriptとは? • ヒストリア内製のスクリプト環境 • RPGやテキストADVのイベントシーンを 量産するためのシステム BPはテキストベースのイベント量産に向かないため開発 • 複数プロジェクトで使用 環境だけでなくドキュメントも使いまわせる! © FURYU Corporation.
イベントシーン サンプル1 © FURYU Corporation.
イベントシーン サンプル2 © FURYU Corporation.
AeroScript環境の特徴 1 シナリオテキストから多くの工程を自動化! 2 UE4と連携したプレビュー環境 3 テキストとExcelによる編集環境 自動的にスクリプトのひな型と収録台本が生成される UE4 Editorでカメラをプレビューしながら配置を設定できる grepや一括置換などの処理のしやすさと、誰でもすぐ使える導入のしやすさを両立 © FURYU Corporation.
目次 • • • • • アーキテクチャ設計 アーキテクチャ設計 Caligula2事例 Caligula2事例 まとめ - シナリオ/スクリプトのデータフロー AeroScriptの基本設計 Caligula2でのAeroScriptの利用 イベント作成時のワークフローの効率化 © FURYU Corporation.
目次 • • • • • アーキテクチャ設計 アーキテクチャ設計 Caligula2事例 Caligula2事例 まとめ - シナリオ/スクリプトのデータフロー AeroScriptの基本設計 Caligula2でのAeroScriptの利用 イベント作成時のワークフローの効率化 © FURYU Corporation.
シナリオ/スクリプトのデータフロー 手動(D&Dなど) 自動出力・インポート © FURYU Corporation.
シナリオ/スクリプトのデータフロー シナリオ データ (.doc) 手動(D&Dなど) 自動出力・インポート © FURYU Corporation.
シナリオ/スクリプトのデータフロー シナリオ データ (.doc) シナリオ データ (.txt) 手動(D&Dなど) 自動出力・インポート © FURYU Corporation.
シナリオ/スクリプトのデータフロー シナリオ データ (.txt) シナリオコンバーター シナリオ データ (.doc) 手動(D&Dなど) 自動出力・インポート © FURYU Corporation.
シナリオ/スクリプトのデータフロー スクリプト データ (.as) シナリオ データ (.txt) シナリオコンバーター シナリオ データ (.doc) 手動(D&Dなど) 自動出力・インポート © FURYU Corporation.
シナリオ/スクリプトのデータフロー スクリプト データ (.as) シナリオ データ (.txt) シナリオコンバーター シナリオ データ (.doc) Localize用 文字列 データ (.csv) 手動(D&Dなど) 自動出力・インポート © FURYU Corporation.
シナリオ/スクリプトのデータフロー スクリプト データ (.as) シナリオ データ (.txt) 手動(D&Dなど) 自動出力・インポート シナリオコンバーター シナリオ データ (.doc) Localize用 文字列 データ (.csv) 話者別 台本用 シナリオ (.csv) © FURYU Corporation.
シナリオ/スクリプトのデータフロー スクリプト データ (.as) シナリオ データ (.txt) 自動出力・インポート Localize用 文字列 データ (.csv) 話者別 台本用 シナリオ (.csv) 台本化ツール 手動(D&Dなど) シナリオコンバーター シナリオ データ (.doc) 収録用 台本 (.pdf) © FURYU Corporation.
シナリオ/スクリプトのデータフロー スクリプト データ (.as) シナリオ データ (.txt) 自動出力・インポート Localize用 文字列 データ (.csv) 話者別 台本用 シナリオ (.csv) 台本化ツール 手動(D&Dなど) シナリオコンバーター シナリオ データ (.doc) 収録用 台本 (.pdf) © FURYU Corporation.
シナリオ/スクリプトのデータフロー シナリオ データ (.txt) 自動出力・インポート スクリプト データ (.as) スクリプト データ (.uasset) Localize用 文字列 データ (.csv) Localize用 文字列 データ (.uasset) 話者別 台本用 シナリオ (.csv) 台本化ツール 手動(D&Dなど) シナリオコンバーター シナリオ データ (.doc) UE4 Editor 収録用 台本 (.pdf) © FURYU Corporation.
シナリオ/スクリプトのデータフロー シナリオ データ (.txt) 自動出力・インポート スクリプト データ (.as) スクリプト データ (.uasset) Localize用 文字列 データ (.csv) Localize用 文字列 データ (.uasset) 話者別 台本用 シナリオ (.csv) 台本化ツール 手動(D&Dなど) シナリオコンバーター シナリオ データ (.doc) UE4 Editor 配置 データ (.umap) 収録用 台本 (.pdf) © FURYU Corporation.
シナリオ/スクリプトのデータフロー シナリオ データ (.txt) 自動出力・インポート スクリプト作業 スクリプト データ (.as) スクリプト データ (.uasset) Localize用 文字列 データ (.csv) Localize用 文字列 データ (.uasset) 話者別 台本用 シナリオ (.csv) 台本化ツール 手動(D&Dなど) シナリオコンバーター シナリオ データ (.doc) UE4 Editor 配置 データ (.umap) 収録用 台本 (.pdf) © FURYU Corporation.
データフローのポイント • シナリオライターから受け取ったデータを自動でスクリプト化 • ローカライズの翻訳用にセリフは文字列IDで管理 • ボイス収録用の台本を自動で生成 • ボイスデータがあがってきたら入れるだけで再生されるように © FURYU Corporation.
目次 • • • • • アーキテクチャ設計 アーキテクチャ設計 Caligula2事例 Caligula2事例 まとめ - シナリオ/スクリプトのデータフロー – AeroScriptの基本設計 - Caligula2でのAeroScriptの利用 - イベント作成時のワークフローの効率化 © FURYU Corporation.
スクリプト設計においての悩みどころ • テキスト or 専用エディタ • 自由なテキストエディタ(秀丸、サクラエディタ、VSCode、Emacs系、Vim)で 編集するか、専用エディタを用意するか • スクリプターにどこまで自由度を用意するべきか • マクロをスクリプトで作れる? 関数は自由に作れる? ミニゲームとか作れる? • 多くの場合「ちょっとプログラム的なことが強いスクリプター」がキーマンになる • 基本上から下に流れる文法 or Cライクな文法 • Cライクな文法の方が自由度は高いが学習コストが高い • カメラ演出はどうやってつける? • 素で考えるなら、スクリプトから座標指定&パラメータ設定だが…… © FURYU Corporation.
スクリプト設計においての悩みどころ • 結論だけ言うと…… →Excelの専用エディタ テキスト or 専用エディタ • 自由なテキストエディタ(秀丸、サクラエディタ、VSCode、Emacs系、Vim)で 編集するか、専用エディタを用意するか • スクリプターにどこまで自由度を用意するべきか →スクリプトでは限定的 • 基本上から下に流れる文法 or Cライクな文法 →上から下へ • マクロをスクリプトで作れる? 関数は自由に作れる? • 多くの場合「ちょっとプログラム的なことが強いスクリプター」がキーマンになる • Cライクな文法の方が自由度は高いが学習コストが高い • カメラ演出はどうやってつける? • →UE4 Editor 素で考えるなら、スクリプトから座標指定&パラメータ設定だが…… © FURYU Corporation.
AeroScriptの基本設計1 • 配置とカメラの設定はUE4 Editorで指定する • UE4に配置された位置を示すマーカーの Location/Rotationを変更すれば反映されるように • スクリプトは処理ではなく、流れを組む形に • 上から下に流れるタイプ。インデントは無し • 処理の移動はラベルジャンプをベースとする • スクリプトの自由度は限定的 • BPで命令を作れるようにし命令追加の敷居を下げ、 プログラム的な要素(マクロなど)はスクリプト側にはほぼ用意しない • 関数化はサブスクリプトの呼び出しという形まで © FURYU Corporation.
AeroScriptの基礎設計2 • 学習コストを低く(外部スタッフの比率が多いため) • Editor環境はExcelを使用 • Editor環境が必要な理由はローカライズへの対応が大きい • テキストでも編集可 • 全体のgrepや置換はしたいので保存形式はテキスト © FURYU Corporation.
スクリプトとUE4の境界がポイント スクリプト テキストと演出の進行 0 1 2 3 4 5 6 7 8 9 キャラAをマーカーA1へ配置 キャラBをマーカーB1へ配置 フェードイン キャラAの表情変更 キャラAのモーション再生 メッセージ表示 キャラBがマーカーB2へ移動する キャラBがアニメーションする メッセージ表示 カメラの位置をマーカーBへ移動する UE4 Editor 各種配置とSequencer キャラ マーカーA1 キャラ キャラ マーカーB2 マーカーB1 カメラ マーカーA カメラ マーカーB © FURYU Corporation.
実際のテキストのスクリプト © FURYU Corporation.
実際のExcel上のスクリプト © FURYU Corporation.
スクリプトとUE4の境界がポイント スクリプト テキストと演出の進行 UE4 Editor 各種配置とSequencer © FURYU Corporation.
実装のレイヤー Titleごとの実装 タイトルに紐づくあらゆる処理 AeroScript Plugin 各データ構造と制御系命令のみ実装 UE4 一般的なエンジン改造を必要としないUE4環境 © FURYU Corporation.
AeroScript Plugin 基本コマンド一例 命令 内容 使用例(テキスト形式) Label ラベル名を挿入する Label, SCENE_1 Jump 実行位置を指定したラベルに移動する Jump, SCENE_2 If 条件分岐 If, Count > 0, SCENE_1, SCENE_2 Wait 指定した秒数一時停止する Wait, 10 CallScript スクリプトをスタックに積み実行する CallScript, EVENT_01 Return このスクリプトを抜ける Return ※引数には数式も使用できる © FURYU Corporation.
目次 • • • • • アーキテクチャ設計 アーキテクチャ設計 Caligula2事例 Caligula2事例 まとめ - シナリオ/スクリプトのデータフロー – AeroScriptの基本設計 - Caligula2でのAeroScriptの利用 - イベント作成時のワークフローの効率化 © FURYU Corporation.
Caligula2でのAeroScriptの利用 スクリプトの命令(コマンド)について © FURYU Corporation.
スクリプトの命令について AeroScriptは汎用性を重視しているため アプリケーションごとに専用の命令を追加していくことになる 命令を増やすことによって出来る事が増える 出来る事が増えるとクオリティを上げやすくなる © FURYU Corporation.
スクリプトの命令について 命令の増やし方 • C++による実装 複雑な処理に対応 • BPによる実装 プログラマでなくとも作る事ができる すぐに実装できる © FURYU Corporation.
スクリプトの命令について 例)特定のアクターを表示状態にする命令 スクリプト側の 引数を取得する関数 © FURYU Corporation.
スクリプトの命令について 命令は増やし過ぎると使う側が作業しにくくなる反面も… この場合はどの命令を使えばいいんだろう…? 多すぎて覚えられない…どうすればいいんだっけ? © FURYU Corporation.
スクリプトの命令について 命令自体は無駄に増やさないように 似たような動きは引数で挙動を変える方針とした 例)アクターを表示、非表示する命令 ShowActor, ACTOR_TAG ShowActor, 1, ACTOR_TAG HideActor, ACTOR_TAG ShowActor, 0, ACTOR_TAG 1→表示 0→非表示 © FURYU Corporation.
スクリプトの命令について Caligula2で追加した命令 C++で約100個 BPで約50個 © FURYU Corporation.
スクリプトの命令について © FURYU Corporation.
スクリプトの命令について © FURYU Corporation.
Caligula2でのAeroScriptの利用 スクリプト内での関数化について © FURYU Corporation.
スクリプト内での関数化について AeroScriptはスクリプトからスクリプトを呼び出す事が可能 • 長いイベントシーンを分割 作業を楽に分担できる • 同じ処理を別スクリプトに書いて関数化 処理を使い回す事でスクリプトを簡略化できる 変更に柔軟に対応できる 引数を渡す事も可能なので完全に同じ処理でなくとも対応できる © FURYU Corporation.
スクリプト内での関数化について © FURYU Corporation.
スクリプト内での関数化について クエスト(NPCの依頼)を引き受けるかどうかの選択肢 断るとクエストは発生せず 引き受けるとフラグを立てたりNPCの内部パラメーターが上昇 これらの処理を100個以上あるクエストで毎回書くのは大変 © FURYU Corporation.
スクリプト内での関数化について 関数化したスクリプト QUST_Order.as 関数を呼び出している クエストのスクリプト © FURYU Corporation.
スクリプト内での関数化について 関数化したスクリプトを呼び出すだけ(たった1行書くだけ) クエストを引き受けるかの選択肢と分岐後の処理が実装される 分岐の仕様が変わっても関数用のスクリプトを変更するだけ © FURYU Corporation.
スクリプト内での関数化について 似たようなスクリプトを大量に書く手間を省く事で イベントシーンの演出のクオリティを上げる事に専念できる © FURYU Corporation.
Caligula2でのAeroScriptの利用 シーケンサーの利用について © FURYU Corporation.
シーケンサーの利用について クオリティを上げようとしていくと… ここからここの間だけポストプロセスの パラメーターを弄りたい! ここだけは専用で配置しているアクターに 特殊な事をやらせたい! © FURYU Corporation.
シーケンサーの利用について 様々な要望が… これらのためだけにスクリプトの命令を追加していくと大変… そこで目をつけたのが… © FURYU Corporation.
シーケンサーの利用について 【カットシーン】 イベントで盛り上がる場面で、シーケンサーを利用している © FURYU Corporation.
シーケンサーの利用について 通常のカットシーンイベントの場合 スクリプト 命令 シーケンサー再生 スクリプト 命令 © FURYU Corporation.
シーケンサーの利用について スクリプトと並行して再生できるようにもなっている シーケンサー再生 スクリプト 命令 スクリプト 命令 スクリプト 命令 スクリプト 命令 © FURYU Corporation.
シーケンサーの利用について スクリプトからシーケンサーを再生する命令を活用 ポストプロセスを変更 特定のアクターのマテリアルのパラメーターを変更 3Dモデル側の表情を特殊なものに変更 タイミングがシビアな演出を正確に表現 © FURYU Corporation.
目次 • • • • • アーキテクチャ設計 アーキテクチャ設計 Caligula2事例 Caligula2事例 まとめ - シナリオ/スクリプトのデータフロー – AeroScriptの基本設計 - Caligula2でのAeroScriptの利用 - イベント作成時のワークフローの効率化 © FURYU Corporation.
イベント作成時のワークフローの効率化 UE4側での作業編 © FURYU Corporation.
スクリプトとUE4の境界がポイント スクリプト テキストと演出の進行 UE4 Editor 各種配置とSequencer © FURYU Corporation.
UE4側での作業編ーイベント制作例 キャラクター、カメラのマーカーを設置 アニメーションをプレビューし キャラクターの配置やカメラを調整 © FURYU Corporation.
UE4側での作業編ーイベント制作例 イベントを起動して確認 © FURYU Corporation.
UE4側での作業編ーイベント制作例 エディタに配置→スクリプトを修正→確認 を繰り返し、足りない所を修正していく © FURYU Corporation.
UE4側での作業編 似たような配置を毎回行うのはとても非効率 スクリプターによってクオリティに差が出てしまう それぞれの配置を事前に用意しプリセット化する事で解決 © FURYU Corporation.
配置プリセットの作成方法 ① プリセット作成用に専用のレベルを作成 ② キャラクター配置用のマーカーやカメラを配置 ③ それぞれの配置情報や設定をデータアセットに保存 ④ 作成したプリセットをスクリプトで利用 © FURYU Corporation.
配置プリセットの作成方法 ①プリセット作成用に専用のレベルを作成 © FURYU Corporation.
配置プリセットの作成方法 ②キャラクター配置用のマーカーやカメラを配置 © FURYU Corporation.
配置プリセットの作成方法 ③それぞれの配置情報や設定をデータアセットに保存 作成したプリセットを登録 登録されたプリセット © FURYU Corporation.
配置プリセットの作成方法 ④作成したプリセットをスクリプトで利用 © FURYU Corporation.
カメラの初期配置プリセット化 イベント用カメラをレベルに配置する際にも プリセットから初期位置を指定できるように © FURYU Corporation.
カメラの初期配置プリセット化 ただし、この機能に関しては… せっかく用意したのに フルリモートになったばかりで共有がうまくいかず 存在が埋もれてしまった… 活用していれば、こちらもかなり便利だったはず… © FURYU Corporation.
プレビュー機能の強化 マーカーでモーションを選択すると即アニメーションが反映 © FURYU Corporation.
名前やIDなどの入力補助 キャラIDやモーション等は直接入力するのではなく プルダウンメニューから内容を選べる © FURYU Corporation.
名前やIDなどの入力補助 こちらは弊社ブログにて実装方法を紹介しています [UE4] データテーブルの内容を使って変数の中身を一覧から選択させる方法 https://historia.co.jp/archives/12411/ [UE4] Slateで検索可能なコンボボックスを自作する https://historia.co.jp/archives/13304/ © FURYU Corporation.
配置ツールを利用 アクターを配置する際コンテンツブラウザ上からの配置ではなく 配置ツールから配置した方が早い © FURYU Corporation.
配置ツールを利用 こちらは弊社ブログにて実装方法を紹介しています [UE4]レベルエディタの配置ツールに独自の項目とアセットを追加する方法 https://historia.co.jp/archives/10875/ © FURYU Corporation.
アクター名を自動変更 マーカーを配置して マーカー名を設定すると アクターの名前が 自動的に変更される © FURYU Corporation.
アクター名を自動変更 こちらは弊社ブログにて実装方法を紹介しています [UE4]アクターのラベル名を自動変更する機能の実装方法 https://historia.co.jp/archives/14654/ © FURYU Corporation.
マーカーの命名規則 マーカー名は命名規則を決めて発行 © FURYU Corporation.
デバッグ機能 デバッグ機能も色々と用意 イベント作成に必要な情報の表示 イベント中も自由にカメラを操作 強制的にイベントをスキップ シナリオフラグなど自由に操作 © FURYU Corporation.
デバッグ機能 特に便利だったもの 「最後に見たイベントをもう一度再生させるボタン」 イベント作成時はデバッグメニューから 毎回イベントを選択して再生していた 何度も同じイベントを再生するため特に有効だった © FURYU Corporation.
イベント作成時のワークフローの効率化 スクリプト側での作業編 © FURYU Corporation.
スクリプト側での作業編 シナリオコンバータから自動生成されるスクリプトは 会話文以外にもト書きもコメントアウトされた状態で出力される スクリプターはシナリオファイルを別途開く必要がない © FURYU Corporation.
スクリプト側での作業編 ト書きがスクリプトで見れる 専用エディタで開けば、ID化されたセリフを表示できる シナリオから出力したスクリプト 専用のExcelエディタで開いたスクリプト © FURYU Corporation.
定数の利用 AeroScriptでは、定数に対応 パラメーターに数値を指定する際にわかりやすく定数を使用 © FURYU Corporation.
定数の利用 例)キャラクターIDを指定する場合 キャラクター名 キャラクターID スクリプトでの定数 能登 吟 10 吟 CharacterToMarker, 10, MARKER_0, … CharacterToMarker, 吟, MARKER_0, … © FURYU Corporation.
イベントスキップの強制停止 デバッグ用命令「Bookmark」 イベントスキップを強制停止(Shippingビルドでは無効) イベント作成中に即特定の行までイベントを進めたい時に活用 © FURYU Corporation.
イベントスキップの強制停止 イベントを実行 ↓ ここまでスキップ スキップ ↓ Bookmarkの場所でスキップ停止 ↓ スクリプトの動作確認 © FURYU Corporation.
自動リインポート機能 ちょっと編集するたびに アセットを選択→右クリック→リインポートはかなりの手間 ②UE4でReimport ①スクリプトの編集内容を保存 © FURYU Corporation.
自動リインポート機能 イベントを起動すると自動で対象のスクリプトをUE4に取り込む スクリプトを書く→イベント実行で即反映 スクリプトを更新するたびにアセットをimportする必要がない © FURYU Corporation.
自動リインポート機能 こちらは弊社ブログにて実装方法を紹介しています [UE4] 独自に用意したデータアセットをより便利に活用する方法 https://historia.co.jp/archives/13665/ © FURYU Corporation.
目次 • • • • • アーキテクチャ設計 アーキテクチャ設計 Caligula2事例 Caligula2事例 まとめ - シナリオ/スクリプトのデータフロー – AeroScriptの基本設計 - Caligula2でのAeroScriptの利用 - イベント作成時のワークフローの効率化 © FURYU Corporation.
まとめ • データフローを最初に設計し、可能な限り自動化を目指した ローカライズ対応、台本対応、ボイス実装のコストが激減 スクリプト作業に専念できた • 社内標準化によりプロジェクト移動後も習得が早い • UE4とのインテグレートを前提とすることで 大きなメリットが得られた • プロジェクト内での効率化も重要 © FURYU Corporation.
最後に AeroScriptを使用したイベント 企画・監修のほか、スクリプト環境を切り出して提供! © FURYU Corporation.
最後に AeroScriptを使用した自社タイトル 鋭意開発中! © FURYU Corporation.
ご清聴ありがとうございました。 AeroScriptに興味がある方はご一報ください。 [email protected] © FURYU Corporation.