×

Rector v1.0.0 を公開した

Rectorというのは、 去年の3月に開催されたdraw(tokyo);#2に合わせて私が開発した「ライブノードベースプログラミングジェネラティブVJアプリ」およびフレームワークのことである。

詳細は去年書いた長文ポエムを参照してください。

Rectorについて

アセットとフレームワークが分離されており、フレームワーク部分はMITライセンスで公開されている。

https://github.com/shivaduke28/Rector

フレームワーク部分についてもポエムがあるので、気になる人は参照してください。 Rectorを公開した

その後はというと、自分はCasual Mendan #2SMTP++17で使ったが、それからは更新もせず放置していた。

その間もRectorを触ってくれる人はちらほらおり、知らない機能を追加していたり、Rectorのコードをベースに別のアプリを作ったりする人もいる。嬉しい!

課題感

土地勘が育たない

Rectorはノードを繋げて画面を作るが、ノードが増えてくるにつれて認知負荷がかなり高くなる。 Rector単体で絵作りをしようとすると、ノードは50個とかにすぐになり、それらでカメラ、VFX、背景シーンなどを全て制御することになる。どのノードがどこに配置されるかは、自動で計算されるようになっている。 これによって、カメラは左側、VFXは真ん中、背景シーンは右側、みたいな”土地勘”を育てるのが難しく、練習と本番でノードの位置が大きく変わることも多い。

プログラミングにおいては、少しいじっただけでメソッドの並び順が入れ替わるようなもので、40分くらいでもかなり疲れてしまう。

グラフを組むのが大変

Rectorは基本的にはゲームパッドで組むことを前提にしており、キーボードでも操作はできるけど、マウスでエッジを繋ぐとかはできない。 1つずつ作るところを客に見せたいならいいけど、最初からある程度の絵を出したい場合は、ノードを事前に組んでおいて、ロードした状態でパフォーマンスを開始したいはずである。 Rectorの最初の目的は、“ライブコーディングをゲーム的インターフェースで再構築する”ということであったが、それにしたって1からコードを書くのか、事前に書いておいたコードを使うのかには選択の余地があるわけで、 Rectorだって後者のような形でやれてもいいですよね、ということである。

とっさに絵を変えるのが難しい

Rectorは咄嗟の変化に弱い。バチバチしていたのに急にブレイクしたとか、暗転させたいとか、ストロボさせたいとか、そういう要件にあまり強くない。 もちろんブレイク用のSwitch2を根元に作っておいて、絵を止めたい!と思った時に切り替えるようなグラフを組むことは可能だが、大変ではある。 ミニマルハウスとかでじっくり絵を作っていくのには向いてるけど、展開が速いと対応が難しいと思う。普通に向き不向きがある。

アプデ内容

何を思ったのか解説動画を撮ってYouTubeにアップロードした。ボソボソ喋っているが、文章で説明するよりは動画の方がわかりやすいし作るのも楽である。

基本的には先に述べた課題に対するアンサーになっている。

ノードグループ機能

土地勘を改善する機能。グループと言いつつカンバンに近い。 グループ1はカメラ、グループ2はVFX、みたいなルールで運用すると、最低限の土地勘が維持できる。 今回のアプデで一番大きな改善だと思う。UIもいい感じにした。

土地勘周りは開発当初から課題を感じていたけど、なかなか自分の中に良いアイデアがなかった。 RectorのDiscord鯖でらしおさん、さきやまさんと議論して、カンバン形式が良いんでは?となったのであった。 人と議論すると考えるきっかけが生まれるしアイデアも浮かんでくる。感謝🙏🙏🙏

ノードのフォーカスとカメラの改善(土地勘)

ノードのフォーカスを変えた時にカメラがビュンビュン動くのをやめた。 元々はこれはフォーカス中のノードを自動レイアウトによって見失ってしまう問題に対する対策だったが、ノードグループ機能によって不要になったと判断した。 L2を押してる間はビュンビュン動く挙動に戻るので、必要なら使えばよい。

接続周りの改善、コンティニュー機能

接続元と接続先でフォーカス状態の見た目を変えるようにした。この辺は細かいUIの改善だが、ちゃんと効果があるものである。 また、接続先のノード・スロットを選択する状態で△ボタンを押すと、現在フォーカスされているノードを「接続先」から「接続元」に変更するコンティニュー機能を実装した。 熱心なRectorユーザーにしかわからない機能だと思うが、ノードを直列で複数個接続するのがめちゃくちゃ楽になったと思う。

ノードコピー機能

R2+△でフォーカス中ノードと同じものを作るようにした。便利。

MIDI/OSC機能

ようやく実装した。 keijiroさんのMinisとOscJackを入れただけである。 とっさの暗転とかは一旦はこれでやるのが良いと思う。それとは別に”Solo”機能みたいな何かも欲しい気がするが、こちらはまだ自分の中に良いアイデアがない。

プリセット機能

ようやく実装した2。 データはローカルにJSONで保存するだけ。便利。 技術的制約により、BGシーンに配置したGameObjectから作るBehaviourNodeには対応していない。 というのも、JSONからグラフを復元するということはJSONからノードの構造を理解できるということだが、BehaviourNodeというのは GameObjectにコンポーネントを複数つけることでノードを定義するものなので、シーンをロードしないとノードの構造がわからないのである。 これを真面目にやろうとすると、ゲーム起動時に全てのBehaviourNodeの構造を調べるとか、ビルド時にベイクするとか、いくつか手段があるが、考えることが増えるのでいったんオミットした。 保存時にベイクできると一番楽だが、(Nested) PrefabとかC#更新したら再計算とか、色々考えることがあるのである。

所感

Unity CLI

今回のアプデに伴い、Unity 6.3 LTSにアップデートし、ついでにUnity CLIを導入した。

Unity CLIに対応:端末からUnityを管理端末からエディタのインストール、CIの自動化、実行中のエディタまたは開発ビルドのドライブなどを行います。Unity CLIとcom.Unity.パイプラインパッケージは、スクリプトとAIエージェントにUnityを高速で構造化して操作する方法を提供します。unity.com

Unity CLIを使うことでAIエージェントがUnityエディタを操作するだけでなく、evalコマンドでスクリプトを実行できるし、自前のコマンドも定義できる。 さらにいうと、ビルドしたアプリの操作もできてしまう。 これにより、AIエージェントが動作確認をかなりスムーズに行えるようになったと思う。

Rectorで定義したコマンドは↓にまとめているが、割といい感じに動いてるように思う。

https://github.com/shivaduke28/Rector/blob/a2bde9bd77575534170c3d22743693c87976083a/Assets/Rector/Scripts/Cli/CliClient.Commands.cs

その他の課題

シーケンス

シーケンスというか、長めの展開をちゃんと作るのが難しい。 カメラはカメラで組むし、VFXはVFXで組むので、ちゃんと全てをマッチさせるには機能が足りてない。

そもそも Switch 4を直列に並べて4拍を表現しているが、もう少し良いインターフェースがある気もしている。

Solo、Jump

MIDI/OSCでゲームパッド以外の方法でRectorを制御できるようになったが、それはそれとして、全てのVFXをオフにしたりとか、もうちょっと全体をオフにする機能が欲しいような気もする。 あるいは、指定したノードへジャンプする方法とかもあってもいいかも。 また良いアイデアが浮かんだら実装したいと思うが、しばらく自分が使う予定がないのでいつになるかはわからん。

Continued by

References