2007年12月25日火曜日

動画も音楽も YazPod2007

[追記] ちょっと修正点が・・・・(笑 ベンダーは 27日に会場で!

ものすごく単純なつくりの YazPodXmas でしたが、今年最後の NMR のお土産としてはあまりに手抜きすぎたので、、、2007年総決算の YazPod 2007 として生まれ変わりました、、、(?)

外見は同じ、、、
yazpod2007

携帯型Podとして、HUD にしても OK です。(笑 デフォルトで Wear すると HUD として画面に現れます。

今回の修正は以下です。

1) ACIDPlanet の Yaz Rockett 全曲視聴(以前のYazPod と同じ)
2) 好きな曲を選択して聞くことができる曲選択バージョン、複数 ダイアログページを追加
3) 2007年に私が関係した Yaz さんの曲を使った動画も再生可能
4) ACIDPlanet の Yaz さんのページを開くことが可能

もう、音楽も動画もてんこ盛りにしました(笑

実は、、すでに ASUKA/雷神に 0 L$ ベンダーとして納品(??)済みw

わたしだけ・・・なのかなぁ、、、SL やりながら ACIDPlanet の全曲視聴ボタンをおして聴いていると、かなり、、、音が途切れるんですよねぇ、、、

曲選択の場合は、ACIDPlanet ではなく、別のサーバーの mp3 をダウンロードするので、曲が切れることはないように思います。
また、動画の場合は video.msn.com を使います。Mac ユーザーだと video.msn.com を見ることができない、、、と聞いています。次のバージョンでは別のサーバーを使うことになると思うので、、、、それまでまってください。

この YazPod は以前お話ししたように土地依存しない、SL の QuickTime を使わないバージョンなので、規定の mp3 プレーヤを使ったり、インターネットブラウザを使ったりします。
なので、曲を止めたい、などは SL じゃなくて、それらのコントロールボタンを使うことになります。

まぁ、、、Yaz さん関係で今年やったことをすべてこの YazPod2007 にいれっちゃった、、、という感じです。
もちろん、、、0L$ でプライスレス!(笑
楽しんでください。

なお、ダイアログを多用しています。あ、もちろん、オーナー特権で /8282 GO でACIDPlanet の全曲視聴モードのダイアログがでますが、、、基本的には llDialog を他の人が使っているときは「排他処理」をかけました。
state の変更を多用しましたので、state 変更で Listen の状態を初期化するような仕組みにしています。これはこれで別途エントリするようにしますね。
YazYaz で2008年を迎えましょうw

2007年12月23日日曜日

アンリアルDEダンスナイト

もう、参加したのは1時過ぎ・・・
クラブ雷神で「アンリアルDEダンスナイト Vol2」が開催されました。

UnrealDeDanceVol2b

アンリアル系の AV って、ほんと、日本独自の世界のような気がします。

あと、アニメのキャラなんかも日本の独壇場だしw
コードギアスの AV も配付されたみたいだし(未入手)
もうひとつ、、、画像w
UnrealDeDanceVol2a
デジタルコンテンツって、、、日本って強いと思うんですけどね~
麻生さんが首相になって、オタク文化の輸出とか・・・ できると思うかもw
と・・・こんな時間に思うのでした。(笑
もう一枚w
UnrealDeDanceVol2c
ちなみに・・・
アンリアル・アバターは苺屋さんで売ってますが、顔は無償提供されているんです。
http://s-tomo.jp/2007/12/02/161746
Ichigo Mayoさんのインタビューもありました。
http://ameblo.jp/emo8889/entry-10048248925.html

2007年12月21日金曜日

ライブ!ライブ!

今年最後のお楽しみ!
Yaz さんのライブ、NMR9 が 12月27日に行われるころが決定~!
image

すでに会場となる ASUKA / RAIZEEN には Yaz さん特製のテクスチャがw
で・・・今年最後の Final Chaos ということで・・・
たぶん、他の Yaz Mania もおみやげいっぱい置くと思うのですが、、、私もおみやげをw

その名も「YazPodXmas」(笑

X'mas 過ぎちゃってるけど、まぁ、、とそこはw
この YazPod は、Yaz さんの曲を聴ける今までの Yaz Mania 玉とは大きく違う点があります。

なんと・・・土地依存しないので、いつでも、どこでも、in-world で Yaz さんの曲を聴くことが可能w

これが、、、YazPod Xmas のショットですw
image
今のところは、、、ものすごく単純ですが、AutoPlay で Yaz さんが公開している曲をすべて聴くことができます。
Windows の人はほぼ問題なく、Mac の人は Mac 用の Windows Media Player をインストールしている必要があります。
Mac 用の Windows Media Player はこちらでダウンロード可能です。
http://www.microsoft.com/japan/windows/windowsmedia/software/macintosh/osx/default.aspx
27日までに仕様変更するかも・・・しれませんが、LIVE と合わせてお楽しみに~。

2007年12月19日水曜日

LSL 日本語処理・・・本当に幸せになるかも

以前ご紹介した Alissa さんの日本語対応 SL Viewer 「その場入力」 ですが、、、ものすごいことになりました。

というのも、、、LSL で日本語を直接扱うことができるようになったんです。

これ、、、ものすごくインパクトが大きいんですよ。list 型のオブジェクトに直接日本語を入れることもできるんです。

この利点は

1) 日本語のメッセージがどんなものかをエンコードされていない「文字(=日本語)」で確認可能
2) エンコードされた文字数よりも少ないのでメモリの節約になる
3) デコードするための関数がいらないので、その分処理の高速化とメモリの節約になる

ほんと・・・すごいです!
そこでどのくらいメモリの節約になるかを試した結果が以下です。

Alissa バージョンだと以下のように LSL を書くことができます。

--- LSL code begin -------------------------------------------

list msgList = ["これはテストです","日本語がリストに入ります",
"Alissa さんサイコー","メモリの節約にもなります","確認も楽です"];

default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        integer i;
        for(i=0; i<5; ++i) {
            llSay(0, llList2String(msgList,i));
            llSleep(0.5);
        }
        llSay(0,(string)llGetFreeMemory());
    }
}

--- End of source ---------------------------------------------

最後に FreeMemory をとって Say してますが、その結果は以下。
image
15,695 バイトのメモリが残った状態ですよね。
これを従来の Base64 を使った処理にします。ソースと結果が以下。
-----------------------------------------------------------------------------
list msgList = ["44GT44KM44Gv44OG44K544OI44Gn44GZ","
5pel5pys6Kqe44GM44Oq44K544OI44Gr5YWl44KK44G+44GZ",
"QWxpc3NhIOOBleOCk+OCteOCpOOCs+ODvA==",
"44Oh44Oi44Oq44Gu56+A57SE44Gr44KC44Gq44KK44G+44GZ",
"56K66KqN44KC5qW944Gn44GZ"];

default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        integer i;
        for(i=0; i<5; ++i) {
            llSay(0, llBase64ToString(llList2String(msgList,i)));
            llSleep(0.5);
        }
        llSay(0,(string)llGetFreeMemory());
    }
}
------------------------------------------------------------------------------

image
15,614 バイトのフリーメモリーw
これを URLEscape にすると・・・・
-----------------------------------------------------------------------------
list msgList = ["%E3%81%93%E3%82%8C%E3%81%AF%E3
%83%86%E3%82%B9%E3%83%88%E3%81%A7%E3%81
%99","%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81
%8C%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AB
%E5%85%A5%E3%82%8A%E3%81%BE%E3%81%99",
"Alissa%20%E3%81%95%E3%82%93%E3%82%B5%E3%
82%A4%E3%82%B3%E3%83%BC",
"%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E7
%AF%80%E7%B4%84%E3%81%AB%E3%82%82%E3%81
%AA%E3%82%8A%E3%81%BE%E3%81%99",
"%E7%A2%BA%E8%AA%8D%E3%82%82%E6%A5%BD%E3
%81%A7%E3%81%99"];

default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        integer i;
        for(i=0; i<5; ++i) {
            llSay(0, llUnescapeURL(llList2String(msgList,i)));
            llSleep(0.5);
        }
        llSay(0,(string)llGetFreeMemory());
    }
}
---------------------------------------------------------------------------

image
こんな単純なスクリプトでも、日本語のためのテキストのバイト数と、ちょっとだけどデコードする関数分のメモリの節約が・・・
なんと、最大 15,695 -> 15,337 で 358 バイトも節約w
すばらしい・・・
みんなで JIRA にいって、「早く Alissa さんのコードを採用して~」と書き込みしたいくらいw
ほんと、Alissa さん、良い仕事してます!
で・・・ この修正は Alissa さんが Linden の JIRA に投稿してます。
Payment Info User じゃないとだめかもしれませんが、、、、みんなで(といっても、日本の人だけしかわからない・・・だから・・)これがすばらしい!と投票しませんか。
まず、、、JIRA の Alissa さんの投稿のページにいきます。
http://jira.secondlife.com/browse/VWR-3857

[追記] Voting(投票) するには SL のアカウントでログインする必要があります。

以下の画面で赤で囲んでいる [Voting] をクリックします。
image
以下の画面で赤で囲んでいる [Add] をクリックします。

image
これで完了ですー
Alissa さん、本当にありがとうー 

2007年12月17日月曜日

QuickTime 7.3.1 がリリースされました

Yaz 玉や Video 玉を公開している手前、QuickTime の脆弱性によるセキュリティの問題はちょっと困っていたのですが、QuickTime 7.3.1 で対応がなされたようです。2007年12月13日に公開されたのですでに対応されている方も多いとは思います。

元ネタは CNET のニュースです。 apple.com で apple からのアナウンスを探したのですが、、、該当するのはこちら (英語) だと思います。

日本語のセキュリティアップデートのページはこちらですが、詳細は上述の英語の記事になります。

[自動的に更新を確認] にチェックしていれば、7.3.1 になっていると思いますが、不安な方は QuickTime を立ち上げて [ヘルプ] から [バージョン情報] でバージョンを確認するか、おなじく [ヘルプ] から [既存のソフトウェアを更新] を選んで 7.3.1 へのアップデートを選択することをお勧めします。

私も確認したら、、、、7.3.1 になっていました・・・そういえば、ダイアログがでたような記憶が(笑

QuickTime ダウンロード (日本語)
Windows: http://www.apple.com/jp/quicktime/download/win.html
Mac: http://www.apple.com/jp/quicktime/download/mac.html

QuickTime download (English)
http://www.apple.com/support/quicktime/

Torley が紹介する小技 その14

Torley Linden が紹介する Tip of the Week #14 は How to set multiple permissions easier (簡単に複数の(オブジェクトに対して)パーミッションを設定する方法) になります。

image

Torley 曰く「時間と、inworld の複数のオブジェクトやインベントリのアイテムに対してのパーミッションのトラブルを軽減する方法を知っていましたか?」と。。。

パーミッションのシステムについてさらに詳しく知りたい場合は、ナレッジベースのパーミッションの記事をみてほしい、、といってます。

で、ビデオの内容のおおよその内容は以下~。
といっても、今回は内容も軽めで、時間も短め。。。

複数のオブジェクトのパーミッションを一度に設定する方法

複数オブジェクトのパーミッションを一度にする方法は、リンクをするときに複数のプリムを選択モードにする要領で、どれかひとつのオブジェクトを Edit モードにして、Windows の場合はシフトを押しながら選択したい他のオブジェクトをクリックします。
その状態で Edit メニューから Permissions のチェックをすることで、選択されているオブジェクトすべての Permission を設定することができます。
選択されたプリムがそれぞれ違う Permission を持っている場合は、その Permission はグレーになっていますが、カーソルをその上に動かしてハイライトされれば、その設定を変更することができます。クリックすると off になり、すべてのプリムのパーミッションが off になります。さらにクリックすると、選択されているプリムのパーミッションが on になる、、、というやり方で複数のプリムのパーミッションを変更することができます。
image
ほとんどのチェックボックスはこの方法で設定できるのですが、[For Sale] だけはだめです。 Price / 価格は個別に設定しなければならない、、、とのことです。

インベントリ(持ち物)での複数パーミッションの設定方法

プリムといっしょで一斉に変更できないのが、、、悪い news ですが、ひとつひとつ設定するにももう少し簡単な方法を紹介しています。
インベントリで Shift を押しながらアイテムを範囲指定するか、Ctrl を押しながら個別に指定して Property/プロパティを右クリックのサブメニューから選ぶと、ひとつのウィンドウの中にタブ形式で複数のアイテムを開くことができます。
image
で、、、笑っちゃいましたが、片手はキーボード、片手はマウスで操作すると楽だよ、、、なんて。。。
Ctrl+w がウィンドウクローズのショートカットキーなので、マウスで設定して、Ctrl+w。。。その繰り返しを実演してくれています。
以上です~

2007年12月14日金曜日

LINZOO さんの初ビデオとか・・

私が参加できなかったNMR8ですが・・・
LIN ちゃんがビデオを作ってくれましたw
[追記 2009] MSN サービス終了のため削除しました。

さすが・・面白いw

エンコードとアップは私がしましたw フラッシュのわりにはきれいだと思うんですけど・・・どうかなw
で、、、先ほど Yaz さんの NMR8,1 が終わりました。
image
集合写真w
image
Yazさん、ほんと、たのしかったw

2007年12月13日木曜日

下見しちゃった.. NMR8.1 LIVE 会場

本日 22:30 より N.M.R. 8.1 Yaz Rockett ライブが開催されます!
で、、、早速会場を下見・・・(笑

image

今日はNMRを楽しみながらも動画撮影したいので、、、会場の大きさとか、WindLight で FPS がどのくらいでるのかチェックしにいったわけです。

Avatar がいないので、、、それでも Fraps で 40 FPS 以上でているから、、、結構良い環境かもしれません。

うんうん、このくらいのスペースも、、、、いいですよね。

海が見える会場です。
image

会場を下見していると、、、やはり、同じ目的のシュメさんが(笑
image
あと1時間ちょっとで開演です~。
NOIR MUSIQUE REVUE 8.1
GENESIS OSCILLATOR REPRISE
YAZ ROCKETT LIVE at "TECHNOPOLIS TOKIO"

2007.12.13(thu)日本時間22:30スタート
@YAZ ROCKETT TECHNOPOLIS DEPT.

image

2007年12月12日水曜日

Torley が紹介する小技 その13

連続しての Torley が紹介する小技 シリーズですが、第13回は How to show your stuff in our New Search (新しい検索であなたのStuff(商品やもの、、、Stuff って難しい)を表示する方法) というお題です。

image

How to show objects for sale in new Search
あたらしい検索で売り出し品を表示させる方法
ポイントは、、、Rez したオブジェクトの Edit メニューにあたらしく [Show in search] というオプションができたので、それをクリックしなさい、、、ですね。
そこまでいくのに、オブジェクトを商品にする方法を説明しています。[For Sale] をクリックして、価格をいれて、[copy] だとオブジェクトそのものが copy され、[contents] だとオブジェクトの contents フォルダーにあるものがコピーされる、、、自分で買ってみるのもいいよね、と言っています。

で、、、object を rez したエリア(通常は店舗、、、ですね)の情報を確認しましょう、といってます。
[About Land] を選ぶか、ビューワーの上にある Estate 名と現在の位置情報の部分をクリックしなさいといっています。
[About Land] - [Options] タブを開いて、[Show place in Search] にチェックがあるかどうかを確認しましょう。

これ、、Land/Parcel にあるオブジェクトとして検索されるんですね。なので、Land/Parcel が検索対象になっっていないと、、、オブジェクトも検索されない、ということなのでしょう。でも、、、このチェック、1週間に 30L$ の費用がかかるんですね。

検索結果にはすぐに反映されずに1日くらいは待って、、、といってます。クローラーがオブジェクトを確認するまでは検索対象にならない、ということですね。

How to show your profile details in new Search
あなたのプロファイルの詳細を表示させる方法
[Edit/編集] メニューから [Profile/プロファイル] を選んで、プロファイルのウィンドウで [Show in search] をチェックする、、、
そうするとすべての Avatar に関するプロファイル情報は Resident Profile というタイプで検索結果リストに表示されるのですが、このチェックをすることでさらに詳細情報のリンク(一覧では名前だけが表示されている)が表示されます。
[Show in search] のチェックをいれていないと名前から検索されたプロファイルだけがリンクされる、、、ということです。

How to show your group details in new Search
グループの詳細情報を表示させる方法
[Communicate]-[Contacts]-[Groups]タブでグループの一覧を表示させて、グループを選択して [Info] ボタンをクリックします。そうすると [Group Preferences] の欄に [Show in search] のオプションがあります。それをチェックすることで詳細検索対象となります。
ただし、これができるのは Group のオーナーである必要あります。(もしくは Group Identity 変更可能な人)

Tips
オブジェクトそれぞれひとつひとつ Edit メニューを開いて [Show in search] をするのは面倒なので、Edit Mode で Shift キーを押しながら、他のオブジェクトをクリックして、複数オブジェクトを Edit モードで選択した状態にすると一気に変更可能とのこと。
また、For Sale にして 0L$ そして Show in search をチェックすると、その商品は free として表示される、、、でした。

でも、、
このビデオの説明によると、Land/Parcel が検索対象になっていないとだめなので、、、まずは MarketPlace のオーナーさんがこの変更しないとだめなんですよね、、、30L$/Week の出費なりますが。
検索順位のロジックについては当たり前にように触れられませんでした(笑

あ、、、メンテナンス

image

この画像が www.secondlife.com のトップにあるときは grid down 中です。
すっかり、メンテナンスのスケジュールを確認してなかったり。

Linden のメッセージっておちゃめなことが多いように思うのだけど・・・

image

まぁ、、これは普通ですよね。

「ログインできませんでした。メンテのため一時的にセカンドライフはクローズしてます。今のログインは社員だけに限定されています。www.secondlife.com/status で最新情報をチェックしてね。」

じゃぁ、、、これは(これ、昔一度使ったネタなので、、、ごめんなさいw)

image
テレポートするときに出るメッセージなんですが、、、、あれ?と思って SS をとったんです。
「助けて!セカンドライフのサーバールームにとじこめられた。これしかコミュニケーションする方法がないの。」
PC 画面に向かって大爆笑しました、、、。もう8ヶ月以上も前のことです。
時間が経つのって早いですねぇ~。
で、、slmame 遅すぎ、、、がんばってね。

2007年12月11日火曜日

GENESIS OSCILLATOR- ACIDPlanet

Theme from GENESIS OSCILLATORACIDPlant にアップされました~。

Yaz Rockett さんの曲がアップされている ACIDPlanet の話しです。

image 

実は、、、Torley の小技で Torley が使っているビデオ編集ソフトも、、、SONY の ACID/Vegas シリーズ
SONY さんは、このソフト、、、日本では本格的に販売していないというか、、、店頭にあるにはあるんですが、なんか、、、「外国のソフト?」みたいな扱いなのが不思議なんです。どうも、開発元は SONY MEDIA SOFTWARE 社という SONY さん傘下の米国のソフト開発会社みたいですね。

その ACID/Vegas シリーズのユーザーを対象にした作品公開のサイトが ACIDPlanet みたいですね。

Yaz さんの曲はここで視聴することができますが、ダウンロードも可能なんですよ。なので、自分のビデオに使ったり、サイトにアップして音楽玉(YazMania)で聴けるようにしています。WMA ですが、Mac でも視聴可能ですし、YazMania みたいに SL / in-world 内で聴きたい場合は QuickTime で扱えるように MP3 に変換してあげます。


でも、ダウンロードするにはサイトへの「登録」が必須です。聴くだけなら登録はいりませんが、、、せっかくなので登録して、ACIDPlanet Yaz Mania になっちゃいましょう(笑
英語サイトですけど、、、簡単です!
まずは、、、画面右上の register をクリックします。
image
登録画面その1
私はすでに登録しているので、「すでにこんなのあるよ、、」というのが一番上にありますが、まずはプロファイル名と Email アドレスを登録します。<Profile Name には、たとえば SL/in-world の Avatar の名前をいれてもいいかも。ただし、同じ名前がすでに登録されているとだめなので、その点は注意です。Email および Confirm Email にはどちらにも同じ Email アドレスをいれます。ここのサイトからの広告や案内 Email はそれほど多くないように思います。
image
登録画面その2
Personal Reminder
はパスワードなど忘れたときの個人的な質問です。お母さんの旧姓は? と ペットの名前は? の2つの質問が用意されています。Personal Information はリアルな個人の情報になります。
First Name には名を、Last Name には姓をいれて、Gender では男性か女性か、Connection Speed ではドロップダウンリストから該当するインターネットへの接続速度を選びます。ADSL の場合は DSL/Cable Modem で、光の場合は LAN または T1 でいいかも。(正確には違うみたいです・・・登録が目的なので・・・)
Address Line1/2 は住所です。が、、、米国国内しか念頭においていないので、適当で・・・State/Provice も該当する場所は無いので [none] でオッケーw。 ZIP/Postal Code は郵便番号なので 123-0001 だったら 1230001 とかいれちゃいましょう。
Country は [Japan] を選択してみます。
image
画面下の [Submit] のボタンを押すと以下のようなダイアログが表示されます。メールを送るから、そこで本人確認するよ、といってます。 [OK] をクリックします。
image
こういう画面になりますが、赤字の部分は迷惑フィルターとかスパムフィルターで受信トレイにはいらない場合があるから、ちょっと注意してね~ということを書いてます。
image
えっと、曲を聴くだけなら登録はいりませんw
特に、、、全曲聴けるリンクがありますので、そちらでもお楽しみいただけます~。
以下のリンクで登録されている Yaz さんの曲がすべて聞けます。
http://www.acidplanet.com/radio/playartist.asp?AID=621683&T=3019
その Yaz さんのライブが今週木曜日にありますー
詳しくは以下を!
LIVE@TECHNOPOLIS TOKYO / yaz.slmame.com

2007年12月10日月曜日

LSL エディタあれこれ

スクリプトを書くときのエディタ、、、すでに他の方のブログなどでも紹介されていますが、最近面白いものが出てきてますね。

スクリプトを書くとき、私はどちらかといえば in-world で、あの、メモ帳みたいなエディタを使ってスクリプトを書いて、コンパイル、保存の繰り返しをしています。あのメモ帳みたいなエディタでも、関数の上にカーソルをおくと引数のガイドがでたりするんですよ。

image

でも、有名どころのエディタは、関数の上にカーソルなんておかなくても、いろいろなスクリプティング支援をしてくれますよね。
SciTE-EZ は Scintilla Text Editor を LSL 用にカストマイズしたもの、、、とのことです。どこかの情報サイトで SciTE が LSL に対応しているみたいな記事がありましたが、、、ちょっと違うんですよね。すでにこのプロジェクトは終了してしまっているので、さまざまなところで公開されているファイル(プロパティと api ファイル) を手に入れて、、、みたいなことが必要です。頻繁にリビジョンがアップする SL なので、正直、、めんどうなのは確かですね。関数が大きくかわることがなければそのまま使えますが、最近でいうと llRegionSay といった新しく追加された関数はそれに対応した更新ファイルを探さなくてはなりません。

とはいえ、SciTE-EZ は私も使ったりしています。通常のプログラム開発環境では当然のことが、、、できます(笑
たとえば、、、関数の選択は途中まで関数の文字をいれて Ctrl+i で以下のように候補が表示されます。

image

コンパイルを行った結果のエラーなども、、、SL メモ帳(w よりはわかりやすく表示されます。

image
LSLEditor というエディタが最近話題になっていたので、ちょっと入れて試してみましたが、、、びっくり。
候補、引数、、、などは当然なのですが、デバック機能がすごいんです。
特に、、、ダイアログ(笑
だって、ダイアログ、、、表示するんですよ。

image
かつ、、、本当にデバック機能らしく、、、llSetEventTimer で指定した時間で、、、timer() イベントを拾っているのが確認できたり、、、
それに、、、複数のスクリプトや、他のファイルなどをまとめてプロジェクトという形で管理します。アニメーションファイルやテクスチャなども追加できます。

image
ちなみに llRegionSay も候補リストさらには引数もきちんと表示しています。
ただ、、、、残念なことに日本語処理が・・・・えっと、正確にいうと llBase64ToString などの関数の処理がうまくいってません。
Database Server によるノートカード、、、そうプロジェクトでノートカードを追加できるので、そこに文字を書いて、スクリプトで読み込む、、、などもまだ対応しきれていないようです。

あと、関数の引数の中に関数をいれると、、、引数のアシストがとまります、、、SciTE-EZ ではここはうまく処理してましたね~。
でも、このデバックの機能すばらしいので、ほんとがんばってほしいですね~。
SciTE-EZ については Asuka Neely さんのブログが参考になります。
http://asukan.slmame.com/e256.html
http://asukan.slmame.com/e981.html
ですが、この記事の時点で最新の情報なので、今は api ファイルなどの置き場は違うかもしれません。
LSL Editor については以下のサイトで最新情報を取得できます。
http://www.lsleditor.org/
さらに、Linden の Forum (Payment Info User だけかな、、使えるの)でもディスカッションされています。
http://forums.secondlife.com/showthread.php?t=182108

2007年12月9日日曜日

エフェクト系は苦手・・・(llParticleSystem)

なかなか時間がとれずに Yaz Mania 玉やダンス玉のメモリ節約化に手がまわっていませんが、今日はエフェクト系スクリプトが苦手な私もパーティクルなどに挑戦してみました。どうしても、、、苦手なんですよね~。

で、、、玉しかつくれないセンスですから、、、

作ったのは雪だるま(笑

正直、、、「今月から SL はじめたの?」といわれそうなオブジェクトですが、、、この子の両手の玉と帽子から3種類の雪の結晶を飛ばすようにしてみました。

こんな感じ、、、
image

赤い帽子に円錐のフレキシ使っただけ進歩かも(w


とてもパーティクルについて語れるような経験はないんですが、ちょっとだけ私が試行錯誤したことを書いてみると、、、雪がちらちらを舞い降りるを表現するのに「風の影響」を使おうと最初がんばったのですが、意外に in-world の風って強いみたいですね、、、

PSYS_PART_FLAGS, PSYS_PART_WIND_MASK|PSYS_PART_EMISSIVE_MASK みたいに風の影響を受けながら、明るく見える雪をちらつかせようとしましたが、、、結構流されてしまいました。

WIND_MASK によって横に流されるパーティクルを無理やり下のほうに落とすために PSYS_SRC_ACCEL の z 値を大きく(マイナスなので数字は小さく、、、ですが)すると、確かに下にはいくようになるのですが、とても早い動きになってしまいます。

ちょっと横に流されすぎる風の影響をうけないで、ちらちらとさせたいので WIND_MASK は却下しました。(もしかしらら、WIND_MASK を使いながらゆっくり下に、、、なんてできるのかもしれませんが、私は探せませんでした)

ゆっくり、、、と考えると SPEED の調整かな、、、と思ったのですが、どうやら PSYS_SRC_BURST_SPEED_MIN/MAX での最小・最大速度の設定は、プリムからパーティクルが飛び出すときの速度の「ばらつき」の範囲指定みたいですね。

なので、最小と最大にちょっと幅をもたせてあげると、まるでポップコーンのようにぱらばらのスピードでパーティクルがプリムから飛び出してきます。

ということは、、、つまりパーティクルが放出されたあとの「速度」を決めるのは PSYS_SRC_ACCEL ということになります。ACCEL 自体は速度ではなくて「加速度」なので、3次元方向への加速度を指定できます。(m/s*s みたいです) なので、下方向への加速度として z にマイナスの値をいれる、それも数値を小さくすると加速される度合いが弱まって、ゆっくり落ちてくる、、、と考えました。

これでゆっくりと落ちるようになりますが、下方向への加速度(つまり、、、重力ですよね~ 9.8m/s*s)が弱まる分だけ、プリムから放出されたパーティクルは、たとえば放出方向を上に向けていれば、重力が弱まった分だけ高く舞い上がってから落ちてくる、、、という動きになるんです。

BURST_SPEED_MIN/MAX にちょっとだけ幅をもたせて、放出速度のばらつきが発生すると、いい感じでパーティクルそれぞれの落ち方が変わります。これがMIN/MAX も同じ速度だとばらつきが発生しないので、あまり見た目的に「雪が舞い降りる」としては美しくなかったりします。(等間隔でぱらぱらと落ちてくる感じです、、あ、あと PATTERN は ANGLE です)

ばらつき(というか、ゆらぎ?なのかな)を発生させるという点では llLookAt と llFraud を使って放出方向に変化をもたせるのもひとつの手ですね。 また、PATTERN が ANGLE系の場合は PSYS_SRC_OMEGA のベクトル値で回転を指定できるようです。(その場合は乱数ではありません)

ということで、、、最終的には以下のようになりました。
image
どちらかといえば、、、スキー場とかにある「降雪機」みたいな動きになっています(笑

でも、、、Particle って難しいですね~。 PSYS_SRC_PATTERN で指定するパターン(ANGLE, ANGLE_CONE, ANGLE_CONE_EMPTY (undocumented みたい) , DROP, EXPLODE...) などはまだピンときてません(笑
Reference: http://www.lslwiki.net/lslwiki/wakka.php?wakka=llParticleSystem

[追記]
あとでやってみると PATTERN を ANGLE_CONE にして OMEGA で z 軸でまわしてみるとこれはこれでいいのかもしれません。ですが、プリムの下にはパーティクル雪が降らないので、、、なかなか工夫が必要みたいですね。

2007年12月5日水曜日

Torley が紹介する小技 その12

[追記] 日本時間の今日 12/5 にまた新しい WindLight First Look Viewer が公開されました。 この記事はその前の WindLight を使って書きました。

今回の(といっても1回遅れになっちゃってますが) 小技は How to easily boost viewer performance と題して、新しいビューワーで採用された Lag Meter と WindLight で採用された簡素化されたクオリティとパフォーマンス設定のお話しです。
image

Lag Meter (ラグメーター)というパフォーマンスチェックのウィンドウが表示されるようになりました。
Help - Lag Meter でメーターを表示させることができます。

Lag Meter には3つのサインがあって、[Client]、[Network]、[Server] のカテゴリがあって、良好のときは緑色になっていて、あまり良くない時は黄色や赤になります。

特に面白いというか、、、本当に良くなったと思うのは、状態がよくない考えられるその理由が表示される点です。


Torley のビデオでは、Statistics Bar(日本語版だと統計情報?バー?) の FPS をもとに、Distance Draw の値を変えて「遠くまで見える設定=多くの画像、Avatar を読み込む」設定にして Lag Meter が変わる様子を紹介していました。

ちょうど、、、よい(?悪い?) SS が撮れたのでw
image
Lag Meter が赤、赤、黄色、、、となって、その下に英語ですが考えられる理由が表示されています。

これで「なんで、こんなに遅いの~」という場合の対応方法がちょっとだけわかるかもしれませんね。

でも、、、その設定、、、たとえば Draw Distance とか、Mesh とか、、、とても多項目そしてあまり理解できていないものが多いのが難点でしたよね。

そこで WindLight では 4つのクオリティセットを用意して、それに最適化されたそれぞれの項目があらかじめ設定されているんです。

その説明を Torley がビデオの中でしている、、ということです。FPS は 15 以上出ているといいね~といっています。

WindLight を使った設定によるパフォーマンスの変化はおもしろくて、クオリティのセットで [custom] をチェックして、Avatar Impostor のチェックでどう変わるかを紹介しています。

Avatar Impostors って、、、結構パフォーマンスに影響があります。つまり、、、ビューワー上に表示される Avatar の数がクライアントのパフォーマンスを左右する、ということなんですね。たしかに、ダンス玉の時は Avatar の数が多くなればなるほど動きがカクカクしてきました。

ただ、これはダンスクラブには向かない・・・・です。クライアントのパフォーマンスをよくするために、自分以外の Avatar の描画に関して雑な処理をするため、ジャギー(ギザギザ)になったり、ダンスの同期がとれなかったりします。セールで混雑しているショップなどはいいでしょうねー

で、実際、、、新しく出た当初の WindLight は重くて重くて FPS がだれもいないクラブでも 10 FPS くらいしか出なかったのですが、最新の WindLight First Look だと、5人とかダンスフロアにいても 20 FPS 以上出てますね~。前は WindLight はスナップショット撮影用~なんて思っていましたが、これだけ FPS が出ると動画も大丈夫ですね。

そこで、、、WindLight を使ってビデオをとっちゃいました。WindLight の設定は [High] にしています。

曲は、、、最近一番のお気に入りの Yaz さんの Distance。あまりにお気に入りの曲なんでノーカットにしちゃったのでちょっと長くてごめんなさい。
3分22秒くらいの動画は海の中から撮ったもので、こんなおもしろい画像も撮れるんだ、、、というか、この画像の処理ってすごい、、、と WindLight に感心させられました。

2007年12月1日土曜日

llDialog での Listen 処理 (その1)かな?

image 
Massive Link Dance Unit 作成で、もうしばらくスクリプトは勘弁~、、、なんて思っていたのですが、気になることがあって、、、また "Hallo, Avatar!" の文字を出してしまったり。

これもわかっている人には当然~なんでしょうけど、llDialog を使った操作スクリプトを書いたときに、ダイアログの結果を渡すチャンネルの「混線」で悩まれた方・悩んでいる方も多いのではないでしょうか。(私だけか・・・な?)

英語では Crosstalk っていうらしいですが。

結論から言えば、、、llDialog を使うときの llListen は touch_start イベントの中にいれて特定の Avatar からのメッセージをとる、、という鉄則を守らなかったり、それをちゃんとやっているにもかかわらず llDetectedKey(0) をグローバル変数にいれて処理して、、、処理終了後にその変数を NULL_KEY に戻していないために、、、、とか。

ダンス玉や Yaz Mania SP Music 玉、、、オブジェクトが1つの場合はいいのですが、同一 SIM 内に複数 Rez すると、ダイアログの結果を渡す同じチャンネルに聞き耳をたてているスクリプトが複数存在します。なので、処理をきちんとしないと、他の玉が表示したダイアログの返信を受け取ってしまう、、、、ということになります。もちろん、他のスクリプトで同じチャンネルを「たまたま」使っていたなんて場合も変な動きになります。

実際、、、混線回避処理をいれたつもりだったのに、ダイアログ表示で変な動きをして、、、理由は一部で llDetectedKey(0) でとった key の変数を、処理後 NULL_KEY に戻していなかったわけですが、それに気が付くまで、、、時間がかかって。 あ~、まだまだ修行足りません、、、

そこで、このダイアログの混線の仕組みと回避する方法を考えてみた、、、その備忘録みたいなエントリです。

llDialog を使ったダイアログの処理の考え方は、、、私個人としてはこう思っています。

1) 「個人使用」と「多人数使用」のどちらで多く使われるかを明確にしてみましょう
個人使用場合は、同じオブジェクトを Rez したときの混線回避をもっとも重要な項目として考えればいいと思います。多人数同時使用の場合は、混線処理にプラスして llDetectedKey(i) が複数存在することを意識したスクリプトにしなくてはなりません。

2) 以下のスクリプト処理をするときはスクリプトをわける必要があるので気をつけましょう
    a) timer処理
    b) Permission Request
特に、複数の Avatar が使う、、、みたいな場合は Listen を解放する timer 処理で悩むことになります。
複数同時使用が十分想定される場合は、1) と 2) が深く関係しあいます。
スタートの基本スクリプトは以下です。これを元にいろいろいぢってみます。
(注!これはダメなスクリプトですから、くれぐれも使用しないように、、、)

integer dHandle;
default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
        dHandle = llListen(3000,"",NULL_KEY,"");
        llListenControl(dHandle,TRUE);
    }
    touch_start(integer total_number)
    {
        llDialog(llDetectedKey(0),"TEST",["button 1","button 2"],3000);
    }
   
    listen(integer chan,string name,key id,string message) {
        llSay(0,llGetObjectName()+
": channel:"+(string)chan+
" name:"+name+
" id:"+(string)id+
" message:"+message);
    }
}

ちょっと説明すると、state_entry() ではダイアログが結果を返信するために使用する channel の 3000 に聞き耳をたてる処理を入れています。これ、、、しばらく チャンネルでの通信処理をやっていると、最初に宣言するクセがついてしまうことがあります。llListen/llListenControl の組み合わせで、聞き耳を立てたくない場合は、llListenControl で TRUE のところを FALSE にするだけでいいので、チャンネルを閉じたり、空けたりする記述が簡素化されるので重宝するのですが、後述するように Avatar を特定して Listen をするには llListen の中に key をいれる必要があるので、、、ダイアログを表示させる場合の llListen は注意しなくてはいけません。

touch_start ではオブジェクトをタッチした Avatar にダイアログを表示させています。タッチした Avatar の Key を取得するために llDetectedKey(0) を使い、"TEST" というメッセージをダイアログにいれ、"button 1" と "button 2" という2つのボタンを設定して、channel 3000 を使います~、と宣言しているわけです。

これ、、、通常の使用状況では llDetectedKey(0) つまり、最初に触った Avatar の Key を取得する、でほとんど問題ないのですが、lslwiki によると一斉に多くの Avatar が同時にタッチするような状況(ゲームみたいな状況)では llDetectedKey(1) とか llDetectedKey(2) とかが存在するので、それらの Avatar にもダイアログを表示するためには追加の処理もいれたほうがいい、、、なんて記述がありました。ダンス玉はその処理をいれていますw  touch_start(integer num_detected) の num_detected でとった値(タッチされた数) 分だけ for 文をまわす、、、(あ、、、脱線脱線w)

listen では 3000 チャンネルの内容を受け取って、渡されたすべての情報(チャンネル番号、ダイアログを押した Avatar 名、その Key、そしてどのボタンをタッチしたかを判断するボタンに貼り付けたテクスト)を llSay で表示する、、、というものです。

このスクリプトが入った2つのオブジェクト DialogTestBall 1 と DialogTestBall 2 を Rez して、一方の玉をタッチしてダイアログを表示させて、ボタンを押すと以下のようになります。
image
タッチしていないほうの玉まで、、、llSay で 3000 チャンネルの内容を表示しています。これが、、、混線 (Crosstalk) 状態なんです、、、
その理由は チャンネル 3000 のメッセージをすべてとってしまうスクリプトになっているからです。
これでは、、、だめですよね。
やり方はいくつかありそうですが、、、、あげてみると

チャンネルを変える

lslwiki によるとチャンネルは -2,147,483,648 から 2,147,483,647 (!!) まで使用可能なので、使用するチャンネルをこのソースみたいに固定にしないで、ランダムで生成して利用する、、、みたいなサンプルもあります。llFrand を使いますが、0 と DEBUG_CHANNEL (2,147,483,647) を外す処理をしています。これだけレンジが広いとバッティングすることはなさそうです。ただし、絶対混線しない、、、ということではないですね。通常の利用では問題ないかもしれませんが、、、。

必要なとき以外はチャンネルを聞かない
llDialog を行った直後に llListenControl を TRUE にし、timer() などで数秒~数十秒後に llListenControl をFALSE もしくは Listen でメッセージを受け取ったら FALSE  にします。
これだと、タッチされたときだけ聞き耳を 3000 に対してたてるのでよさそうですが、たとえば、複数の AV 利用するような使い方だと、最後にさわった AV の条件で timer がセットされます。また、同じタイミングで他のオブジェクトをタッチされちゃうと、、、だめですねぇ~、、、他のオブジェクトからの返答でも Listen を FALSE するので、、、込み入った処理にしたときに潜在的なバグになりそうですよね、、、

つまり、、、オブジェクトの気持ちになれば(笑)、タッチされたときだけ、 Listen でタッチした Avatar から受け取ったメッセージを処理したい、、、と考えているはず。。。複数の Avatar が、このような同じチャンネルをもつ複数のオブジェクトのなかのひとつのオブジェクトをタッチしたとしても、自分にタッチした Avatar は「ひとつ」しかないわけだから、、、そう考えると、、、

タッチした Avatar からの返答だけ明示的に処理する
これが一番簡単・確実ですね。
タッチした Avatar を特定する方法は、、、、2つあります。
ひとつは llDetectedKey(0) の KEY を変数としてもっておいて、Linsten 時に if で比較する方法。
基本ソースに6行 (実質5行) 加えるだけです。(赤にした部分です)

integer dHandle;
key avatarCheck;
default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
        dHandle = llListen(3000,"",NULL_KEY,"");
        avatarCheck = NULL_KEY;
    }
    touch_start(integer total_number)
    {
        avatarCheck = llDetectedKey(0);
        llListenControl(dHandle,TRUE);
        llDialog(llDetectedKey(0),"TEST",["button 1","button 2"],3000);
    }
   
    listen(integer chan,string name,key id,string message) {
        if (id == avatarCheck) {
            llSay(0,llGetObjectName()+
": channel:"+(string)chan+
" name:"+name+
" id:"+(string)id+
" message:"+message);
            llListenControl(dHandle,FALSE);

            avatarCheck = NULL_KEY; //これはとても重要な一行です。
        }

    }
}

最後の一行の NULL_KEY に戻す処理がないと、、、一度触った玉に Key が残っているので、その状態で違うオブジェクトの、同じチャンネルを使用しているダイアログを操作すると、、、、いきなり前に触った玉が動き出すみたいな・・・・そんな感じになります。複数の Avatars でテストしていたり、ひとつだけのオブジェクトでさわっていると気が付きにくいのですが。。。

もっと確実にやるには、、、ある意味スタンダードでこれで覚えて~のやり方なのですが、聞き耳を立てるときに、llDetectedKey(0) で取得した KEY の Avatar だけからのメッセージをとる、と llListen で指定する方法。
これだと、、、Listen を state_entry() から touch_start に移して、llListen に llDetectedKey(0) を入れるだけです。

default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }
    touch_start(integer total_number)
    {
        integer dHandle = llListen(3000,"",llDetectedKey(0),"");
        llListenControl(dHandle, TRUE);
        llDialog(llDetectedKey(0),"TEST",["button 1","button 2"],3000);
    }
   
    listen(integer chan,string name,key id,string message) {
        llSay(0,llGetObjectName()+
": channel:"+(string)chan+
" name:"+name+
" id:"+(string)id+
" message:"+message);
integer dHandle = llListen(chan, "", id, "");
        llListenControl(dHandle,FALSE);
        llListenRemove(dHandle); //<- Listen が残るよ~という指摘で追加しました。
    }
}

あたりまえ、、、といえば当たり前なのですが、、、上記のやり方にもかかわらず、llDetectedKey(0) を何度も使うため、グローバル変数にいれて、、、(ある意味、これが元凶、、、)処理を終えたあとにその変数を NULL_KEY に戻すのを忘れちゃい、、、言い訳ですが(笑)、/11 show data みたいなチャットからのコマンド処理をいれると、listen が結構複雑になってくるんですよね。

あと、最初にさわった人が長い時間ダイアログを出したままの状態(=その人の返答をListenしている)で、他の人がタッチすると別のダイアログを表示して、その人の返答をListenしようとします。この時点で2人の Avatar へのListen が発生している、、、わけですよね。。。

また、上記の方法では表示したダイアログで [ignore/無視] を押された場合は、llListenControl の FALSE 処理は、、、、されていないわけです。
なので、、、llSetTimerEvent を使っての FALSE 処理が必要、、、となるわけです。

でも、、、

Yaz Mania の連続再生モードなんかもそうなんですが、すでにメインの処理として timer を使っているような場合は、、、かなり苦労します、、(しました)

と、、、かなり長くなったので今日はここまでw

次回は私の「だめだめスクリプト」をご紹介しながら、回避方法なんかも書いてみますね。