ソラマメブログ
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 2人
オーナーへメッセージ

2007年12月26日

パーツ・ズレ現象に関して

ナポレオンフィッシュで起こった、遊泳中に各パーツがズレていく現象に関して記録しておきたいと思う。
まずは2日半遊泳させた場合の状況は、以下のように体からパーツが飛び出してしまう。

パーツ・ズレ現象に関して

これは水中での使用時には著しく、2時間程度で目に見えてズレが生じる。胸鰭の方がズレの程度が大きい。目玉は胸鰭よりは小さいが、こちらも両目玉とも同じ方向へとズレて行く。
陸上(空中)での使用時には、これ程大きなズレは発生しない。が、5日間水槽内で遊泳させた物を見ると、やはりズレは発生している。コチラの場合は、胸鰭は向かって右に、目玉は前にズレているようだ。

パーツ・ズレ現象に関して

サメ・シリーズとかでは、このようにパーツがズレる現象は発生していない。考えられるのは、ナポレオンのみで行っている仕組みに起因していると言う事になる。
試しに昨夜から泳がせて見た、ナポレオンと同様の作りをしているカクレクマノミも、程度は小さいが1日経過でやはりズレが見られる。
この場合は胸鰭と背ビレ部分も同じ方向にズレてきている。

パーツ・ズレ現象に関して

具体的なナポレオンの構造を以下に示す。↓

パーツ・ズレ現象に関して

各パーツでの稼動スクリプトは以下のようになる。
目玉:タイマーで2秒毎に左右別々に乱数で回転角度を発生させ、llSetLocalRotで目玉を少し回転させている。
胸鰭:2枚のSculptedテクスチャを2秒毎に切り替えて、胸鰭が動いているように見せている。
本体:llMoveToTargetで移動しつつ、同時に2枚のSculptedテクスチャを2秒毎に切り替えて、尾びれを動かしている。

従来品と異なる点は、本体以外のパーツでもSculptedテクスチャの張替えを同時に行っていると言う点だ。
同様に2箇所同時にSculptedテクスチャを張替えている、カクレクマノミも1日経過時点で同様の現象を起こしている。

更に今回の現象で不可解な事は、ナポレオンはフリー・ムーブだからランダムに方向転換して、確率的には前後左右同等にズレが発生する可能性を持っている。
にも関わらず、ズレる方向が常に一定しているのは何故であろう?(水中と空中では若干異なるようだが・・・)
これは設置場所に関係無く、本体の左側へとズレて行く。
カクレクマノミでも同様で、同じ方向へとパーツはズレる。

それと、空中と水中では顕著にズレの程度が違う。
これも、もしかしたら物理属性で動いているから、空気中より水中の方が抵抗が大きくて、その影響で差が出ているのかも知れない???
ってそんな所までSLの世界は再現しているのだろうか?だとすると凄いな~。。。

で、対処なのだが、非常に泥臭い方法ではあるが、リンク位置を一定時間毎にチェックして、もし最初の位置とズレていたら、元に戻すと言う処理を、各パーツに入れてみた。
具体的には次のような内容になる。

vector base_pos;
float t=600;
default
{
state_entry()
{
base_pos = llGetLocalPos();
llSetTimerEvent(t);
}
timer(){
if(base_pos != llGetLocalPos()){
llSetPrimitiveParams([PRIM_POSITION, base_pos]);
}
}
}

これで補正してやった場合、2日半経過時点でのズレは見られない。

パーツ・ズレ現象に関して

もともと1時間に数cmレベルのズレなので、10分間隔でチェックしていれば、まず問題は無さそうだ。スクリプト負荷的にも影響は微々たるもののようなので、この状態で安定するなら、販売を開始したいと思う。
ただ、原因が明確には分からないので、それが気持ち悪い。

多分今後はSculptedテクスチャを張替えた、アニメーション効果を利用したオブジェクトが増えると思う。その場合の制約事項になるのであれば、ちょっと悩ましい気もする。
現時点で知っている限り、2パーツを同時にSculptedでアニメーションさせている物は無いと思う。

ちなみに、最近はSASUKE SIMでスクリプト負荷のチェックが具体的にできるので助かる。
ナポレオンに関して言えば、サメやマンタと同程度と言う事で、地域/不動産のデバッグ画面で調べても、0.03ms~0.05ms程度であった。


同じカテゴリー(スクリプトのお勉強メモ)の記事画像
llDetectedTouchST
llAddToLandPassList
【注意】Bulk Permissions機能は使っては駄目!
HTTP-INを使ってみた。
オブジェクトへの指示
ペットを作るには(6)
同じカテゴリー(スクリプトのお勉強メモ)の記事
 llDetectedTouchST (2009-07-24 14:05)
 llAddToLandPassList (2009-07-24 10:23)
 【注意】Bulk Permissions機能は使っては駄目! (2009-07-21 12:15)
 HTTP-INを使ってみた。 (2009-07-19 14:51)
 オブジェクトへの指示 (2008-10-22 12:42)
 ペットを作るには(6) (2008-09-25 10:38)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。