10K Views
October 08, 19
スライド概要
講演動画:https://youtu.be/ms8H3NIw5c4
2019年10月6日に行われた「UNREAL FEST EAST 2019」における「はじめてアンリアルエンジンで海戦をつくってみたときのお話」の登壇資料です。
●公式サイト
https://unrealengine.jp/unrealfest/
===
開発現場で初めてアンリアルエンジンを採用し、そのまま最後まで開発を進めた事例について、実際の開発スケジュールに即して紹介を行います。
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
はじめてアンリアルエンジンで 海戦をつくってみたときのお話 #ue4fest
『アズールレーン クロスウェーブ』制作事例 ※戦闘シーンがアクション(TPS)となっているRPG ©2018 IDEA FACTORY / COMPILE HEART / FELISTELLA / Manjuu Co.,Ltd. & Yongshi Co.,Ltd. / Yostar, Inc. #ue4fest
本講演での話題 第1章 ゲームエンジン採択までの道のり 第2章 開発の立ち上がり 第3章 開発を進める中で 第4章 UE4を使って感じたこと #ue4fest
第1章 ゲームエンジン採択までの道のり • FELISTELLAという会社は主にRPGを開発 (猫社員がいます) • 自社でゲームエンジンを整備し、プラグインやスクリプトツール など、開発をスムーズに行うための資産をもつ #ue4fest
第1章 ゲームエンジン採択までの道のり しかし… • 昨今のマルチプラットフォーム開発やローカライズ業務を 他社にお願いするにあたり、サポートなどが難しいと痛感 • 資産を捨てて、ゲームエンジンを導入すべきか? 現場も悩む、悩む、悩む……経営的にも、悩む 1ヶ月ほど複数のゲームエンジンを調査 • 最終的に、登壇するきっかけとなる Unreal Engine 4を採択 #ue4fest
第1章 ゲームエンジン採択までの道のり なぜか? ソースコードが公開されている(これに尽きる) カスタムしたり、トラブル時の原因の切り分けがしやすい! #ue4fest
基本方針 • エンジンには、可能な限り、 手を付けないことを目標とする #ue4fest
第2章 開発の立ち上がり 海! ・海戦なので、何はなくとも 海!海! →海の表現から • いろいろ手探りなので →サンプルの制作 #ue4fest
第2章 開発の立ち上がり【海の表現】 インタラクション • 広大な海上で戦闘が行われるが、海上には表示物が 敵味方キャラクターと弾しかないので寂しい • ユーザー入力により海面を隆起させることで 画面に変化をつけたい ・公式ドキュメントで実装方法を調べる #ue4fest
第2章 開発の立ち上がり【海の表現】 • 丁度良い項目が見つかった https://api.unrealengine.com/JPN/Engine/Rendering/RenderTargets/BlueprintRenderTargets/HowTo/index.html #ue4fest
第2章 開発の立ち上がり【海の表現】 • チュートリアルは、ブループリントもコピペできる #ue4fest
第2章 開発の立ち上がり【海の表現】 • チュートリアルの最終結果 #ue4fest
第2章 開発の立ち上がり【海の表現】 • 試作に組み込んでみる • 期待通りの結果 次は…? #ue4fest
第2章 開発の立ち上がり【海の表現】 無限平面 一定のポリゴン数で どこまでも広がる海 を作りたい #ue4fest
第2章 開発の立ち上がり【海の表現~無限平面】 • カメラに追従し、視界内だけをカバーするメッシュを準備 #ue4fest
第2章 開発の立ち上がり【海の表現~無限平面】 • 海面マテリアルのテクスチャ座標を メッシュ頂点のワールド座標から求めるように修正 #ue4fest
第2章 開発の立ち上がり【海の表現~無限平面】 • 流体シミュレーションに使用している ワークテクスチャのプロパティを変更 • 本タイトルでは512x512のテクスチャで 200m四方をカバーしそれより先はリピートする #ue4fest
第2章 開発の立ち上がり【海の表現~無限平面】 • 海面メッシュが常にカメラにあわせて移動回転拡縮を行うため どこまでも海が広がって見えるように #ue4fest
第2章 開発の立ち上がり【海の表現~無限平面】 • 試作を進めていくが…… • • • 「もっときれいにしてほしい」 「キャラがのっぺりしている」 「島とかキャラは光を反射しないの?」 #ue4fest
第2章 開発の立ち上がり【反射】 • 反射に関してはデフォルトでSSRが有効になっているが 効果が殆どわからない • 海面マテリアルの設定の仕方が悪いのか、 思うような絵作りができない・・・ • 反射について公式ドキュメントを調べる #ue4fest
第2章 開発の立ち上がり【反射】 • 平面反射という機能が見つかる https://docs.unrealengine.com/ja/Engine/Rendering/LightingAndShadows/PlanarReflections/index.html #ue4fest
第2章 開発の立ち上がり【反射】 • 平面反射は正確に反射を表現できる対価として 負荷が高いとあるが、 ひとまず組み込んでみる • 印象が劇的に良くなる Before → 関係者に好評 After #ue4fest
第2章 開発の立ち上がり【反射】 • 反射用のレンダリングを行う際の対象を設定できるので、 AAなどの効果の認識が難しい処理はカット #ue4fest
第2章 開発の立ち上がり【反射】 • 諸々の調整を終え、 島や船が正確に反射されるため美麗に • 初期方針の通り、エンジンに 手を付けることなく標準機能 で実装できました 反射無し SSR 平面反射 #ue4fest
第2章 開発の立ち上がり サンプルの制作 • だいたい1カ月ほどで、海を駆け回るキャラクターが 弾を撃つサンプルが出来上がる #ue4fest
第2章 開発の立ち上がり【サンプルの制作】 初期 #ue4fest
第2章 開発の立ち上がり【サンプルの制作】 少し進む #ue4fest
第2章 開発の立ち上がり【サンプルの制作】 航空機の処理追加 #ue4fest
第2章 開発の立ち上がり【サンプルの制作】 もくもくと進む #ue4fest
第2章 開発の立ち上がり【サンプルの制作】 • このような流れでサンプルを制作 同時に下記タスクも動きながら進行 原作は2Dゲーム → モデル制作のためには三面図が必要 • いろいろなイラストレーターさんのテイストを再現する という重責を担いつつ、モデル制作開始 こうして、開発は立ち上がっていきました。 #ue4fest
第3章 開発を進める中で • 開発環境について • おもしろくするための仕様変更 #ue4fest
第3章 開発を進める中で【開発環境】 • エンジンバーション UE4 4.17(試作) →UE4 4.19(α版) →UE4 4.21 ※SpriteStudio5の対応バーションの都合で 4.21となる • バージョン管理 Subversion #ue4fest
第3章 開発を進める中で【開発環境】 • レベル設計 パーシスタントレベルは1つのみ、 あとは複数のサブレベルで構成 • ブループリント ゲームフロー(レベルBP) と UI(UMG) で主に利用 • 敵AI BehaviorTree と EQS を利用 #ue4fest
第3章 開発を進める中で【開発環境】 • UI 基本的にUMGを利用するが、戦闘UIのみHUDで作成。 ※UMGは習熟に時間を要したので、 シンプルで扱いやすいHUDを戦闘UIで採用 • フォント フォントファイルをそのまま利用 #ue4fest
第3章 開発を進める中で【開発環境】 • 3Dツール Maya2016 • 2Dツール SpriteStudio5(UMGに加算機能を拡張) Spine (SDキャラクターのデータのため) Paper 2D スプライト表示で利用。簡単な動きはプログラマサイド UMGのアニメーション機能で作成 #ue4fest
第3章 開発を進める中で【開発環境】 • ミドルウェア CRI ADX2,Sofdec (サウンドとムービーで利用) ※使い慣れた環境であること、低負荷(SE用)、 高音質(音声用)の圧縮コーデックが使える。 ボイスの多いゲームではほぼ必須ではないかと #ue4fest
第3章 開発を進める中で【開発環境】 • 独自アセット 1:ゲームレベルデータベース Excel(VBAマクロ出力) →json形式 →インポート 以前の開発では、Excelからのバイナリを直接読み込み 2:FSスクリプト スクリプトソース(コンパイル)→スクリプトバイナリ →インポート ※C++の自社のスクリプトエンジンをそのまま利用 #ue4fest
第3章 開発を進める中で 開発は黙々と進んでいたところ、業界あるあるの・・・ より面白くするための、 大 き な 工 夫(シヨウヘンコウ)が発生 #ue4fest
第3章 開発を進める中で【仕様変更】 α版のプレイアブルキャラクターは画面内に1体のみ (戦闘中に交代は可能) しかし、原作アプリでは画面内に3人一組で同時に戦える! #ue4fest
第3章 開発を進める中で【仕様変更】 本作でも味方を3体同時表示へ変更する #ue4fest
第3章 開発を進める中で【仕様変更】 あれ?結構負荷がぎりぎりだったような? いろいろ海の表現でやりすぎたかも? • なにはともあれ、処理の最適化、負荷の計測 • リッチすぎた処理の軽減 (もちろん見栄えはできるだけ損なわずに) #ue4fest
第3章 開発を進める中で【仕様変更】 高速化、負荷の低減に寄与したもの 少しずつ負荷低減へ ・デカールのカット ・平面反射の反射対象の制限 ・キャラクターや構造物をライトの影響を受けないように変更 #ue4fest
第3章 開発を進める中で【仕様変更】 高速化、負荷の低減に寄与したもの ・パーティクル 半透明 →ParticleCutout が非常に有効 メッシュパーティクル →エディタのLOD自動生成が少ないコストで、 品質を維持しながらの最適化に有効 カスケードのLODも同様に非常に有効 #ue4fest
第3章 開発を進める中で【仕様変更】 見栄えとフレームレートを保ちつつ ゲーム性を上げることに成功 #ue4fest
第4章 UE4を使って感じたこと 公式ドキュメントや事例が多く特に困ることはなかった。 試行錯誤は多いが、これはどのエンジンを採用しても同じ。 まだまだ勉強をしていかなければならない 逆に多機能が故に、どの機能を使うのがベストなのかの判断が 難しいと感じることもあった。 #ue4fest
第4章 UE4を使って感じたこと • プロトタイプまでの制作時間の短さ! • PCでサンプルを見せることができる! (コンシューマーの開発では、実機で動かして 動画でキャプチャすることが多かった) • 素材が豊富にある! • マルチプラットフォーム対応も前向きに検討できる! • BehaviorTreeでのAI開発は心強かった! #ue4fest
第4章 UE4を使って感じたこと まだ初めての開発なので感じることかもしれませんが、 ・レベル間のやりとりに制限あり少々手間がかかる ・C++とBPの役割分担をしっかり考えて設計する必要があり 従来の開発より仕様変更などの対応に時間がかかった ・キーボード主体からBP(ノード編集)作業が増え、 マウスの利用頻度があがり、右手の疲労度が高い #ue4fest
第4章 UE4を使って感じたこと 今後もUE4で開発を続けていくので、情報の拡充や 開発できる会社さんが増えるといいな・・・ と思った開発でした。 #ue4fest
ご清聴ありがとうございました #ue4fest