
SIM負荷ゼロの形状アニメーション
2013年01月25日

サーバ(シミュレータ)の連続的な負荷ゼロで、形状のアニメーションが
できる小技をご紹介しようと思います。
これまでにも複数のプリムを重ねておいて、うち1個だけの
透明度を順番に不透明に切り替えていくアニメーション手法が
ありましたが、切り替えには連続的なスクリプトからの操作が必要でした。
スカルプのマップ切り替えもありましたがこれは負荷が高いです。
メッシュではマテリアルが8面まで使えるようになったため、
真っ先に思いつくのは面単位に透明度を切り替える手法ですが、
それでも切り替えのオーバーヘッドは残ってしまい、連続的な実行に
おいてはあまり理想的とは言えません。
前置きが長くなりましたので紹介に入りますw
根本のアクチュエータはllSetTextureAnim()によるものです。
llTargetOmega()などもそうですが、これらはクライアントサイドで
実行されるため長期間連続で動かしたとしても、シミュレータの
負荷は実質ゼロとなります。
テクスチャの変動では形状のアニメーションはできなさそうにも思えますが、
メッシュではUVマップをユーザが定義できるようになったため、透過テクスチャ
を上手く併用することでポリゴンの表示状態をコントロールできます。
という訳で、Blenderでの製作例など。
1.まずは普通に1面だけ使ってモデリングします

もちろんUV展開も必要です。
2.テクスチャを用意します

下絵を使ってモデリングする場合、こっちが先かもですね^^
3.UVマップ全体を使い切らないようにリサイズします

ここでは4コマのアニメーションを想定していますので、
全体の25%に縮小しています。
4.メッシュ全体を同じ位置に複製し、UVマップをずらして配置します

もちろん、頂点グループなどの機能を使わないと操作的に破綻すると思いますw
5.それぞれの形状に動きをつけます

UVマップは変更してはいけません。
この段階で、このような

テクスチャを適用すれば、テクスチャの表示位置(垂直)を制御することで
それぞれの形状を個別に表示することができます。
(下75%の部分は完全な透明ですので、4つのうち3つのモデルは表示されません)
しかし、、、
LSLにはテクスチャをN分割でスクロールできる機能はないんですね;;;
(もちろんロジック制御なら可能ですが、本件の趣旨からは外れるため割愛します)
そこで、、
6.画像をさらに縮小し、必要なパターンを並べたテクスチャを作成します

テクスチャの用途の配分はこんな感じになります。

このテクスチャを適用しておき、スクリから
llSetTextureAnim(ANIM_ON | LOOP | PING_PONG, 0/*face*/, 4/*horz*/, 1/*vert*/, 0/*start*/, 4/*length*/, 4/*fps*/);
とすると自動的にアニメーションしてくれます。
(この例ではFPSが4ですので1秒間に4コマの速度になります)
頂点数嵩みまくり&テクスチャの解像度が犠牲になりまくりなオマケ付きですが、
負荷ゼロの形状アニメーションってのも乙かもなーと思って記事にしてみましたw
この鯉はお店の前の池で泳いでますので、興味のある方はご覧になってください^^
がちゃ屋へ行ってみる
Posted by Yuji at 03:54│Comments(0)