unity-debugこんにちは。画像をクリックするとサンプルのwebGL実装に飛びます。思いつきですし、元々そんなに大変でもないことなので、大した価値はありません。以下の感じで平均FPSを近似します。}}本筋に関係ないクラス定義その他で長くなっていますが、本質はこれだけです。k;kが0.1ならば、前の値を90%に減らして、新しい値を10%足します。汚れた水槽の水を少し捨てて、減った分を足す、みたいな感じです。いうのがわかりにくくなるのです。それはそれで惑わされます。「60.1、59.7、60.3、55.3...え、55?!」みたいな。それには平均するのが一番素直です。「最近60フレームの平均」を出すわけですね。それには、最近60フレームの時間を取っておかねばなりません。毎フレーム平均を計算しなおします。配列を定義するのもループを書くのも面倒くさいのです。真面目に考えることもなく今日に至ってしまいました。平均を「指数関数を窓関数とした畳み込み」に置き換えることです。今回の場合はどんなに古いデータであっても影響はゼロにはなりません。今回の方法だと、新しいものほど影響が大きく、古いものは影響が減ります。実用上大した問題もありません。その度にFPS表示を作るのは面倒です。.csファイルを足すことすら面倒だったりします。多数のサンプルプロジェクトに同じファイルのコピーが存在するのも気持ち悪いでしょう。今回の手法なら変数を1個置いて、2行で値の更新ができます。私は真面目に性能を調べる時には、「最近60フレームの最大フレーム時間」も画面に表示するようにしています。いわゆる「負荷スパイク」です。これも面倒でして、配列に時間を取っておいて、一番大きいものを毎フレーム探す処理が必要になります。今回の手法でループがなくなってしまったので「ついで」になりません。こいつもループなしで似たようなことができないでしょうか?雑で良ければできるできます。}}ミソは二乗していることです。k;フレーム時間を二乗したものを足していき、値が欲しいと言われたら平方根を返します。二乗すると、大きな値の寄与が大きく、小さな値の寄与が小さくなります。1*1+10*10=101で、この平均の平方根はsqrt(101/2)=7.1となります。1の影響より10の影響が強く出ていますね。いうようなことがあれば、200msの影響が強く出て、しばらくそれが残ります。いうことはわかるわけです。実際これを使ってみたところ、私の感覚では2乗ではまだ足りない感じがあります。8乗くらいしちゃってもいいでしょう。スパイクが見えやすくなるのです。2で割って3乗根を取れば7.9になります。10の寄与が大きくなりました。ほどほどが良いでしょう。影響を受けて本当の時間からズレることがあります。使ったりして、実時間で計算した方が無難でしょう。調整して、使い勝手がどう変わるかを見るためのものです。差が広がる様が見られます。サンプルで「coeff」とあるのは、本文中のkです。これが大きいほど、早く古い値の影響が小さくなって、新しい値に敏感になります。小さくするほど長い時間の平均に近い値が見られるわけです。個人的な感覚としては、0.01から0.05あたりが良いかと思います。いうような場合、この手法はそのまま応用できます。サンプルの数がべらぼうに多い場合などは価値が大きいかもしれませんね。08:00平均FPSを楽に近似するTweet2020-01-06お気楽にジャギーを減らす全画面アンチエイリアスunity画像をクリックするとサンプルのwebgl実装に飛びます(safariはダメみたいです)。