プラグインのランタイム
Astrofox のシェーダー、キャンバスワーカー、Three.js プラグインを実装します。
ランタイムによって、プラグインのレンダリング方法と使用するマニフェストのフィールドが決まります。
シェーダーディスプレイ#
シェーダーディスプレイは、フラグメントシェーダーから新しいレイヤーを描画します。ステージのサイズ、確定的な時間、オーディオレベル、要求された FFT データを受け取ります。
利用できる GLSL の入力は次のとおりです。
最終的な色は gl_FragColor に書き込みます。Astrofox がディスプレイを合成する際、アルファ値が反映されます。
シェーダーエフェクト#
シェーダーエフェクトは、それまでにレンダリングされたコンポジションを inputTexture として受け取り、あわせて time、delta、volume も受け取ります。FFT や時間領域のデータは受け取りません。
マニフェストのプロパティをカスタム uniform に対応付けるには、uniforms オブジェクトを使用します。有効な型は float、int、vec2、vec3、vec4、color です。
ワーカーディスプレイ#
ワーカーディスプレイは、ファクトリー関数をデフォルトエクスポートします。専用の Web Worker 内で DOM なしで実行され、通常は OffscreenCanvas に描画します。
次のルールに従ってください。
- アニメーションは
frame.timeとframe.deltaから算出し、実時間(壁時計の時刻)は決して使用しないでください。 - 乱数のシードには、プラグインインスタンスごとに固定される
frame.seedを使用します。 - 毎フレーム、キャンバス全体を再描画します。ビットマップをホストに転送すると、ワーカー側のキャンバスはクリアされます。
- 所有しているリソースは
dispose()で解放します。 - フレームの処理は素早く終わらせてください。プレビュー中に約 3 秒、書き出し中に約 5 秒を超えるレンダリングは停止され、そのインスタンスは応答なしとしてマークされます。
Three.js ワーカーディスプレイ#
Three.js をダウンロードしたりバンドルしたりせず、Astrofox が持つ Three.js を要求します。
ファクトリーは libraries.three と、ホストが設定した共有の renderer を受け取ります。シーン、カメラ、ジオメトリ、マテリアル、ライトは自分で作成し、出力には借りたレンダラーを使用します。
レンダラーは共有されています。レンダラーを破棄したり、クリアカラー、カラースペース、トーンマッピング、シャドウ、レンダーターゲット、シザーの状態、その他のグローバル設定を恒久的に変更したりしないでください。一時的に変更した状態は、render() から戻る前に元に戻してください。
ホストのカメラコントロール#
Three.js ワーカーディスプレイで "camera": true を設定すると、cameraAzimuth、cameraPolar、cameraDistance プロパティが追加され、ステージのオービット&ドリーのカメラツールが有効になります。
実際のカメラとライティングは、引き続きプラグインが管理します。Astrofox が提供するのは、ユーザー操作と保存されるプロパティ値だけです。
ワーカープラグインは、マニフェストで network 権限を要求しない限りネットワークにアクセスできません。この権限がある場合でも、リモートからの実行可能コードのインポートはブロックされたままです。プラグインが実行するコードはバンドルしてください。
