Open2

lunaris - 僕の夢の動画編集ソフト

shuntiashuntia

経緯

音MAD作りてぇ!

作りかたわかんねぇ!

むずかしそう!

よしソフト作ろう!

ということで

  • 高速
  • 安全
  • 軽量
  • クロスプラットフォーム
  • プラグイン開発楽

これをrustでやればいけるだろ!って思ってました。

開発初期

ここで最初にElixirみたいなものをやろうとしていたら予想外にむずかしくて(非同期のrustは地獄)。そしたらrustのディスコ鯖の人にbevy_ecsじゃん。と言われ、全て書き直した。

しかもプラグイン作りたいのにrustのABIはllvmが色々勝手にやるので非常に不安定だと。じゃあがんばってもC ABIで双方コミュニケートしなきゃいけないし、メモリがあやふやだからコンパイラ絶対文句言うし、速度もダメときた。

ということで独自のビルドパイプラインをjustで作った。
クロスプラットフォームなのでrustでビルドヘルパー作った。
そうして同時にbuild.rsで巨大なコードを自動生成するという荒技。

UI

まぁそれはさておき、UIはだいじだと悟った僕はUIフレームワークを決めることにした。
今まで使ったものだとslintmacroquad(一応)、egui、icedちょっとだけ。
でも圧倒的に描画の処理のしやすさ、シンプルさ、軽量さ、そして拡張性まで求めてしまったらもう、egui一択だなと。

でもeguiって基本レイアウトとか固定なんですね。で、そこに救世主表る。egui_tilesである。これが僕が欲しかった全てだ。神。

これでUIが決まった。

プラグイン、APIとコアの境目

まずlunarisはプラグイン、APIとコアで三分割されている。これらを全て一つ一つ説明していく。

API

APIというよりかは外にアクセスできるコアの内部ってところかな。
必要なstructがたくさん入っている。実際コアの半分くらいの機能性ここの中にあると言っても過言ではない。

コア

コアは正直APIにはいらないもの。
タスクスケジューラー
UI初期化
プラグイン管理
キャッシュ管理
再生管理

主にタスクの管理とリクエストかな。あとはフレームとか管理してるね。
正直それくらい。(笑)

プラグイン

ココがミソですよ。
プラグインには三種あります。core extra externalですね。こちらはプラグインインストーラーが管理するためですね。コンパイル時にはどこにあろうが一切変わりません。結局enumにつっこまれるだけなんで。
とはいえプラグインが中心の設計なので実際コアを起動したとて表示するUIが無ければ一切画面に何一つ映りません。タイムライン、画像のレンダラー、動画のデコーダー、全部プラグイン。9割の機能、プラグイン。

何がいいか

実はこれ、設計上UIが無くても全然平気なシステムなんです。ということはworldの中身を再現すればUIなしに再現できる。それにこの設計の最強ポイントが、worldを他のPCに渡せばなんとレンダリングとエクスポートもヘッドレスでできるんですよ。ということはゴテゴテにしてもデカいPCにそのレンダリングやってもらえばカッスカスのPCでもスムーズに作業ができるんですよ!!!

要は、これ作るから手伝うか見守っててくれ

一応ウェブサイトのためにnext学んだから見ていってくれ

https://lunaris.shuntia.net
https://github.com/shuntia/lunaris