Skip to content

Latest commit

 

History

History
119 lines (81 loc) · 9.92 KB

File metadata and controls

119 lines (81 loc) · 9.92 KB

⚡ パフォーマンスチューニングと高度な設定

SpriteStudioPlayerForGodot で最高のパフォーマンスを引き出し、高度な再生制御を行うための設定や Tips を紹介します。

パフォーマンスと品質の設定

フレームスキップ (Skip Frames Enabled)

モバイル端末や多数のキャラクターを表示するシーンなど、描画負荷が高い環境で有効な設定です。 SpriteStudioPlayer2DSkip Frames Enabled プロパティを有効にすると、描画処理が遅延した場合に中間の描画をスキップし、アニメーションの再生速度(ゲーム内での時間進行)を優先して維持します。

サブフレーム補間 (Sub Frame Enabled)

高リフレッシュレート(144Hz など)のモニターでの描画や、Godot 側でスローモーション演出を行う場合に非常に効果的です。 通常のアニメーションは設定された FPS (例: 30FPS や 60FPS) に従ってカクカクとコマ送りされますが、Sub Frame Enabled を有効にすると、現在の時間に基づいてキーフレーム間が自動的に補間計算され、非常に滑らかなアニメーションが実現できます。

再生を自分で駆動する (Manual)

Animation Process ModeManual にすると、ノードは自分でアニメーションを進めなくなります。スクリプトから advance(delta) を呼ぶまで何も動きません。

@onready var ss_player: SpriteStudioPlayer2D = $SpriteStudioPlayer2D

func _ready() -> void:
    ss_player.set_animation_process_mode(SpriteStudioPlayer2D.ANIMATION_PROCESS_MANUAL)

func _process(delta: float) -> void:
    # Engine.time_scale やノードの speed_scale とは独立した、
    # 自前のスローモーショングループ。
    ss_player.advance(delta * _bullet_time)

advance() は自動更新とまったく同じ処理を行います(frame_updated の発行も含むため、SpriteStudioPartAttachment2D の子ノードなど、このシグナルで駆動されるものも同じフレームで追従します)。独自のポーズグループ、決定論的なステップ実行(リプレイ・テスト・フレームキャプチャ)、エンジン側の時間スケールに影響されない時間軸などに使います。

Note

Manual ではエディタプレビューが動きません。 SpriteStudio ボトムパネルが操作するのは再生状態であって時間ではないため、ノード自身が更新しない状態では、再生ボタンを押しても誰も進めない再生が始まるだけです。作業中は Idle のままにし、スクリプトから Manual に切り替えてください。

Note

Manual が止めるのは アニメーション であって、再生中のサウンドは止まりません。サウンドは撃ちっぱなしのため、アニメーションを一時停止した場合と同様に鳴り続けます。サウンド再生 を参照してください。

Tip

単純なスローモーションには speed_scale、シークには frame プロパティが適しています。Manual時間の供給源そのもの を自分で持つ必要がある場合のためのものです。


画面外のプレイヤーを止める

画面外のプレイヤーも、毎フレーム全パーツの評価を続けています。レンダラがカリングするのは 描画 だけで CPU 側の評価は止まらないため、群衆シーンでは誰にも見えていないキャラクターの分まで払うことになります。

これに使えるノードは Godot 側に既にあります。VisibleOnScreenEnabler2D は、自身の矩形が画面外にある間、対象ノードの process_modeDISABLED にします。このノードだけでは分からないのがアニメーションの大きさで、それに答えるのが get_canvas_rect() です。

プレイヤーの子として VisibleOnScreenEnabler2D を追加し(既定の enable_node_path.. なので親を指しています)、矩形を渡します。

extends SpriteStudioPlayer2D

@onready var _enabler: VisibleOnScreenEnabler2D = $VisibleOnScreenEnabler2D

func _ready() -> void:
    animation_changed.connect(func(_name: String) -> void: _refresh_cull_rect())
    _refresh_cull_rect()

func _refresh_cull_rect() -> void:
    _enabler.rect = get_canvas_rect()

対象を無効化した後も enabler 自体は動き続けます。可視判定を報告するのは _process のティックではなくレンダリングサーバなので、矩形が視界に戻った時点でプレイヤーも復帰します。

Important

animation_changed で矩形を読み直してください。 キャンバスはアニメーション単位でオーサリングされるため、アニメーションごとにサイズが違うパック(Ringo は大半が 800 x 600 なのに dead だけ 1300 x 600)では、一度設定したきりにすると大きい方の表示が遅れます。

Note

キャンバスは作者が絵を構成した枠であって、描画を測った輪郭ではありません。パーツはキャンバスの外にも描けるので、キャンバスから大きくはみ出すアニメーションがある場合は矩形を広げてください。上の値に Rect2.grow() を掛けるだけです。

Note

無効化されたプレイヤーは、裏で再生を続けるのではなく停止し、止まったフレームから再開します。待機ループには正しい挙動ですが、シーンの他の要素と歩調を合わせる必要があるものには向きません。既に鳴っているサウンドは影響を受けません(オーディオは撃ちっぱなしです)。


パーツのアドオンシェーダ(パーツ単位のエフェクト)

SpriteStudio でパーツに設定できる アドオンシェーダ は、そのままネイティブに再現されます。設定もマテリアルの割り当ても不要です。シェーダ ID は .ssab に含まれており、プラグインは初回使用時に Godot シェーダをコンパイルし、(シェーダ, ブレンドモード) の組み合わせごとにキャッシュします。

SS6 のリファレンス実装から移植された 13 種類が利用できます。

ID 効果 パラメータ
ss-sepia セピア / グレースケール 強度(符号付き)
ss-hsb 色相 / 彩度 / 明度シフト 色相・彩度・明度
ss-step 明度によるポスタリゼーション しきい値(符号付き)・段数・モノクロ↔着色の混合
ss-outline 4 近傍のアルファエッジによる輪郭線 しきい値(符号付き)
ss-bmask 明度しきい値マスク(上または下を破棄) しきい値(符号付き)
ss-blur 9 タップのボックスブラー フォーカスシフト
ss-move 方向性のあるスメア / モーションブラー 距離・方向・強度
ss-wave サイン波による水平方向の歪み 幅・高さ・位相
ss-noise テクセル単位の疑似ランダムノイズ重畳 強度・色・位相
ss-pix UV 量子化によるモザイク ブロックサイズ
ss-scatter セル単位の方向性 UV 散乱 強度・比率・位相
ss-circle セル矩形の極座標展開
ss-spot 放射状のスポットライトグラデーション

この一覧に無いシェーダ ID を持つパーツは、描画に失敗するのではなくデフォルトシェーダにフォールバックします。未知のアドオンが設定されていても、そのパーツは効果なしで表示されます。

Important

アドオンを持つパーツはドローコールを 1 つ消費します。 通常のパーツはバッチにまとめられますが、アドオンシェーダを持つパーツは固有のユニフォームを必要とするため、専用のキャンバスアイテムとマテリアルで描画されます(どちらもプールされてフレーム間で再利用されるため、コストはドローコールであってアロケーションではありません)。したがってエフェクトは「少数のパーツに使うと安く、全体に使うと高い」という、一般的なオブジェクト単位マテリアルと同じトレードオフになります。

Note

ss-circle は展開のためにパーツの元矩形を必要とします。元矩形を持たないパーツ種別(Shape パーツなど)では何も描画されません。


SSAB と SSQB の使い分け

Godot へインポートされたアニメーションバイナリには、2つの種類があります。

  • SSAB (Animation Binary)
    • 通常のアニメーションデータです。基本的にはこちらを使用します。
  • SSQB (Sequence Binary)
    • 複数のアニメーション(例: 歩き走りジャンプ)を SpriteStudio 側で「シーケンス」としてタイムライン上に連結したものです。
    • プログラム(GDScript)側で複雑な状態遷移を書かずとも、デザイナーが SpriteStudio 上で設定した通りの連続再生を Godot 上でそのまま再現したい場合に使用します。
    • 注意 (現状): SSQBResource への読み込みには対応していますが、シーケンス再生は現時点では未提供です(今後対応予定 — ロードマップ Phase 3 の state machine への内包、または Player 側 prototype)。当面の連続再生は animation_finished シグナルで GDScript 側から次アニメに切り替えて実現してください。