登壇したのは株式会社ゲームフリークで開発部サウンドデザイナーなどを務める一之瀬 剛氏と株式会社コネクテコ 代表の北村 一樹氏、そしてフリーランスのサウンドプログラマーの岩本 翔氏です。
ゲームフリークに入社して以来、幼少期より培ってきた音楽の腕を活かして、『ポケットモンスター 金・銀(以降、金・銀と表記)』から歴代の『ポケットモンスター』シリーズのサウンドデザインに携わる
2008年にカプコンに入社後、2017年にコネクテコを設立。音楽大学の講師も務めつつ、現在は『ポケットモンスター』シリーズ等のゲームで効果音を中心としたサウンドデザインなどを担当
スクウェア・エニックス入社後、2018年に独立。『ポケットモンスター』シリーズでは、『Pokémon LEGENDS アルセウス』、『ポケットモンスター スカーレット・バイオレット』のサウンドプログラマーも担当。過去に『ゲームメーカーズ スクランブル』にも登壇
講演では『ポケモン』シリーズのサウンドを「環境鳴き声」「環境音」「効率化・最適化」の3つの観点から解説しました。
現実世界では実録できない「ポケモンの鳴き声」で作る環境音
「環境鳴き声」については一之瀬氏が解説。
一般的に、プレイヤー周辺の環境音をリアルに表現するためには、鳥や虫といった実際の生き物の鳴き声や動作音を使います。
しかし、ポケモンの世界には一般的な動物は存在していないため、環境鳴き声もポケモンの鳴き声で作らなければなりません。
このルールに則って『ポケットモンスター』シリーズの環境音がどのように制作されてきたか、その歴史を振り返ります。
環境鳴き声を初実装した『ポケットモンスター ルビー・サファイア』
初めて環境鳴き声が採用されたのは、2002年に発売されたゲームボーイアドバンス用ソフト『ポケットモンスター ルビー・サファイア(以降、ルビー・サファイアと表記)』。
環境鳴き声を取り入れることで、プレイヤーが「ここにポケモンがいそう!」と想像できるようになりました。熟練プレイヤーであれば「あれは○○の鳴き声だ!」と予測することもでき、ポケモンの発見を楽しめるようになっています。
『ルビー・サファイア』のゲーム画面。フィールドに生息するポケモンの鳴き声を再生する
仕組みとしては、フィールドに生息するポケモンのエンカウントテーブルを参照し、その鳴き声をランダムで再生するシンプルなものだったとのこと。
講演では、動画で環境鳴き声としてポケモンの鳴き声を再生。なお、鳴き声はジグザグマのものだった
『ポケットモンスター サン・ムーン』で進化する環境鳴き声
シリーズ3作目となる『ルビー・サファイア』で実装された環境鳴き声は、シリーズ7作目となる『ポケットモンスター サン・ムーン(以降、サン・ムーンと表記)』でさらなる進化を遂げました。『サン・ムーン』では、3DSの持つ表現力の上で自然の豊かさや情景を表すというコンセプトだったためです。
『ルビー・サファイア』のときはポケモン1体につき環境鳴き声は1つのみでした。それは図鑑での鳴き声再生やポケモンをバトルに放った際の鳴き声として使用されていたものです。この鳴き声をフィールドで鳴らしただけでは、現実世界の鳥のさえずりや虫の声のような、情緒ある環境音に聞こえないという問題が発生しました。
そこで『サン・ムーン』では、いくつかの厳選されたポケモンに、専用の環境鳴き声を制作しました。シーケンスを用いて音量やピッチをランダムに再生することで、より情緒のある環境音っぽさを目指したとのことです。
再生された動画では、音の大小やステレオによる音の位置、ピッチの変化などをわかりやすく体感できた
カメラ操作を導入したNintendo Switch『ソード・シールド』で起きた環境音の変化
Nintendo Switchでの初『ポケットモンスター』作品、『ポケットモンスター ソード・シールド(以降、ソード・シールドと表記)』では、「ワイルドエリア」が登場します。カメラを自由に操作して360度どこへでも行けるこのエリアの環境音の実装に、一之瀬氏は途方に暮れたそうです。
サウンドのミドルウェアの調査の一環として一之瀬氏が参加した2016年の「Wwise Tour」というイベントで講師を務めていたのがコネクテコの北村氏でした。北村氏によって次世代の環境音の表現を作る兆しが見えたと一之瀬氏は言います。
『ソード・シールド』以降の環境鳴き声が、どのように発展していったのか北村氏が説明します。
そうだ、山へいこう。実際に山で録音してみた
『ソード・シールド』から最新の『ポケットモンスター スカーレット・バイオレット(以降、スカーレット・バイオレットと表記)』における音響空間の目標は、「生物が人間とポケモンしか存在しない自然の環境音を、どれだけリアルに表現できるか」ということでした。
通常、環境音はフィールドレコーディングによる自然音の収録やサンプリングされた素材を使用するケースが一般的ですが、現実世界の生き物を使わない『ポケモン』シリーズではこの手法を使うことができません。
現実世界の鳥や虫が鳴いていない環境音を作るためには、環境音と鳴き声を分解する必要がありました。そこで北村氏は「実際に山へ行き、そこに暮らす生物の声を聞く」という形で取材しました。
このとき、マイクを設置し、環境音の録音も行っています。これは、ゲーム内に実装される音の録音ではなく、環境音を再現するためのある実験のためでした。
取材は神奈川県横須賀市某所にある、自然豊かな山奥の公園で行われた
実験の内容は、5センチメートルほどの小さなスピーカーを、公園内の茂みなどに設置し、ここからポケモンの鳴き声などを再生することで、実際にどのように聞こえるのか試すというものです。
8ch分のスピーカーを広範囲に配置し、ランダムにそのスピーカーから鳴らすことで、実際のポケモンの環境鳴き声を再現しています。
このフィールドレコーディングにより、ポケモンの鳴き声を空間の音響と一緒にリアンプもできました。
公園内の茂みに設置したスピーカー。ケーブルを長く這わしての録音となった
録音を実際に聞いてみたところ、数々の気づきがあったと話す北村氏。
環境音としてのクオリティはこのまま使用したいと思えるほど高かったそうですが、自然の鳥や虫の鳴き声が聞こえる空間にポケモンの鳴き声がレイヤーされた環境音という点で実現したいものとは方向性が異なりました。
また、自然の中で鳴いている虫などの声を観察した結果、シンセサイザーのオシレーターそのままの電子音に非常に近いことにも気づきました。
特に「シンセサイザーの音に近い」という点からは、逆に「シンセサイザーでポケモンたちの鳴き声を作り、草木の回折や遮蔽をシミュレートすることで、とてもリアルな環境音になるのではないか」という仮説が生まれました。
反射を使って、実際の音作り。その課題と解決法
後日、コネクテコ内のフォーリー(※)ステージにてリアンプ作業が行われました。検討段階では、ビデオテープをほぐして草むらを模したものや毛布をスピーカーに掛けての録音も行われたそうです。ただ、音がマスクされすぎてしまったため、最終的にはマイクとスピーカーの向きのコントロールのみにしました。
※ 映像に合わせて足音や衣擦れ音などの動作音を収録する手法
スピーカーをマイクや床などさまざまな方向に向け、4m幅ほどで配置
高さ4mほどの天井付近に、マイクを上向きに設置。これにより、スピーカーから出た直接の音ではなく、壁や床に反射した音を録音できる
こうして、生き物の声ができる限り入っていない環境音に、リアンプしたポケモンの鳴き声をミックスしてみたところ、「イイ感じ」になったそうです。
『ソード・シールド』で使用された、ひつじポケモン・ウールーの牧場の環境音、鬱蒼と茂る森の中の環境音を講演では再生
『ソード・シールド』では、昼の汎用環境鳴き声・夜の汎用環境鳴き声・そのポケモンがいるエリアの昼の環境鳴き声の3種類をセットにしてスタジオ録音したものを使用しました。
ただし、鳴き声と鳴き声の間の無音部分も含めた長い録音を使用したため、容量の都合で環境音セット自体はあまり用意できず、ステージ毎の差分を用意できませんでした。
『ソード・シールド』で生まれたこの課題を解決すべく、シリーズ次作『Pokémon LEGENDS アルセウス(以降、アルセウスと表記)』では、ある工夫が行われました。
それは、すべての登場ポケモンの鳴き声を近距離・中距離・遠距離のバリエーションで録音し、フィールドにどのようなポケモンが登場したかの情報に準拠して鳴らすことです。
しかし、これを実際に行うと、ポケモンの数×鳴き声5種×距離3種類という膨大な数の音声データとなります。そのため、サウンドの再生はオンメモリではなくストリームで行っています。
こちらでは、サウンドの「何を鳴らすか・いつ鳴らすか」といったクオリティは高く制作出来たものの、アセット数が膨大になってしまったため、ポケモンの登場数が多い完全新作の『スカーレット・バイオレット』では使えないという新たな課題が生まれました。
最新作で生まれた課題に、Tsugi合同会社からの救いの手が
最新作『スカーレット・バイオレット』では、新たな課題解決のため、北村氏はまず、リアンプされた鳴き声と原音を比較し、徹底的に解析しました。
その後、自社開発のWwise用のエフェクトとEQ(イコライザー)などを活用し、『アルセウス』のようにそれぞれの鳴き声の実データを持たずにエフェクターで音を再現するということを目指しました。これにより、音響空間の課題は一旦解決しました。
しかし、実はポケモンの鳴き声を「しんか」させるためには、ボイス自体が以下のようないくつかの問題を抱えていました。
ポケモンの鳴き声は、図鑑で再生される基本の鳴き声に加え、「喜び」「怒り」「悲しみ」「気づき」の5パターンしかなく、かつ喜び以降の4パターンに関しても6作目『ポケットモンスター X・Y』以降の追加音源でした。
また、『ポケットモンスター 赤・緑(以降、赤・緑と表記)』のようなゲームボーイ音源を利用したものから、最新のサンプルベースの鳴き声まで波形の性質が全く異なるさまざまな音源がありました。
これらを一律に処理するには、限界があります。
北村氏は「ありがたいお話ではあるんですが」と述べたうえで、ポケモンの鳴き声のユーザー認知度が非常に高いことを挙げました。
不用意にバリエーションを増やしてしまうと、ユーザーのポケモンイメージを壊してしまう危険性があったといいます。
最後の問題は、最新作『スカーレット・バイオレット』ではポケモンの種類数が1,000種類を超えるということです。
波形の性質として、一律の処理は限界があるものの、一律に処理しなくてはどうにもならない物量です。
疑問点をポケモンのチーフ・クリエイティブ・フェロー増田順一氏にヒアリング
課題解決のために北村氏は、まずは「鳴き声のバリエーションを増やすこと」について、本講演の登壇者である一之瀬氏や、株式会社ポケモンのチーフ・クリエイティブ・フェローの増田順一氏に『赤・緑』の鳴き声をどのようにして作ったのかヒアリングを実施しました。
その結果、「ポケモンとは不思議な生き物であって、動物ではない。クリエイティブされた生き物である。そのため、ライオンからインスパイアされたポケモンにライオンのサンプルボイスを使うのは違う。クリエイティブが挟まっており、その音になってユーザーが喜ぶかどうかが大事」という回答を得たそうです。
その後の音作りはこの言葉をピラー(柱)として行いました。
これを踏まえ、北村氏は次の4つの方針を打ち立てました。
- 声のバリエーションを増やし、ポケモンの表現力を上げたい
- オリジナルのニュアンスを残したままバリエーションを作りたい
- 大量のアセットを効率的に生成したい
- 『赤・緑』世代から最新作まで、同じようなワークフローで作りたい
この方針の実現のため、ゲーム効果音生成ツール「GameSynth」などで知られる、Tsugi合同会社に以下のような技術協力を求めました。
- GameSynthをベースとした開発
- 効果音(この場合はポケモンの鳴き声)を「ストローク」や「声の演技」で変調させる
- バッチ機能を使ったポケモンの鳴き声の一括処理
特にユニークなのは、「声の演技」を用いて鳴き声を変調させること。
声のピッチ感や音量を原音に当てはめ、マイクでの演技に鳴き声が追従するような形で音を作成しています。
ストロークでピカチュウの鳴き声を変化させる
ストロークを用いてピカチュウの鳴き声を変調させる実際の例です。右肩上がりのストロークならば語尾の上がった鳴き声に、波打つストロークならば揺らぎのある鳴き声に、原音が変化します。さまざまな線を描くことで、1つの原音から実質無限大にバリエーションを作成することができます。
同じ「ストロークでの作成」でも、リニアモードからラジアルモードに変更することで、ストロークの解釈を変えることが可能です。
次に紹介されたのが声による変調です。講演では「ヘアッ!」という人間のアクションボイスを使い、その声色のエンベロープなどに合わせてピカチュウの鳴き声が変化する様子が実演されました。
インポートした鳴き声データを波形に合わせて一律に変調
最後にバッチ処理の例です。インポートした多数の鳴き声データを同じ声の波形に合わせて一律に変調させることができます。
このバッチ処理は、各ポケモンの鳴き声の長さに声の波形をフィックスして(合わせて)変調させることもできるほか、元の声波形の尺から「ポケモンの鳴き声が鳴っている部分」の長さだけ切り出して変調させることもできるそうです。
インポートされた多数の鳴き声の波形(左)に、声の波形(中央)を入れてエクスポートをすることで一律に書き出すことが可能
鳴き声のバリエーションを自由に生成可能になったことにより、インゲーム用の限られたボイスバリエーションからでも各カットシーンに応じたポケモンの感情を鳴き声で表現できるようになりました。
今作『スカーレット・バイオレット』では、ミライドン・コライドンのカットシーンやイベント中の鳴き声はそのシーンのために専用で作られています。
例えばゲーム冒頭、弱ってしまっているミライドン・コライドンがサンドイッチを食べるシーンでは、北村氏自身が弱々しく「ふやぁ……」と言っている声の波形が使われているそうです。
『アルセウス』のサウンドデザイン――作った音をどう鳴らすか
北村氏は、鳴き声をどのように鳴らしていくかの演出について『アルセウス』を例にとって説明しました。『アルセウス』の演出で実現を目指したのは以下の2点です。
- ポケモンの生態に合わせた鳴き声の発音
- スポーナー(※)からセットされうるポケモンのボイスをピックアップし、抽選して何を鳴らすか決定する仕組み
※ スポーンする条件を管理するクラスの意味で使われる開発用語
これにより、雨の日に出現しないポケモンが雨のときは鳴かず、夜にのみ出現するポケモンが夜だけ鳴くようにします。たとえば、ヒトカゲは雨の日に外にいたら死んでしまうので、このようなときにヒトカゲが鳴かないようにします。
ポケモンのボイスはスポーナーからセットされる可能性のあるものをピックアップして、そこから抽選で決定します。再生されるボイスの種類は厳密には定めず、そこに絶対いるはずのないポケモンが鳴かなければ問題ないというレベルです。
これらを実現する仕組みとして、音の区域を中距離(右方向)・中距離(左方向)・遠距離の3区域に分けました。
中距離は、右方向から抽出した音をRチャンネルに、左方向から抽出した音をLチャンネルに格納します。遠距離で抽出した音は、左右のチャンネルにランダムに割り振ります。
発音座標からの距離は、カメラの左右に浮かせて設置した2台の架空のスピーカーゲームオブジェクトを基準としています。
円の中心がプレーヤーの位置。その前方左右に配置されているのが架空のスピーカーゲームオブジェクト。近距離にいるポケモンのボイスは実際に見えているポケモンから再生される
処理の流れは、レベルにセットされた際、そのエリアに現れるポケモンをリストアップし、環境ボイス発音システムに受け渡します。そして、受け取ったリストの情報を基にポケモンボイスを鳴らす、というものです。
リストアップは、リスナーオブジェクト周囲の30〜70mの範囲内のスポーナーを検索し、左右どちらの音声なのかと中距離・遠距離の区分を付与して環境ボイス発音システムに受け渡します。リストアップのサイクルはおよそ毎秒1回ほどです。
ポケモンボイスの再生は、環境ボイス発音システムが受け取ったリスト情報の方向・距離に応じたものを再生しています。この再生インターバルなどを定義した情報に基づき、ランダムにPostEventしています。
スピーカーオブジェクトは、遠距離用・中距離用それぞれに2種類のオブジェクト(合計4オブジェクト)が存在しています。遠距離はFar、中距離はMidをSetSwitchに設定し、ポケモンボイスを鳴らします。
『アルセウス』における距離ごとに鳴らすサウンドの設計
『アルセウス』では、0~30mを近距離、30~70mを中距離、70~200mを遠距離と定義しています。
30mより手前は、実際にスポーンしたポケモンたちが動いてモーション・アニメーションを行うため、そのアニメーションに設定された鳴き声が直接再生されています。
主人公から30mの範囲がおおよそのモンスターボールの届く距離、70m地点がポケモンのモデルのカリング処理(※)が行われ始める距離
※ 一定の基準で描画を場合分けする処理のこと。ゲーム開発の文脈では、負荷軽減のためにカメラに映らない範囲の描画を省くことを指す
講演では、実際に山間・雪山に主人公がいる際の環境音の例が、動画として再生された
そうだ、また山へ行こう。さらなる「リアル」を求めて
『ソード・シールド』から『アルセウス』にて環境音のデザインが進化し、ポケモンボイスのバリエーションが増えた一方で、新たな課題もいくつか生まれました。
1つは、今そこにいるポケモンではなく、リストアップされたポケモンの鳴き声をただランダムに再生するだけになってしまったこと。そして、天候や時間帯の表現がスポーナー頼りになってしまっていたこと。
これらを解決するため、最新作『スカーレット・バイオレット』では、生物の生態をよりリアルに表現すべく、その生き物が活動するであろう場所や時間帯、天候、習性などを定義してコントロールすることを目指しました。
このために、北村氏は生き物がどのような習性を持ち、どのようなタイミングで鳴くのかを知らなくてはいけないと考えました。
そこで、再び山へ行き、一日中音を録音。そのほか、東武動物公園にも向かい、実際に動物が鳴いている姿を観察したそうです。
山や動物園での観察を経て、分かったことは次のような内容でした。
【時間に関係すること】
- 夜は虫の鳴き声しかしない
- 朝は鳥と虫の声が混ざってゆき、日が昇るに連れて鳥の鳴き声のみになっていく
【体の大きさと鳴き声の関係】
- 動物は、小さければ小さいほど鳴く頻度が多い
- 哺乳類は、ある程度の大きさを超えると鳴く頻度が増え、鼻を鳴らすなどさまざまな鳴き声(音)を出していた
- 中程度の大きさの哺乳類はそれほど鳴かない
こういった観察結果を踏まえ、『スカーレット・バイオレット』では「鳴き声システム」が構築されました。
鳴き声専用のタイプをポケモンに設定して構築した「鳴き声システム」
「鳴き声システム」を構築するにあたり、まず種族定義として、環境音用のタイプ設定を全ポケモンに対して割り振りました。これはあくまで環境音用のタイプ設定であり、いわゆる戦闘用のポケモンのタイプとは別物です。
「鳥ポケモン系」「虫ポケモン系」で大まかな時間帯を表現したほか、夜行性の「獣ポケモン系」や大型・小型などのタイプを設定しました。
また、取材により「鳥は、鳴いたらコールアンドレスポンスのように別の鳥が鳴き出すことが多い」という情報も得られたため、「鳥ポケモン系」は後述するシーケンスとチェインでコールアンドレスポンスを表現しました。スポーナーから座標情報をリストアップし、それから得られたポケモン種別に合わせて再生しています。
夜の森で獣タイプのポケモンが鳴いている様子や、昼の海で鳥ポケモンが鳴き合う動画を再生。この他、雪山や砂漠なども再生され、ユニークな環境音が再生された
専用のシーケンサーで表現したポケモンの鳴き声パターン
続いてはサウンドプログラマーの岩本 翔氏が登壇し、ポケモンの環境鳴き声を実現するために作られたシーケンサーについて解説しました。
ポケモンの鳴き声は、『アルセウス』まではランダムインターバルのような形で再現されていました。
しかし、より豊かな表現のためには、なんらかの特徴的なパターン、つまり「シーケンス」が必要なのではないか、と考えました。当初はシーケンサーの作成も検討されましたが、汎用機能との併用を考慮してWwiseによる実現が目指されました。
ところが、実際にやってみたところ、求めていた自由度をWwise内だけで実現するのは難しいということが分かってきました。例えばSequence Containerを用いて、Delay(※1)やTrigger rate(※2)を組み合わせても、一定間隔+ランダムで再生する以上の自由度は求められないという結論になりました。
※1 2つのオブジェクト間にサイレンスを追加する
※2 コンテナ内の新しいオブジェクトの再生レートを指定する
Eventのテーブルにさまざまな要素を入れるアイデアもありましたが、シーケンス自由度が高い反面、今や1,000種類を超えるポケモンごとの鳴らし分けをSwitchで管理することになってしまいます。結果、独自に鳴き声シーケンサーを実装することにしました。
「シーケンス」と「チェイン」を組み合わせて、表現豊かなポケモンの鳴き声を実現
シーケンサーでは、虫ポケモン系や鳥ポケモン系などの鳴き方に応じた種族ごとに、鳴き声のフレーズ(特徴)をシーケンスとして定義しました。1行がステップシーケンサー(※)の1ステップのような扱いになっています。
※ 音の高低ではなく、音を出すタイミングのみを指定するタイプの打ち込み装置で、ドラムのトラック作成などに使われることが多い
青地左の「Type」列では、どこを起点に次までのインターバルを数え始めるかというオプションを指定しています。
そして青地右の2列では、「鳴き始めた瞬間」「鳴き終わった瞬間」のどちらかを起点に固定のインターバルを置き、それにプラスしてランダムの時間を足し合わせ、ある程度不定のインターバルを配置することに成功しています。
また、黄色地の列では鳴き声の感情種別として「喜び」や「悲しみ」、またはその環境専用の鳴き声などをランダムに選べるようになっています。
これらのプロパティを用いることで、感情やインターバルの「ゆらぎ」といったものはある程度表現できますが、先述のコールアンドレスポンスなどは実現できません。
そこで、このシーケンス同士をつなぎ合わせる「チェイン」を考案。チェインとは、シーケンス同士をつなげるための「確率分布」のようなものを記述できる仕組みです。
次のチェインを鳴らす起点となるタイミングのオプション指定している点、それまでのインターバルを固定・ランダムで配置している点はシーケンスと似ています。
それぞれのチェインに、シーケンスを鳴らす候補およびそれぞれの再生確率の重みづけが設定されています。この指定により、シーケンス同士がどのように応答し合うのかを定義することができます。
これら「シーケンス」と「チェイン」を使用することで、ポケモンの鳴き方種別ごとのバリエーションを作りました。
さらに、プレイヤーのいるエリアや時間帯によるチェインのバリエーションも作りました。
周りにいるポケモンの生息情報(スポーナーリスト)をリアルタイムで抽出し、そこにいるはずのポケモンが時間帯や場所に合った雰囲気のシーケンスで鳴くというシステムも構築しています。
講演ではデバッグ情報とともに約100メートル範囲内のシーケンス・チェインの動作例を示した。右のレーダーに、小さな点でボイスを再生しているポケモンが表示されている
昼と夜のポケモンが実際にどのように鳴いているのかタイムラインで表示した例。トラック上に異なるシーケンスでポケモンボイスが再生されている。昼には小鳥(BIRD_LITTLE)や鳥(BIRD)のポケモンが、夜には虫(INSECT)やその他(OTHERS)のポケモンが活発に鳴いている
ポケモン世界における自然環境の進化とその環境音
再び一之瀬氏が登壇し、鳴き声以外の環境音全般についての解説が行われました。
ポケモン環境音の歴史
ポケモンシリーズで本格的に環境音に取り組んだのは、『金・銀』のリメイク作品である『ポケットモンスター ハートゴールド・ソウルシルバー(以降、ハートゴールド・ソウルシルバーと表記)』。鳴らす環境音をグリッド単位で設定し、風車の音や波の音など、さまざまな環境音を表現しました。
そのほか、主人公の足音というシステムはこの作品で初めて実装しました。床のアトリビュートによって足音を変えるなどの工夫は、プレイヤーが世界の臨場感を感じられることを目指して行われました。
再生された動画では、土の床や草の床、枯れ葉の床で変わる足音のほか、水辺に近づくと再生される波の音などがはっきり聞き分けられた
しかし、『ハートゴールド・ソウルシルバー』はマップに人力で環境音を設定したため、人的コスト・デバッグコストともに大きくなってしまったそう。その反省を活かし、その後のシリーズでは環境音以外に注力。環境音はコスト面から部分的な設定に留められました。
『サン・ムーン』では、豊かな自然の表現のために『ハートゴールド・ソウルシルバー』と同じくらいの環境音を目指して力を注いだそうです。
『サン・ムーン』の動画を再生。砂上を歩く足音や、海に近づくと波の音が聞こえるのが分かった
『サン・ムーン』では『ハートゴールド・ソウルシルバー』のようなグリッドではなく、砂浜などの不規則な形をした地形です。それでも、波打ち際に近づけば波の音がするよう、すべて手作業で環境音を設定しました。これは、グリッド時代よりも人力で設定するのが大変なうえ、開発中にマップが変更されるたびに修正・確認の必要があり、コストも大きくかさんでしまったとのこと。
そんな中、Nintendo Switchでのポケモンシリーズが開発されることとなりました。オープンワールドの広大なマップを表現するには、環境音表現の進化や作業の効率化などが必要です。
世界を駆け巡るオープンワールド、Nintendo Switchでの『ポケモン』開発にどう取り組んだのか
ここからは話者が北村氏・岩本氏に交代。環境音などのサウンド改善にどのように取り組んだのか解説しました。
まず、北村氏によって紹介されたのは、ポケモンの世界をリアルに表現するために定義された、リアリティを出すための手法の数々。講演前半にも話題となった、ポケモンの生態に合わせてリアルに表現する環境鳴き声を始め、さまざまなフィールドテーマに沿った環境音(アトモスフィア)、絵には表現されない洞窟の水滴などの音、オープンワールドに合わせた「旅してる感」のある設置環境音、そしてバトルにも関係する天候の環境音といったトピックが挙げられました。
これらを実現した仕組みについて、岩本氏が解説します。
大量の環境音を配置するうえでの作業の効率化の方法と仕組み
『アルセウス』では、SphereやBox、Capsuleなどの(Colliderの)基本形状を配置し、その中に入ったら中心から発音、近づいたら外縁から発音という2種類の制御タイプでほとんどの環境音を設定しています。
これは配置のコストが高い方法でした。地形の調整が行われると、サウンドもそれに追従して調整し直さなくてはいけないほか、川などの複雑な自然地形の発音点を1つに求めた場合に、どの点から聞こえるのが最も良い聞こえ方なのか正解もわかりづらいためです。
草・水・木の環境音の自動配置に役立った発音方式「MultiPosition」
そこで、『スカーレット・バイオレット』では、WwiseのMultiPositionという発音方式を用いたそうです。川などの複雑な形状でも、発音点の点群のデータさえあれば、その形状に合わせた発音が可能です。環境音の配置作業をかなり軽減できるほか、ボイスの発音自体は1インスタンスで行われるため、点が多く配置されても処理負荷が比較的かからないとのこと。
MultiPositionの使い方については、Wwise公式による解説を参照
このMultiPositionを活用するため、内部に「EnvSound」というシステムを作りました。これは、発音点群の候補のリストを受け取り、リスナーオブジェクトの可聴範囲内にある点群を抽出してWwiseに送り、点が1個以上あれば発音、0個になったら停止します。このEnvSoundのインスタンスを、草や水といった使いたい環境音の種類ごとに用意します。点群の候補は、草・水・木の3種類に分け、以下のような点を重視しながらそれぞれ別の方法で集めることにしました。
- 草:密度感
- 草の1本1本が厳密な座標を持っているわけではないため、「草に囲まれている」「草のないところにいる」といったおおよその密度感が重要。場所はそれほどはっきりしなくて良い
- 水:方位感
- 「川が見える方向から音が聞こえる」というような、方位感・左右のパンニングが大切。1つずつの場所はぼやかして良いが、川や海の「際」に沿う形で点群を設置
- 木:定位感
- 明確にそこにあることが分かる物なので、見えている位置から聞こえるようにする
木の点群の配置
具体的な点群の配置について、3種の中で最も配置が容易だった木の点群から解説します。
木はオブジェクトの座標情報を持っているため、そこにEnvSound用のコンポーネントを設定するだけで、自動的に座標情報を取得できます。リスナーオブジェクトの座標と木の座標が近づくことで自動的に発音点に追加され、環境音が鳴ります。
木の中ほどに見える白い十字型のような部分は発音候補の状態
色付きの十字型が重なって表示されると、実際に音を発する
水の点群の配置
水は、テクニカルアーティストに協力を仰ぎ、地形の生成に使用したHoudini上で水面と地形が交わる曲線と、それに合わせた5mおきの点群を出力しました。
この出力の時点で、その水面が川・池・湖・海のいずれかなのかという情報を判別して自動的にタグ付けしました。ただし、滝のみ自動検出ではなく手動での配置です。
こうした仕組みにより、データを流し込むだけで自動的にオーサリング作業(※)を行っています。
※ 画像・音声・動画など性質の異なる素材を組み立て、1つのコンテンツにすること
海に近づくことで波の音に変わっていく。紫の十字状のものが海の音の発音点
草の環境音配置
草は木のように1つずつ座標を持っているわけではありません。また、水のように点群を事前生成すると数が膨大になってしまいます。
そこで、草のみ周囲の地形をリアルタイム判定でグリッド状に走査し、点群情報を収集しました。リスナーが移動するにしたがって、毎フレーム更新でロードするグリッド範囲が追従します。1フレームあたりの処理数を制限し、あふれた処理は次のフレームに持ち越すよう、処理を分散しています。
リアルタイム判定であるため、事前に草の種類と音の対応データを用意するだけで自動的に発音が可能です。
図では簡略されているが、実際にはLoad範囲よりもUnload範囲が広くとられている。LoadとUnloadを無駄に繰り返さないためだ
こうした音源配置の自動化を活用することで、より細かな環境音配置に人的コストを割くことができ、結果的に、広いフィールドでの環境音実装が可能になりました。
4つのサウンドデバッガーで実現したサウンド実装の効率化と最適化
続けて岩本氏による、環境音などを含めたサウンド実装の効率化・最適化についての解説です。
たくさんのサウンドデバッガーを作ってきた岩本氏。一番最初に考えたのは「Wwiseのプロファイラーでもできるのでは?」ということでした。
実際にWwiseProfilerは非常に優秀で、必要な情報はほとんど見られたとのこと。しかし、下記のようにいくつかできないこともあります。
- ゲーム画面に座標や情報を描写する
- Wwiseに送る以前の制御情報を表示する
特に、情報をゲーム画面に出すということは、「この川から本当にこの音が出ているのか」といった確認を効率化するうえで重要です。本作では、「Gizmo」「Objects」「BGMManager」「History」という4つのデバッガーを使用しました。
Gizmoデバッガー
音を出しているオブジェクトに赤いスフィアをつけ、以下の情報を表示します。
イベント名とリスナーからの距離は、距離減衰の調整にも役立っているとのこと。
わたげポケモン・メリープについている赤いスフィアが現在音を出しているオブジェクトであることを示している
Objectsデバッガー
AudioComponentごとにさまざまな情報をまとめて表示できるデバッガーです。
一番よく使われるのは、WwiseのSwitchやRTPCといったゲームシンク情報とのこと。そのほか、モーションの自動検知、設置環境音のトリガー範囲なども表示できます。
足元のマテリアルを表示し、「今は草を踏んでいる」などの情報を画面上で確認できる。野生ポケモンの黄色と赤のマークは、足のモーションを自動検知し、足音を鳴らしている、という情報
設置環境音のトリガー範囲(赤いライン)もゲーム中に表示できる
BGMManagerデバッガー
多重のBGM復帰処理などのレイヤー管理をBGMManagerデバッガーで処理します。前後のBGMに応じて、フェードイン・フェードアウトの時間やカーブ、Delay Time、Hold Time(※)などの遷移設定を細かく調整できます。
※ 指定した時間以内に戻ると、再生を止めた箇所から再生する
トレーナー戦が終わった後にフィールドBGMにシームレスに変化
こういった管理をすると、レイヤーが復帰した直後に別のイベントBGMが始まり、その間に一瞬だけフィールド曲が鳴ってしまう「一瞬鳴り問題」が起こりがちです。
このデバッガーでは「今までどのようなBGMが流れていたのか」をタイムラインで赤く表示できます。音だけでは、録画して何度も聞き直して確認が必要な事項を目視で確認できるため、スクリーンショットでも「一瞬鳴り」が分かりやすいです。
BGMがFIELDからPOKECEN(ポケモンセンター)に変わるのを赤いタイムラインで可視化
『スカーレット・バイオレット』は常にBGMが流れていますが、戦闘終了後や街から出たときなどに大きめにDelayやフェードインをかけることで、BGM同士に間を設け、気持ちが切り替わるように演出しています。
Historyデバッガー
これはPostEventの履歴を確認する機能で、イベント名またはオブジェクト名でフィルタリングが可能です。
WwiseProfilerにも同様の機能はあるそうですが、こちらはWwiseが手元にないゲームプログラマーでも実装確認に使えます。また、Wwiseに送る前に再生をキャンセルした音の履歴も表示できます。
通常、歩いているときにはHistoryデバッガーに足音のイベントがたくさん流れている
「再生に失敗したもの」だけに絞りこんだ画面。右側の失敗した理由(FailedReason)には後述する「AudioGroup Priority」が表示されている
デバッガーを組み合わせて使用することで、音が聞こえない・鳴らない場合の確認フローを確立することができます。
以下はその確認フローを例示したものです。
- Gizmoで見える→Wwise側の設定(ゲームシンク等)を確認
- Gizmoで見えない→Historyを確認
- Historyに有る→DistanceやResultを確認
- Distanceが遠い→座標設定のタイミングなどを確認
- ResultがFailed→FailedReasonを参照
- PostEvent失敗(イベント名のミス等)
- モデル非表示
- AudioGroupによるキャンセル
- Historyに無い→PostEventしているゲームプログラムを確認
サウンドに何か問題が起こったときに、Wwiseに送る前・送った後のどこに問題があるのか、切り分けて考えることが可能です。
音を鳴らす「優先度」を決める「AudioGroup」
Historyデバッガーで音をカットする理由として表示されていた「AudioGroup Priority」。この「AudioGroup」は発音制御をグループごとに行いたいという要望から開発されました。
岩本氏は「WwiseのPlayback Limitでできるのでは?」と初めは考えたそうです。しかし、Wwiseの発音制御は便利ながらも、Wwise側のActor-Mixer HierarchyやMaster-Mixer Hierarchyといった階層・構造に依存してしまいます。
『ポケモン』シリーズでは、同じ「ピカチュウ」というポケモンでも、自分の手持ちのピカチュウ・野生のピカチュウ・バトル相手のピカチュウなど同じ鳴き声であるものの鳴く際の優先度が異なる個体がいます。これにより、自分のピカチュウの場合は必ず鳴いてほしいけれど、野生のピカチュウの場合は他の個体を優先し、鳴かせたくないということが起こります。つまり、Wwise上では同じEventを通っているのに再生の優先度が異なってくるのです。
そこで、下図のような階層構造で発音管理を行うAudioGroupというシステムを用意しました。
Root Group全体で計12イベントまでに再生を制限。Rootグループ直下には、Player・Field・Battleの3つのグループを設け、それぞれのグループに応じたボイスなどを格納します。例えば、Fieldグループにあるのは野生ポケモンや環境鳴き声です。
この階層構造を使用することで、自分の手持ちのポケモンの音はPlayerグループで担保しつつ、Playerグループの音がたくさん鳴っている場合はFieldグループで多く鳴っている音をカットするといった最適化ができました。
スフィアが出ているポケモンは、所属するグループ名を表示。ログにサウンド再生のStop・Cancelの履歴がずらりと並ぶ
バトルに入ると、バトル対象となった双方のポケモンがBattleのグループに入る。Fieldグループにいたポケモンは優先度が変わり、他の野生ポケモンよりも音が聞こえやすくなる
一人で悩まない姿勢がユーザーに喜んでもらえることに繋がっていく
最後に、北村氏が環境音・環境鳴き声に関するまとめを、岩本氏が効率化・最適化のまとめを述べた後に一之瀬氏が本講演全体のまとめを行いました。
目まぐるしくハードが進化していく昨今、プロジェクトの進め方に悩んだときは、外に出向いて情報を得る、識者に相談するなど、分からないことを一人で抱えこまずに人に話していく姿勢が大切だ、と一之瀬氏は述べました。その結果がユーザーにより喜んでもらえる作品づくりに繋がります。
「今回の発表が今後の皆様の制作のお役に立ち、結果としてユーザーの楽しい体験になる未来があるのであればこれ以上嬉しいことはない」という一之瀬氏の感謝の言葉とともに、本講演は終了しました。
ポケットモンスター スカーレット・バイオレット 公式サイトポケモンの せかいを かけめぐる おと! おんきょうデザインで ひろがる ぼうけんの すがた! - CEDEC2023
ゲームのタイムアタックを中心に、ストリーミングサイト・Twitchで活動をしているストリーマー。ゲームイベントの紹介記事など、WEBメディアでの活動実績もあるが、繰り出されるダジャレのクオリティには賛否両論がある。
https://www.twitch.tv/serenade_yuuki