見出し画像

CRI Atom Craft エンコーディングタイプを設定する/第3回

こんにちは。
G2 Studios アートチーム サウンド設計担当のサキサキです。
同年代の人と比べ、聞き取ることの出来る周波数が高いことがちょっとだけ自慢です(笑)

それはさておき、今回は「エンコーディングタイプの設定」についての内容をご紹介したいと思います。
前回記事「ストリーミングタイプの設定」に引き続きゲーム再生上のパフォーマンス調整部分に関係してくる大事なところとなりますので、しっかりと抑えておきましょう。

▼前回記事「ストリーミングタイプの設定」



■エンコーディングタイプとは

「エンコーディングタイプ」は音声ファイルに適応する圧縮コーデック(*AtomCraftにおいては「マテリアル」に適応する圧縮フォーマット)のことを指します。
皆さんが普段よく耳にする「MP3」「AAC」はそれら圧縮コーデックの一つであり、特徴としては以下のようなものが挙げられます。

 <MP3 or AAC 変換(圧縮)時の特徴>
・圧縮することでデータサイズを大幅に抑えることができる。
・圧縮率が高くなればなるほど音質も比例して劣化していく。
・一度圧縮したデータは元の状態に復元することは出来ない(非可逆圧縮)。

画像1

「MP3」一つをとってもそうですが、音声圧縮については「音質」と「データサイズ」が常に天秤にかけられた状態にあり、圧縮率によってその値が変化することが分かります。
ゲーム制作に当たり「音質」が非常に重要なものであると同時に、再生端末側でのダウンロードサイズを抑えることもまた重要な内容になりますので、これらを放っておくという選択肢はないかと考えます。
とはいえ、全てを自力で何とかしようとするとなかなか面倒な内容になりますので、やはりここは「CRI Atom Craft」の機能に頼るのがベストではないでしょうか。

っと、確かどこかに...。
あ!ありました!
CRI・ミドルウェア社が掲げる「統合型サウンドミドルウェア CRI ADX2」の特徴として次のようなものがあります。

CRI ADX2公式サイト製品紹介より>
4.ゲーム開発に特化した独自コーデック「HCA」
48kHzのステレオ音楽を最大1/16まで圧縮し、同等の圧縮率を持つコーデック(MP3、AACなど)と比べて複数音同時再生でも低いCPU負荷を実現します。また、「人の声」のクオリティを保つ特徴があり、声優のボイスなどの再生に向いています。

見るからに既に何か良さげな雰囲気を醸し出してますが(笑)、ここから先はこの辺りの独自コーデックについて少し掘り下げていこうと思います。


■エンコーディングタイプの種類と特徴(AtomCraft)

AtomCraft上で設定できるエンコーディングタイプは、「デフォルト」「ADX」「HCA」「HCA-MX」「機種固有1~8」の5種類になります。
実質存在する圧縮フォーマットの種類としては「ADX」「HCA」「HCA-MX」の3種(*後述にて説明)となりますが、1オーサリングツール内にこれだけの数が用意されているのには、非常に興味を惹かれます。
どういった違いがあるのでしょうか。


 <AtomCraftにおけるエンコーディングタイプ>

デフォルト
エンコーディング方式を直接指定する内容のものではなく、当該マテリアルが格納されている上位のディレクトリ、または「ターゲットコンフィグ(*「全体設定」に含まれる)」に設定されたエンコーディングタイプを引き継ぐ(継承する)場合の設定になります。

画像3

ADX
ADX音声圧縮フォーマットを指定する場合の設定になります。
低圧縮率の為、デコード負荷が軽くなる反面、圧縮後のデータサイズは大きくなります。
また、後述の「HCA音声圧縮フォーマット」に比べ音質が低下します。
HCA
HCA音声圧縮フォーマットを指定する場合の設定になります。
さらに「エンコード品質(*5段階)」を設定することにより、圧縮率が変化します。
高圧縮率の為、前述の「ADX音声圧縮フォーマット」に比べてデコード負荷が高くなります。
HCA-MX
HCA-MX音声圧縮フォーマットを指定する場合の設定になります。
複数音声の同時発動時にデコード負荷をHCA1本分に抑えることが出来る強力なフォーマットですが、いくつかの機能において制限を有する形となります。
(*技術的にやや込み入った内容になるため今回の記事では触れず、後日、別記事にて紹介しようと思います。)
機種固有1~8
機種固有コーデックを指定する場合の設定になります。
出力するためには、各ターゲットSDK付属のエンコードツールが必要となります。
(*これまでの経験上、スマホアプリでの出番はないかもしれません。)

では、これらの圧縮フォーマットが実際どの程度の圧縮を可能にするのか調べてみましょう!
公式のマニュアルにそれらの値は当然記載されてはいますが、自分で調べないと気が済まないのが開発者の嵯峨ですよね(笑)
「人の検証結果を信ずるべからず」とかなんとか...(笑)
ここからは「『ADX』『HCA』の2種の音声圧縮フォーマット」と「エンコード品質」に焦点を当てようと思います。

調べてみた結果が下記になります。

▼クリックで拡大

画像4

※こちらの結果は圧縮対象の wav ファイルによっても異なります。どんな波形に対しても必ず同じ圧縮率になるとは限らない点にご注意ください。

マニュアル通りですね!
16bit非圧縮PCMデータを用いた場合、HCA音声圧縮における圧縮率はおよそ「4分の1」から「16分の1」(*赤色で記載)になっていることが分かります。
マニュアルにはない 24bit非圧縮PCMデータでも検証したところ、前者よりも圧縮率は高く「6分の1」から「24分の1」(*青色で記載)になることが確認されました。

また、この検証値とは別にここで注意する点としては、とりわけ以下のようなものが挙げられます。

 <HCA音声圧縮時の注意点>

・顕著な音源劣化を避けるために、エンコード後のビットレート値には下限が設けられています(モノラル:42kbps、ステレオ:64kbps)。
・ステレオ音声を「中品質以下」の設定でエンコードする場合、ステレオ音声の一部はモノラル化しエンコードされます。
・マルチリンガルデータや大音量録音などに伴うクロストークの含まれる音声データについては、「高品質以上」の設定でのエンコードが推奨されています。

注意点あたりが出てくると、ちょっとややこしいというか多少難しく感じますね。
さらっと読み流してしまいそうな内容ですが思いのほか重要な内容になりますので、頭の片隅にでも置いておくようにしましょう。

■どのエンコーディングタイプ、どのエンコード品質を選ぶか

詰まるところ、これまでの内容を整理すると、
エンコーディングタイプは「HCA」、エンコード品質は「中品質~高品質(低圧縮)」
とするのが、ある意味推奨の設定なのではないかと考えます、あくまでも個人的な見解ではありますが...。
何となくの裏付けにはなりますが、AtomCraft上でのエンコード品質のデフォルト設定が「高品質」になっているのは、そういったことを見越してのことなのかもしれませんね。
とはいえ、決め事の1つ1つには理由が必要ですので、この形をベースに仕様や開発状況を鑑みて随時調整を行っていくのが理想的な手法であると感じます。

■エンコーディングタイプの継承(AtomCraft)

エンコーディングタイプの継承に関しては、前回記事で取り上げた「ストリーミングタイプの継承」とほぼ同内容となりますので、説明は省略したいと思います。

■エンコーディングタイプを設定する(AtomCraft)

それでは、実際にAtomCraft上で設定してみましょう。
今回は以下に記載した内容でサウンドデータを作成しようと思います。

 <ゴール条件(*以下3つの内容を満たすことが必須)>

・6つの音声ファイル(.wav)を用意しAtomCraftに取り込み、「1キュー/1シート」のサウンドデータ(合計6つ)を作成する。
・波形ファイルそれぞれにエンコーディングタイプとエンコード品質を設定する。
・マテリアル化された音声ファイルはマテリアルサブフォルダ「Bgm_EncordingType」に格納して纏めた状態にする。

それでは、AtomCraftを起動し、作業を始めるための準備を行います。
※プロジェクトの展開についてはこちら

<手順①>

▼クリックで拡大

画像5

予め用意した
「Bgm_EncordingType_ADX.wav」
「Bgm_EncordingType_HCA_Highest.wav」「Bgm_EncordingType_HCA_High.wav」「Bgm_EncordingType_HCA_Middle.wav 」「Bgm_EncordingType_HCA_Low.wav」「Bgm_EncordingType_HCA_Lowest.wav」
の6つの音声ファイル(*ファイル名は仮。名称だけ異なる同音声ファイルでOK。)をマテリアルツリーにドラッグ&ドロップ、登録します。
※ここでの音声ファイルは、インターネット上にあるフリー素材など使用に差支えのないものをご利用いただければと思います。自己責任でお願いします。

<手順②>

▼クリックで拡大

画像6

マテリアルルートフォルダ直下にマテリアルサブフォルダ「Bgm_EncordingType」を作成し、先の6ファイルを移動&格納します。

<手順③>

画像7

マテリアルサブフォルダ「Bgm_EncordingType」のエンコーディングタイプとエンコード品質を「デフォルト」に設定し、上位であるマテリアルルートフォルダの値を継承します。

<手順④>

画像8

マテリアル「Bgm_EncordingType_ADX.wav」を選択し、エンコーディングタイプに「ADX」を設定します。
エンコード品質は「HCA」「HCA-MX」と一部の機種固有コーデックのみで指定可能な設定となりますので、「ADX」が指定されたこのマテリアルに対して設定する必要はありません。

<手順⑤>

▼クリックで拡大

画像9

マテリアル
「Bgm_EncordingType_HCA_Highest.wav」「Bgm_EncordingType_HCA_High.wav」「Bgm_EncordingType_HCA_Middle.wav 」「Bgm_EncordingType_HCA_Low.wav」「Bgm_EncordingType_HCA_Lowest.wav」
の5つをそれぞれ選択し、エンコーディングタイプに「デフォルト」を設定、上位であるマテリアルサブフォルダ「Bgm_EncordingType」のエンコーディングタイプを継承します。
※今回の場合、エンコーディングタイプに「HCA」を設定しても問題ありません。)
また、併せて、「エンコード品質」を下記の形で設定します。

<「エンコード品質」の設定>

・Bgm_EncordingType_HCA_Highest.wav ⇒エンコード品質:最高品質
・Bgm_EncordingType_HCA_High.wav  ⇒エンコード品質:高品質
・Bgm_EncordingType_HCA_Middle.wav ⇒エンコード品質:中品質
・Bgm_EncordingType_HCA_Low.wav ⇒エンコード品質:低品質(高圧縮)
・Bgm_EncordingType_HCA_Lowest.wav ⇒エンコード品質:最低品質(最高圧縮)

<手順⑥>

画像10

マテリアル
「Bgm_EncordingType_ADX.wav」
「Bgm_EncordingType_HCA_Highest.wav」「Bgm_EncordingType_HCA_High.wav」「Bgm_EncordingType_HCA_Middle.wav 」「Bgm_EncordingType_HCA_Low.wav」「Bgm_EncordingType_HCA_Lowest.wav」
の6つを選択し、ワークユニット上「キューシートフォルダー」下位の任意の場所にドラッグ&ドロップします。


作業は以上となります。
上手くデータ作成はできましたでしょうか。
今回の場合、ターゲットコンフィグ上のエンコーディングタイプの設定が「エンコーディングタイプ(メモリ) ⇒HCA」であることを前提とした作業内容となってます。
仮にこれらの設定値がそれ以外の「ADX」「HCA-MX」である場合、それより下位にあるエンコーディングタイプに「デフォルト」を設定したものについて上記の対応方法が微妙に変化してきますので、注意するようにしましょう。

■まとめ

サウンド実装はゲーム制作過程において「色付け程度のもの」と認識され易く常に後回しにされがちなものではありますが、実際のところエンジニア側で行うような「設計」を必要とする内容のものが非常に多く、早い段階でそれらを考慮しておく必要があります。
「エンコーディングタイプ」や前回記事で述べた「ストリーミングタイプ」についてもその設計の一部であり、それらが制作途中で変更となる場合、実装スクリプトやサウンドデータ管理にも多大な影響を及ぼすことが想定されます。
筆者自身、アサインされた段階でもうどうにも手の付けられなくなっているプロジェクトをこれまでいくつも見てきました。
そういった事態に陥らないよう、周囲にしっかりと働きかけていくようにしましょう。
また、「音質」はユーザーの継続率を維持&向上させる上でも非常に重要なファクターとなりますので、必要以上に劣化させないよう併せて注意するようにしましょう。


今回は以上となります。
今後も更新を続けますので、ぜひフォローをよろしくお願いします!

▼G2 Studiosでは一緒に働く仲間を募集しています


宜しければシェアお願いします♡
11
ゲームの企画・開発・運営を行うG2 Studios(ジーツースタジオ)の公式noteです! 我々が「楽しみ」ながら、「ファン」のために、「素晴らしさ」を創造するチームG2。 「アソビ創造集団。」をビジョンに掲げ、ゲーム創りを楽しみながら、新しいワクワクを提供していきます!