ラグ考察


 このページでは、今まで調査した情報からラグが何故起きているのか
 考察していきたいと思っています。

 正直まだ調査中です。
 しかしSIMを購入した事により色々状態が見えてきました。
 ただ、私見解の段階なので、本当に合っているかどうかの最終判断は
 ここを見ている方の判断でお願いします。

 1.スクリプトが重い
  スクリプトが重くなる原因は主にプログラムの作り方に問題があります。
  スクリプトが重くなる原因は常にプログラムが走っている場合に処理が
  重くなるようです。(些細ですが)
  つまり、使わないときは待機状態にする必要があります。

  スクリプトには待機状態という物が有ります。イベント待ちと呼んでも良いでしょう
  例えばタッチ、衝突、タイマー割り込みなどがそれです。
  これらは待機状態となっており、タッチであればプリムをクリックするまで
  そのスクリプトは停止状態となっています。
  (タイマーは特殊ですが、一定間隔でプログラムが動くと判断すると良いでしょう)

  つまり、絶えずプログラムが動く物(例えば人を追尾や、乗り物)を避ければ
  ラグは少なくなるでしょう。
  しかし、数値が高いと言っても1ms以下の世界の話なので大した問題ではありません。
  但し数が多くなると目にみえるようになるでしょう。

 2.人のスクリプトが重い
  アバター(人)が装備しているスクリプトが重い場合もあります。

  通常SIMステータスではアバターが装備しているスクリプトの数値は測定できません。
  しかし、ポーズボール等に乗った場合オブジェクトとリンクしていると判断され
  SIMステータスで表示されるようです。(HUDのスクリプトも数値として出てきます。)
  (つまりポーズボール等にSitした場合はポーズボール自体が重いわけではなくて
  人に装備しているスクリプトが表示される為、それが見えるという事です。)
                           [情報提供:poidowl Poikolainenさん]

  数値的には、通常のスクリプト同様大した数値ではありません。
  ただアバターに使っている数が増えれば増えるほど一人当たりの
  スクリプト使用率が上がります。

  なお、下の表の一番上0.317msはポーズボールを用い1人がポーズをした場合の数値です。
  2行目以降の数値は稼動しているスクリプトの数値です。
  (通常待機状態のスクリプトは0.001msとなります。)

  何れもものすごい小さな値なので数が増えなければ問題はないでしょう。
  (1ms = 1/1000秒 本当に些細の時間です)

  
  SIMを購入するとこんな感じで値を見ることができます。
  数値が高くなれば高くなるほど通信時間が増大してラグが発生するという仕組みです。 

 3.パケロスによるラグ
  画面右上の2つのバー、そのうちの左側がパケットロスの状態なのですが
  時折このバーが振り切れて(赤くなって)大きなラグやチャットのラグが発生します。

  正直、これの原因は正確には分かりません
  しかし、読んで字のごとくパケット通信がうまく行かなかったのだろうと思われます
  通常パケット等の通信電文にはパリティチェックやチェックサム等の通信する
  電文が壊れていないか判断するチェック方法があるのですが。
  恐らくクライアントが受信した際にこの値がエラーとなっており、
  正常に受信できていないと思われます。
  最近頻繁におきる「Wearした位置が腰の位置になる」や「パーツが装備されてない」
  「打ち込んだ文字が大量に表示される」というのは
  その情報が正常に受信できずその情報がエラーとしてロスされたからだと思います。


  通常、通信はリトライを行うのでエラーとなる情報が多ければ多いほど
  リトライによりラグが発生すると思われます。

  ざっと理由を考えると大きく2つ考えられて、いずれもユーザー個人が
  対応することは不可能と思われます。

  @ネットワーク環境が悪く通信が正常に行えない。
   ハード的に問題がある場合や情報量が多すぎてタイムアウトとなり
   通信が正常に行えなかった。

  Aアップデートのバグの可能性
   ソフト屋なら、なんとなく分かると思いますが、大規模のソフトウェアを
   大勢で構築する場合、アップデートによる仕様変更はマジ怖いです。
   通信パケットのチェックサムなどを追加した場合なんらかのバグで
   「この条件の場合は」ってときに正しいパケットを作成できていなかったりして
   通信が成り立っていない可能性もあります。
   
(エラーのパケットを何度送ってもエラーなので、リトライもエラーとなり
   パケロス大量発生)

                      の、どっちかじゃないかなぁ(無責任
                      どの道、私らには何もできないので
                      気長に待ちましょう(笑

  ちなみに、ずれた位置にWearされた物がWearしなおすまで直らないのは
  1回目の表示のみ読み込むようにして、通信量が増えないようにしている配慮です。
  毎回全部の情報を読み込んでいたら重くて遊べる状況ではないでしょう(笑

  自分のアバターを右クリックして「Appearance」を選ぶと表示が更新されるのは
  その際に全部読み込みなおしているからと思われます。
  もし周りから、「見えない」と言われたときは試してみましょう。

  ちなみに以前「衝突」がパケロスの原因では?と書きましたが
  これはパケロスの発生しているときに、よく数値が上がってるって事だけだと思います。
  逆に言うと物理落としてScoreが1000.0になってもパケロスが上がらない場合もありました。

   
   SIMを購入するとこんな感じで値を見ることができます。
   これは衝突のイベントを表示しています。(プリムの飛び乗ったときの値)

 4.テクスチャが多くて重い
  自作したテクスチャはかなり解像度が高いものがあります。
  テクスチャを表示する為には、各ユーザのローカルPCにダウンロードする必要がある為
  解像度が高い(つまり容量がでかい)物は時間が掛かって重くなると思われます。
  なるべく解像度の低いものを使用して、回線の重い方にも配慮しましょう。

  ちなみにフリーやデフォルトのテクスチャの解像度はかなり解像度が低いです
  (100x100とか、255x255とか、512x512とか)
  ・・・でもリアルに見せたいのなら解像度高いほうがいいんですよね、難しい

 5.ゆらゆらゆれる木が重い(Linden Plant)
  これは完全にユーザ依存です。
  Editで作れる木は1プリム(つまりユーザ側のPCで描写)なので通信量も少なく
  それ自体はそんなに通信に悪影響を及ぼしません。
  但し、木はユーザ側で描写するとしてもかなり細かく作られており
  テクスチャを張った3プリム程度の木とは違い大量にプリムを使用しているため(それでも扱い1)
  ユーザによっては負担が大きいでしょう。

 6.回線が重い
  これは恐らくユーザ依存でしょう。回線の状態がよければある程度よくなります。
  まぁサーバが海外なのでそれもあるかもしれませんが、Class5SIMであれば
  全然きになりません。
  また初期設定では通信にリミットが掛かっているので、リミット値を上げるのも手かもしれません。
  他のページでその辺の設定を紹介しています。

 7.PC性能が低くて重い
  これもユーザ依存ですが、グラフィックカードの性能が低いと
  3Dオブジェクトやテクスチャの描写処理に時間が掛かります。
  これもある程度設定を落とせば逃げることができます。


まとめ
 全体的に見て一番のラグの発生は、パケットロスが原因です。
 恐らくLindenで対策をしてもらうしか無いでしょう。

 しかし、Wearの問題やパケロスが通信で起きる事を総合して頭の中で考えると
 軽いSIMは人数云々ではなく、「出入りが少ないSIMが軽い」という事になるかも?
 つまり、初めにキャラクタがSIMに入った時点でそのキャラの情報通信がある。
 その通信がパケロスで重い、でも一度読み込んだら、もう読み込まないので
 SIM内を動き回る分にはそんなにパケロスが発生しない(移動分の通信はあるだろうけど)
 あれか!、入場制限があるSIMや、仲間うちだけのSIMが軽いのか!?(笑