レンダリングプロセス
要素
タイムラインに配置されるもので、 上の要素から順番に評価されます。
要素は評価されると、描画オブジェクトを作成したり、 その描画オブジェクトを変換したりします。
作成された描画オブジェクトは、アニメーションを適用したあと、描画レイヤーに渡されます。
描画オブジェクト
楕円形、矩形、角丸四角形、動画などがあります。
プロパティには
- トランスフォーム (移動、回転、スケールなど)
- ペン
- 塗りつぶし
- エフェクト があります。
描画シーン / 描画レイヤー
時間軸を意識しないシーン、レイヤーです。 描画レイヤーには複数の描画オブジェクトを持つことができ、 描画シーンも同様に複数の描画レイヤーを持つことができます。
要素から描画オブジェクトを受け取ると描画レイヤーは 以下のような描画ノードを作成します。
描画レイヤーは描画オブジェクトの変更を追跡し、 変更された場合は再度、描画ノードを作成します。
1. 描画ノード
2. └ トランスフォームノード
3. └ エフェクトノード
4. └ 図形ノード
この描画ノードは1番から順番に実行されます。
この構造は描画内容をキャッシュする上で非常に便利です。 例えば、重いエフェクトを適用したオブジェクトに 画面外から登場するようなアニメーションをつけると、 毎フレームで重いエフェクトがかけられることになりますが、
エフェクトが適用されたあとのオブジェクトをキャッシュすると、 エフェクトの適用は数回で済みます。
1. 描画ノード
2. └ トランスフォームノード
3. └ キャッシュした画像を描画する
解像度非依存のレンダリング
Beutl はシーンを論理座標で評価し、パイプラインの最後でのみデバイスピクセルへスケーリングします。そのためエディタは、プレビューを低い 作業密度(1/2・1/4・プレビューに合わせる)でレンダリングして再生やスクラブを高速化できます。その際、ベクター図形・テキスト・多くのエフェクトは単純に拡大されるのではなく、その密度で再ラスタライズされるため、縮小しても鮮明さが保たれます。エンコード時は常にプロジェクト解像度(スケール 1.0)でレンダリングされます。
プレビュー密度は プレビュー設定 タブから選びます。カスタムシェーダーには作業密度が uniform を通じて渡されます。解像度非依存に保つ方法は GLSLスクリプト と SKSLスクリプト を参照してください。