2008年05月21日
セカンドライフのアニメーションを操る その7
MLDU (Massive Link Dance Unit) のベンダー販売に最後まで躊躇したものは前の投稿でちょっとご紹介した「ラグのときのノートカードの読み込み」でした。
アニメーションを操る、、、という件名との関連性が薄い話題なのですが、ノートカードによるダンス記述は MLDU では欠かせないものだったということと、llHTTPRequest といった関数を使った外部サーバー、サービスからのデータ読み込み・書き込み方法 (Sine Wave AO 1.2 方式ですね) を除けば、ユーザーさんが唯一データの追加・変更をして、スクリプト・リセットしてもそのデータを再度使うことができる、、、というものなのでご紹介させてください。
ダンス・アニメーションの再生の順番やその再生時間を MLDU ではユーザーがノートカードに記述して保管しておきます。スクリプトはノートカードを読み込み、その情報を LIST に格納して、その順番で llStartAnimation を開始し、llSetTimerEvent には該当する秒数をセットしてタイマーをかけます。
timer() イベントが発生したら、LIST の次の項目のアニメーション名と秒数を使ってアニメーションを開始し、それまで動いていたアニメーションを止める、、、この繰り返しです。
ダンス記述ノートカードは1枚ではなく複数枚利用でき、MLDU 3.2 のデフォルトは 5 つのダンスセットを準備し、リセットすることなしに即時にダンスセットを切り替えることができます。ダンス記述ノートカード1枚につき、1つのスクリプトが割り当てられています。これはより多くのメモリーを利用したいためでした。

それぞれのダンス制御スクリプトはノートカードの読み込み時に指定されているダンス・アニメーションが本当にあるかどうかを llGetInventoryName を使ってチェックします。llStartAnimation / llStopAnimation の時に Avatar がいない場合エラーになることをご紹介しましたが、アニメーションが無い場合も当たり前ですがエラーになります。
意外にタイプミスが多かったり、半角スペースが2つ入っているのが本当の名前、、、などがあります。エラーの場合はどのダンスアニメーションがエラーになっているかを llOwnerSay を使って表示します。ダンスアニメーションを記述する際には、アニメーションのプロパティを開いて名前の部分をマウス・ドラッグでマーキングして、Ctrl+C でコピーし、ノートカードに Ctrl+V で貼り付けるのが一番確実ですね。
続きを読む
2008年05月19日
セカンドライフのアニメーションを操る (番外編)

SIM に入るのも大変なのですが、SIM に入った後でアニメーションを受け取るのも大変です。
単純に SIM が重い、ラグだからなのかな、、、と思ったのですが、、、どうもスクリプトに問題ありそうな気がします。
インベントリの中をちょっと見てみました。

続きを読む
2008年05月18日
セカンドライフのアニメーションを操る その6
シリーズものも第6回になってしまいました。(笑
こんなことしたい~、を実現するスクリプトはすぐに作れたとしても、前回書いたようにエラー処理や例外処理みたいなものをどんどん追加していくことになるんですよね。
まぁ、最初からそれらを入れて、、、というのが本来あるべき姿なのでしょうが、どんなことがおこるかその時は(今でも?)わかっていませんでしたから、雷神で何か問題があれば LINZOO さんから連絡をいただき、対処する、、、ということが数か月続いたわけです。
エラー処理、例外処理、メモリが足りない、、、
根本的にロジックがおかしい、、、というのはダメダメだとして(笑)、MLDU で私が経験させてもらった代表的なものは以下です。
1) llStopAnimation しようにも、Avatar がいない、、、
その SIM に Avatar がいない状況で Permission を持っているスクリプトが llStopAnimation を使ってダンス・アニメーションを止めようとするとスクリプト・エラーが発生します。「びょ~ん」とあのエラーマークがプリム上に現れます。

このマークはそのうち消えてしまうのですが、どうにも美しくないですよね。
センサーを使って確認する、、、なんて、最初考えたのですが、、、センサーリピートでぐるぐるまわす、、、それもどうかな、なんて考えていたらお友達からヒントをもらいました。
その Avatar が SIM にいないと本来機能しない LSL の関数、さらにエラーにならず、「いない」ということを戻り値として返してくれる関数、、これを聞いて「あっ!」と気がつきました。
llKey2Name です。
llStopAnimation の直前に llKey2Name を使い、もし戻り値が NULL だったら llStopAnimation をぜずに、llRequestPermissions を行ったスクリプトを初期化して、他のアバターに使わせるようにすることでスクリプト・エラーを回避することができました。
続きを読む
2008年05月14日
セカンドライフのアニメーションを操る その5
MLDU1 and 2 (Massive Link Dance Unit version1 and 2) ができたのは、LINZOO さんに「作ってみるー」と言ってから結構早かったんです。
ダンススロット(同時に Avatar が踊れる数)は 50 越えで、踊るダンスの組み合わせのセットは3つ、オーナーにはダイアログが表示されて、ダイアログのボタン操作でダンスセットを切り替え、アバターが踊っているダンスを変更する、ノートカードにダンスの順番、それぞれのダンスの再生秒数を指定する、、、など、現在の MLDU3 の基本仕様(というか、LINZOO さんの要求w) を含んでいました。
そのときのテスト模様は、、、こちらにあったり。

雷神を使った 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 さんがこだわったのは「ダンス終了後の立ち位置と、次に開始されるダンスの立ち位置の違い」でした。
続きを読む
2008年05月12日
セカンドライフのアニメーションを操る その4
前回からの続きです、、、
LINZOO さんお得意の「つぶやき」にまんまと引っかかり(笑)、でも、今考えると本当に「安易」にダンス玉を作るといってしまった、、、と思います。
同期ダンスの仕組みはおおよそ予想がついていました。ちょうど大運動会のイカロスの順位表示スクリプトを作ったので、メッセージを使ったスクリプトの連携などをすでに経験していました。なので、当時のエントリにもあるように llMessageLinked で「これ踊って~」というメッセージを投げ、それを複数のスクリプトが拾って llStartAnimation を Avatar に対して行う、この繰り返しでしょう、、、くらいの理解でした。
ビデオ玉や音楽玉もすでに作っていたので、複数の人がひとつのスクリプトを利用する問題点と対応方法、ダイアログの使い方、ノートカードの読み込ませ方などもある程度わかっていたつもりでした。

当時のビデオ玉のダイアログ
スクリプトでアニメーションを操作して、アバターにダンスやポーズをさせる場合、Permission が必要だという話しはすでに書きましたが、この permission 、、、ちょっと危険な香りがする function なんです。それと (複数の人を対象としたダンス・スクリプトとしては、、、逆にかなり難しいですが) 複数の人がひとつのスクリプトを使った場合の llRequestPermissions の動きって、ちょっとトリッキーなんです。すぐに気がつきましたが、アニメーションを操る上では理解しておかないといけないポイントがいくつかあります。
llRequestPermissions... 許可をするときは覚悟が必要?(かも)
llRequestPermissions を使ったスクリプトは実はこれが初めてではありませんでした。はじめて llRequestPermissions を使ったのは「詐欺スクリプト」を検証してみた時だったんです。
詐欺注意 2007年6月23日の投稿です。
お金に絡む Permission の場合はダイアログが黄色になる、、、みたいな改善がその後行われてきましたが、いずれにせよ、この llRequestPermissions によるいくつかの制御の許可 (自分たちにしてみれば制御権限の委譲) は結構慎重にならなくてはいけないのかもしれません。
たかがダンス、、、といっても、スクリプトの書きかたが十分でないと、、、ダンスがとまらない、、、なんてことになっちゃうんです。
続きを読む
2008年05月10日
セカンドライフのアニメーションを操る その3
チャットキーボードの次は立ち姿の AO (Animation Override) を、、、と思ったわけですが、スクリプト以前にポーズというものが面白くて、QAvimator などを使って自分でポーズや短いアニメーションを作ってみたりしました。ポーズは Free のものでも相当の数、そしてなかにはクオリティが高いものが出回っていて、Secondlife を始めたころはひとつひとつ試してみたり、「その1」でご紹介したジェスチャに登録して使っていました。
アニメーションとポーズ、、、これは同じものなんですよね。
そのあたりは「ポーズは腰が命 全4回」(笑 や 「QAvimator って面白い」のエントリの中で紹介しています。 QAvimator の使い方、bvh ファイルの作成とアップロードの方法からわかってきました。
でも、自分の作ったポーズ(つまり、フレームを 2 つしか使っていないループアニメーション)って切り替えると「パッ!パッ!」とそのポーズになって、それが「不自然」ということに最初は気が付いていませんでした。それに気が付いたのが Maitreya のポーズを試してみたときでした。

Maitreya - CCRunwayPose21
それはポーズというよりも、立派なアニメーションでした。
これ、フォトだとまったくわからないと思いますが、「きめのポーズ」になるまでの体の動きがものすごくしなやかなんです。そして、数秒たったら、また違うポーズに変化する、、、、というものもありました。
続きを読む
2008年05月08日
セカンドライフのアニメーションを操る その2 (でしょう、、
チャットキーボードはアニメーション理解の原点(かな?)
チャットキーボード、、、チャットをしているときにアバターがキーボードをタイプするような動き(アニメーション)をするわけですが、せっかくキーボートをタイプしているような動作をするなら、キーボードだしちゃえ!っというのが出発点で、そのうちタイプしているアニメーション自体を変更(このアニメーションの変更を Animation Override (AO: アニメーション・オーバーライド)といいます)して違う動きにしちゃおう、などなど、本来提供されている動き・アニメーションをもとにいろいろなカスタマイズができちゃうわけです。
キャット・ウォークとかセクシー・ウォーク、つまり、飛んだり、走ったりするアニメーションを違うアニメーションに入れ替える AO も、基本このチャットキーボードの仕組みと同じものです。一番はじめにこの単純な「チャットのアニメーション」を利用・変更するということにトライしたのは、今考えると最初の入り口としてはとても敷居が低くてよかったんでしょうね。
ちなみにそのとき作ったチャットキーボードは以下です、、、

この時、同じ「アニメーション」でも「テクスチャ・アニメーション」というものの存在を知りました。黒の背景に緑の文字がばらばらと流れるものをこのテクスチャ・アニメを使って作りました。簡単に言うと、プリムに貼り付けるテクスチャも アニメーション GIF みたいに「動きがある」ものを使うことができて、それをスクリプトの llSetTextureAnim でコントロールすることができるんですよね。llSetTextureAnim も実は奥がとっても深くて、それだけで結構ながーいエントリになるかもしれません。アニメーションだけじゃなくて、たとえば瞬時に画像を切り替えたい場合などは llSetTexture で個別の画像を切り替えるより、llSetTextureAnim と使用する複数の画像を一枚にしたものを使うと、画像切り替え時に灰色になることを避けることができたりします。もちろん、、、画像サイズにもよりますが。
(脱線、脱線、、、)話しを戻して、、、
続きを読む
2008年05月06日
セカンドライフのアニメーションを操る その1(かな)
Free のダンスもいろいろありますが、Sine Wave や Animazoo、OWENIMATIONS といったアニメーション専門店で素敵なポーズやダンスを見て思わず買ってしまった、、、なんて経験がある方も多いのではないでしょうか。
このアニメーションを使うために AO (Animation Override) ユニットを配付しているショップもありますが、英語での説明だったり、コンテンツフォルダに保存したアニメーションを名前順に同じ時間間隔で再生するといった単機能だったりして使用勝手が、、、と思われている方もいると思います。
そこで(どこで??笑)アニメーションを扱う方法についてこれまで私が経験したことをちょっとまとめてみようと思いました。はい、急に思い立ちました(笑
アニメーション操作のファースト・ステップ 「ジェスチャ」
フルパーミッション(コピー可、プレゼント可、修正可)のダンス、アニメーション、ポーズならばジェスチャ作成してカスタマイズするのが一番でしょう。マクロ(?)みたいな感じですが、スクリプトを書くよりはものすごく簡単に、アニメーション、サウンド、チャットの組み合わせをひとつのジェスチャの中に登録することが可能です。時間を指定して次の動作に移ったり、同時にアクションを開始したり、、、とアイディア次第ではかなり凝ったことができます。ビルトイン・アニメーションも使えますので、たとえばビルトイン・アニメーションを流用した「クチパク」などはスクリプトを組まなくてもジェスチャ登録することで作成することが可能です。「あ」とか「い」といった母音の発音の口の形に近いジェスチャを作って Shift+F5, F6, F7 とかに登録しておき、それらをタイミングよく連打すると話しているように見えます。
アニメーションには実行時の優先順位というのがあり、同時に複数のアニメーションが動くと、高いものが優先されて動きます。また、複数のアニメーションを同時に動かすと、アニメーション指定が重なっていない「部分」などは複合して動きます。クチパクなんかも優先順位の同じビルトイン・アニメーションを複合させると思いもよらない表情をみせてくれることがあります。
以下の「お」という発音のクチパク・ジェスチャの例では「Open Mouth」というアニメーションと「Kiss」のアニメーションを同時に動かして、0.2秒後にそれらを止める、という Steps を登録したものです。

続きを読む
2008年05月03日
ネトラジ・チェンジャー
いろいろな「玉」を作ってきましたが、お友達から予想以上に評判がいいのが ネットラジオ・チェンジャー (NetRadioChanger - NRC) です。
やっぱり、自宅、お店、クラブなどなど、、、音楽があったほうが楽しいわけで。
でも、いちいち土地情報開いて、、、なんてめんどうだったり。
そこで、llSetParcelMusicURL を使って、ノートカードに登録している URL をダイアログに表示して、ボタンで切り替える、、、という「玉」を作って、お友達にお渡ししていたわけです。
といっても、あまりエラー処理とか日本語のメッセージとかにしてなかったので、それらをいれて SUZAKU の "Snuript Library" にベンダーとしておきました。
といっても、、、 100 L$ ですけど(笑

(青いグローな玉です、、、、って、パッケージングとかほんと、手抜き、、、)
でもね、実は、この単純な NRC2.2 は Snuript の技術を結集、、、(笑
続きを読む


