>   >  無数にパーティクルを飛ばすエフェクトはまさにポップコーン! PopcornFXによるサウンドビジュアライザー
無数にパーティクルを飛ばすエフェクトはまさにポップコーン! PopcornFXによるサウンドビジュアライザー

無数にパーティクルを飛ばすエフェクトはまさにポップコーン! PopcornFXによるサウンドビジュアライザー

映像作品においてジャンルを問わず様々なところで活躍の場を広げているCGエフェクト。ここでは、PopcornFXを用いたサウンドボリュームに合わせたエフェクト制作について、プログラム部分まで掘り下げて解説する。

※本記事は月刊「CGWORLD + digital video」vol. 234(2018年2月号)からの転載となります

TEXT_鈴木克史(ICS)
EDIT_斉藤美絵 / Mie Saito(CGWORLD)、山田桃子 / Momoko Yamada

スクリプトが織りなす躍動感サウンドビジュアライザーの作成

筆者にとってエフェクトの魅力は、人を驚かせる演出の裏側には技術的な創意工夫があり、制作するなかでも日々発見があるところです。ツールの機能ひとつとっても人によって使い方が異なり、複数の機能をブロックのように組み合わせることで新しい効果を生み出せます。小さな機能でもしくみや原理を理解しておくことが、人を惹きつけるエフェクトをつくる上で重要だと考えています。本記事では、エフェクトの動きを生み出しているプログラムの部分まで掘り下げて解説します。他のツールでエフェクトをつくる際にも覚えておいて損はないでしょう。

  • 鈴木克史氏(ICS)
    株式会社ICS取締役。エンジニア、3Dモーションデザイナー、エフェクトアーティストとしてスマホゲーム開発から3Dコンテンツ開発まで幅広く従事。オウンドメディアであるICS MEDIAにてエフェクト記事を連載中!
    ics.media

作例

PopcornFXは、パリとモントリオールに拠点を置くPersistant Studios社が提供するリアルタイムパーティクルエフェクトツールです。エフェクトエディタ(Windowsのみ対応)、マルチプラットフォーム対応のランタイムSDK(C++)、UnityUnreal Engineのプラグインから構成されています。PopcornFXを使って感じるのは、パフォーマンスの高さです。パーティクルを数十万個レベルで表示してもツールが軽快に動き、リアルタイムに編集ができるため、効率良く作業が進みます。「スクリプトとGUI」という他のエフェクトツールとは一風変わった制作スタイルにより、まさにポップコーンのように無数にパーティクルを飛ばすエフェクトをつくるときには、強力な武器となることでしょう。

本作で特に意識したのはエフェクトの「メリハリ」です。サウンドボリュームに合わせて文字が飛び出てくる際の動きや、一部のパーティクルのみにモーションを適用する箇所で意識しています。また、タービュランスノイズ関数により、無数のパーティクルが生き物のようにうねうね動く表現も加えました。動画も用意していますのでご覧いただけると嬉しいです。

Topic 01 Audio Spectrumによるサウンドの解析

Audio Spectrumとは

サウンドデータをリアルタイムに解析し、周波数ごとにボリューム値を取得できるPopcornFXの機能のひとつです。サンプリングされた値を基にパーティクルを配置すると図のようなスペクトラムが描けます。

スプライトシートを活用したテキストのレンダリング

フィルタ種別により異なるサンプリング値を抽出している図です


Pointでのスペクトラム



  • Linearでのスペクトラム



  • Cubicでのスペクトラム

1.使い方

【AudioSampler.sample関数】
引数に0~1の値(周波数)を指定すると、ボリューム値を0~1で返します。リアルタイムに変化するため毎フレーム取得していくとサウンドビジュアライザーを作成できます。その後、下記のスクリプトによりスペクトラムの値を調整します。

【スクリプトの解説】
// tを周波数としオーディオサンプラー(AudioSpectrum.sample関数)を使ってスペクトラムを取得します。
float spectrum = AudioSpectrum.sample(t);
// スペクトラムに係数をかけ、平方根を取ります(スペクトラムの差を柔らかくする処理)。
float kSpectrum = pow(spectrum* 256, 0.5);

【pow関数】
第1引数で指定した値を、第2引数で指定した値でべき乗する関数。0.5のように1より小さい値を与えると平方根を取る計算になります。係数をかけた後、べき乗することで値の差をやわらかくし、鋭利にする頻出テクニックです。

pow関数によるスペクトラムの調整



  • スペクトラムの丸めこみ



  • スペクトラムの鋭利化

ConvolutionLevelによるスペクトラムのちがい


ConvolutionLevel0.3(上)、0.5(左下)、0.75(右下)でのスペクトラムです

2.Samplers

3D空間上の特定の位置を抽出する際には[SamplerShape]を使います。エディタの3D空間上に球体などのシェイプをひとつ配置し、そのシェイプの中から点を抽出することでランダムな値を決める機能です。

【rand関数】
与えられた範囲から、ランダムな値を取得する関数。

【Shape.samplePosition関数】
シェイプからランダムな値を取得する関数。

円周上の点の抽出



  • 円周から位置をサンプリングし、パーティクルを配置しました



  • 円の半径にランダム値をかけ合わせて位置に揺れを加えます

次ページ:
3.ランダムな位置を抽出し、揺れを加えるスクリプト

特集