SIMの負荷を徹底解析!
  ラグの原因特定と対応方法


 SIMがラグ(表示がガクガク)しはじめた時の原因の調査方法と対策方法です。

1.まず第一に何が原因になっているか調べる。

 どのくらいSIMに負荷がかかっているか見たい場合、ステータス表示をして
 SIMの状態を見る事ができます。
 まずCTRL+SHIFTを押しながら1を押します。そうするとステータスのウインドウが開きます。

 

 まず一番上の項目、ベーシックFPSを確認
  この項目はローカルPCの描写能力です。このFPSが落ちていると操作が重かったり画面が
  コマ送りになります。
  原因はPCの性能による物が大きいですが、メモリ等を解放(つまり再起動)等をすることで
  改善される場合があります。
  この値が低い場合はメニューの「ミー」→「環境設定」のグラフィックタブで描写の性能を調整してください。

 次にSIMの負荷を確認します。
  シム FPSはSIM処理の状態を表示してます。最大で45(フレーム)です。
  つまり1秒間に最大で45回画面を更新しています。
  この値が低くなるとSIM起因のラグが発生します。
  物理作用FPSは物理演算によるFPSです。こちらも45が最大値です。

 SIMFPSが落ちているならば、負荷が何によって発生しているかを調べます。
  フレーム時間合計が1フレーム表示に割り当てられている時間です。
  そして、一番下の余暇が処理の無い時間を表しています。
  この余暇が0以下になると1フレーム中に処理が収まらなくなっており、ラグが発生している事が
  分かります。(余暇が無いとSIMFPSが落ちます。)
  内訳ではそれぞれの負荷の数値が表れているので、この中で負荷の異常にかかっているものの
  対策を行えばラグが改善します。
  上記の場合はスクリプト負荷が18msと高い為1フレームの余暇がほぼゼロとなり、そのためSIMFPSに
  影響が出ていることがわかります。

 スクリプトの数や動いているオブジェクト数をみる。
  アクティブなオブジェクト数等を確認できます。
  上記の場合動きっぱなしのスクリプトが345個ありその中で動いているスクリプトが4253個
  という事が分かります。この数を減らす事がスクリプト負荷を減らす第一歩となります。

2.重いスクリプトの特定方法
 以下のようなオブジェクトのスクリプトは重くなる傾向があります。

 ・ペット
  ウロウロ移動したり色々なしぐさをする物
 ・時計等
  特に秒針があり毎秒変化がある物
 ・Listenを使う物
  通常会話を受信するようなものは、近くに人がいて会話するたびに
  スクリプトが動作してしまい負荷の元になります。
 ・REZするもの(オブジェクトを出現させるもの)
  REZを行った直後はSIMの処理能力を大幅に使います。
  頻繁にREZするものは負荷になる可能性が高いです。
 ・色の変化/サイズの変化/光の点滅等
  プリムの形状変化を行う物は変化させるときにSIMの処理能力を使います。
  頻繁に動作するものは負荷が上がりやすいです。
 ・物理オブジェクトを操作する物
  エレベータ等で待機等の処理をきちんと行っていないと
  負荷がかかる可能性があります。
  また放置された物理オブジェクトがSIMの負荷を発生させている可能性もあります。
 ・センサー
  アバターを検知したりするセンサーは検索時に処理の負荷が発生します。
  特に継続して検知するスクリプトは常に動く為負荷になる可能性が高いです。
 ・乗り物
  これは一時的な事なので問題のある負荷として考える必要はないでしょう。
  ただしラグ等でフリーズし空中に動作したまま放置されたもの等があった
  負荷の原因になる可能性があります。

3.負荷がなぜ起こるか理解して対策する。
  スクリプトは「スクリプトを実行している」状態が非常に負荷が高い状態です。
  待機状態のスクリプトは殆ど負荷がありません。

  つまり、動きっぱなしのスクリプトを待機させるか、タイマー等の間隔を長くして
  処理の回数を減らす事で処理をかなり下げる事ができるようになります。

  ○動きっぱなし(Active)になるスクリプト

   Listenを使った物
    会話等で動く可能性があります。しかしListenのチャンネルを0以外にしたり
    フィルターを掛けることで処理が動きにくくし負荷を抑える事ができます。

   Sensor、timerを使った物
    常に動作した状態になります。しかし処理の間隔を空けることで
    負荷を抑える事ができます。
    大抵見栄えが良いスクリプトは0.2秒タイマー割込みをおこなっており
    それにより常に動作状態になっているものが多いです。

    タイマー等の間隔は2秒以上が推奨されています。
    でもこれじゃ動きがしょぼいので使う時だけ動くようにすれば
    負荷はその時だけなので影響はすくなくなります。
    
  ○待機状態になるスクリプト

   touch、collisionイベントで動くもの
    これらはスクリプトが完全に停止しており負荷はほとんどありません。

  ○SIMに直接演算をさせる物
   llSetRot、llSetPos等プリムの位置や角度を変えたり、形状や色を変えるものは
   SIM内で演算を行うので負荷になりやすいです。
   これらも常に動くようにするのではなく、touchしたら動くようにするなどの配慮をすることで
   負荷を軽減させることができます。

  ○SIMに負荷がかからないプリム変化
   プリム面のアニメーション、テキスト表示、omega回転等
   これらの処理はローカルPCで描写を行うためSIM負荷にはなりません。
   ただし、見てる人によって結果が違うという欠点があります。


ラグの原因になっていそうな物を見つけたら?

個人の設置した物等がラグを発生させてそうだった場合、まずはボスかオフィサに相談してください。
負荷の原因かどうか調査して問題がありそうであれば対応をおこないます。