7.4K Views
November 13, 19
スライド概要
発表者: 野津翔太郎さま(株式会社ユークス)
本スライドは2019年10月31日に行われた勉強会「 UE4 Localization Deep Dive」の講演資料となります。ユークス様、このような貴重な情報を一般に公開していただきまことにありがとうございます!
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Localization case study on EARTH DEFENSE FORCE: IRON RAIN 株式会社ユークス テクニカルディレクター 野津 翔太郎
作品紹介 ■EARTH DEFENSE FORCE: IRON RAIN ・ディースリー・パブリッシャー様の大人気シリーズ「地球防衛軍」の外伝的 なタイトルです ・ナンバリングタイトルとは異なる世界観で展開される新しい地球防衛軍と して2019年4月11日にリリースされました ・以降EDF:IRで統一します
©YUKE’S ©D3 PUBLISHER
はじめに ・4.19.2がリリースバージョンです ・参考情報程度ですが、開発期間中に4.20.2までは動作確認しました ・全くというわけではありませんが、原則としてエンジンは改造していません。 最低限のバグ修正やCLの取り込み、一部エディタの機能調整をしました ・ CRIミドルウェアを採用しており、サウンド周りはADX2、ムービー周りは Sofdec2を使用して実装しています
はじめに ・先日の勉強会で取り上げた、データテーブルをベースにしたパラメータ管 理を使用しローカライズの実装も行った部分もあります ・下記の公開資料にてパラメータ管理の詳しい解説があります ■UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例 https://www.slideshare.net/EpicGamesJapan/ue4tps-edfir-187545663
個人的に気になってたこと ・Localization → ローカライゼーション? → ローカリゼーション?
個人的に気になってたこと ・Localization → ローカライゼーション(英語発音) → ローカリゼーション(米語発音)
個人的に気になってたこと ・Localization → ローカライゼーション(英語発音) → ローカリゼーション(米語発音)
更に余談 ・Optimization → オプティマイゼーション(英語発音) → オプティミゼーション(米語発音)
Localization対応事例
対応言語 ■ テキスト ・英語 ・フランス語 ・イタリア語 ・ドイツ語 ・スペイン語 ・中国語(繁体字) ・日本語 ・韓国語 → EFIGSCJK
対応言語 ■ ボイス ・英語 ・中国語(繁体字) ・日本語 ・韓国語 → ECJK
仕様 ・テキストとボイスは別々に設定可能 - ボイスはゲーム内で任意に設定可能 - テキストは任意に設定できない(本体言語設定に依存)
仕様 ■ ローカライズアセットを使用した場所 ・UI内のテキスト(&文字テクスチャ) ・ミッション中ストーリーボイス&字幕テキスト ・カットシーン中ボイス&字幕テキスト ・プリレンダムービー中ボイス&字幕テキスト ・フォント
仕様 ・テキストとボイスを別々に設定する必要があるため、指定cultureへの アセットローカライゼーションに全てのアセットコントロールを任せることが出 来なかった ・そこで、シーケンサーに設定する必要があるボイスアセット(=言語ごとの 個別設定が面倒なもの)を判断基準としてcultureの設定をするよう決定 ・テキストはゲーム側の設定として言語設定値を保持し、個別にロードする よう対応
仕様 ・テキスト(データテーブル)とテクスチャは都度ロード&リリースする ・使用する時期に応じて「共通」「メニュー」「インゲーム」の3つにわける ・更にプレイするミッション用のテキストも「インゲーム」のタイミングで個別に ロードする
仕様 ■ アプリケーション実行時ロードイメージ 共通テキスト/ テクスチャロード 起動 言語 初期化 レベル フォントロード メニューテキスト ロード ゲームテキスト/ テクスチャロード メイン メニュー レベル ミッションテキスト/ テクスチャロード メニューテキスト リリース メニューテキスト ロード イン ゲーム レベル ゲームテキスト/ テクスチャリリース ミッションテキスト/ テクスチャリリース メイン メニュー レベル ......
テキスト
テキスト ・ローカライゼーションダッシュボードは使用せず ・全てのテキストアセットはデータテーブルで保持 ・テキスト1つずつにIDを付与 ・画面設計の段階でどのパーツにどのテキストIDを設定するかは、事前に ゲームデザイナーが全て書面にまとめてくれたという背景アリ
テキスト ■ 画面設計イメージ ① ⑤ ② ⑥ ③ ⑧ ④ ⑨ ⑦ 番号 概要 ID ① 画面名 MEN_00001000 ② 選択肢1 MEN_00001101 ③ 選択肢2 MEN_00001102 ④ 選択肢3 MEN_00001103 ⑤ ミッション MEN_00001201 ⑥ 条件1 MEN_00001211 ⑦ 条件2 MEN_00001212 ⑧ 条件3 MEN_00001213 ⑨ ヘルプ MEN_00001301
テキスト ・テキストの設定方法 - 予め設定したIDから導出 - ブループリントから指定 - テクスチャにて表現
テキスト ■予め設定したIDから導出 ・状況によってウィジェット内の文字列が変化しないものについては、 配置しているUTextBlockに対して予めテキストIDを設定しておく ・BeginPlayで自動的に階層を舐め、UTextBlockを見つける ・UTextBlockのテキストをIDとみなし、それをRow Nameとして データテーブルからローカライズされたテキストを得る
テキスト ■予め設定したIDから導出 テキストに設定するだけ
テキスト ■予め設定したIDから導出
テキスト ■予め設定したIDから導出 ・Japanese ・English
テキスト ■ ブループリントから指定 ・こちらは非常に泥臭い対応 ・テキストIDから導出したテキストを ウィジェットブループリント内で 各UTextBlockに設定する
テキスト ■ ブループリントから指定 ・画面設計書が存在するというベースがあったため、この方法でも問題なく 運用できた(UI担当プログラマが頑張った) ・最適化の関係で、動的にウィジェット追加を行う必要があったため静的な 設定が行えなかったことも理由の一つ
テキスト ■ ブループリントから指定 ・下記の公開資料にて動的追加の理由について解説あり ■UE4を用いたTPS制作事例 EDF:IR レベル構成について https://www.slideshare.net/EpicGamesJapan/ue4tps-edfir-187545662
テキスト ■ テクスチャにて表現 ・無駄なアセットが増えるため極力テクスチャに文字はのせなかった ・アニメーションを表現したい関係で どうしてもテキストでは賄えない場合 のみ、テクスチャ表現にした ・その際のマテリアルの作成作業は 全てUIアーティストにやってもらった
字幕&ボイス
字幕&ボイス ・ストーリーベースのゲーム進行の誘導および映画的な演出をするために 字幕テキスト&ボイスの対応を行った ・ボイスと字幕テキストの他に、誰が喋っているかを示すため字幕の上に 「話者」の表示も行った ・「話者」「ボイスID」「字幕テキストID」をまとめて「セリフ」とした
字幕&ボイス ■ミッション中ストーリーボイス&字幕テキスト ・ゲームデザイナーが全ての設定を行った ・いくつかの「セリフ」をまとめたものを「会話」としてパラメータ化 ・セリフの再生タイミングでボイス再生/字幕表示し、ボイス再生が完了す れば次のセリフへ ・「会話」の再生タイミングはミッションのコントローラ側でトリガーする
字幕&ボイス ■ミッション中ストーリーボイス&字幕テキスト ・セリフの進行タイミングが厳密でなくても大丈夫だったため、オンメモリにせ ずストリーミング再生に ・ローカライズでセリフの長さが変わってしまっても、その長さに合わせて会話 が進行していくため、どの言語でも同じパラメータで動作する
字幕&ボイス
字幕&ボイス ■カットシーン中ボイス&字幕テキスト ・カットシーン自体はシーケンサーで実装 ・字幕トリガー用のカスタムトラックを実装 ・ボイスはCRIミドルウェア/ADX2用音声トラックにマニュアル通り設定 ・複数職種で作業を分担、字幕の設定はゲームデザイナー、ボイスの設定 はサウンドデザイナーの作業とした
字幕&ボイス ■カットシーン中ボイス&字幕テキスト
字幕&ボイス ■カットシーン中ボイス&字幕テキスト ・ストーリーとは異なりボイスの長さと字幕の長さが原理的に一致している わけではないので、ボイスの長さデータがかなり重要 ・ボイスの長さと字幕の長さがずれると違和感やストレスを感じる
フォント
フォント ・フォントの変更はローカライズというよりデザインの成分が大きいため、対 応が必須かどうかでいうとアーティストの意向次第になる ・文字列長がレイアウトに大きく影響を与えるため、特に長くなりがちな英 語やヨーロッパの言語についてはフォントの幅が小さい方が望ましいという 傾向はありそう
フォント ・フォントの自然さというのは各言語or国によって異なるようで、日本人が 自然と思うフォントでも米国人が違和感を覚える、ということもあった
フォント
フォント
フォント
フォント ・フォントの設定はテキスト同様アセットローカライゼーションは使えないので、 前述のテキストの静的設定と同じように、C++にてウィジェットに含まれる UTextBlockを拾い、自動的に設定するように実装した ・フォントは1種類しか使用していなかったため単純な入れ替えのみの対応 で問題は起きなかったが、複数種類を使用する場合は対策を練る必要が ありそう
役に立ったデバッグ機能
役に立ったデバッグ機能 ■ テクスチャID表示機能 ・コンソールコマンドにて DirectTextID という機能を実装 ・テキストIDを直接表示する機能
役に立ったデバッグ機能 ■ テクスチャID表示機能
役に立ったデバッグ機能 ■ テクスチャID表示機能
役に立ったデバッグ機能 ■ テクスチャID表示機能 ・本作では、既に存在するテキストでも使いまわしたりせずに、別のIDとして 重複してテキストを登録することを許容していた ・表示されているテキストに誤りがあった際に、テキストで検索するなどして探 した際にどのデータに誤りがあるのかを探すのが非常に面倒 ・テキストIDは一意なため、すぐに特定可能
役に立ったデバッグ機能 ■ テクスチャID表示機能 ・社内のスタッフは日本語ネイティブ、英語ネイティブしかいなかったため、 それら以外のテキストを用いた検索がそもそも現実的では無い場合などに も大活躍した
役に立ったデバッグ機能 ■ テクスチャID表示機能
役に立ったデバッグ機能 ■ テクスチャID表示機能
役に立ったデバッグ機能 ■ ストーリー再生チェック機能 ・ミッションのストーリー会話をミッション中に確認するのは、アクションゲーム という性質を考えると非常に難しい ・そこで、ストーリー会話だけを確認するチェック機能を作成 ・特に、サウンド、ローカライズを担当している外部協力会社様のところで活 躍した
役に立ったデバッグ機能 ■ ストーリー再生チェック機能 ・会話単位で再生可能 ・ミッション中と同様の仕組みで字幕とボイスを再生する実装 ・わざわざミッションをプレイせずローカライズのデバッグができる
役に立ったデバッグ機能 ■ ストーリー再生チェック機能 ・更に、DirectTextIDと組み合わせることで、ローカライズテキストの確認 作業は滞りなく進めることが出来た
まとめ
まとめ ・何をどのようにローカライズするか、という点を最初に洗い出して、各実装 について先に吟味、整理するのがベター ・本作のようにテキストとボイスを別々に設定するなど、複数の言語設定を 扱う場合は特に注意が必要
まとめ ・ローカライズ作業が社内で完結しないことが想定される場合は、確認する 環境についても予め考慮しておいた方が良い ・エディタではなくパッケージで確認するフローを考えた時に、ご紹介したテキ ストIDを表示するような、テキストからデータが逆引きできる機能の実装は 超オススメ
ご清聴ありがとうございました!