2009年1月30日金曜日
SnapShot カメラ目線の作り方
「は~い、こっち向いて~」
って、意外と難しくありませんか?(笑
正面から撮るスナップショットはカメラ目線になりますが、横顔とかで「目線だけ」をカメラに向けるって、、、
(クリックしても正面向いたままの絵・・・)
でも、横から上からでも、、、カメラ目線にする方法、、、あるんです。(って、ほどのものではないのですが)
Second Life をやりはじめたころ、ちょっとびっくりしたのが Avatar の顔の向きや目線が、ビューワーの中でマウスカーソルでクリックした方向を向くことだったんです。(正確には Alt + でクリックです)
どんなにポーズして、顔の向きがあっちの方向にいってても、目線はクリックした方向に動くんですよね。
ハイ、これの応用です。
llSetAlpha(0.0, ALL_SIDES); を使って透明な板を作って、それを通して SS を撮るとカメラ目線になるんです。
この一行を state_entry() の中に入れるだけで終了です。
Avatar の前に llSetAlpha で透明にした板をおきます。
Ctrl+Alt+T で透明のオブジェクトを表示させると以下のようになります。
Ctrl+Alt+T を押して、再度透明にして Avatar の方向をクリックすると、透明の板をクリックしたことになるので「目線」がカメラの方向に向きます。
(カメラ目線になった絵)
ここで Snapshot を撮るわけですね。
これ、透明テクスチャを貼り付けた透明板だと目線がカメラのほうに向きません。スクリプトで透明化しないとだめなんです。
そのあたりの話しは以前の投稿を参考に~。透明テクスチャだと、クリックスルーになっちゃうというか、板をクリックすることにならないからです。
この透明な板に グロウ をかけるとさらに面白い絵を撮ることができたりします。
こんな感じ。
マウスカーソルが普通にあることからわかるように、上の画像は画像編集ソフトなどでグロウ処理したものじゃないんです。
この方法を使って、in-world で「部屋の中から外をみたとき眩しく見える」状況を作り出してるところもありますね。
と、、、ちょっとした小ネタでした。
お試しください~。
2009年1月28日水曜日
QuickTime の脆弱性でリンデンドルが・・・
セカンドタイムスの [ 出来事 ] (2009年01月28日 15:06) の記事なんです。
http://www.secondtimes.net/metaverse/episode/20090128_ise.html
でも、、、 Linden の Official ブログにそんなこと書いてなかったし、おかしいな、、、と思って上のニュースの元の英語の記事を読むと、、、これ一昨年(2007年12月)の話です!!!
元の記事 http://securityevaluators.com/content/case-studies/sl//
そこからの引用
How the exploit works
<中略>If a Second Life avatar walks onto a piece of land that contains
an embedded malicious QuickTime File, they can be
exploited. [Update: 6/02/08] The vulnerability was
patched in QuickTime 7.3.1 on December 13th, 2007, eliminating the
vulnerability in fully patched Second Life Viewers and QuickTime
Players; unpatched Second Life Viewers and QuickTime Players are
still vulnerable.
引用おわり
[Update: 6/02/08] の部分は [更新: 2008年2月6日] この脆弱性は 2007年12月13日の QuickTime 7.3.1 で修正されました。 修正された Second Life ビューワーと QuickTime プレーヤーで、この脆弱性を取り除くことができます;(ただし) 修正されてない Second Life ビューワーと QuickTime プレーヤーは脆弱のままです。
その時の Linden の発表は以下
http://blog.secondlife.com/2007/12/21/quicktime-security-update/
たしかに、、、そんなことありました。
で、考えれば、、、いまほとんどの人の QuickTime は、、、7.6 のはずですし。
みなさん、慌てずに。。。
どうなっちゃったのかな、、、SecondTimes....
[追記]
さらにお友達から、ところが最近この記事のようにお金をとられる事件があるらしく、、、とのこと。
だと、、、このタイミングでこの過去の記事は、、、、過去にこんなことがあった、という説明なしに掲載しちゃうと、余計混乱すると思うのです、、。
2009年1月24日土曜日
[MLDU] SineWave 新作ダンス
前回の新作販売のときはちょっと辛口コメントしてしまいましたが、今回は SineWave らしさが出ていて全作大人買い ^^;
Breakdance/Streetdance 系が6作品と、SineWave らしい feminine なダンスが6作品です。
Breakdance/Streetdance 系
・russian roulette
・easy kneesy
・ello ello
・battlestar
・hot steppa
・circulate
Female / Rave 系
・urbane
・aphrodisiacal
・isis
・formidabilis
・gyroscopic
・play time
SineWave の Web サイトでは、すでにこれら新作ダンスの再生秒数も公開されています。
英語のサイトでアカウント登録が、、、の人は以下を参考に MLDU のノートカードを修正してください~。
<New>
russian roulette,21.0
easy kneesy,11.3
ello ello,7.7
battlestar,20.1
hot steppa,15.7
circulate,12.3
urbane,22.4
aphrodisiacal,29.7
isis,21.0
formidabilis,29.1
gyroscopic,22.4
play time,27.8
</New>
MLDU は Studio4D さんのショップでベンダーから購入できますが、まずは 1L$ のお試し版を使って購入するかどうか検討してください。お試し版だけで十分の人も多いと思います~。
STUDIO4D DANCE ANIMATIONS <MLDU Vendor>
もちろん、Studio4D のクールなダンスもお試しください!
Leather Costume
実は前々から気になっていた Pixelfashion の蛇革ジャケットとブーツ。購入~。
この Pixelfashion のブーツもスクリプトでサイズを変えることができるタイプでした。
Hair は Damselfly の Jade ですが、これも同じスクリプトでサイズを変更できます。
ダイアログのメニューが同じなので、きっとどこかでこのスクリプト販売してるのかな?
Jacket : Pixelfashion
- :)(: Saffi Snake Jacket Black
Boots : Pixelfashion
- :)(: Saffi Snake Boots Black
Mini Skirt : Naima
- Naima Leatherskirt Black
Corset : B@R Hell Fire Lady
- Hell Fire Lady Black Shirts
Eyeware : Solar Eyeware
- Solare Eyeware ~ Mira
Photo @ Pixelfashion Main Store
slurl.com/secondlife/xstream80/72/173/28
で、ダンスしてみた(笑
で、、、アップした Picture が 200 枚近くなり、Pro にするかどうか聞かれてる・・・
2009年1月21日水曜日
Linden Lab が Xstreet と OnRez の
Xstreet と OnRez の商品マーケットプレースを買収した、、、というアナウンス。
Linden Lab プレスリリース
http://lindenlab.com/pressroom/releases/01_20_09
買収に関する FAQ
https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5809
OnRez の marketplace は使ってませんが、Xstreet (旧 SLX) は使っていたのでちょっとびっくり。
FAQ によると OnRez marketplace は2月11日までは継続して、その後ユーザーは Xstreet を使うことになるようですね。
OnRez will remain active until Wednesday, February 11th, 2009 to allow the current OnRez users to migrate their accounts and listings over to Xstreet. (FAQ から引用)
基本的なインフラサービスだけを提供していた Linden が in-world のコマース(というか、in-world で使える商品のコマースですが)に手を広げてきたところが面白いポイントですね~。
商品検索なんか、、、in-world の中だけって結構つらいし。
なるべく in-world で完結させたくても、どうしても今の Web を使ったほうがいいものもあるわけで、うまく統合しながら使い分けられればいいですね。
2つの老舗のマーケットプレースを買収し統合することで、Shop やモールのトラフィックをあげることが期待できる、なんて書いているから、Web ページの多言語対応もあるかもしれません。(商品そのもの説明などはたぶん製作者が使った言語のままだと思いますが、、、あと Linden だから多言語対応は遅いかもね、、、)
リアルでいうところの「経済活性化施策(?)」のひとつみたいなものかも、、、。
一方、Xstreet と OnRez は Linden に買収されたことで、とりあえずビジネス的な当初の目的は達成、、、なのかな~。
本家本元がマーケットプレースに参入したことで 「うわ...」 となっている会社さんも世界中に・・・ 独自のベネフィットをどれだけだすのか、アイディアを練らないといけない状況になったかも。
2009年1月20日火曜日
INSILICO - 近未来地図
雰囲気のある場所にいくと。うん!
衣装は皆さんご存知の Avid :) です~
Clothes
- Avid Medusa
Avid Gothic Clothing Mainstore
slurl.com/secondlife/Gothic%20Clothing/43/177/57
Accesarry (Necklace)
- EarthStonesLampir Cross - Silver/Red Jasper
Avid Gothic Clothing Mainstore
slurl.com/secondlife/Gothic%20Clothing/43/177/57
場所も、、、ご存知でしょうの INSILICO。
INSILICO
slurl.com/secondlife/INSILICO/180/136/3607
で、、、Pose は大事よね~w
まだ無いダンスアニメーション手に入るかも
今日、そこから Group Notice がきて、しばらく「なんのことやら」でしたが、、、え”
This is your chance to buy the dance moves you want! Just send us a web link to a video with the dance moves you like and you will be able to buy this animation very soon and for the normal price of 265L$! Copy the web video links into a notecard and drop it to Hendrik Schroeder. We will announce when the animation will be available in the shop.
つまり、YouTube とか Web で公開されているビデオの中で、自分の好きなダンス(リアルですよ、リアル。あ、リアルじゃなくてもいいのかw)の URL をノートカードに貼り付けて Hendrik Schroeder さんに送って、もし、そのダンスアニメーションを Henmations が作ったら 265L$ で買えるよ!とのこと。。。
って、you will be able to buy this animation very soon... って will be able to と言い切っていいの? (笑 私の感覚だと、この表現だと「買えるよ!作るよ!」なんですが。。。この感覚、違ってたらごめんなさいw
ダンスのネタを世界中から集めるには面白い方法かもですね~
興味のある方は Henmations の Group に Join して、Group Notice を確認してくださいね。(といっても、上記の文章そのままですけど)
[追記] your chance っていっている時点で、、、不確定要素含むのかな?英語難しい(笑 現実的に絶対つくるなんて約束できないですからね。。。
2009年1月17日土曜日
[MLDU] ノートカード保存の際はご注意ください
MLDU4 に多くのアニメーションをいれていくと、編集で MLDU4 のコンテンツフォルダが開くまで時間がかかるようになります。
このような状況になっている場合はノートカードの編集・保存は1つずつ確実に行うようにして、複数のノードカードを開いて編集する場合は保存の際に細心の注意を払うようにお願いします。
というのも、、、実は「自分が」それで今日ハマりました・・・
コンテンツフォルダを開くまでに時間がかかる、、、というのは、これらのアイテムを管理している Linden のサーバーとのやりとりに時間がかかっているもの、、、と予想できます。
複数のノートカードを開き、編集していって、最後に Save (保存) ボタンを次々と押していって、ノートカードを閉じると、上記のような「サーバーとのやりとりに時間がかかるような場合」は変更が保存されないノートカードが発生します、、、@@
以下のようなメッセージが出るときはいいのですが、このメッセージすら出ずにノートカードを閉じてしまうと、、、編集したものを保存せずに、、、(泣
この英語のメッセージは、「ノートカードは保管できませんでした、理由はオブジェクトまたは関連オブジェクトを見つけることができませんでした。オブジェクトは範囲外(違う SIM ということかな=圏外w)にあるか、削除されてしまったかもしれません」 といっています。
でも、オブジェクトは確実に目の前にあって、体感的には1枚目のノートカードの保存が終わって、コンテンツフォルダが最新の状態になる前に次々と他のノートカードの保存ボタンを押したときに出てきました。ただ、メッセージがでるので気がつくのと、ノートカードを閉じていなければ再度保存ができるのでいいのですが、、、でも、このメッセージが出ないことも体験したので、やはり安心してはいけないと思います。
前の保存処理が確実に終わってから次の保存をしないと、ノートカードを保存する先のオブジェクト(プリム)が無い、といった判断をしてしまうようです。
ダンスアニメが膨大な量(私の個人所有 MLDU4、ついに 300越え~)の場合のノートカード編集の際は本当にお気をつけください。
1時間の作業がすべて水の泡、、、はあまりにも悲しいです ^^;
と、、いうか、パソコン作業の基本の「こまめにセーブ」ですね・・・(笑
2009年1月16日金曜日
[Photo] Maeve さんの Photostream
以前ご紹介した DeeDee さん、光の陰影の使い方がすごかったんですが、今回の方は全体的に、、、プロフェッショナル。
Fortune
Originally uploaded by Maeve Strom
最近動画の撮影・編集はあまりに PC が非力でカクカクなのでモチベーションが湧かないのですが、画像は比較的非力な PC でもできそうですが、、、、テクニックがまったく追いつかず!(笑
追いつくどころか「無い」です。。。
Maeve さんの画像を見てると、どんな加工方法があるのかちょっと勉強してみようと思わされる、素敵な作品たちです。
Maeve Strom's photostream
あ!!!! Pose 屋さんだ!!!(笑
ESSENTIAL SOUL STUDIO N POSES, Essential Soul Studio (156, 152, 35)
slurl.com/secondlife/Essential%20Soul%20Studio/157/152/36
2009年1月15日木曜日
[LIVE] GHOST IN THE MACHINE
詳しくはこちら・・w
で、、、無理w いけないw 時間的・曜日的にw
いけるお友達の皆様、楽しんでくださいw
2009年1月13日火曜日
[LSL] 文字列のバイト数を調べたい - llDialog
前回の投稿の後半で書いたお話ですが、HUD といった造形ができない私にとって llDialog が唯一のインターフェースになります。(笑
このダイアログのメッセージやボタンの内容が固定なものであれば、あらかじめ 512 bytes なり、 24 bytes といった最大長以内に収めることでスクリプト エラー の "Object: llDialog: button labels must be 24 or fewer characters long" や "Object: llDialog: message too long, must be less than 512 characters" を回避できますが、動的にメッセージやボタンを変更しようとすると、llStringLength だけでは対応できない場合が日本語環境では出てきます。
in-world では多言語対応として UTF-8 を使っているためで、たとえば 「ABCEDFGHIJKLMN」 は llStringLength では14文字で、実際のバイト数は14Bytesですが、「あいうえおかきくけ」 は9文字で27Bytesとなります。
めんどうなのは混在のパターンで 「ABあいうえおかきGH」 はllStringLengthでは11文字ですが、バイト数は25Bytesとなります。
アルファベットや数字などの ASCII 文字は 1バイト、ひらがななどは 3バイトを使うことになります。注意しなくてはいけないのは、半角カタカナなども 3バイト使います。昔の(笑) SBCS とか DBCS ってもう過去の話なんですねぇ、、、。
UTF-8 の日本語の文字数とバイト数についてはこちらが参考になります。
llDialog のスクリプトエラーに 24文字以下にしなさい、、、と出ますが、これ、24 bytes 以下にしなさい、という意味です。なので、上の例だと、「あいうえおかきくけ」は9文字ですが、バイト数は27bytesのためエラーになります。
実際、ボタンは表示するエリアが狭いため、アルファベットでも9文字程度しか表示できません。ボタンに長い文字列を入れることは現実的ではありませんが、ダイアログのメッセージのエリアに [1] ボタンの説明で 1:XXXXXXXX というのをボタンの数ぶん入れていくと、512バイトを超えることがたまに出るようになってきました。
1文字3バイトの日本語にあわせて llStringLength と llGetSubString で表示する文字数を制限するやり方が確実、安全ですが、利用できるアルファベット、数字などがその制限で 1/3 の文字数に減ってしまうのはいただけず、また、その中間の値をとると、当たり前ですが、今度は全部日本語になるとエラーになり、、、。
エラーで文字切捨ててダイアログを表示してくれるといいのですが、このエラーが発生するとダイアログが表示されないので、スクリプトとして確実に機能しないのが嫌でした。ただ、ボタンのラベルが返信されるので、仕方ない仕様と納得できます。。。
なんか、、、バイト数のチェックの話しは先輩の皆様が当の昔にやっていそうなんですが、検索の仕方が悪いのか、日本語対応がこの1年くらいで可能になったせいか、よいサンプルなどを探し出すことができませんでした。それで llGetStringBytes みたいのが欲しい、、、というのが前回の投稿の後半部分だったわけです。
で、、、先日、閃きました(笑
URL エンコードを使ってバイト数を計算する
文字列のバイト数を計算するには UTF-8 で 3 バイト使っている文字がどれかを判断してバイト数を計算すればいいわけですよね。 ASCII 文字か、そうじゃないかは URL エンコードに変換することでおおよそ確認できることに気がつきました。
URL エンコードは llHTTPRequest などでも使いますし、昔、スクリプトのエディタで日本語の直接入力ができなかったときにお世話になっていました。
また、以前の投稿にある文字列変換で利用した llParseString2List を使って、極力 for 文や while 文を使わず、List 操作だけで処理することで、パフォーマンスの問題もなんとかなりそうな気がしました。というのも UTF-8 の ASCII 文字以外は URL エンコードすると % が必ず出てきます。たとえば「あ」は %E3%81%82 となるので % の数がバイト数と考えることができますね。また、\ や & といった特殊な文字も、%5C や %26 としてくれるので % の数をバイト数としても問題なさそうです。
問題は混在文字列です。「aあ」 は a%E3%81%82 となり、「あabc」 は %E3%81%82abc となります。このような混在文字列を llParseString2List で % を使って分解すると、
「aあ」 -> a%E3%81%82 -> ["a","%","E3","%","81","%","82"]
「あabc」 -> %E3%81%82abc -> ["%","E3","%","81","%","82abc"]
「abあcd」 -> ab%E3%81%82cd -> ["ab","%","E3","%","81","%","82cd"]
「あabい」 -> %E3%81%82ab%E3%81%84 -> ["%","E3","%","81","%","82ab","%","E3","%","81","%","84"]
となります。ASCII 文字が 3 バイトの文字に続くと直前の 3 バイト文字のエンコードの一部の List 要素の中に入ってしまうわけです。(上記赤の部分)
また、ASCII 文字が先頭にきた場合や ASCII 文字しかない場合も考慮すると % の数だけ、、というわけではありませんよね。
ですが、List 要素の数と % の数とバイト数の関係はこの例から
バイト数 = List にあるすべての文字数の合計 - (%のList要素の数X2)
になりますよね。これなら混在環境でもバイト数を求めることができそうです。
ただ、%の要素数を求めるために for 文をまわすのは避けたいところ、、、。そこで MLDU のスロット管理でも使っている方法を応用してみます。% はこの利用方法の List の中では特殊な文字なので llListSort を使って対象となる要素数を求めることができそうです。
たとえば「あabい」の場合だと
URL エンコード: %E3%81%82ab%E3%81%84
LSLで分割後 : ["%","E3","%","81","%","82ab","%","E3","%","81","%","84"]
LSLでSort後 : ["E3","E3","84","82ab","81","81","%","%","%","%","%","%"]
Sort した後の List に対して、llListFindList で ["%"] を探すと、一番最初の % がある List 要素順の 6 という数値が戻されます。
よって、List の全要素数から 6 を引いた残りの数が % の要素数になります。
まったく 3バイトの文字がない場合も考慮して、ユーザー関数にしてみたのが以下になります。
getStringBytes のパラメータに文字列を渡すと、integer 型で byte 数を返すものです。
integer getStringBytes(string p1){
integer len = 0;
list temp = llParseString2List(llEscapeURL(p1),[],["%"]);
if(llListFindList(temp,["%"])!=-1){
temp = llListSort(temp,1,FALSE);
integer index = llListFindList(temp,["%"]);
integer u_bytes = llGetListLength(temp)-index;
len = llStringLength(llDumpList2String(temp,""))-u_bytes*2;
}else{
len = llStringLength(p1);
}
return len;
}
みゅう、、、コードにするとシンプルですね、、、
[追記 2009.5.1] jinko さんが提示してくれたスクリプトのほうが素敵スクリプトですので参照してください。
http://jinko.slmame.com/e602732.html
//----------------------------------------------------
// 文字のバイト数
// 参考:http://mydiary.slmame.com/e492006.html
//----------------------------------------------------
integer strlenB(string str){
string esc = llEscapeURL(str);
string wk = llDumpList2String(llParseString2List(esc,["%"],[]),""); //素敵!!
integer cnt = llStringLength(esc) - llStringLength(wk);
return llStringLength(esc) - cnt * 2;
}
--------- by jinko-san --------------------------------
[追記おわり]
文字列のバイト長をチェックした後の超過分の文字削除操作はパフォーマンスも考慮しなくてはいけないのでまだ先は長そうですが、、、でも、これでダイアログの説明表示の文字数の制御がうまくできるかも。
って、、、ぜんぜん本来作りたいスクリプトと違う枝葉の部分のお話しでした、、、(笑
ご参考になればうれしいかぎりです~。
2009年1月7日水曜日
[LSL] llSetTimerEvent って・・・
バージョンの違う、同じようなスクリプトを複数試しても、やっぱりおかしい!
あきらめかけていたんですが、上述の昔の投稿を思い出し、とりあえず、タイマーセットする前に lllSetTimerEvent(0.0); でゼロにして、それから秒数を指定してみました。
すると、それまで全然だめだったのがちゃんと指定秒数で動くようになり。。。。
難しいですねぇ、、、。
この
llSetTimerEvent(0.0);
llSetTimerEvent(320.0);
というような書き方は必須かな、、、。
話しはかわり、今日、mono 環境ではじめて、heap/stack エラーでたり・・・
メモリーとの戦いだったわけですが、この話題は別にわけてご紹介したいんですけど、バイトと文字数は違うことを Linden ちゃんと認識してほしいです、、、 llDialog の仕様を変える必要はないけど (ボタン 24, メッセージ 512 バイト制限)、だったら byte数を取得する関数がほしいですね、、、GetStringLength だと文字数なんです、、、。いまって UTF-8 だから 3バイト使ってるし。日本語。 llGetStringBytes とか、、、ほしい、、、。(*追記1)
今日は疲れました・・・
ということで(?)おやすみなさい。 m(_ _)m
(追記1)文字列のバイト長の取得、ちょっと試してみました。
2009年1月3日土曜日
70,000 超えてるの初めてみた
オフィシャル LINDEN ブログで9月末に 71,232 のオンラインを記録した、、、という記事を読んだことはあったのですが、60,000 を超えたのは見たことがあっても 70,000 はこれがはじめて。
もちろんインする時間帯にもよりますが、2007年は20,000 - 30,000 くらいで、2008年は 30,000 - 50,000 くらいがよく見かける数字でしたが、昨年末くらいには 50,000 を超えていることも多くなってきたので、世界的にみたらユーザーは、どこかの邦銀系シンクタンク?が予想した爆発的な伸びはない(笑)ものの、バブル的に一見さんが増える状況を経て、ゆっくりと、でも、利用したいユーザーが着実に増えているように思えます。
この前 雷神で LIN ちゃんが言ってたように、ダメだ、ダメだといわれながらも、インワールドのイベントが多くて大変、、、ってその通りで、この数字があらわしているかもしれません。
個人的には Lindex の取引量が下がらなければ、まだまだ大丈夫のような気がしますけど。
Lindex Volume (http://secondlife.com/whatis/economy-graphs.php)
まったくアレなお話しでしたが、縁起がいい数字???を見たのでついつい投稿してしまいました。(笑
[追記:Jan 15 2009] 2008Q4の economics data が出たので。。。