Skip to content

v1.1.x以降 エフェクト機能の制限について #7

@DKAlpha

Description

@DKAlpha

v1.1.0から対応されたエフェクト機能を使用する場合の制限についてです。
・逆再生には対応しておりません。
 エフェクトの性質上前回の値にパラメータを加算して位置を決定しますので、再生フレームが戻った場合は、
 先頭からそのフレームまでの起動を再計算する事になります。
 そのさいに乱数が再設定されますので、乱数を固定していない場合は違う結果になります。
 差分フレームが大きくなる程、計算の負荷が大きくなります。
 例えば前回が0フレームを再生し、今回が100フレームを再生する場合、一度に100フレーム分の軌道を
 再計算する事になりますので、処理負荷がかかります。
 再生時間を戻した場合は0フレーム目から計算しなおす事になり負荷かがかかります。

 先頭からエフェクトの軌道を計算し直す際に非表示アトリビュートを考慮しません。
 エフェクトパーツは非表示になると動作がリセットされる仕様となっており、本来であれば表示になった
 フレームからの現在までの差分を計算する事でエフェクトが再現されるのですが、先頭からアニメーションを
 再生しなおして非表示状態を検出する事は非常に高負荷となり、実運用を考えると現実的ではないため、
 過去の非表示状態を考慮しない実装となっております。

・アニメーションの再生速度を変更しても、再生フレーム単位の更新になります。
 上にもあった様にエフェクトはキーフレームではない事と、内部時間がフレームで管理されている事により
 アニメーションの再生速度を0.5に設定した場合、2フレーム毎にエフェクトが更新される形で再生されます。

・エフェクトエディタのFPSはプレビューの値になり、アニメーション配置時の再生速度ではありません。
 エフェクトエディターで設定するFPSはプレビュー時のFPSであり、エフェクトの再生速度ではありません。
 エフェクトの動作速度は配置するアニメーションのFPSに依存します。
 例えばエフェクトの生存時間が30であれば、アニメーションの30フレーム目で消える事になり、
 エフェクトエディター上のFPSによってこのタイミングが変化する事がありません。

・エフェクトが再現されない場合
 プレイヤーでは実用性を考慮してスプライトバッファのサイズを本体より小さくしています。
 それによってエフェクトが再現されない場合ssplayer_effect.hに定義されている定数を変更してください。
 #define SSEFFECTRENDER_EMMITER_MAX (128) //エミッターバッファ数
 #define SSEFFECTRENDER_PARTICLE_MAX (512) //パーティクルバッファ数
 を本体と同じ設定
 #define SSEFFECTRENDER_EMMITER_MAX (1024)
 #define SSEFFECTRENDER_PARTICLE_MAX (4096)
 に変更する事で再現されると思います。
 ただしアニメーションの再生時にバッファの確保が行われますので、サイズに応じて負荷がかかります。
 実際の環境でパフォーマンスを確認した上で運用していただきますようお願いいたします。
 
 

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions