2025/06/22
※記録のための殴り書きです、悪しからず。
先日行われたOpen Hack U Tokyo 2025に向けて、研究室の同期と2人で作成した「LIFE」を出展しました。
発表スライドを見ていただけるとわかると思うのですが、「通常2Dのコンウェイのライフゲームを3DVRでインタラクティブにしたら面白いんじゃね??」という動機で作った作品になります。
経緯
私は趣味としてVRChatを数年プレイしていて、最近はVRChat向けのアバターギミックやワールドを制作・公開してきました。そんなVRChatや現在のインターン先の社員の方の影響もあり、CG関連に興味がわいて細々と学習を進めてきました。ただ、VRChat向け以外の作品をほとんど作ったことがなかったため、VRChat向けではないVR作品を何か作ってみたいなとうっすら思っていました。
ちょうどそのころ、LINEヤフー主催のハッカソンであるOpen Hack U 2025のエントリーが近づいていました。研究室の同期と出ようという話になり、2人でエントリーしました。3Dライフゲームのアイディアは彼のもので、「3次元セルオートマトンに対してインタラクティブにアクションできる」「セルを消す、特定のセルを追加する」というものを共有してもらいました。せっかく3DならVRにしたほうがより没入感のある体験ができるため、ちょうど自分のやりたかったこととも合致するものでした。

制作について
最初は「OO個の生存セルが自分の周りにあったら次の世代更新で自分が誕生し、OO個未満のセルが周りで生きていたら自分は死ぬ」、のようなアルゴリズムをユーザが自由に変え、さらにそこにセルを追加することで干渉できる作品を作ろうという話をしていました。早速AIを使って3次元セルオートマトン空間を作り、パラメータで動的に誕生と死のアルゴリズムを変えられるものを作りましたが、これが予想以上にうまくいきませんでした。
具体的にはどんなパラメータを試しても面白い動きになってくれませんでした。理想的にはライフゲームにおいてグライダーや宇宙船と呼ばれる、移動を続ける小物体がいくつかあり、それらが時にぶつかったりして面白い動きをしてくれればいいと思ったのですが、実際には世代更新を繰り返した後すべてのセルが止まってしまう状態か、セルオートマトン空間全体にセルが増殖しすぎてしまう結果になってしまいました。

そこで3Dのライフゲームについて改めて調査してみました。するとすでに3Dのライフゲームについて研究した論文がいくつかありました。どうやら数多くあるアルゴリズムの中で、ライフゲームとして面白い動きをするものは1つか2つしかなく、動き続ける小物体(以下、グライダー)の種類も2個程度しか発見されていないことがわかりました。確かに何もない空間から生命体が自然発生するのはとても難しそうなので当然と言えば当然なのかもしれなかったですが、最初はろくに調べもせずいけるだろ!と思っていたので、盲点でした。
ライフゲームなので生命のような動きをする小物体がいくつかあって互いに干渉しあう、という要素はどうしても欲しかったため、各セルが一定のルールに沿って誕生と死を繰り返す厳密なライフゲームとして実装することは諦めました。妥協案として実際に3Dライフゲームで存在するグライダーや宇宙船の動きをするオブジェクトをユーザが自由に生成でき、同じ種類同士がぶつかると別の形態に移行する・消えるといった結果にすることにしました。ライフゲーム”モチーフ”になってしまいましたが、ここは体験としての面白さも加味して決定しました。
影響を受けた作品
主にVRChatワールドの「Amebient」と、shivaduke28氏によるUnity製VJフレームワークの「Rector」に影響を受けました。
Amebientは雨が降っているワールドで、雨粒がバケツやトタン板のようなオブジェクトに当たることで音が鳴る仕組みを実装しています。オブジェクトによって鳴る音が異なっており、また雨粒が落ちてくるタイミングに音楽的な工夫が凝らされているため、適当にオブジェクトを雨の下に配置していくだけで音楽理論を知らなくても音楽を作ることができます。
らくとあいす氏によるAmebientの音楽設計についての記事
今回作る作品でも見た目だけでなく音楽的な要素もあれば面白いと考えていました。Amebientのように音楽理論を知らなくてもそれなりの音楽を作れるようになれれば最高でした。結局時間的な制約と、うまくライフゲームと音楽要素を組み合わせるのが難しく、一定の感覚でスネアの音を鳴らし、その音に合わせてセルの世代更新が行われるという控えめな音楽要素になりました。
一応全体を16拍子として一定のBPMに沿って拍が刻まれていて、グライダーによって特定の拍に反応させてアクションを起こさせる仕組みも用意していました。グライダー設置時に毎4拍で反応するか毎8拍で反応するかなどを指定して生成してもらう、という案もありましたが、操作が煩雑になりすぎることを懸念して断念しました。
VR空間の全体的な雰囲気やUnityの実装はRectorにかなり強い影響を受けています。Rectorはノードベースでリアルタイムレンダリングされる映像を作ることができるVJフレームワークで、個人的にはあえてUIを見せる作りやそのデザインが好きです。今回は現時点での最新版であるUnity6を使って開発したのですが、VRChat対応バージョンのUnityしか使ったことがなかったため、実装面でもかなり参考になりました。ライティングの設定やUI Toolkit、UniRxの実装などはRectorやUnity Japanの動画を参考にしながら行いました。ライティングについてはちゃんと一回勉強したい、、

技術について
技術面については私も相方もそこまでUnityに詳しくなかったため、”超絶技巧テク”みたいなものはありませんが、結構いろいろなことをリサーチして挑戦しました。各セルの状態更新については並列処理が必要であるため、それをGPUに任せて効率よく計算を行うCompute shaderやCPUで高速に並列処理を行うJob SystemなどをUnity Japanの動画や技術書典で手に入れた本などで勉強しました。(結局どちらもあまり使いませんでしたが、、)
また、新しいUI作成方法であるUI Toolkitも導入しました。現状VRには対応していないため、ゲーム上でのUIには使えませんでしたが、デバッグ用に現在の拍を表示するといった使いかたをしました。これはWebフロントエンドチックな技術でスタイリングができるので、今までの自分の知識が活かせてとてもよかったです。
また、グライダー同士の衝突時や設置時に発生するパーティクルにはVFX Graphを使いました。従来のパーティクルシステムと違いノードベースで定義できること、そして何より内部的にCompute shaderを使っており高速に動作することから採用しました。ただ、案外グライダーの設置や衝突処理などで時間を使ってしまい、VFX Graphは発表の2日前からキャッチアップをはじめ、前日に実装するなどかなりギリギリなスケジュールでした笑
VFX Graphは結構自由度が高そうで、カメラなどと連携させて面白い表現などができるみたいなので、今後もう少し触ってみたいと思います。

VR開発については今回学校からMeta Quest 3sを2台貸してもらえたため、Meta XR ToolsというMeta社が開発しているSDKを利用しました。XR Interactoin ToolというUnityのSDKを使えばMeta製のHMDに限らず私も所有するPico 4 Ultraなどでも対応させられるようだったのですが、Meta製のHMDを使うならMeta公式のSDKを使ったほうが実装の選択肢が広がるそうなのでMeta XR Toolsを利用しました。
初めてのVR開発だったので何をするにも毎回調べる必要があったためかなり大変でした。幸いMetaのSDKにBuilding Blocksというよく使う実装のひな型を簡単にだせる仕組みが用意されていたため、それを使いつつ細かいところはドキュメントや記事を見ながら調整していきました。
また、結局あまり使われませんでしたが、グライダーが特定の拍によって反応する仕組みの実現のためライブラリであるUniRxを利用しました。正直コルーチンが何かわかっていなかったレベルの自分には時期尚早感アリアリでしたが、拍を生成するオブジェクトを作り、その拍をそれぞれのグライダーがSubscribeして使うObserverパターンが実装したくて導入しました。最近はR3ってやつもあるみたいですね。今後勉強を続けて使いこなせて行けたらな、、という感じです。
当日
発表には学校から提供されたMeta Quest 3sを2台と同じく学校のゲーミングノートPC2台を手分けして持っていきました。これがかなり重く、またかさばるのでとても大変でした。
会場でセットアップをしようとしたのですが、まさかのHMDとノートPCの接続がうまくいかなくなる事態に。(前日夜まで動いていたのに、、!)
かなり焦りました。私はそちらのトラブルシューティングをしつつ、相方に急遽2台目のクエストとノートPCでセットアップを同時並行で進めてもらいました。結局先にそちらの接続がうまくいったため事なきを得ました。私のほうも展示開始10分前になんとかつながりました。どうやらMeta Quest Linkというソフトの不具合が原因だったようです。一回タスクキルして再起動・再ログインしたり再インストールしたりして何とか復帰しました。ただ、その後も接続はちょっと不安定だったので、2台PCとHMDを持って行ったのは正解でした。
作品についてはライフゲームをそもそも知らない人が多いことと、VR自体初めての方が多く、若干置いてけぼりにしてしまった感がありました。一応作品発表スライドでは3分しかない発表時間の1分強を使ってライフゲームとは何かを説明し、体験に来てくださった方にはVRでの操作説明をはじめに行いましたが、それでもなかなか苦戦している方もいらっしゃいました。ある程度仕方がない部分もあると思いますが、せめてVR空間をもう少し明るくするといった配慮が必要だったかもしれません。ちょっと雰囲気重視にして暗めにしたことから混乱する方もいらっしゃったようでした。ここは反省ですね。
ただ、操作をできる限りシンプルにしたのは正解でした。VR空間での操作に慣れない人がほとんどということはさすがに予想していたので、「歩く」「コントローラーからのレイで選択する」という2つの動作で完結するようにしました。VRデバイス特有の操作の難しさは一度慣れてしまうと忘れてしまうので、気を付けなければいけませんね。。。
賞については今回はいただくことができませんでした。そもそも事前相談会で社員の方にアイディアを話した時点で「一応確認なんですけど、もしかして賞を取りに行く感じではないんですかね、、?」といわれるくらいぶっ飛んだ作品だったのでなかなか厳しいだろうとは思っていましたが、参加者の投票で選ばれるHappy Hacking 賞に入っていたらうれしいなと淡い期待を寄せていました。ただ、表彰の後の懇親会で体験に来てくれた運営の方一人が私たちのブースに訪れ、「俺は好きだったよ!」と声をかけてくれました。他に体験に来てくださった方も「すげー!」と喜んでくれる方もちらほらいたので、うれしかったです。間違いなく万人受けする作品ではありませんでしたが、一人でも印象に残って覚えてもらえたら万々歳です。
まとめ
というわけでOpen Hack U 2025 Tokyoでした。実装期間は2週間でしたが、構想まで含めると1か月ほどかかりました。学校はもちろんインターンの選考とかぶっていたためESや面接を受けつつの開発になりました。後半は朝7時半に家を出て23時半に帰ってくるみたいな生活でした。
とはいえUnityに関して多くのことを学べたのでよかったです。特にAIがあるおかげで新しい分野のことでも質問できたりサンプルのコードを書いてもらってテストしたりのようなサイクルが早く回せるので、一気に多くのことを学べました。今後の制作のインスピレーションも得られたので、参加してよかったです。次回参加することがあったら、またクセありな作品を持っていきたいと思います。