ここから先は、すべてのロジックは「Current Data Asset」変数からプルされます。たとえば、この次の関数では、曲の長さ (小節数) を取得して「Current Song Duration」という名前の変数に設定します。このようにして、音楽コントローラーでは曲のプレイリストを再シャッフルして別の曲を選択するタイミングを認識します (Quartz が小節の数を数えています)。
この「Calculate Song Duration」関数内では、現在のデータ アセットの「小節単位の合計時間」を参照し、拍ごとに「もう変更するべきか?」を計算しています。これは「Bar Counter」変数を参照し、モジュロを使用して最終的に Current Song Duration に達し、その小節の 4 拍目になったことを通知してくれます。それが true の場合は、曲のプレイリストをシャッフルしてこのロジックを継続するタイミングだということがわかります。
トラックが開始されると、再生される音楽要素がランダムに選択されてキューに入りますが、その際にいくつかのことが発生します。それを確認しましょう。拍ごとに、これらの「Calculate Part Timing」関数を介して「新しいものを再生するのに適したタイミングだろうか?」と確認しています。
例として、ベース パートでは Current Data Asset を参照し、バリエーションを選択する前に正しい小節と拍かどうかを確認します。正しい条件が満たされている場合、実行パスを継続して次のロジックに進みます。
こちらでは、次に再生するのに適したベース パートのセットを選択しています。先ほど説明したように、音楽レイヤーにはそれぞれ、「A」と「B」のグループ、または「デッキ」と呼んでいる 2 つの「セット」があります。これは、DJ の A デッキと B デッキのようなものです。現在「A」で再生している場合は、次に「B」からランダムに選択されます。現在「B」で再生している場合、次は「A」グループからランダムに選択されます。
その選択が完了すると、次に変数「Deck A Is Playing」を使用し、それとは反対の値に設定します。そして次にロジックが実行されると、もう一方が選択されます。これにより、基本的にブーリアン変数が毎回入れ替わることになります。A が再生されている場合は B を選択して B をアクティブに設定します。B がアクティブな場合は A を選択して A をアクティブに設定します。
サウンド変数を Play 関数に渡す
各パートがランダムに選択されると、その uSoundBase 参照 (音楽クリップ) が出力として渡され、「Queue Next Deck」関数にフィードされます。
その「Queue Next Deck」関数では、次のチェックが行われます。これは 4 小節のフレーズだろうか?これはトランジション要素 (2 小節) だろうか?これは 8 小節のフレーズだろうか?結果に応じて、適切な量子化境界を使用してそれ自体を Play Quantized に割り当てます。
画像全体で広く使用しているもう 1 つの重要なパスは Z 深度です。これは、シーン深度でフォリッジの発光の強度を制御および抑制するために使用されます。シーン内でフォリッジの位置が遠くにあるほど、強度は弱くなります。ここで、「フォリッジ パス自体でシーン深度と強度をレンダリングしたらよいのではないか?」という疑問が出てくることでしょう。それについては、すべてのフォリッジの発光で 0 から 1 の範囲全体を使用したいため、こうしているというのが答えです。それにより、必要に応じてエフェクトをしっかり調整することができ、さらにすべてのパスを再コンポジットすると、シーン全体のバランスをより効果的に調整することもできます。簡単に言うと、最終的な出力とバランスをより細かく制御することが可能になります。
Z 深度を使用することにより、レンダリング パスをフォアグラウンドとバックグラウンドのグループに分割し、フォリッジの発光範囲をさらに拡張することができます。基本的に、1 つのエミッシブ パスに 1 つのレンダリングされたテクスチャを使用し、自然だと感じられる画面上の位置に Z 深度をクランプします。そのクランプした Z 深度をマスクとして使用すると、2 つのエミッシブ出力ができます。