DAKPPOの日記

技術ブログの体を装った日記

Instrument As A Space制作記

f:id:aknor141:20210411094016p:plain
プロジェクトの構成

cluster民のみなさま、こんにちは。

そしてcluster大加速祭2021 ワールド制作チャレンジに参加したみなさま、おつかれさまでした。24時間を存分に楽しむことができましたでしょうか。私はとても楽しかったです。

『未来の○○』というテーマのもと、自分なりの解釈をワールドとして形にできたので、とても満足しました。また、ありがたいことに制作したワールドを癒やされ部門にノミネートしていただきました。身に余る光栄、嬉しい限りです。

制作者が自分しか知り得ないような文脈をごちゃごちゃと付与したわりに、説明不足の感が否めないワールドになってしまいました。そこで、ワールドを作ったときに考えたことや工夫したことを文章にまとめておきたいと思います。未来の自分自身、仕組みに関心がおありの他のクリエイターの方、訪問したけどちょっとモヤッとした方などの一助となれば幸いです。

どんなワールド?

cluster.mu

  • 空間そのものが、音を奏でるためにつくられています。
  • ただし、生み出される音をプレイヤーがコントロールするすべはありません。音の石を投げ入れて以降、すべては偶発的に進行します。

ワールド名ですが、略してIaaSです。分かる人には分かるはず。

コンセプト

これは未来の楽器です。

以下の内容は私の想像です。歴史的根拠は皆無です。

f:id:aknor141:20210410182926p:plain
過去→現代

人工的に欲しい音を鳴らす道具である「楽器」が現れるより昔、人類にとって音楽は偶発的なものでした。当時の人たちは、自然の中で偶然発生した音の中に心地よいと感じる何らかの秩序を見出していたはずです。

  • 川が流れる音
  • 風が木の葉を揺らす音
  • 鳥がさえずる音 etc...

一方、音を制御する手段を手に入れた現代の我々は、楽器やコンピュータを用いて好きな音を鳴らしたり、それらを組み合わせて音楽を奏でたりできるようになりました。もはや環境の偶発性に頼らずとも、音楽を自在に楽しめるようになったわけです。

f:id:aknor141:20210410183041p:plain
現代→未来

さて、未来の我々はどのように音を楽しむのでしょう?音を制御し尽くした人類が次に手にするのは、「音が発生する環境そのものを自在に設計する能力」ではないでしょうか。(現に、今回の大加速祭では100以上のワールドが新たに誕生しています!)

今回は、そんな音が発生する環境の一例として、かつて人類にとって音楽の全てであった「偶発的に音楽が発生する空間」をつくってみることにしました。

偶発性、どこ?

このワールドに込めた偶発性要素は主に以下の3つです。

偶発性要素1:音の選択

f:id:aknor141:20210410183143p:plain
鳴ってる音はCメジャースケールのダイアトニックコード(CM7 Am7 Em7 FM7 Dm7 G7 FonG の7つ。 Bb5入れ忘れてました…)とサブドミナントマイナー(Fm7 Dm7b5 AbM7の3つ)

本来コード進行にはある程度ルールがあるのですが、このワールドでは上記の10個の和音がランダムに再生されます 。したがって、有名な進行をいくら望んだとしても実現するか否かは運次第ですが、たまに絶妙な位置にサブドミナントマイナーが入ったりしてオッという気持ちになります。そうやって楽しむことが想定されたワールドです。

偶発性要素2:音が止まるタイミング

f:id:aknor141:20210410183354p:plain
石が落下すると音が終わる

石が跳ねる方向もランダムです。8方向のうち、直前と同じ方向を除いた7方向から等しい確率で選ばれます。石がステージから落ちると音が止まるので、音が途絶えるタイミングも制御しづらいようになっています。

偶発性要素3:波紋

f:id:aknor141:20210410193242p:plain
波紋が重なって複雑な模様を形成している様子

石が跳ねる位置がランダムに決まるので、水面に現れる波紋が形作る模様もランダムです。また、短時間で消える方の波紋の輪の半径も実はランダムです。同じ模様が再び現れる確率はほぼゼロです。

ちなみに音の選択や石が跳ねる方向の選択は石の落下位置などに依存していません。。仮に全く同じ座標に同じ速度で石を投げ入れたとしてもランダムに音が鳴り、ランダムに石が跳ねます。

仕組み

f:id:aknor141:20210410194211p:plain
水にOnCollideItemTriggerをセットし、石が衝突したときにHitGroundというSignalを送信。これを契機にいろいろやっています。

石が跳ねる仕組み

f:id:aknor141:20210410194259p:plain
音の石のPrefab

HitGround受信時、石が消滅すると同時に次の石が生成されています。その際、出現地点が水面よりも高い位置になるように調整すると、たとえば出現した石が即Collide判定を受けて次々と石が生成されるみたいな事故を防ぐことができます。

また、次の石の出現位置を鉛直上方向に固定するため、RotationConstraintを用いてstaticなオブジェクトと結びつけ、石の回転を抑制しています。

f:id:aknor141:20210410194320p:plain
ItemTriggerLotteryで跳ねる音の石をランダムに選択している

生成した石は、オリジナルの石のPrefabVariantです。OnCreateItemTriggerでAddInstantForceItemを叩き、水面から跳ねるような動作をさせています。力の方向を8方向に設定した石をそれぞれ用意し、ItemTriggerLotteryでこのうちひとつを選択しています。

石がRespawnする仕組み

f:id:aknor141:20210410194422p:plain
RespawnStoneシグナルで石をWarpさせている

ステージ外に落ちた石はWarpItemGimmickで初期地点の塔の上方に移動させています。オリジナルの石とPrefabVariantで作成した石の違いはCreate時に力を加える処理だけなので、それが動作したあとならオリジナルの石と同じように扱っても問題ありません。

音がなる仕組み

f:id:aknor141:20210410194526p:plain
音を鳴らしているオブジェクトのPrefab

HitGround受信時、音を鳴らすためのオブジェクトを生成しています。ItemTriggerLotteryでどのコードを鳴らすか決めてます。ここでもPrefabVariantを使って、おおもとのオブジェクトの編集内容が同期するようにしています。また、音が十分鳴り終わったタイミングでDestroyさせています。

波紋が現れる仕組み

f:id:aknor141:20210411092256p:plain
波紋の成長過程

HitGround受信時、波紋を表現したParticleSystemをもつオブジェクトを2種類生成しています。ParticleSystemの設定では、サイズをぶわーっと上げつつ透明にしたりしています。

  • 短時間で消える3重リング
  • 長時間残る1重リング

鳴らしている和音が全て四和音だったので、リングの数は合計4つにしました。ついでに、GlobalにもHitGroundを飛ばして雲からも波紋を出しております。(蛇足だったかな。。)

謝辞

いつか自分の作ったものが何かに引っかかったら、そのときはまとめ記事の中に謝辞を書きたい、と心に決めておりました。お世話になったすべての方を記すときりがないので、作品の完成に特に寄与したと私の方で判断した方のみとさせていただいております。

@t_furuさん

zenn.dev

今回はPrefabVariantを非常に多用する制作となりました。clusterワールド制作ゆるゆる勉強会でt_furuさんがPrefabVariantについて言及していなければ、おそらくイベントのアップロード期限に間に合わなかったことでしょう。技術的知見の共有、いつも大変助かっております。(私も見習わなければ、、、)

@tanuki_realityさん

cluster.mu

石や雲が発している波紋をパーティクルで作ろうと思ったのは、たぬきちさんの「パーティクルエフェクトの作り方」講座でパーティクルでできることの豊富さや可能性を体感したのがきっかけだったりします。もし講座に遊びに行ってなければ、苦し紛れの脳筋アニメーションで何とかしようとして、多くの時間を費やしたんじゃないかなと思います。

@heputaaan777さん

cluster.mu

実は、いちこんピアノコンサートで語っていた「空間が音楽に同期するような音楽体験」というアイデアがこのワールドの着想の火種になってたりします。手を動かさずコンセプトを考えるだけの時間が短く済んだのは、アイデアの足がかりがあったおかげだなと振り返って思います。

@sakurasaku_1223さん

cluster.mu * Realityは過去の配信リンクに404を返すようなのでコチラ

土曜日の作業配信助かりました。たまたま作業がダレそうなタイミングだったんですが、そういうときに並走してる人がいるのは励みになりますね。新しいプラットフォームや踏み込んだことのない領域に果敢に挑んでいく姿勢、尊敬します。

その他、cluster社をはじめ数多くの人にお世話になりました。巡り合わせに感謝。

余談:

石掴まれとるやないかい高校校歌


石掴まれとるやないかい 偶発性とは何だったのか

石掴まれとるやないかい Grabbableではあるけれども

テストプレイで気づかないとか cluster下手とちゃうんか

石掴まれとるやないかい 石掴まれとるやないかい

ああ我ら 石掴まれとるやないかい高校

special thx: You Aoiさん

使用アセット:

  • All Sky Free - Cartoon Base BlueSky
  • RAKURAIさんの水シェーダー