© historia Inc. #ue4fest
少人数開発でもクオリティを諦めない
- エンジニア視点から見る少人数開発の極意 -
historia Inc.
原 龍
© historia Inc. #ue4fest
登壇者紹介
 Airtone(AMG GAMES 様)
– Lead Engineer
 過去作
– アーガイルシフト(バンダイナムコエンターテインメント 様)
 Lead Engineer
– ランページ ランド ランカーズ(スクウェア・エニックス 様)
 Lead Server Engineer
 Client Engineer
 コミュニティ活動
– NekoNekoOnline プラグインの WebApi 機能における設計思想 & 実装Tips
 http://hogetatu.hatenablog.com/entry/2016/12/01/000000
– GameplayDebugger をプロジェクト用にカスタマイズして利用する
 http://hogetatu.hatenablog.com/entry/2016/12/03/002946
© historia Inc. #ue4fest
今回ご紹介するもの
© historia Inc. #ue4fest
弊社で開発中の “Airtone” を実例に挙げ
少人数開発における開発の流れ
効率化のために実装した機能
をご紹介します
© historia Inc. #ue4fest
アジェンダ
 Airtone のご紹介
 少人数開発で必要なもの
 Airtone で実装した機能やツール
© historia Inc. #ue4fest
まずは “Airtone” のご紹介
© historia Inc. #ue4fest
AIRTONE VR Gameplay Movie
I promise you Yasushi Asada feat Mary
https://youtu.be/jShjM3ivg7Y
© historia Inc. #ue4fest
ジャンル エアーリズムアクション(VR)
ハードウェア / プラットフォーム
• Oculus Rift / Oculus Store
• Vive / Steam
エンジン / ミドルウェア
• Unreal Engine 4(UE 4.12 → 4.14)
• Wwise
開発期間 約10ヵ月
開発体制(ピーク時)
• プロデューサー & ディレクター × 1
• ゲームデザイナー × 2
• エンジニア × 4
• アーティスト × 3
• UIデザイナー × 1
• サウンド & チャートデザイナー × 3 (社外)
© historia Inc. #ue4fest
0
2
4
6
8
10
12
14
16
7月 8月 9月 10月 11月 12月 1月 2月 3月
人月
ディレクター ゲームデザイナー エンジニア アーティスト UIデザイナー サウンド
 7月
– プロジェクト発足
– プロトタイプ量産
 8月
– 1曲通しプロトタイプ完成
 11月
– α 版完成
 2月
– β 版完成
© historia Inc. #ue4fest
Airtone は 10時間以上遊べるボリュームのVRリズムゲーム です
それを 4人 から始め、最終的に 14人 で 10ヶ月 という期間で作ってます
(控えめに言っても少人数だったなと思います)
© historia Inc. #ue4fest
今回はこのような少人数開発を
どのように実現したかについてご紹介します
© historia Inc. #ue4fest
少人数開発で必要なもの
© historia Inc. #ue4fest
常に "最適な完成度" を目指すこと
© historia Inc. #ue4fest
一例としてツール制作について掘り下げてみます
© historia Inc. #ue4fest
ツール制作における工数と効果の関係
工数
効果
© historia Inc. #ue4fest
ツール制作における工数と効果の関係
工数
効果
ツールとして実運用に耐えうる
ツールとして機能し始める
ぼくがつくったさいきょうのツール
© historia Inc. #ue4fest
ツール制作における工数と効果の関係
工数
効果
ツールとして実運用に耐えうる
ツールとして機能し始める
ぼくがつくったさいきょうのツール
それともこの辺でも大丈夫?
今回必要なのはこの辺?
© historia Inc. #ue4fest
クオリティはできるだけ上げたい
でも工数は無限ではない
↓
作るものに応じた “最適な完成度” を目指す
© historia Inc. #ue4fest
"最適な完成度" を導き出すために
© historia Inc. #ue4fest
何が必要とされているのかを明確にする
© historia Inc. #ue4fest
要件定義は大事
 何が求められているのか、実際にそれを必要としている人に直接確認する
 この相談は十分に時間をとる。考えうる可能性の話もする。想像力は大事
 その上で 「やらなければいけないこと」 と 「できると良いこと」 を決める
© historia Inc. #ue4fest
完成形のイメージが固まらない場合は、とりあえず “雑に作ってみる”
 完成形を正確にイメージでき、それを言語化できる人はあまりいない
 何かそれっぽいものを作って出してみると話し合いが短くて済む
 複数人で 「誰もよくわかっていない何か」 を机上で考えている時間は無駄
© historia Inc. #ue4fest
“雑に作ってみる” 時にこそ、UE4の真価を発揮できる
とにかく速く、それっぽく、プロトタイプが作れる
© historia Inc. #ue4fest
ただし、これは高確率で地雷を踏みます
© historia Inc. #ue4fest
地雷の要因
 雑に作ったことが忘れ去られる
– 「完成している」 と思っていた機能がプロトタイプコードで、
実は見た目だけだったという事がプロジェクト後半に発覚するのは割とよくある話
– プロジェクト後半でバグが出たり、機能拡張時の対応コストが高くなって辛いやつ
 “とりあえず” で使いまわしたアセットが残り続けて想定外の依存関係を生む
– プロジェクト後半に最適化等を行うためにアセットを整理しようとした時に、
様々なところに依存が発生していて手が付けられない状態になっていたり…
© historia Inc. #ue4fest
“雑に作ってみる” を 皆が理解する 事が大事
© historia Inc. #ue4fest
“雑に作ってみる” ということ(エンジニア / アーティスト編)
 「雑でもいいから見せる事の重要性」 を理解する
– 全てを言語化するのは難しいし、言語化してもわかりにくいものは可視化するしかない
– 相手が自分の感覚を正確に理解してくれるという考えは幻想。諦めて手を動かそう
– だからと言って作り込み過ぎると、ボツになった時に工数的にも精神的にも辛いから雑で良い
– 確認が済んだら、相応のコストを払って作り込む期間を作るのは必須
© historia Inc. #ue4fest
“雑に作ってみる” ということ(ディレクター / ゲームデザイナー編)
 「雑に作られていること」 を理解する
– 目の前にあるものは完成されたものではない。あくまで 「形にしてみた」 だけ
– 作り込むことで良くなっていく部分がある。その辺りは想像力で補う必要あり。
– しっかり作るとコストがかかるのは当たり前。作業者が必要と言ったコストはもちろん必要
– ここを無視して 「ガンガンいこうぜ」 をやり過ぎると、プロジェクト後半に身動きが取れなくなる
– 確認が済んで問題なければ必ずGOサインを出すこと。
あやふやなままだと作り込みに入れない
© historia Inc. #ue4fest
Airtone では初期にプロトタイプを量産し
早い段階でゲームデザインを確立させています
© historia Inc. #ue4fest
Airtone プロトタイプ制作過程
https://youtu.be/WswQn7mT7yc
© historia Inc. #ue4fest
ここまでのまとめ
 限られた工数の中でクオリティを高めるために、"最適な完成度" を目指す
– 最適な完成度を導くために、要件定義を密に行う
 要件が定まらない場合はイメージを共有するために雑に作ってみる
– ただし “雑に作ってみる” という事について皆が理解する
© historia Inc. #ue4fest
少人数UE4開発における共通の悩み
© historia Inc. #ue4fest
カスタムビルドエンジンにする?
(エンジン改造する?)
© historia Inc. #ue4fest
カスタムビルドエンジンにおけるメリットとデメリット
 メリット
– プロジェクト固有の改造ができる(どうしてもやりたい場面は出てくる)
– バグがあったら自分たちで修正できる(報告してからの修正対応を待てない)
– 必要なログを入れたり、深い部分のデバッグがやりやすくなる
 デメリット
– プロジェクト全体の動きが遅くなる(エンジンがバージョン管理され、手軽さが無くなってくる)
– エンジン更新に対するマージコストが大きい
– 自分たちが入れた改造によるエンバグの可能性
© historia Inc. #ue4fest
Airtone に求められる品質をクリアするためには
カスタムビルドエンジンにしないという選択肢は難しい
© historia Inc. #ue4fest
ただし Airtone のエンジニアは 4人 のみ
© historia Inc. #ue4fest
Airtone におけるエンジニアの大まかな分担
原
スケジュール管理 / ツール全般 / システム
プラットフォーム対応 / 最適化
N さん システム / 演出 / シェーダー
K くん UI全般 / SE組み込み / Jenkins管理
E くん ヘルプ対応 / チャートデザイン兼任
少人数だからこそ、それぞれにかかる負担は大きい…
© historia Inc. #ue4fest
開発期間全体を通して、エンジンの保守に
工数を割ける程の余裕はない
↓
できるだけ移行時期を後ろに持っていきたい
© historia Inc. #ue4fest
カスタムビルドエンジンへの移行を遅らせるために
 カスタムビルドエンジンへの移行予定日を決める
– Airtone の場合は規模感を考慮し、オールインの2ヶ月前を目安に予定を立てた
 マージコストを極力減らせるように進める
– カスタムビルドエンジンに移行した後は、基本的にエンジンのバージョンアップは行わない
– どうしても必要なパッチは随時当てる
 プレビュー版で公開された新機能の検証は捨てブランチで
– 捨てブランチで効果を確認し、結果次第で移行予定日を調整する
© historia Inc. #ue4fest
カスタムビルドエンジンへの移行を遅らせるために
諦めなければいけない部分もある
(絵作りにおける抜本的な改修はできないとか…)
↓
これもチームで検討して "最適な完成度" を目指す
© historia Inc. #ue4fest
ここまでのまとめ
 カスタムビルドエンジンを使うメリット / デメリットを理解する
 少人数開発で保守コストを払えないなら、できるだけ移行時期を遅らせる
– マージコストを極力減らす運用を心掛ける
 それによってできない部分は諦める
– 諦めて良い部分かどうかはチームと相談
© historia Inc. #ue4fest
ここからは、もう少し具体的な事例として
Airtoneで実装した機能やツールをご紹介します
© historia Inc. #ue4fest
ここでも重要なのは
"最適な完成度" を目指す
ということ
© historia Inc. #ue4fest
なるべく工数を減らしつつ
作品としてのクオリティを出したい
↓
ツール整備
プロシージャル生成
© historia Inc. #ue4fest
チャートエディタ
© historia Inc. #ue4fest
Airtone におけるチャートデザイン作業
© historia Inc. #ue4fest
1.複数種類のノーツを配置(ここだけは普通のリズムゲームと同じ)
© historia Inc. #ue4fest
2.ジェットコースターのように、コース自体が3D空間上で曲がる
© historia Inc. #ue4fest
3.コース上には5本のレーンが存在し、それぞれが円周上で移動する
© historia Inc. #ue4fest
4.トンネルに入ると、レーンが円周上ではなく自由に動く
© historia Inc. #ue4fest
5.コース周辺に曲のリズムに合わせたエフェクトを発生させる
© historia Inc. #ue4fest
普通のリズムゲームよりも明らかに作業量が多い
© historia Inc. #ue4fest
専用のチャートエディタを作って
開発効率を上げよう
© historia Inc. #ue4fest
要件定義
 チャートデザイナーからの要望
– タイムライン上にキーを打ち、ノーツのタイミング調整や演出を入れていきたい
– できれば MIDI エディタのようなインターフェースでコピペ等は使えるようにしたい
– 作業内容は即時画面上に反映され、簡単にビジュアル面のプレビューをしたい
– プレビューで確認した後、実際にプレイ確認するまでのフローを確立したい
– 演出は同じIDで指定するが、ステージを変えた時にステージに合った演出が出てほしい
© historia Inc. #ue4fest
要件定義
 アーティストからの要望
– コースの周りやステージ全体に発生する演出はアーティストが実装するが、
タイミングはチャートによって変わるのでチャートデザイナーに任せたい
– チャートが調整された後に、アーティストが調整をかけなければいけないフローだと辛い
© historia Inc. #ue4fest
Airtone チャートエディタ
https://youtu.be/3kZvOnLJfi8
© historia Inc. #ue4fest
実装内容
 シーケンサーを専用チャートエディタとして改造
– キーのコピペやスナップ等、シーケンサーの標準機能はほぼ使える
– MIDIエディタのように、目盛のハイライトやキーボードでの打ち込みに対応
– シーケンサーの関連モジュールをそのままプロジェクト側にコピーすることで、
エンジン改造を回避(シーケンサーとしてのバージョンアップは必要無いと判断)
© historia Inc. #ue4fest
実装内容
 タイムライン上に構築された内容はViewport上にリアルタイム反映
– スプラインとノーツのメッシュを用いた最低限のプレビュー機能を提供
– Viewportで使っているカメラを乗っ取り、実際の見た目に近付ける
 演出トリガー用にアセット指定のイベントトラックを新規に実装
– トリガーの配置はチャートデザイナー、トリガーの内容はアーティストが担当
© historia Inc. #ue4fest
これを使って Airtone では 約100チャート を実装
(チャートデザイナーの皆さん、お疲れ様でした)
© historia Inc. #ue4fest
チャートエディタ完成までの道のりを
もう少し掘り下げてみます
© historia Inc. #ue4fest
チャートエディタ完成までの流れ
7月
• プロジェクト発足
• プロトタイプを量産しつつ、ゲームデザインを模索
8月
• 1曲通して遊べるプロトタイプの完成
• Excel / MIDI からチャートを作る簡易的な仕組みの構築
9月
• ノーツ全種実装
• チャートツール仕様策定
10月 • チャートツール制作開始
11月 • チャートツールを使ったチャート制作開始
12月 • チャートツールを使ったチャート制作に完全移行
© historia Inc. #ue4fest
8月にはもうプロトタイプが動作している必要がある
↓
そこまでにチャートエディタが完成するはずもないので
“とりあえず打ち込むことはできる” レベルの簡易ツールを用意
© historia Inc. #ue4fest
ゲームデザインが定まらないまま
豪華なツールを作るのはリスクが高い
簡易的なツールでお茶を濁すのは大事
© historia Inc. #ue4fest
工数と効果が見合わなかったため、諦めた部分
 エディット時の完璧な安定性
– UE4.13時点でのシーケンサーに潜在するバグらしき挙動には目をつむった
– ランタイムでの安定性が高ければ問題無し
 演出(エフェクト)のリアルタイムプレビュー
– そもそもスプライン自体が簡易的な表示だったため、
エフェクトを含めた演出の完全なプレビューは意味が無いと判断
 各レーンの曲線が歪なところが散見される
– 計算でやる以上、思い描く完璧な曲がり方にはならない(ある程度でOK)
© historia Inc. #ue4fest
作品の根幹部分であるため
色々あったけど概ね良かった
© historia Inc. #ue4fest
今だから思う、「もっと良く出来たのでは?」
 サブトラック機能(パターンのプリセット化)
– 同じ曲ではチャートレベルが変わってもノーツ配置、演出が共通なことが多い
– サブトラックを作れるようにしてプリセット化できたらもっと効率化できたかも
 評価基準の可視化
– 複数人で作業する上で、クオリティの統一が大きなコストとなった
– 出来上がったチャートの良し悪し確認コストを減らすために、
評価の手助けとなる評価基準を収集できる仕組みを検討した方が良かったかも
(ノーツ密度、コースの曲げ具合、エフェクトとノーツの重なり、etc…)
© historia Inc. #ue4fest
プロシージャルメッシュの活用
※画像貼る
プロシージャルメッシュの活用
© historia Inc. #ue4fest
Airtone では、いくつかの演出を
プロシージャルメッシュ で作っています
© historia Inc. #ue4fest
© historia Inc. #ue4fest
各種レーンに関してはもちろんですが
その他にもあるので一例をご紹介
© historia Inc. #ue4fest
アーティスト要望
正三角形だけで作られた球が、特定の位置から
徐々に三角形が縮んで壊れていく演出を入れたい
© historia Inc. #ue4fest
Airtone プロシージャルメッシュ活用事例
https://youtu.be/icNy8c9FcKU
© historia Inc. #ue4fest
プロシージャルメッシュで 正20面体(Geodesic Dome)を生成
更に、任意の数で三角形を分割できるように対応
(ConstructionScript でプレビュー可能)
分割
© historia Inc. #ue4fest
三角形が縮む演出は 頂点アニメーション で対応
基準位置や移動方向、移動量は
Normal や VertexColor をバッファとして使用
© historia Inc. #ue4fest
プロシージャルメッシュを活用することの利点
 アーティストが用意するには手間暇がかかる演出の工数を削減できる
 ConstructionScript と連携することで柔軟に形状を変化させることが可能
 VertexColor 等をバッファ代わりにして任意のパラメータをマテリアルで使用できる
© historia Inc. #ue4fest
音と演出の同期
音と演出の同期
© historia Inc. #ue4fest
リズムゲームの醍醐味
音に合わせた背景演出
Airtone 音と演出の同期
https://youtu.be/Wtjdd5LmF6A
© historia Inc. #ue4fest
音と同期して背景が動いているだけでも
それっぽく見える
© historia Inc. #ue4fest
Airtone で使われている、音と同期した演出
1. 1拍 / 2拍 / 4拍 毎に背景がリズム良く上下に動く
– ほとんどの背景がこれで頂点アニメーションしている
2. 各種アニメーションやモーショングラフィックスの速度がBPMに合わせて変動する
– リズムに合わせて動くと気持ち良い
3. 音の周波数からアニメーションを生成する
– スペクトラムアナライザを Wwise プラグインとして用意
– 音のアタックを取ってエフェクトを出したり
© historia Inc. #ue4fest
音に関するパラメータを受け取りたい
↓
Wwise からコールバックで受け取る
Wwise プラグインを作る
© historia Inc. #ue4fest
音のパラメータに合わせて世界全体を動かしたい
↓
マテリアルパラメータコレクションが大活躍
(プロパティを設定する場所が集約される)
© historia Inc. #ue4fest
Wwise
音のパラメータをコールバック通知
マテリアルパラメータコレクション
背景マテリアルA
各種マテリアル
背景マテリアルB 背景マテリアルC
背景マテリアルD 背景マテリアルE 背景マテリアルF
© historia Inc. #ue4fest
リップシンク
© historia Inc. #ue4fest
Airtone のヒロイン “ネオン” は
フルボイス & リップアニメーション 対応
© historia Inc. #ue4fest
リップアニメーションは手付け?
© historia Inc. #ue4fest
アーティストが死んじゃう
(ヾノ・∀・`)ムリムリ
© historia Inc. #ue4fest
フェイシャルキャプチャー?
© historia Inc. #ue4fest
機材を持ってません
(ヾノ・∀・`)ムリムリ
© historia Inc. #ue4fest
母音推定?
© historia Inc. #ue4fest
音声ファイルを解析したら母音を推定できそう
© historia Inc. #ue4fest
http://tips.hecomi.com/entry/20131110/1384096497
みんな大好き “凹みTips”
© historia Inc. #ue4fest
記事より引用
1. 微小時間音声データ取り込み(WAV ファイル or Mic)
2. ハミング窓を掛けて周期波形にする(周波数高域ノイズ低減)
3. レビンソン・ダービン法で LPC(線形予測分析)係数を得る
4. 得られた係数を元にしたデジタルフィルタの周波数応答を得る
5. これが LPC スペクトル包絡線
6. 包絡線の山から1番目と2番目のフォルマント( F1、F2 )を特定
7. F1、F2 の分布から母音特定
© historia Inc. #ue4fest
要約すると、音声ファイルを解析する事で
微小区間毎に以下の情報が得られます
時間, 第1フォルマント, 第2フォルマント, ボリューム
© historia Inc. #ue4fest
解析された情報の使い方
 第1フォルマント、第2フォルマントの値から母音の推定が可能
– 第1フォルマントが 600 ~ 1400 かつ、
第2フォルマントが 900 ~ 2000 ならば 「あ」 と推定など
– これらの値は人によって変わってしまうので、論文等に載っている
サンプリング情報を参考にしつつ、ネオンの声優さんに合わせて細かく調整
 ボリュームカーブを元に、リップアニメーションのブレンドタイミングを調整
– ある程度のボリュームが無ければ口を開けない
© historia Inc. #ue4fest
Wavファイル Lipファイル
Voice2Lip コンバータ
LipCurveアセット
LipPlayerコンポーネント
インポート
ネオンアニメーションBP
LipCurve指定で再生
コールバックでフォルマント、ボリュームを通知して加算するリップアニメを指定
ネオンBP
UE4
© historia Inc. #ue4fest
これにより、ほとんどのケースで上手くアニメーションされた
更なるクオリティ向上のためには閾値の調整が必要
↓
解析された情報を可視化する仕組みを作る
© historia Inc. #ue4fest
Airtone リップシンク調整ツール
https://youtu.be/5fcxb2x5cVk
© historia Inc. #ue4fest
アーティストが閾値やアニメーションのブレンドタイミングを調整
調整
© historia Inc. #ue4fest
可視化はとても大事
© historia Inc. #ue4fest
工数と効果が見合わなかったため、諦めた部分
 完璧なリップシンク
– あくまで “推定” なので、完璧なリップシンクを目指すと調整にコストがかかる
– アニメ調なのが幸いして、完璧じゃなくても割と良く見える
 Voice2LipコンバータをUE4に組み込む(全てをUE4内で完結させる)
– 解析に使っている外部ライブラリが64bit対応されていなかった
– そもそもwavファイル用のインポーターは既にUE4にあり、
一つの拡張子に対して複数のインポーターを作るのは現状だと不可能
© historia Inc. #ue4fest
フォルマント解析に関する詳細はこちらから
 フォルマントから母音推定してリップシンクを目指してみる - 凹みTips
– http://tips.hecomi.com/entry/20131110/1384096497
 線形予測分析(LPC)-人工知能に関する断創録
– http://aidiary.hatenablog.com/entry/20120415/1334458954
© historia Inc. #ue4fest
デバッグツール
© historia Inc. #ue4fest
RHI のメモリダンプをグラフ表示
© historia Inc. #ue4fest
© historia Inc. #ue4fest
1フレーム内での SpawnActor 回数を可視化
© historia Inc. #ue4fest
© historia Inc. #ue4fest
Mip バイアス調整用テクスチャジェネレータ
© historia Inc. #ue4fest
解像度を指定しつつ、
Mip レベルによって色が違う
単色テクスチャを生成
© historia Inc. #ue4fest
© historia Inc. #ue4fest
特に VR コンテンツでは、エディタ上のプレビューと
実機で表示される Mip レベルに違いが出るので注意
© historia Inc. #ue4fest
手にアタッチされたデバッグメニュー
© historia Inc. #ue4fest
目線追従メニューだと邪魔
Vive のメニューを参考にした
© historia Inc. #ue4fest
まとめ
© historia Inc. #ue4fest
まとめ
 限られた工数の中でクオリティを高めるために、"最適な完成度" を目指す
 要件が定まらない場合はイメージを共有するために “雑に作ってみる”
 カスタムビルドエンジンを使うメリット / デメリットを理解する
 少人数開発で保守コストを払えないなら、できるだけ移行時期を遅らせる
 ツール整備、プロシージャル生成で全体のコストを削減する
© historia Inc. #ue4fest
Airtone は 2017年春 発売予定!
© historia Inc. #ue4fest
ご清聴ありがとうございました

少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -

  • 1.
    © historia Inc.#ue4fest 少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 - historia Inc. 原 龍
  • 2.
    © historia Inc.#ue4fest 登壇者紹介  Airtone(AMG GAMES 様) – Lead Engineer  過去作 – アーガイルシフト(バンダイナムコエンターテインメント 様)  Lead Engineer – ランページ ランド ランカーズ(スクウェア・エニックス 様)  Lead Server Engineer  Client Engineer  コミュニティ活動 – NekoNekoOnline プラグインの WebApi 機能における設計思想 & 実装Tips  http://hogetatu.hatenablog.com/entry/2016/12/01/000000 – GameplayDebugger をプロジェクト用にカスタマイズして利用する  http://hogetatu.hatenablog.com/entry/2016/12/03/002946
  • 3.
    © historia Inc.#ue4fest 今回ご紹介するもの
  • 4.
    © historia Inc.#ue4fest 弊社で開発中の “Airtone” を実例に挙げ 少人数開発における開発の流れ 効率化のために実装した機能 をご紹介します
  • 5.
    © historia Inc.#ue4fest アジェンダ  Airtone のご紹介  少人数開発で必要なもの  Airtone で実装した機能やツール
  • 6.
    © historia Inc.#ue4fest まずは “Airtone” のご紹介
  • 7.
    © historia Inc.#ue4fest AIRTONE VR Gameplay Movie I promise you Yasushi Asada feat Mary https://youtu.be/jShjM3ivg7Y
  • 8.
    © historia Inc.#ue4fest ジャンル エアーリズムアクション(VR) ハードウェア / プラットフォーム • Oculus Rift / Oculus Store • Vive / Steam エンジン / ミドルウェア • Unreal Engine 4(UE 4.12 → 4.14) • Wwise 開発期間 約10ヵ月 開発体制(ピーク時) • プロデューサー & ディレクター × 1 • ゲームデザイナー × 2 • エンジニア × 4 • アーティスト × 3 • UIデザイナー × 1 • サウンド & チャートデザイナー × 3 (社外)
  • 9.
    © historia Inc.#ue4fest 0 2 4 6 8 10 12 14 16 7月 8月 9月 10月 11月 12月 1月 2月 3月 人月 ディレクター ゲームデザイナー エンジニア アーティスト UIデザイナー サウンド  7月 – プロジェクト発足 – プロトタイプ量産  8月 – 1曲通しプロトタイプ完成  11月 – α 版完成  2月 – β 版完成
  • 10.
    © historia Inc.#ue4fest Airtone は 10時間以上遊べるボリュームのVRリズムゲーム です それを 4人 から始め、最終的に 14人 で 10ヶ月 という期間で作ってます (控えめに言っても少人数だったなと思います)
  • 11.
    © historia Inc.#ue4fest 今回はこのような少人数開発を どのように実現したかについてご紹介します
  • 12.
    © historia Inc.#ue4fest 少人数開発で必要なもの
  • 13.
    © historia Inc.#ue4fest 常に "最適な完成度" を目指すこと
  • 14.
    © historia Inc.#ue4fest 一例としてツール制作について掘り下げてみます
  • 15.
    © historia Inc.#ue4fest ツール制作における工数と効果の関係 工数 効果
  • 16.
    © historia Inc.#ue4fest ツール制作における工数と効果の関係 工数 効果 ツールとして実運用に耐えうる ツールとして機能し始める ぼくがつくったさいきょうのツール
  • 17.
    © historia Inc.#ue4fest ツール制作における工数と効果の関係 工数 効果 ツールとして実運用に耐えうる ツールとして機能し始める ぼくがつくったさいきょうのツール それともこの辺でも大丈夫? 今回必要なのはこの辺?
  • 18.
    © historia Inc.#ue4fest クオリティはできるだけ上げたい でも工数は無限ではない ↓ 作るものに応じた “最適な完成度” を目指す
  • 19.
    © historia Inc.#ue4fest "最適な完成度" を導き出すために
  • 20.
    © historia Inc.#ue4fest 何が必要とされているのかを明確にする
  • 21.
    © historia Inc.#ue4fest 要件定義は大事  何が求められているのか、実際にそれを必要としている人に直接確認する  この相談は十分に時間をとる。考えうる可能性の話もする。想像力は大事  その上で 「やらなければいけないこと」 と 「できると良いこと」 を決める
  • 22.
    © historia Inc.#ue4fest 完成形のイメージが固まらない場合は、とりあえず “雑に作ってみる”  完成形を正確にイメージでき、それを言語化できる人はあまりいない  何かそれっぽいものを作って出してみると話し合いが短くて済む  複数人で 「誰もよくわかっていない何か」 を机上で考えている時間は無駄
  • 23.
    © historia Inc.#ue4fest “雑に作ってみる” 時にこそ、UE4の真価を発揮できる とにかく速く、それっぽく、プロトタイプが作れる
  • 24.
    © historia Inc.#ue4fest ただし、これは高確率で地雷を踏みます
  • 25.
    © historia Inc.#ue4fest 地雷の要因  雑に作ったことが忘れ去られる – 「完成している」 と思っていた機能がプロトタイプコードで、 実は見た目だけだったという事がプロジェクト後半に発覚するのは割とよくある話 – プロジェクト後半でバグが出たり、機能拡張時の対応コストが高くなって辛いやつ  “とりあえず” で使いまわしたアセットが残り続けて想定外の依存関係を生む – プロジェクト後半に最適化等を行うためにアセットを整理しようとした時に、 様々なところに依存が発生していて手が付けられない状態になっていたり…
  • 26.
    © historia Inc.#ue4fest “雑に作ってみる” を 皆が理解する 事が大事
  • 27.
    © historia Inc.#ue4fest “雑に作ってみる” ということ(エンジニア / アーティスト編)  「雑でもいいから見せる事の重要性」 を理解する – 全てを言語化するのは難しいし、言語化してもわかりにくいものは可視化するしかない – 相手が自分の感覚を正確に理解してくれるという考えは幻想。諦めて手を動かそう – だからと言って作り込み過ぎると、ボツになった時に工数的にも精神的にも辛いから雑で良い – 確認が済んだら、相応のコストを払って作り込む期間を作るのは必須
  • 28.
    © historia Inc.#ue4fest “雑に作ってみる” ということ(ディレクター / ゲームデザイナー編)  「雑に作られていること」 を理解する – 目の前にあるものは完成されたものではない。あくまで 「形にしてみた」 だけ – 作り込むことで良くなっていく部分がある。その辺りは想像力で補う必要あり。 – しっかり作るとコストがかかるのは当たり前。作業者が必要と言ったコストはもちろん必要 – ここを無視して 「ガンガンいこうぜ」 をやり過ぎると、プロジェクト後半に身動きが取れなくなる – 確認が済んで問題なければ必ずGOサインを出すこと。 あやふやなままだと作り込みに入れない
  • 29.
    © historia Inc.#ue4fest Airtone では初期にプロトタイプを量産し 早い段階でゲームデザインを確立させています
  • 30.
    © historia Inc.#ue4fest Airtone プロトタイプ制作過程 https://youtu.be/WswQn7mT7yc
  • 31.
    © historia Inc.#ue4fest ここまでのまとめ  限られた工数の中でクオリティを高めるために、"最適な完成度" を目指す – 最適な完成度を導くために、要件定義を密に行う  要件が定まらない場合はイメージを共有するために雑に作ってみる – ただし “雑に作ってみる” という事について皆が理解する
  • 32.
    © historia Inc.#ue4fest 少人数UE4開発における共通の悩み
  • 33.
    © historia Inc.#ue4fest カスタムビルドエンジンにする? (エンジン改造する?)
  • 34.
    © historia Inc.#ue4fest カスタムビルドエンジンにおけるメリットとデメリット  メリット – プロジェクト固有の改造ができる(どうしてもやりたい場面は出てくる) – バグがあったら自分たちで修正できる(報告してからの修正対応を待てない) – 必要なログを入れたり、深い部分のデバッグがやりやすくなる  デメリット – プロジェクト全体の動きが遅くなる(エンジンがバージョン管理され、手軽さが無くなってくる) – エンジン更新に対するマージコストが大きい – 自分たちが入れた改造によるエンバグの可能性
  • 35.
    © historia Inc.#ue4fest Airtone に求められる品質をクリアするためには カスタムビルドエンジンにしないという選択肢は難しい
  • 36.
    © historia Inc.#ue4fest ただし Airtone のエンジニアは 4人 のみ
  • 37.
    © historia Inc.#ue4fest Airtone におけるエンジニアの大まかな分担 原 スケジュール管理 / ツール全般 / システム プラットフォーム対応 / 最適化 N さん システム / 演出 / シェーダー K くん UI全般 / SE組み込み / Jenkins管理 E くん ヘルプ対応 / チャートデザイン兼任 少人数だからこそ、それぞれにかかる負担は大きい…
  • 38.
    © historia Inc.#ue4fest 開発期間全体を通して、エンジンの保守に 工数を割ける程の余裕はない ↓ できるだけ移行時期を後ろに持っていきたい
  • 39.
    © historia Inc.#ue4fest カスタムビルドエンジンへの移行を遅らせるために  カスタムビルドエンジンへの移行予定日を決める – Airtone の場合は規模感を考慮し、オールインの2ヶ月前を目安に予定を立てた  マージコストを極力減らせるように進める – カスタムビルドエンジンに移行した後は、基本的にエンジンのバージョンアップは行わない – どうしても必要なパッチは随時当てる  プレビュー版で公開された新機能の検証は捨てブランチで – 捨てブランチで効果を確認し、結果次第で移行予定日を調整する
  • 40.
    © historia Inc.#ue4fest カスタムビルドエンジンへの移行を遅らせるために 諦めなければいけない部分もある (絵作りにおける抜本的な改修はできないとか…) ↓ これもチームで検討して "最適な完成度" を目指す
  • 41.
    © historia Inc.#ue4fest ここまでのまとめ  カスタムビルドエンジンを使うメリット / デメリットを理解する  少人数開発で保守コストを払えないなら、できるだけ移行時期を遅らせる – マージコストを極力減らす運用を心掛ける  それによってできない部分は諦める – 諦めて良い部分かどうかはチームと相談
  • 42.
    © historia Inc.#ue4fest ここからは、もう少し具体的な事例として Airtoneで実装した機能やツールをご紹介します
  • 43.
    © historia Inc.#ue4fest ここでも重要なのは "最適な完成度" を目指す ということ
  • 44.
    © historia Inc.#ue4fest なるべく工数を減らしつつ 作品としてのクオリティを出したい ↓ ツール整備 プロシージャル生成
  • 45.
    © historia Inc.#ue4fest チャートエディタ
  • 46.
    © historia Inc.#ue4fest Airtone におけるチャートデザイン作業
  • 47.
    © historia Inc.#ue4fest 1.複数種類のノーツを配置(ここだけは普通のリズムゲームと同じ)
  • 48.
    © historia Inc.#ue4fest 2.ジェットコースターのように、コース自体が3D空間上で曲がる
  • 49.
    © historia Inc.#ue4fest 3.コース上には5本のレーンが存在し、それぞれが円周上で移動する
  • 50.
    © historia Inc.#ue4fest 4.トンネルに入ると、レーンが円周上ではなく自由に動く
  • 51.
    © historia Inc.#ue4fest 5.コース周辺に曲のリズムに合わせたエフェクトを発生させる
  • 52.
    © historia Inc.#ue4fest 普通のリズムゲームよりも明らかに作業量が多い
  • 53.
    © historia Inc.#ue4fest 専用のチャートエディタを作って 開発効率を上げよう
  • 54.
    © historia Inc.#ue4fest 要件定義  チャートデザイナーからの要望 – タイムライン上にキーを打ち、ノーツのタイミング調整や演出を入れていきたい – できれば MIDI エディタのようなインターフェースでコピペ等は使えるようにしたい – 作業内容は即時画面上に反映され、簡単にビジュアル面のプレビューをしたい – プレビューで確認した後、実際にプレイ確認するまでのフローを確立したい – 演出は同じIDで指定するが、ステージを変えた時にステージに合った演出が出てほしい
  • 55.
    © historia Inc.#ue4fest 要件定義  アーティストからの要望 – コースの周りやステージ全体に発生する演出はアーティストが実装するが、 タイミングはチャートによって変わるのでチャートデザイナーに任せたい – チャートが調整された後に、アーティストが調整をかけなければいけないフローだと辛い
  • 56.
    © historia Inc.#ue4fest Airtone チャートエディタ https://youtu.be/3kZvOnLJfi8
  • 57.
    © historia Inc.#ue4fest 実装内容  シーケンサーを専用チャートエディタとして改造 – キーのコピペやスナップ等、シーケンサーの標準機能はほぼ使える – MIDIエディタのように、目盛のハイライトやキーボードでの打ち込みに対応 – シーケンサーの関連モジュールをそのままプロジェクト側にコピーすることで、 エンジン改造を回避(シーケンサーとしてのバージョンアップは必要無いと判断)
  • 58.
    © historia Inc.#ue4fest 実装内容  タイムライン上に構築された内容はViewport上にリアルタイム反映 – スプラインとノーツのメッシュを用いた最低限のプレビュー機能を提供 – Viewportで使っているカメラを乗っ取り、実際の見た目に近付ける  演出トリガー用にアセット指定のイベントトラックを新規に実装 – トリガーの配置はチャートデザイナー、トリガーの内容はアーティストが担当
  • 59.
    © historia Inc.#ue4fest これを使って Airtone では 約100チャート を実装 (チャートデザイナーの皆さん、お疲れ様でした)
  • 60.
    © historia Inc.#ue4fest チャートエディタ完成までの道のりを もう少し掘り下げてみます
  • 61.
    © historia Inc.#ue4fest チャートエディタ完成までの流れ 7月 • プロジェクト発足 • プロトタイプを量産しつつ、ゲームデザインを模索 8月 • 1曲通して遊べるプロトタイプの完成 • Excel / MIDI からチャートを作る簡易的な仕組みの構築 9月 • ノーツ全種実装 • チャートツール仕様策定 10月 • チャートツール制作開始 11月 • チャートツールを使ったチャート制作開始 12月 • チャートツールを使ったチャート制作に完全移行
  • 62.
    © historia Inc.#ue4fest 8月にはもうプロトタイプが動作している必要がある ↓ そこまでにチャートエディタが完成するはずもないので “とりあえず打ち込むことはできる” レベルの簡易ツールを用意
  • 63.
    © historia Inc.#ue4fest ゲームデザインが定まらないまま 豪華なツールを作るのはリスクが高い 簡易的なツールでお茶を濁すのは大事
  • 64.
    © historia Inc.#ue4fest 工数と効果が見合わなかったため、諦めた部分  エディット時の完璧な安定性 – UE4.13時点でのシーケンサーに潜在するバグらしき挙動には目をつむった – ランタイムでの安定性が高ければ問題無し  演出(エフェクト)のリアルタイムプレビュー – そもそもスプライン自体が簡易的な表示だったため、 エフェクトを含めた演出の完全なプレビューは意味が無いと判断  各レーンの曲線が歪なところが散見される – 計算でやる以上、思い描く完璧な曲がり方にはならない(ある程度でOK)
  • 65.
    © historia Inc.#ue4fest 作品の根幹部分であるため 色々あったけど概ね良かった
  • 66.
    © historia Inc.#ue4fest 今だから思う、「もっと良く出来たのでは?」  サブトラック機能(パターンのプリセット化) – 同じ曲ではチャートレベルが変わってもノーツ配置、演出が共通なことが多い – サブトラックを作れるようにしてプリセット化できたらもっと効率化できたかも  評価基準の可視化 – 複数人で作業する上で、クオリティの統一が大きなコストとなった – 出来上がったチャートの良し悪し確認コストを減らすために、 評価の手助けとなる評価基準を収集できる仕組みを検討した方が良かったかも (ノーツ密度、コースの曲げ具合、エフェクトとノーツの重なり、etc…)
  • 67.
    © historia Inc.#ue4fest プロシージャルメッシュの活用 ※画像貼る プロシージャルメッシュの活用
  • 68.
    © historia Inc.#ue4fest Airtone では、いくつかの演出を プロシージャルメッシュ で作っています
  • 69.
  • 70.
    © historia Inc.#ue4fest 各種レーンに関してはもちろんですが その他にもあるので一例をご紹介
  • 71.
    © historia Inc.#ue4fest アーティスト要望 正三角形だけで作られた球が、特定の位置から 徐々に三角形が縮んで壊れていく演出を入れたい
  • 72.
    © historia Inc.#ue4fest Airtone プロシージャルメッシュ活用事例 https://youtu.be/icNy8c9FcKU
  • 73.
    © historia Inc.#ue4fest プロシージャルメッシュで 正20面体(Geodesic Dome)を生成 更に、任意の数で三角形を分割できるように対応 (ConstructionScript でプレビュー可能) 分割
  • 74.
    © historia Inc.#ue4fest 三角形が縮む演出は 頂点アニメーション で対応 基準位置や移動方向、移動量は Normal や VertexColor をバッファとして使用
  • 75.
    © historia Inc.#ue4fest プロシージャルメッシュを活用することの利点  アーティストが用意するには手間暇がかかる演出の工数を削減できる  ConstructionScript と連携することで柔軟に形状を変化させることが可能  VertexColor 等をバッファ代わりにして任意のパラメータをマテリアルで使用できる
  • 76.
    © historia Inc.#ue4fest 音と演出の同期 音と演出の同期
  • 77.
    © historia Inc.#ue4fest リズムゲームの醍醐味 音に合わせた背景演出
  • 78.
  • 79.
    © historia Inc.#ue4fest 音と同期して背景が動いているだけでも それっぽく見える
  • 80.
    © historia Inc.#ue4fest Airtone で使われている、音と同期した演出 1. 1拍 / 2拍 / 4拍 毎に背景がリズム良く上下に動く – ほとんどの背景がこれで頂点アニメーションしている 2. 各種アニメーションやモーショングラフィックスの速度がBPMに合わせて変動する – リズムに合わせて動くと気持ち良い 3. 音の周波数からアニメーションを生成する – スペクトラムアナライザを Wwise プラグインとして用意 – 音のアタックを取ってエフェクトを出したり
  • 81.
    © historia Inc.#ue4fest 音に関するパラメータを受け取りたい ↓ Wwise からコールバックで受け取る Wwise プラグインを作る
  • 82.
    © historia Inc.#ue4fest 音のパラメータに合わせて世界全体を動かしたい ↓ マテリアルパラメータコレクションが大活躍 (プロパティを設定する場所が集約される)
  • 83.
    © historia Inc.#ue4fest Wwise 音のパラメータをコールバック通知 マテリアルパラメータコレクション 背景マテリアルA 各種マテリアル 背景マテリアルB 背景マテリアルC 背景マテリアルD 背景マテリアルE 背景マテリアルF
  • 84.
    © historia Inc.#ue4fest リップシンク
  • 85.
    © historia Inc.#ue4fest Airtone のヒロイン “ネオン” は フルボイス & リップアニメーション 対応
  • 86.
    © historia Inc.#ue4fest リップアニメーションは手付け?
  • 87.
    © historia Inc.#ue4fest アーティストが死んじゃう (ヾノ・∀・`)ムリムリ
  • 88.
    © historia Inc.#ue4fest フェイシャルキャプチャー?
  • 89.
    © historia Inc.#ue4fest 機材を持ってません (ヾノ・∀・`)ムリムリ
  • 90.
    © historia Inc.#ue4fest 母音推定?
  • 91.
    © historia Inc.#ue4fest 音声ファイルを解析したら母音を推定できそう
  • 92.
    © historia Inc.#ue4fest http://tips.hecomi.com/entry/20131110/1384096497 みんな大好き “凹みTips”
  • 93.
    © historia Inc.#ue4fest 記事より引用 1. 微小時間音声データ取り込み(WAV ファイル or Mic) 2. ハミング窓を掛けて周期波形にする(周波数高域ノイズ低減) 3. レビンソン・ダービン法で LPC(線形予測分析)係数を得る 4. 得られた係数を元にしたデジタルフィルタの周波数応答を得る 5. これが LPC スペクトル包絡線 6. 包絡線の山から1番目と2番目のフォルマント( F1、F2 )を特定 7. F1、F2 の分布から母音特定
  • 94.
    © historia Inc.#ue4fest 要約すると、音声ファイルを解析する事で 微小区間毎に以下の情報が得られます 時間, 第1フォルマント, 第2フォルマント, ボリューム
  • 95.
    © historia Inc.#ue4fest 解析された情報の使い方  第1フォルマント、第2フォルマントの値から母音の推定が可能 – 第1フォルマントが 600 ~ 1400 かつ、 第2フォルマントが 900 ~ 2000 ならば 「あ」 と推定など – これらの値は人によって変わってしまうので、論文等に載っている サンプリング情報を参考にしつつ、ネオンの声優さんに合わせて細かく調整  ボリュームカーブを元に、リップアニメーションのブレンドタイミングを調整 – ある程度のボリュームが無ければ口を開けない
  • 96.
    © historia Inc.#ue4fest Wavファイル Lipファイル Voice2Lip コンバータ LipCurveアセット LipPlayerコンポーネント インポート ネオンアニメーションBP LipCurve指定で再生 コールバックでフォルマント、ボリュームを通知して加算するリップアニメを指定 ネオンBP UE4
  • 97.
    © historia Inc.#ue4fest これにより、ほとんどのケースで上手くアニメーションされた 更なるクオリティ向上のためには閾値の調整が必要 ↓ 解析された情報を可視化する仕組みを作る
  • 98.
    © historia Inc.#ue4fest Airtone リップシンク調整ツール https://youtu.be/5fcxb2x5cVk
  • 99.
    © historia Inc.#ue4fest アーティストが閾値やアニメーションのブレンドタイミングを調整 調整
  • 100.
    © historia Inc.#ue4fest 可視化はとても大事
  • 101.
    © historia Inc.#ue4fest 工数と効果が見合わなかったため、諦めた部分  完璧なリップシンク – あくまで “推定” なので、完璧なリップシンクを目指すと調整にコストがかかる – アニメ調なのが幸いして、完璧じゃなくても割と良く見える  Voice2LipコンバータをUE4に組み込む(全てをUE4内で完結させる) – 解析に使っている外部ライブラリが64bit対応されていなかった – そもそもwavファイル用のインポーターは既にUE4にあり、 一つの拡張子に対して複数のインポーターを作るのは現状だと不可能
  • 102.
    © historia Inc.#ue4fest フォルマント解析に関する詳細はこちらから  フォルマントから母音推定してリップシンクを目指してみる - 凹みTips – http://tips.hecomi.com/entry/20131110/1384096497  線形予測分析(LPC)-人工知能に関する断創録 – http://aidiary.hatenablog.com/entry/20120415/1334458954
  • 103.
    © historia Inc.#ue4fest デバッグツール
  • 104.
    © historia Inc.#ue4fest RHI のメモリダンプをグラフ表示
  • 105.
  • 106.
    © historia Inc.#ue4fest 1フレーム内での SpawnActor 回数を可視化
  • 107.
  • 108.
    © historia Inc.#ue4fest Mip バイアス調整用テクスチャジェネレータ
  • 109.
    © historia Inc.#ue4fest 解像度を指定しつつ、 Mip レベルによって色が違う 単色テクスチャを生成
  • 110.
  • 111.
    © historia Inc.#ue4fest 特に VR コンテンツでは、エディタ上のプレビューと 実機で表示される Mip レベルに違いが出るので注意
  • 112.
    © historia Inc.#ue4fest 手にアタッチされたデバッグメニュー
  • 113.
    © historia Inc.#ue4fest 目線追従メニューだと邪魔 Vive のメニューを参考にした
  • 114.
    © historia Inc.#ue4fest まとめ
  • 115.
    © historia Inc.#ue4fest まとめ  限られた工数の中でクオリティを高めるために、"最適な完成度" を目指す  要件が定まらない場合はイメージを共有するために “雑に作ってみる”  カスタムビルドエンジンを使うメリット / デメリットを理解する  少人数開発で保守コストを払えないなら、できるだけ移行時期を遅らせる  ツール整備、プロシージャル生成で全体のコストを削減する
  • 116.
    © historia Inc.#ue4fest Airtone は 2017年春 発売予定!
  • 117.
    © historia Inc.#ue4fest ご清聴ありがとうございました