Adsense

2008年5月14日水曜日

セカンドライフのアニメーションを操る その5

その5、、、です。ちょっと小難しいスクリプトの話が続いたので、今回はアニメーションそのもののお話になります。(笑

MLDU1 and 2 (Massive Link Dance Unit version1 and 2)  ができたのは、LINZOO さんに「作ってみるー」と言ってから結構早かったんです。
ダンススロット(同時に Avatar が踊れる数)は 50 越えで、踊るダンスの組み合わせのセットは3つ、オーナーにはダイアログが表示されて、ダイアログのボタン操作でダンスセットを切り替え、アバターが踊っているダンスを変更する、ノートカードにダンスの順番、それぞれのダンスの再生秒数を指定する、、、など、現在の MLDU3 の基本仕様(というか、LINZOO さんの要求w) を含んでいました。

そのときのテスト模様は、、、こちらにあったり

0
雷神を使った MLDU テスト。この時、同期ダンス 50 人を達成しました。

が、LINZOO さんから一言。「ダンスセット、3つじゃ足りないなぁ~」(笑

MLDU1 and 2 は1つのノードカードにタグ形式でセットを記述するタイプでした。
こんな感じ、、、

<Set1>
10.0, dance1
12.0, dance2
.....
.....
.....
8.0, dance3
</Set1>
<Set2>
18.0, dance4
....
....
10.0, dance1
</Set2>
<Set3>
8.0, dance3
16.0, dance5
....
....
12.0, dance2
</Set3>

なので、本当に安易にこのノートカードにダンスセットを追加していきました。
でも、、、LINZOO さんの持っているダンスアニメーションの数が、、、半端じゃなかったんです。
そのときで 200 以上は持っていて、、、当然ノートカードの項目も長くなります。
なので、スクリプトのメモリーが足りなくなってノートカードが読めなくなったんです

アニメーションを操る、、、という意味でいうと、ノートカードに順番を入れるのはともかく、なんで秒数までいれるの?と思われる方も多いと思います。おおよそダンス・アニメーションとセットで配られているアニメーション再生スクリプトは 20秒から30秒くらいの「固定間隔」でダンスを切り替えます。これでも十分楽しいのですが、LINZOO さんがこだわったのは「ダンス終了後の立ち位置と、次に開始されるダンスの立ち位置の違い」でした。


高品質ダンス・アニメーションは開始位置と終了位置が一緒

フリーで配られているダンスの中にもすばらしいものもありますが、とくに Latin (ラテン) ダンス系のフリーものはダンスの開始位置と終了位置が大幅にずれているものがあります。ダンス・アニメーションはループアニメーションとして登録されている場合がほとんどなので、そのアニメーション単体を試してみるとすぐにその「不自然さ」がわかると思います。

最初、ラテン、サルサといったダンスはどうしても移動するので仕方ない、、、と思っていました。でも、ショップの有料ダンス・アニメ (ほとんどが 150L$ ~ 300L$ ですね) を見ると、、、これが見事に一致して、さらにはじめからループすることを見越して作っているようで、ループしても「切り替わった」ということを意識させないつくりになっています。
ですから、本来アニメーションがもっている「再生時間」を使ってダンス・アニメーションをつなげていくと、多くの場合は「基点」に戻るのでスムーズにダンスがつながって見えるのです。
せっかく基点にもどってきているのに、一定間隔で無造作に切り替えると台無し、、、というわけですよね。

また、開始位置と終了位置が違うものでも、もし、ダンスの移動中に開始位置に近い場所にくることがあれば、その時点でダンスを切り替えるとスムーズにダンスがつながってみえるわけです。

ただ、この作業、、、現在手作業でしかできませんね~。 LINZOO さんはストップウォッチ片手に計測しているみたいです。
llGetPos() を使って同じ位置近くにくる時間を自動的にとる、、、なんて最初考えましたが、アニメーションで動いているように見えても、実は Avatar の位置って、もともと立っていた位置の Vector 値を返します。スポットライトのスクリプトでアバターを追いかける、、、なんてのも、アバターを動かして歩いているのであればいいのですが、アニメーションによる動きだともともといた場所しか返さないので追いかけることができなかったりします。
このダンスの長さの情報、、、実はショップによってはきちんと公開しているところもあります。

Animazoo の場合

Animazoo は プロパティの Description にいろいろな情報があります。以下のようなものです。プライオリティ(優先順位)と秒数(赤字)が書かれています。
[Animzoo animations - Animazoo dance 25.0 - priority 3 - easing 1.0 - 9.15s l Chevvie dance 15.0]
[Animzoo animations - Animazoo dance 22.0 - priority 3 - easing 1.0 - 11.4s l Chevvie dance 8.0]

Sine Wave の場合

Sine Wave の場合は Animazoo のようにプロパティの Description に情報がないので大変、、、だったのですが、最近ものすごいことになっています。Sine Wave が配付している AO1.2 で Sine Wave の Web サイトと連携するようになりました。 Sine Wave AO 1.2 を Wear した状態で「/1 activate」とチャットすると Sine Wave Web サイトの自分専門の Page のリンクが Say されますので、それをクリックすることでそのページが開きます(最初はパスワードとかのセッティングが必要です)。

ページには Sine Wave が販売しているダンス・アニメーションのリストがあり、かつ、AO 1.2 に入れたダンス・アニメーションにチェックが入っていて、それぞれのアニメーションの時間まで、、、、Web 上で確認できます。(ただ、、残念ながら PlayList の使い方を把握しきれていないので、、、このサイトの使用はダンス・アニメーションの時間の確認のみですが、activation した上で AO を使うとそれぞれのダンス・アニメーションの再生時間はもっとも最適なものになっているのがわかります。)
0

OWENIMATIONS、Abranimations の場合

情報ないのでストップウォッチで計測するしかみたいですね、、、
と、ノートカードによるダンスセットの記述は手間がかかるものの、ダンスがスムーズにつながったり、曲調にあわせてダンスが切り替わるのを見ると時々「ぞくっ」とすることがあるくらい、綺麗に見えます。

万人向けじゃない、、、ですが、クラブでより多くの人に楽しんでもらいたい、と考えると、LINZOO さんの無茶な要求もわかるというもの、、、です。
話は戻って、、、メモリー不足への対応ですが、1枚のノートカードの情報を1つのスクリプトで読みきれないのであれば、ノートカードとスクリプトをそれぞれ分ければいい、、、とすぐに思いつき、それをやってみたわけです。それが MLDU2 となって LINZOO さんにお渡ししたわけです。

が、、、スクリプト、LSL 的には、ここからとっても勉強させられることになります。
とにかく、、、メモリが足りない、ノートカードにそれほど多くの情報がないのに Heap/Stack エラーになる、ちょっとでも SIM が重い・ラグな状態になるとノートカードの読み込みができない、、、、などなどに対応していくことになりました。。。
続く・・・かなぁ、、、(笑