ソラマメブログ
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。 解除は→こちら
現在の読者数 1人
プロフィール
rinsui Hax
rinsui Hax
大阪生まれ大阪市在住。 幼稚園時の「将来なりたいのは?」・・・忍者。 2000年の思わぬ運命激変により仕事人生からセミリタイヤしマンガ・小説・映画・ギターに浸かる隠遁生活へ。 長年、映画の個人制作願望を燻ぶらしていたが、SL(セカンドライフ)へ参入しマシニマ(SLでの映画製作)を知って実現可能性を見取り、やおら創作生活がうごめく模様。

未収録記事と記事データのダウンロードはMaglog版ブログからどうぞ

rinsui SL+ Making Blog

SL内ショップはこちらから

Animation Free Space Shop 「COCO/100/176/15」

Salerio Runa&Rin Shop 「Salerio/234/22/27」

QRコード
QRCODE
Information
メタコマースおすすめ商品




オーナーへメッセージ

2007年08月31日

マシニマ「芭蕉」-BASHIO-8月31日いよいよ公開




マシニマ制作を標榜いたしおる拙者に見過ごせぬニュースが飛び込んで来おった。
表題のマシニマ公開がそうで、早速観賞致すでござる。
皆様もSL Press Releaseをご覧あれ。
願ってもなき楽しみと修養でござるが、これをば宣伝致せば二つのバナーを貼って500L$賜れるとのこと!!
正に願ったり叶ったりにてmaglog版ブログに設置し申した。

例のHUDをば追伸致すが、様々なパターンでの各ボタンの色変更動作のスクリプトを書き申すが、予想通りの動作となってくれぬ。
各分岐処理に入ったところでllOwnerSay(string);をば置いてあるべき処理内容を判別致せる文をチャットさせおるが「そんなバナナ!?」な文がチャットされたりされなんだり。
条件分岐書法と動作というプログラムの基本作法に馴染んでおらぬ故の試行錯誤じゃが、これは実地で超えるのみ。
数打ちゃ当たるで何とかなるじゃろう・・・・
散々書き直し頭打ち致してスクリプトへの億劫さが無くなりおったのが大きな進歩であり申そう。(ハハハ)




  
Posted by rinsui Hax at 00:47Comments(0)TrackBack(0)映画・マシニマ

2007年08月30日

世界陸上に見る己の冷め具合




世界陸上に発奮してHUDデバッグの傍ら空手練習に励むワシ(ショップ2Fにて)

さてもの表情チェンジ&口パクHUDデバッグじゃが、まずは各ボタンの点灯・消灯動作に取り組んだところ、どうも動作が不安定で反応も遅く実用になり申さぬ。
動作チェックにと、ルートに二つの照明ボタンのみをリンクしたシンプルな構成で試してみたが同様であった。
そこで、llSetPrimitiveParams()による点灯・消灯からllSetColor()での色変更に変え見れば小気味良く反応いたしたのでこちらに変更すことと致した。
色変更にはプリムナンバーを指定してリンクされおる他のプリムの色を変更致せるllSetLinkColor()があり、これを併用致せばボタンプリムの色変更時に関連する他のプリムを同時に色変更できスクリプト自体もスッキリとなり申した。
本日は単純な動作部分のみで少々混み入ったるケースでの処理は明日になり申すが、順調にゆけばボタンON・OFF時の色変更動作を済ませられ・・・るかも・・

猛暑の折、大阪世界陸上の皆様の頑張り天晴れで御座る。
一昔前には陸上競技にて日本の選手が決勝進出やましてメダルへの期待など薄うござったが、近頃並びに今大会では結果的に及ばずとはいえ期待できる選手がちらほら出現致しおる。
ジワジワと世界トップレベルへ迫りつつあるのじゃろう。
かような熱き戦いを観戦いたせば発奮いたして日課の運動を腹筋200回、腕立て100回じゃ~!!
とならないのが現在のワシ。
少年時代に12回もブルース・リーの「燃えよドラゴン」を観賞いたし、さぼり気味であった空手道場通いに燃えたあの頃とは別人になったらしい。

只今の日課運動は鍛錬より健康と体形維持が主眼にてアスリートよろしく頑張らずともよろしい、と冷めたる心地。
少年の頃がふと思い出され申した。





  
Posted by rinsui Hax at 01:18Comments(0)TrackBack(0)SL スクリプト

2007年08月29日

デバッグ地獄初体験でもがいてござる




思った通りというか当然のこと、表情チェンジ&口パクHUDのスクリプト実装テストはスムーズにいかなんだ。
スクリプトアップロード時のエラーは切り抜けたものの、動いてくれない・・・
ウンともスンとも云わんでどこがどうなのか皆目検討がつかん。
いや、スピード設定用のダイアログだけは虚しく開いてくれ申した・・
脳みそが停電すること数分・・・・・・・・
まずは各ボタンを押した場合のルートへのメッセージ送信が出来ているのか確認すべしと再起動致した。
ルートのメッセージ受信イベント内は複雑怪奇なif・else入れ混んぐら状態となっており、ここでの検証は難しい故、link_massageイベントに入ったばかり、if文に入る手前にて各ボタンからのメッセージ情報を

llSay(0, str+","+(string)num);

str,numはメッセージを受信するlink_massageイベントが受け取るデータ
link_message(integer sender_num, integer num, string str, key id)

にてキャッチ致しチャットに表示せしめたのが上の写真でござる。
これによりメッセージそのものは受信されおることが分かり申した。(ほっ)
さればその先のif分以下の受けようが問題と相定め取り掛かることになり申すが、これが正に難物の本丸じゃ!グギギ・・

攻略には日数を要しようが必ず成し遂げる覚悟ゆえ吉報をお待ちくだされ。

  
Posted by rinsui Hax at 01:37Comments(2)TrackBack(0)SL スクリプト

2007年08月28日

DAWソフトYAMAHA SOL2の悩みどころ




表情チェンジ&口パクHUDの机上スクリプトはひと段落致して、明日より稼動テストに入り申す。
スクリプトの検証はこれから故、本日はDAWのお題でござる。

音楽制作を行うDAWソフトはYAMAHAのSOL2を使っておるが、Live6等のクールな操作性に触れるとつい浮気したくなりおる。
しかし、オーデオインターフェイス&ミキサーにmLanなるIEEE 1394接続を使用するYAMAHA O1X(オーワンエックス)を使いおることもあり中々そうもいかんのじゃ。
このO1Xは定価 187950円(税込) 、割り引きで買っても12万程にはなろうという代物。
高機能ではあるが、mLanに対応するソフトでないと使えん弱みがある。
Live6は対応しおるが、これまた6万もするソフトで気軽に手が出せない。
LightWaveやFLASHのアップデート同様我慢・我慢の辛抱と苦汁を飲み込んでおり申す。
そんな健気さに追い討ちをかけおるのは、SOL2の今後のアップデートは無いとの情報じゃ。
YAMAHAは独Steinberg社を傘下に収めおったが、そこのCubaseなる有名なDAWソフトにシフトするつもりなのじゃろう。
これでアップデートへの期待も潰えてしもうた・・・
SOL2は必要な機能は一通り揃っておる優れたソフトで、YAMAHAとしてもかなり力の入ったソフトじゃと思うのじゃが、残念ながら海外有名どころのDAWには及ばんかったということか。
機能は優れおるが操作性が真面目すぎるというか堅実というかクールさに欠けると感じており申す。
要はひと手数多くて面倒に感じるということ。
Live6の操作に惹かれるのもそれ故じゃろう。
今時の制作スタイルとしてループの使用も重宝致すが、Live6やACIDならドラッグすれば自動調節されおるが、SOL2ではプラグインを呼び出して自己調節せねばならん。
SOL2は元々ループ制作メインのソフトでない故、これで難癖つけるのは不適当とも言えるが、操作の快適感例示と受け取ってくだされ。

くりかえし申すがSOL2の機能は優れおる故、こうなれば自力で操作性アップに取り組むべしと覚悟致し申した。
ようやく操作が分かって来たところ、新たなDAWに難儀するのを避けたい思いが山々なるも人情。
過去に繰り返せし消化不良ソフト・機器の無駄金ももはや御法度。

3DCGのBlenderはショートカット操作が特徴で難解との評も御座るが、ショートカット操作に馴染めば快適なのも事実。
このことはスカルプテッドプリム制作にBlenderを使って実感致し申した。
これより、まずはSOL2にてもショートカット設定・習得が有効かと考えおる次第。

  
Posted by rinsui Hax at 00:22Comments(0)TrackBack(0)音楽・音源

2007年08月27日

チョコバリにはまってござる




表情チェンジ&口パクスクリプトは相変わらずの机上構築中。
書いておるとあれやこれやの気付きが発生して猛烈にスクリプトが膨れ上がっており申す。
こんなになるとは露知らず、若葉マークの身に余る機能実装であったか!と後悔もここまで来てはもはや手遅れ。
ともかく明日には机上実装を終えよう見込みじゃが、稼動テストが大・大・大の問題じゃ。
富士樹海にでも迷いこんだるごとき様相となろう・・

それはさておき、記事写真をご覧あれ。
最近はやりのチョコバリを食しながらのスクリプト実装の図でござる。
妻は結構な甘味好きなのじゃが、先般、センタンのチョコバリ他アイスが受けおるとのニュースに触れ、早速誘われて食べてみた。
カリカリクランチの食感よろしく満足いたして、以来買い物ついでにまとめ買い致しおる次第。
本日は何と!20本のお買い上げじゃった。
外装を見れば「1000円当たる」と謳いおるが、これだけ食っても当たり申さぬ。
先ほども、スクリプトに行き詰まりおるところへ具合よく妻がチョコバリを剥いて持ってきてくれカリカリと楽しませてもらった。
昨日より世界陸上が始まり、ながらスクリプトしおったが、若葉マークで集中力がそがれてはトンとまとまらぬ。
と言いつつ、のどかな悩みようではあり申す。

チョコバリ、お勧めですぞ。

  
Posted by rinsui Hax at 00:51Comments(2)TrackBack(0)

2007年08月26日

VISTAへ移行すべきか・・イヤ、できるのか?




表情チェンジ&口パクHUDは机上でのスクリプト書きだけじゃが、いよいよ最終佳境の口パクモードに入ったところじゃ。
ここでは口パクアニメ中での口パクリストアップ・ダウン処理の割り込みや表情ステートへの移動などを如何にスムーズにこなすかが課題。
初体験・初チャレンジのこととて未だ方策は真っ白でござる。
机上スクリプトを終えれば実地テストとなるが、恐らくてんやわんやのエラーとなろう・・(頭痛)

話は変わり表題のVISTA移行の件じゃが、この2月にビックカメラ難波店にてDELLのデスクトップを購入したがOSはVISTAではなくXPを選択し申した。
使っておるソフトのVISTA対応が進んでおらぬ故、VISTAへのアップグレード特典(5000円程)にて対応すべしと考えてのこと。
特典申し込みをミスりおったかと思えるほどのノンビリ振りにて、4月も過ぎてアメリカ本国よりアップグレードディスクが到着しおった。
それより4ヶ月、未だにDELL殿はXPでござる。
新機能好きなワシとしては、奮発してDirectX10に対応しおるGTX8800(グラフィックスカード)を積んでおることもあり是非ともVISTAの3Dインターフェースや効果、それに起動が早くなるというレディブーストを使いたいのじゃがそうもいかん。
肝心の制作環境ソフトが対応しておらんのじゃ・・
使用しおるメインのソフトは

FLASH Basic 8 画像編集・作成、アニメ制作、FLASHアプリ作成
YAMAHASOL2        音楽制作
LightWave7.5      3DCG制作
PhotoShop6        画像編集
Comic StudioEX3.0 マンガ制作
Poser7            アニメーション・ジェスチャ制作

どれも高機能なソフトじゃが、VISTAへの対応を表明しおるはPoser7のみの有様。
これでは移るわけに行き申さぬ・・・
思い切ってVISTAに移行しXPを仮想環境にてとも考えるが操作のモタツキやエラーが気がかりで踏み出しかねる。

昼間買い物に出かけた際、コンビニにて「XPをあと7年使う特選技ぜんぶ!」を買ってしまった次第。
 






  
Posted by rinsui Hax at 01:11Comments(2)TrackBack(0)etc

2007年08月24日

早速のチョンボ、そして機能拡張にて玉砕度アップ




昨日、表情チェンジ&口パクHUD構文探索致したが、記事写真のHUDイメージにてスピード設定ボタンが漏れておった。
おまけにグローバル変数がデフォルトステートに記述されておる。
余りボタンにワシの肖像画を呑気にはめ込んでおったが、汗かきものじゃ。
そうと気付き修正致したが、スクリプトに突入すればハタと浮かび申した。
「あっ!!口パクパターンを作ったら登録できないとまずいわなア・・・」
スクリプトがいよいよ複雑化して自爆ものじゃが、外すわけにはいかぬ機能でござろう、腹を括ってご覧の通りボタン追加し申した。
昨日までの構文を補正致せしは下の通り。

list hyoujou=[]; //19の表情リスト
integer mode; //表情・口パクモードフラグ、表情ボタンの送信先指定
float speed; //スピード設定
string hyoujou_play;//表情モードでの現在アニメ表情
string hyoujou_memory;//表情モードでのストップ用表情アニメ情報

default { 

link_message(integer sender_num, integer num, string str, key id){

if(sebder_num==表情ボタンリンクナンバー)
  {
   表情モードステートへ
}
else if(sender_number==口パクボタンリンクナンバー)
  {
  口パクモードステートへ
}
else if(sender_num==ストップボタンリンクナンバー)
{
ストップステートへ
}
else if(sender_num==スピードボタンリンクナンバー)
{
speed=(float)str; //ボタン文字情報をfloat型にキャストして代入
} 
}

state hyoujou_mode
{
表情モード処理
}

state kuchipaku
{
  口パクモード処理・・選択表情リスト作成・スピード設定~アニメ等   
}

state stop
{
  ストップ処理・・選択表情リスト初期化・アニメストップ・タイマー止め等
  デフォルトステートへ
}
}

ここに如何に口パクパターンを登録・使用させるリストアップ・ダウンボタンが押されしときの構文を組み入れるべしか?
まず言えるのは、リストアップ・ダウン機能を使うのはデフォルトステートではなく口パクステート時であるということじゃ。
であれば、リストアップ・ダウン及び10個並んでおるメモリボタンのメッセージ送信先はルートでよいが口パクステード内で受信致すこととなる。
口パクモードでは表情が追加選択される都度口パクリストを更新致してリアルタイムでパターンを変更いたすが、まずはこれを上手く機能させ得るか未だ見えておらぬ段階。
まずは、これの目途を付けてリストアップ・ダウン機能の組み込みを考えるが段取りでござろう。
只今「スピードボタン用スクリプト スピード設定ダイアログ・送信とルート対応」「ルートでの表情モード処理と表情ボタンメッセージ送信処理」「表情モードボタンと口パクモードボタンのメセージ送信処理」「ルートでの口パクモード時処理」「ルートでのストップボタン処理」とスクリプトを区分致して書き出しおるが口パクステートのスクリプトは最も困難故後回しにしておったのであった。
この上の難度アップにて玉砕せねばよいが・・・成功を祈念くだされ。





  
Posted by rinsui Hax at 20:50Comments(0)TrackBack(0)SL スクリプト

2007年08月23日

表情チェンジ&口パクHUDスクリプト構文を練ってござる




HUDの機能としては、19ある表情を単独でアニメーションさせる「表情モード」と表情を自由に組み合わせて口パクさせる「口パクモード」が二つの柱。
「口パク」アニメーションには表情の切り替えスピードをダイアログにて12段階設定可能に致し、両モードアニメ中のストップボタンを設け置く。
スタート・ストップボタンを設けることを考えており申したが、スタートボタンをば無くし、それぞれのモードで表情ボタンを選択すれば即アニメーションが開始する仕様に致したい。
HUDの構成としては、本体に「表情モードボタン」「口パクモードボタン」「口パクスピード設定ボタン」「ストップボタン」「19個の表情ボタン」となり申す。
各ボタンにルートへのプリム間通信スクリプト(MIZ殿の「prim間通信(スクリプト初級第十五回)」参照)を仕込んでボタンタッチ情報を送り、ルートとなる本体にてボタンプリムからの通信を受信して各処理を行うメインのスクリプトを仕込み申す。

要の本体スクリプトの構成を考えるに、大元の「表情モード」と「口パクモード」を切り替えるのは各ボタンタッチ時にルート(本体スクリプト)にメッセージを送信すれば足りるじゃろう。
「表情モード」と「口パクモード」は排他的じゃから本体で各ボタンからの通信が有る毎にモードを切り替えるのじゃ。
プリム間通信では送信元のプリムナンバーと送信情報として「数字」「文字」「key」を設定して送付できるが、ボタンがタッチされれば即モード切替え故、受信する本体にて送信元のプリムナンバーよりモードの判別さえ出来れば事足りる。
よって、「数字」「文字」「key」情報の設定は不要じゃろう。
モードボタンからのメッセージを受信するlink_messageイベント内にてif・else文でまずはモード分けを致し、各モード内にて更なる場合分けをなすが大元の構成でござる。

link_message(integer sender_num, integer num, string str, key id)の
sender_numに送信元のリンクナンバーが入りおるので

default {

link_message(integer sender_num, integer num, string str, key id){

if(sebder_num==表情ボタンリンクナンバー)
  {
   表情モード時処理
}
else if(sender_number==口パクボタンリンクナンバー)
  {
  口パクモード時処理
}
}
}

これがモード変更の構文となろう。

各ボタンからルートへメッセージを送信する関数は
 llMessageLinked(integer linknum, integer num, string str, key id)
で、linknumには送信先プリムのリンクナンバーを指定致すが、本HUDでは全てルートへ送信致す(HUDの本体と各ボタンプリムをリンクするときに本体を最後に選択してルートプリムに設定する要あり)故、LINK_ROOTで統一致し申す。
モードボタン同様、ストップボタンもルートにてメッセージが受信されれば即アニメストップさせる故、送信情報の設定は不要でnum,str,keyをそれぞれ0,"",NULL_KEYと指定致す。

「19個の表情ボタン」は表情をアニメさせる情報が必要故、アニメスタートに使用致すそれぞれの表情名を文字情報指定することと致そう。

次にストップボタンの処理じゃが、どの様に致すべきか?
link_message内の各モード処理内にてストップ処理を考えておった処、それで上手く機能致すかが気がかりとなり申した。
この場合、モードlink_message内にストップlink_massageを入れ子する構造となるのじゃが、構文エラーが出るのでは?・・・
試せば分かることじゃが、動作的に考えてもボタンからのメッセージが受信されたときにルートで発生するlink_massageイベントは単発的なはずで、そうであるなら、モードメッセージを受信してlink_masageを実行してその後にくるストップメーセージは先に実行したモードメッセージの入れ子ではなく別個の独立したメッセージとして受信されるものとなろう・・・・

真偽は兎も角、link_massageの場合分けにストップボタンからのメッセージを並列致し、それぞれの処理をステートに移動して行う構成に考え直し申した。
「表情モード」と「口パクモード」を判別するグローバル変数を用意致しおいて、ストップステートへ入った段階で場合分け処理を致すのじゃ。

スピード設定もダイアログにて選択された結果をグローバル変数に代入致して口パクモード内でその変数を使えば良し。

以上を構成化すれば

default {

 list hyoujou=[]; //19の表情リスト
integer mode; //表情・口パクモードフラグ
float speed; //スピード設定

スピード設定ダイアログ処理;

link_message(integer sender_num, integer num, string str, key id){

if(sebder_num==表情ボタンリンクナンバー)
  {
   表情モードステートへ
}
else if(sender_number==口パクボタンリンクナンバー)
  {
  口パクモードステートへ
}
else if(sender_num==ストップボタンリンクナンバー)
{
ストップステートへ
}
}

state hyoujou_mode
{
表情モード処理
}

state kuchipaku
{
  口パクモード処理・・選択表情リスト作成・スピード設定~アニメ等   
}

state stop
{
  ストップ処理・・選択表情リスト初期化・アニメストップ・タイマー止め等
  デフォルトステートへ
}
}

このように考えたが、あくまでもワシの現段階での計画じゃから不都合があれば変更することになり申す。
さあ、これよりスクリプトと格闘じゃ。
  
Posted by rinsui Hax at 20:22Comments(3)TrackBack(0)SL スクリプト

2007年08月22日

振り返れば・・・そして展望




隠遁生活も久しく、長らくモヤモヤぐずぐずしておったワシが意を決してブログを始めたのが7月13日。
毎日更新を目標としたものの、内心無理じゃろうと踏んでいたら40日を迎えおった。
毎回のように制作やスクリプトにがっちり取り組んでのことであるからよく頑張っておるなと我ながら感心。
以前にもHPとブログを公開しておったが続かなかったのじゃ。
何が違うのか?
そういえば、情報とアイデアへの取り組みが違っておるのが大きい。
記事でも紹介したが、ひとつはONE NOTEでの情報収集と整理。
以前は、記事を書くなり制作しようとしても思い出したい情報が出てこなくて進まなんだり止めてしまったりしておったが、これを始めてからは情報の洪水に面食らい溺れてしまうことがなくなった。
必要と思った其の時に分類して放り込んでおけば一安心。
圧迫感から貯蓄感へと変じたは大変革と言えよう。

そして肝心なのはアイデアであるが、ここにも違いがあった。
丁度、本ブログを始めた頃(7月15日)に「樋口健夫の「笑うアイデア、動かす発想」:可能性に挑戦する“待ち時間のすごし方”」の記事を読んで感銘を受けブログでも紹介した(「ながら映画とギター弦切れに見る私の超面倒くさがり」)のじゃが、その後、ノートを見れば7月19日から毎朝朝食で食パンをかじりながら思いついたことを書きなぐっておる。
更にその後、フリーソフトを探しておって見つけたアイデア支援ソフトFreve Editorをインストールして、フン詰まり寡作な現状から量産作家に変身すべく作品要素の網羅・関連付け・分析を始めておる。
記事写真は只今の、作品要素網羅関連付け作業中のウインドウであるが、このように一覧して見れば、考えておるだけではこんぐらがって思考想像停止状態になっておったのが糸を解すように様々に作品案件・テーマ・演出等を具体的設定するのを支援してくれそうじゃ。
かの手塚治虫氏が「アイデアなら売りたいほどある」と言っておったのをTVで観て感心したものじゃが、これを上手く活用すればそれとて夢ではない!?
アイデアが湧くのを待っておる状態からシステマチックに生み出す体制への変身。
今だ作品制作への怠慢・オックウさが抜け切り申さぬが、ながらも前進するようにはなったようじゃ。
ブログでは今、制作知識・技術に取り組んでおる段階じゃが、次にはもっぱら作品を生み出す段階に入らねばなり申さぬ。
その先にはマシニマ制作なる大望があり申すから、今回は抜かりなくやり遂げる所存。
ということで作品を乞うご期待!
  
Posted by rinsui Hax at 23:27Comments(0)TrackBack(0)etc

2007年08月21日

スタート・ストップ付口パクスクリプトやったでござる




先のkichijoji夏祭りにて初日フィナーレ大根踊りに興ずるの図

昨日の記事にて、ショップで使用しておるアニメパッドのスクリプト構文を口パクスクリプトへのスタート・ストップ機能導入に使えるやの啓示を受けたいきさつを記し申した。
取り組みた結果、見事完成致したのが下のスクリプトでござる。

list KuchiPaku=[ 
"express_afraid_emote",
    "express_anger_emote",
    "express_bored_emote",
    "express_cry_emote",
    "express_disdain",
    "express_embarrassed_emote",
    "express_frown",
    //"express_kiss",
    "express_laugh_emote",
    "express_open_mouth",
    "express_repulsed_emote",
    "express_sad_emote",
    "express_shrug_emote",
    "express_smile",
    "express_surprise_emote",
    //"express_tongue_out",
    "express_toothsmile",
    "express_wink_emote",
    "express_worry_emote"
];

key agent = NULL_KEY;
integer hyoujou =FALSE;
integer i;
integer j;

default { 

state_entry()
{
if(agent==NULL_KEY){
return;

}       
     llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION);
    
}

  touch_start(integer detected){
hyoujou =!hyoujou;
    if (agent == NULL_KEY) {
      agent = llDetectedKey(0);
      llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION);
    }
  }
  run_time_permissions(integer perm) {
    key perm_key = llGetPermissionsKey();
    if (perm_key == agent) {
      if (perm & PERMISSION_TRIGGER_ANIMATION){

llStartAnimation(llList2String(KuchiPaku,0));
llSetTimerEvent(0.07);//表情変更スピード設定

}
}
}

timer()
{
if(hyoujou==TRUE){  //上位if文
if( i < llGetListLength(KuchiPaku)-1){
i++;
j=i-1;
}
else
{
i=0;
j=llGetListLength(KuchiPaku)-1;

}

llStopAnimation(llList2String(KuchiPaku,j));
llStartAnimation(llList2String(KuchiPaku,i));
}

else{   //上位else文
state animstop;
}
}
}

state animstop{
state_entry()
{
llStopAnimation(llList2String(KuchiPaku,j));
i=llGetListLength(KuchiPaku)-1;
llSetTimerEvent(0.0);
}

touch_start(integer detected){

if (agent == llDetectedKey(0)) {
      
state default;
}
  }
}

タイマーイベント内にて、表情アニメーション実行中となる最上位のif文内で、実行中の
表情リストのインデックス(i)が0の他(if)と0(else)で場合分けされてござる。
一方、表情アニメーションがストップしおる最上位のelse文ではストップ状態のみで場合分けの必要がない故、if・else文の入れ子を取らずanimstopステートへ移行するだけの構成を取り申した。
animstopステートに入れば表情アニメとタイマーをストップ致し、再度タッチされればアバターのオーナー判定にてオーナーであればdefaultステートへ戻って表情アニメをスタートする仕組みじゃ。
り申す。
前のスクリプトではスタート・ストップの切り替えが無く、一旦defaultステータスに入ればタイマーイベント内で場合分け(if・else文)されて繰り返されるのみであった。
しかし、このスクリプトではストップして再度クリックにてスタートさせればdefaultステートに戻りきてdefaultステータスが繰り返されることとなる。

ここでdefaultステータスの仕組みへの理解が必要じゃ。
defaultステータスでは初めてオブジェクトをREZしてスタートする時にタッチしたアバターのオーナー判定を致して第3者のタッチによりて勝手に表情アニメをスタートしない仕組みが施されておる。
key agent = NULL_KEY;と、初期状態ではアバターが特定されておらんが、REZ後最初のタッチにてagent = llDetectedKey(0);とオーナーに特定してから表情アニメのパーミッションを取得し、パーミッション取得後に発生するrun_time_permissions(integer perm)イベントでは
 key perm_key = llGetPermissionsKey();
    if (perm_key == agent)
によってパーミッション取得者がオーナーでないと表情アニメとタイマーがスタートしない念の入り様じゃ。
このスクリプトに取り掛かりしとき、前のスクリプト同様entry_state()のないままでanimstopステータスよりdefaultステータスに戻ったのじゃが、表情アニメが再スタートせなんだ。
と、アバターが特定されておらぬ条件設定がなされおるが、REZ後タッチを繰り返してdefaultに戻ってくるときにはagent = llDetectedKey(0);が実行済み故if文の条件に当てはまらなくなっておったのじゃ。
よって、追加したstart_entry()内では

if(agent==NULL_KEY){
return;

}       

先に実行されておったanimstopステータスではREZ時defaultステータスでのチェックにより必ずagentがオーナーに特定されおる故、このように設定しおれば
agent==NULL_KEYであれば初REZ時にあたり、再スタート時と場合分けができることになりて決着。

本スクリプトの理屈は以上じゃが、利用される場合のカスタマイズ法について記し申す。
ポイントは2点、使用する表情の選択とアニメ切り替えスピードじゃ。
表情リストはスクリプトにて使える19全ての表情を含んでおる。
リストの上から下へ順番にアニメされるので、順番を変えるなら順序を入れ替えればよし。
一部だけをアニメーションさせるなら、上のリストでもなされているように//にてコメントアウトすれば、その表情は飛ばしてくれるのじゃ。
スクリプトでは「キス」と「舌出し」を表情が変になるのと話中に舌出し不要とみてコメントアウト致しておる例じゃ。
ここで気を付けねばならぬは、リストの最後の表情。
リストの間はカンマ(,)によって表情が区切られておるが、リストの最後にカンマは不要で、あればエラーとなってスクリプトのアップが出来んのじゃ。
よって、リスト最後の"express_worry_emote"を//"express_worry_emote"ようにコメントアウトすれば実行されるリストの最後に、残りおる表情後ろのカンマが入ることとなりエラーとなる故、リスト最後となる表情の後ろのカンマをもコメントアウトせねばなり申さぬ。
ワシもこのエラーで躓いたのじゃった。

表情アニメの切り替えスピードは
llSetTimerEvent(0.07);
の数字を実数にて変更すればよし。
例は0.7秒じゃが、1秒なら1.0、2秒なら2.0と実数表記が必要じゃ。

2秒、3秒と長ければ表情変更で話しおるようには見えづらいが、1秒以下になるとそれらしくなってくるぞよ。
0.3秒だと口の開きが少なく囁いておるようじゃ。
表情の組み合わせと切り替えスピードの使いようはそれぞれで確認されたし。

以上で口パクそのものについてはひと段落いたしたが、今度は実用的な機能を様々に実装致してHUDにまで仕上げるが課題。
まだまだ先は長そうじゃ。







  
Posted by rinsui Hax at 21:31Comments(0)TrackBack(0)SL スクリプト

2007年08月20日

スクリプト探索は構文を悟って切り抜けるのじゃ(口パク編)




ショップにてアニメパッドに興じる某(それがし)

昨日の表情切り替えテストにて、「アニメ中の表情をストップして次の表情を次々とアニメ致す。して、表情リスト最後をアニメ致せば最初の表情に戻って繰り返す」スクリプトを作成致し申した。
前の、同時実行アニメーションスクリプトを編集致したのじゃが、同時実行と順繰り実行では事情がちと違うらしく、最初の表情ばかり繰り返して次に進まないスクリプトを量産してしまったのじゃ。
万策尽きたやに思えしが、これをば切り抜けたのは「セカンドライフ公式ガイド」にてテクスチャを10秒ごとに変更する下の構文例を見出してのことであり申した。

integer i;

default
の//10秒ごとに画像を変更します
llSetTimerEvent(10.0);
}

timer()
{
 if(i<llGetInventryNumber(INVENTRY_TEXTURE))
   i++; 
 }
else
{
i=0;
}
//テクスチャをオブジェクトの”0”面に設定します
llSetTexture(llGetInventryName(INVENTRY_TEXTURE,i),0);
}
}

極基本的なタイマーイベントでのif・elfeの使い分けじゃが、6つある表情アニメリストの0番目(最初)がアニメされる場合とそれ以外の場合分けの構文スタイルに難儀しておったのに併せ、0番目をアニメするときにはリスト最後のアニメをストップすることになるが、その指定法にも苦しんでおったワシには天啓であったのじゃ。
表情リストインデックスを示す変数iをアニメスタートにして(i-1)がストップアニメの関係となるが、iが0(インデックス1番目)のときは(i-1)の-1では指定する表情がなく、この場合は表情リスト最後を指定してリピートアニメとなるようにせねばならん。
しかし、スクリプトスタート時には最初の表情がスタートするだけでストップする表情がないわけで、これにはどう対処すべきか?
構文への不案内と理屈整理のタッグに攻め立てられおったのじゃが、上の構文例の発見により「スクリプトの構成はこれでいけるハズ」と目途が付き、ようよう解決に向かったのじゃった。
スクリプトスタート時のストップアニメ問題は、if文の中ではなくその前のタイマー設置時にリスト最後の表情をスタートさせることで回避し申した。
その結果が昨日のスクリプトであるがストップ機構がない故、延々とループアニメしておって実用上よろしくありませぬ。
そこで、これにタッチによるスタート・ストップ機能をはめ込むが次なる課題であり申すが、これまた難関と見えまする。

ところが、意外なところより手がかりが現れたのでござる。
昨夜0時まで3日間に渡りkichijojiSIMの夏祭りがあり、当方もショップの協賛販売にて0L&セールを致しおったのは既報の通り。
祭りが終了致し、通常セールに戻るべくアニメパッドのスクリプトを開いて価格設定変更しおれば下のスクリプトが目に付き申した。

if(OpenedDialog == FALSE)
{
OpenedDialog = TRUE;
if(AllAnimNum < 13)
{
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList1, CHANNEL);
}
else if(AllAnimNum < 25)
{
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList2, CHANNEL);
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList1, CHANNEL);
}
else if(AllAnimNum < 37)
{
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList3, CHANNEL);
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList2, CHANNEL);
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList1, CHANNEL);
}
}
else
{
if(AnimNum < 12)
{
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList1, CHANNEL);
}
else if(AnimNum >= 12 && AnimNum < 24)
{
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList2, CHANNEL);
}
else if(AnimNum >= 24 && AnimNum < 36)
{
llDialog(id, "Right-click on the pedestal and \"Pay\" amount to purchase.", AnimList3, CHANNEL);
}
}

如何であろう。
何とも複雑な構成でござると感心しきりであったのじゃが、if・else文のif・elseそれぞれにif・else文が入れ子になっておることにハタと閃いたのござった。
「これを使えばタッチによるスタート・ストップの切り替えができるのでは!!?」
只今の表情連続スクリプトはif・else文構成になっておるが、これを更に上の構文にならって上位のif(アニメ時)文に現在のif・else分を放り込み、上位のelse(アニメストップ時)文にアニメストップ時の処理を振り分けるのでござる。
普段なら見過ごしておろうが、if・else文に悪戦苦闘しておった時に出会うた故の気づき。
これも天啓でござる。
やって見ねばわからぬが成功を祈念下され。

このアニメパッドは1L$で購入致して当方ショップでのアニメーション販売用に使いおるものじゃが、プレゼント・転売可能ゆえ0L&にてセールしおるので参考・実用に是非お持ち下され。




  
Posted by rinsui Hax at 20:32Comments(0)TrackBack(0)SL スクリプト

2007年08月20日

口パクスクリプト実験でござる




いよいよ口パク実験じゃが、昨日の表情より「あ・い・う・え・お・ん」にて使えるを選び出してそれらをタイマースクリプトで順繰りアニメーションさせてみ申す。

何度やってもスクリプトの修正ができないのでこちらのソースを見てください。
  
まずは単純に1秒ごとに表情アニメーションを順にスタート・ストップさせてみるでござる。
スクリプトは以下の通り。
オブジェクトをタッチすれば口パクを始め申すが、ストップ実装に至り得なかった故、面倒ながらスクリプトのリセットもしくは取り外しにて対応して下され。

記事写真の如く、左手首に素っ気もないキューブをアタッチしてのテストであるが、表情の連続アニメーションはOKでござった。
しかしながら、口パクの完成度については「あいうえおん」の発音に見えるとは言い難し。
話というより楽しげに歌っているかのようじゃ。
1秒ではすこぶる遅い故、タイマー感覚を早めてゆきても然り。
他にある表情と時間の組み合わせを探るが必要で、これは又の機会。
今回のテストでは0.3秒までが頃合で、0.2秒では口が開いたままに変化して話し言葉には不向きでござった。
皆様も様々に試されよ。

当初 if(i「KuchiPakuTest: Couldn't find animation」
のエラー(記事写真参照)が出て難儀いたした。
上のように-1と、もう一つ数を引かねばならなんだのじゃが大きく躓きてナカナカに起き上がれなかったのじゃ。
まだまだ未熟者でござる故、タッチによるスタート・ストップの切り替えにも至らず、これが次なる課題となってござる。
では、これにて。
  
Posted by rinsui Hax at 02:54Comments(0)TrackBack(0)SL スクリプト

2007年08月18日

手パターンひと段落にて次は口パク探索じゃ




Seagel殿のご指摘もあり、静止しおるT字ポーズに「手パターン」を設定致したパーツモーションをアップロード致し置いて、様々な腕の動きのジェスチャと自在に合成することは無理と分かり申した。
つまりは腕のパーツモーション毎に「手のパターン」を設定してアップロードせねばならぬということで、手間が掛かり自由度も無くなり申すが仕様上已む無しとひと段落付け、次なる「口パク」攻略へ突入致す。
これについてもSeagel殿のコメントにて

「口パクは表情を組み合わせて口の開く大きさを調節し、タイマーあるいはスリープで感覚を調整します。」

との手がかりを頂いており、まずは口パク利用に適当な表情を探索するが肝要。
これには、前の 「アバターの表情変更の謎が分かり申したぞ!!」記事にトラックバック頂いた「jinkoさんSL日記」に表情を順繰り変化させるスクリプトが記載されおるのでこれおば借用御免仕る。
各表情写真も記載されておるが、タイマーセットの時間確認の要もありチェックし申す。
スクリプトは以下の通り。

list lstSmileAnimations = [
    "",
    "express_afraid_emote",
    "express_anger_emote",
    "express_bored_emote",
    "express_cry_emote",
    "express_disdain",
    "express_embarrassed_emote",
    "express_frown",
    "express_kiss",
    "express_laugh_emote",
    "express_open_mouth",
    "express_repulsed_emote",
    "express_sad_emote",
    "express_shrug_emote",
    "express_smile",
    "express_surprise_emote",
    "express_tongue_out",
    "express_toothsmile",
    "express_wink_emote",
    "express_worry_emote"
];
integer iAnimeNo = 0;
string sAnimePlaying = "";
default {
    state_entry() {
        llSetTimerEvent(0);
        llSetColor(<1,0,0>, ALL_SIDES);
        llSetText("",<0,0,0>,0);
    }
    
    touch_start(integer total_number) {
        llSetTimerEvent(0);
        
        if (! (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION)) {
            llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
        }
        
        if (iAnimeNo < llGetListLength(lstSmileAnimations) - 1) {
            iAnimeNo += 1;
            llSetTimerEvent(5);
            llSetColor(<0,1,0>, ALL_SIDES);
            llSetText(
                "No."
                 + (string)iAnimeNo + ": "
                 + llList2String(lstSmileAnimations, iAnimeNo),
                <0.5,0,0>, 2.0
            );
        }
        else {
            iAnimeNo = 0;
            llSetTimerEvent(0);
            llSetColor(<1,0,0>, ALL_SIDES);
            llSetText("",<0,0,0>,0);
        }
    }
    timer() {
        if (sAnimePlaying != "")
            llStopAnimation(sAnimePlaying);
        if (iAnimeNo > 0) {
            sAnimePlaying = llList2String(lstSmileAnimations, iAnimeNo);
            llStartAnimation(sAnimePlaying);
        }
    }
}
このスクリプトをなにか適当なオブジェクトに入れて、じゃまにならないトコに装備すればテストできます。HUDでもいいかも知れませんが、ワタシは、背骨(spine)につけてみました。(jinnkoさん記事より)

チェックの結果は記事写真の通り。
感覚で母音と状況表現を入れて見申した。
これを元にスクリプトで口パクを表現できるように奮闘するのであるが、本日はここまで。



  

2007年08月17日

Seagel殿にご指摘頂いてTpose開眼!




ジェスチャ作成1フレーム目T字ポーズで不具合がありおった・・
の記事にて1フレーム目をTposeに致して左腕を上に振るアニメーションをアップロード致したところ、アップロード画面での普通立ち女性がだらりと下げた左腕を水平くらいまでにしか振ってくれない「不具合」を報告致したが、seagel殿よりコメントにて下のご指摘を受け申した。

はじめまして。
アップロード画面で普通立ちしているのは、ビルトインの立ちポーズが再生されている状態が示されています。
「第一フレームの位置から動いているところをモーションとして認識する」のですから、TPoseの位置からスタートするためには、スタートとなる第二フレームの左肩、左腕に微妙に動いたキーをふる必要があります。普通立ちが初期状態ではなく、スタート位置(第二フレーム)のキーがふられていないために普通立ちに上書きされてしまったものと思われます。
Posted by Seagel at 2007年08月17日 08:27

何と、アップロード画面の女性ジェスチャに上書きされるとは思わぬ事態であり申した。
早速Poserに先のBVHファイルを読み込み左肩のモーションをチェック致したら、2フレーム目から動いており申した。
うぬぬ・・・これは異なること・・
と固まってござるが肩の回転パラメーターは3つあるを思い至り確認いたしたら全フレーム静止したままのパラメーターがあり申した。
これをも動かす必要ありか?
と回転を付けBVHに書き出してアップロードを試みれば相変わらずのモーションであった・・・
う~~む・・・
肩が動きおれば子である上腕・下腕・手も全て動きおるのに何故?・・何故じゃ!!・・??・
・・・?・・??・・・・????・・??・?
!!!もしや上腕・下腕・手のパラメーターも全て動かさねばならんのか!?
とそれぞれ3つある回転パラメーターをチェックし、静止しているものを片っ端から動かして再々BVH書き出し~アップロード致したら、見事Tposeの位置から上へ手を振ったではござらんか!
上の写真がその証、Seagel殿今後ともご教授の程宜しくお願い仕り申す。


  

2007年08月17日

Tposeジェスチャアップロードにて手パターン獲得?




「シコもどき」アニメーションをPoserにて作成の図

左腕だけが動いておるパーツモーションを「お辞儀」と「満面の笑み」と同時実行してアニメーションを合成することに成功したが、その伝で、Tposeで静止しおる10フレームのBVHファイル(2フレームでは再生されずアップロードされなかった)を最高優先度4に設定して手のパターンを選択設定すれば、他のジェスチャと同時実行したときにTposeで設定した手のパターンで合成されるのではと考え申した。
早速、静止Tposeをアップロードすると再生されないではないか!
どうやら、1フレームと全く同一のままではダメらしい・・
左腕だけ動かしたパターンでいけたのじゃから、それでは左手首だけに分からない程の動きを付けて再度アップロードすれば?
と試せばOKじゃった。
喜び勇んで「Tpose(両手指差し)」「お辞儀」「満面の笑み」を同時実行すれば何と!「Tpose」は無視されて「お辞儀」と「満面の笑み」のみが同時実行されおった。
これで両手指を指しておれば狙い通りじゃがそうではなかったのじゃ。
う~~む・・・
実は、先ほどのTposeアップロードの再生画面でも選択した手パターンが再生されないトラブルが出ておったが、余りに動きの少ないパーツモーションではうまく合成されないようじゃ。
しかし、ワシが欲しいのはアップロ-ド時に選択した「手のパターン」のみであり、それだけを得たいがために静止ポーズにして最高優先度4に設定おるのじゃから手以外の動きを付けるわけにいかんのじゃ(やむなく妥協したけど)・・・
同時実行致す他のジェスチャやアニメーションに自由に「手のパターン」を付ける野望が・・・が・・が・

かような次第で「手のパターン」「瞬き」「口パク」の謎解明は頓挫しており申す。
表情同様スクリプトにて操作できると思うのじゃが未だ情報に行き当たらんのじゃ・・
手掛かりがあれば是非ご伝授下され。

たった今、吉祥寺ショップの「夏祭り協賛0L$セール」のセッティングを終え申したので是非お寄り下され。
新アニメーションとして「シコもどき」を2階のアニメパッドに入れましたぞよ。
  

2007年08月15日

吉祥寺夏祭り2007と協賛セールのお知らせでござる




ショップでお世話になっておる吉祥寺SIMで夏祭りを開くとのグループ連絡が入り申した。
ワシ共ショップオーナーへの「夏祭りの協賛出品のお願い」にて、出品内容は自由であるがプライスダウンもしくはフリーでとのこと。
即座に協賛を決めスタッフのRulid殿にIMを入れポスターを頂き、ショップに貼り申した。
急なことにて込み入った新製品の制作は難しかろうが、ともかく現在ある商品は期間中0L&にて協賛セールを行うことに致した。
先般制作致した20秒に及ぶ「格闘アニメーション」はスペース的に無理かと吉祥寺のショップには設置せなんだが、2階のスペースでOKなのでは?と思いつき確認したら収まったので、アニメパッドをこちらにも設置致し申した。
明日一日時間があるので、他に新作アニメーションを製作してアニメパッドに放り込もうと考えおる次第。
明日夜0時迄には0L&セールを開始致すのでこの機会に持っていってくだされ。

ショップへのテレポートリンクと案内・スケジュールは下の通り。

rinsui SL+ Making Shop ハモニカ横丁「は21」

このたびおかげさまを持ちまして、ハモニカ横丁「い」「ろ」「は」「に」の入居も満員御礼を迎えます。
これを機にKichijoji SIM の顔ともなる、このハモニカ横丁を活気づけ、そして人が訪れ、楽しみ、ワクワクする街にしていくために、この度「夏祭りイベント」を開催します。

メイン広場での盆踊りを中心に、井の頭の池で花火、野外音楽ステージではRL吉祥寺で活躍中のPlastic Soul Band の生ライブなど、夏の吉祥寺SIMを満喫してもらうプログラムでみなさまをお待ちしております。

更に来訪者へは無料でオリジナル浴衣をプレゼント!
「吉祥寺夏祭り2007」で一緒にKichijoji SIMを盛り上げましょう。
みなさまのご参加心よりお待ちしております。

▼日程 8月17日(金)~19日(日)

▼プログラム
17日(金)20:00- 打ち上げ花火(井の頭の池)
     20:00-24:00 盆踊り(メイン広場) 屋台あり
18日(土)20:00-22:00 Plastic Soul Band生ライブ(野外音楽ステージ)
     22:00-24:00 盆踊り(メイン広場) 屋台あり
19日(日)20:00-24:00 盆踊り(メイン広場)  屋台あり
      23:00- 打ち上げ花火フィナーレ(井の頭の池)

▼特典
3日間ともハモニカ横丁協賛店舗による、夏祭り特典商品あり。
来場者のみなさんには浴衣を無料でプレゼント




  
Posted by rinsui Hax at 23:34Comments(0)TrackBack(0)SL ショップ

2007年08月15日

タッチON・OFF付ジェスチャリングスクリプトへの道のり




3つのアニメーション同時実行の図

昨日はアニメーション合成HUD作成へ向けてのテストに際して判明致したアニメーション作成とアップロードにまつわる問題に触れたが、本日はその他のすったもんだとテスト用スクリプトについて。
テストの内容は、在庫目録に初期登録されておる「お辞儀」ジェスチャと、在庫目録には入っておらぬがジェスチャの表情で使われておる「express_toothsmile(満面の笑み)」、そして自作した左腕だけの振りアニメーション(パーツモーション)を同時実行してうまく合成されるか確認するものであった。
結果は記事写真の通りで成功であったのじゃが、これを実行するのにタッチすると3つのスクリプトを同時実行するジェスチャリング(写真右手首にアタッチしているリング)を使ったのじゃ。
写真とは違うて、始めは左手首にアタッチしておったのじゃが、アップロードした左腕振りアニメーション設定をループにしておったせいで何時までたっても手の振りが止まらんのじゃ。
リングのスクリプトはアニメーションの実行だけでストップ機能はなかったので、振りを止めるのにリングを右クリックしてアタッチを外さねば・・・・と思うもののクリックできおらんで焦ったワイワイ・・
クライアントを強制終了かと思い詰めたがアバターの右クリックから取り外すをたぐって事無きを得た・・・フ~ッ・・
これはいかん!、タッチでのON・OFF機能が必要じゃと思い知ったが、取り合えずはリングを右手にアタッチし直してその場しのぎに走り申した。
ループアニメーションをループ無し一回切り実行のものに変更してしのぐや?とも思いしが、今後登録するアニメーションはループも多用する故、やはりON・OFFは必要と判断し申した。
こうして機能実装に頭を悩ませ悩ませテストしては書き換える作業を5回6回と繰り返したどり着いたのが下のスクリプト。

default
{
state_entry()
{
state motion;
}
}

state motion
{

touch_start(integer detected)
{
llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);

}
run_time_permissions (integer perm){
if(perm & PERMISSION_TRIGGER_ANIMATION ){
llStartAnimation("la_basepose_furi");
llStartAnimation("express_toothsmile");
llStartAnimation("bow");

state nonmotion;
}
}
}

state nonmotion
{

touch_start(integer detected)
{
llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);

}
run_time_permissions (integer perm){
if(perm & PERMISSION_TRIGGER_ANIMATION ){
llStopAnimation("la_basepose_furi");
llStopAnimation("express_toothsmile");
llStopAnimation("bow");

state motion;
}
}
}

試行錯誤して分かったことじゃが、アニメーションをスタート・ストップするにはパーミッション取得が必要なところ、アタッチメントしているリングではパーミッション要求ダイアログが登場しない。
リングをアタッチしないで地面にREZ(在庫目録から地面にドラッグして出す)してタッチすればダイアログが現れるのとは動作が違うのじゃが、ということはアタッチしておれば常にパーミッションが取得される扱いになると考えられるのじゃ。
上のスクリプトはリングがアタッチされてパーミッションが常に自動取得される状況を念頭に置き、タッチする毎にステータスをmotionとnonmotionに切り替えてそれぞれでアニメーションのスタートとストップがなされる構造を取ったもの。
ようやくたどり着いた発想であったが、このスクリプトにて動作はするもののスタート・ストップが出来たり出来なんだりと不安定なのじゃ。

ここでスクリプト探索は一旦置き、HUD作成参考のためMIZ殿のブログより「プリム間通信」「HUD作成」「NOTEの使用」「リッスン」等の記事を再読しておったらアニメさせよう(スクリプト初級第十三回)に参考になるというかほぼそのままで使えるサンプルスクリプトがあることに気づき申した。
その発想は、「タッチすれば目的のアニメーションが実行されているかいないかを調べ、していればストップ、していなければスタート」でござった。
MIZ殿のスクリプトではアニメ-ションを一つだけ実行しているケースであった処、3つのアニメーションが実行されているケース用に修正いたしたのが下のスクリプト。
if ((chk_1 == llList2Key(anms, i))||(chk_2 == llList2Key(anms, i))||(chk_3 == llList2Key(anms, i)))
にて3つのアニメーションが実行されおるや否やを判定しおるが、ここで&&(且つ)ではなく||(又は)を使用するがミソでござる。
先述の如く腕振りはループ故、他の動作が終わっても実行され続けおるので、最初にタッチして3つが同時実行されし後は判定条件が&&なれば常にFALSEとなってアニメ実行のみ繰り返すこととなりストップしないのじゃ。
||であれば2つの実行が終了して腕振りだけが実行されおる場合にTRUEとなりストップが実行され申す。
この場合3つともストップしおるので、このときにタッチすれば判定がFALSEとなって3つが同時実行され目出度くスタート・ストップを繰り返してくれるのじゃ。
こスクリプトの説明はMIZ殿の記事に詳しいゆえ上のリンクより確認して下され。

string animation_name_1="la_basepose_furi";
string animation_name_2="express_toothsmile";
string animation_name_3="bow";
key agent = NULL_KEY;
default {
  touch_start(integer detected){
    if (agent == NULL_KEY) {
      agent = llDetectedKey(0);
      llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION);
    }
  }
  run_time_permissions(integer perm) {
    key perm_key = llGetPermissionsKey();
    if (perm_key == agent) {
      if (perm & PERMISSION_TRIGGER_ANIMATION){
      key chk_1 = llGetInventoryKey(animation_name_1);
key chk_2 = llGetInventoryKey(animation_name_2);
key chk_3 = llGetInventoryKey(animation_name_3);
        list anms = llGetAnimationList(agent);
        integer i;
        for (i = 0; i < llGetListLength(anms); i++){
          if ((chk_1 == llList2Key(anms, i))||(chk_2 == llList2Key(anms, i))||(chk_3 == llList2Key(anms, i))) {
            llStopAnimation(animation_name_1);
   llStopAnimation(animation_name_2);
   llStopAnimation(animation_name_3);
            agent = NULL_KEY;
            return;
          }
        }
        llStartAnimation(animation_name_1);
 llStartAnimation(animation_name_2);
 llStartAnimation(animation_name_3);
      }
      agent = NULL_KEY;
    }
  }
}
  
Posted by rinsui Hax at 00:58Comments(0)TrackBack(0)SL スクリプト

2007年08月14日

ジェスチャ作成1フレーム目T字ポーズで不具合がありおった・・




アップロード再生画面とPoser画面

プロフィールにマシニマ制作への関心を書いておるが、そのための便利ツールとして、表情や手の形だけでなく腕や足、頭部や胴体の部分ごとのモーション(パーツモーション)を組み合わせてオリジナル アニメーションを多様に作れる、アニメーション合成HUDを作れないかと思い立ち申した。
かなりの難物に思えるが、そのためのテストに、パーツモーションとして左腕だけ振っておるアニメーションをT字ポーズを第一フレームとして制作し申した。
左腕がアニメーションする以外、他の部分は第一フレームの位置から動かさない作り。
SLにアップロードされるジェスチャは第2フレームをスタートとするが、第一フレームの位置から動いているところをモーションとして認識する趣旨の記事を読んだ覚えがあった故、このように制作すれば動かした左腕以外はアニメーション無しと扱われるかと考えたのじゃ。
そうであればアップロード時の優先順位として最高の4を選択しておっても左腕以外の部分はアニメーション無と扱われ、同時実行させる他のジェスチャのアニメーションが適用されるハズ。
これがうまくいけば、足や胴体などのパーツモーションを同時実行してパーツモーションを組み合わせたアニメーションを作れるはずという仕組みじゃ。

在庫目録に初期登録されておるbow(お辞儀)の右クリック~開くによりジェスチャ作成画面を呼び出し、ここでアニメーションを追加してお辞儀の他、アップロード致したパーツモーションの左腕振りと表情の笑顔を同時実行させる設定に致し実行すれば狙い通り「笑いながら左腕を振ってお辞儀する」ジェスチャとなり申した。

パーツモーション発想がOK故アニメーション制作に励めばよいが、問題はスクリプト。
試行錯誤を重ねつつ暗中模索する他なしの覚悟でござる。

さて、アニメーションのアップロードにつき一点発覚した事態があるので記し申す。
Poserにて第一フレームをT字ポーズに致して作成したBVHファイルをアップロード画面にて再生致すと記事写真のようになったのでござる。 

Poserでは左腕を水平状態から上に振り上げるのであるがアップロード画面では下から水平の間にしか振っておらぬ。
察するところ、アップロード画面の女性の初期姿勢は両腕を下げた普通立ちしておるが、アップロードしたBVHによるモーション情報を、T字立ちではなくこの普通立ちの腕の位置を初期状態としたオッフセット(違い・変化)情報で処理しているのであろう。
このせいで、下にさげた手からスタートして水平くらいまでしか手をふってくれない。
第一フレームを普通立ちにして作りアップロードし直してOKじゃった。
T字立ちを第一フレームにするのは考え物のようじゃ・・・
  

2007年08月13日

20秒に及ぶ格闘長尺アニメーションをご覧あれ



ワンポイント的なジェスチャでは物足りのうて長尺アニメーションが欲しくなり申した。
どんなアニメを???・・
ハタと手が止まりおったが、そこで思い出されたのが学生時代の授業中、教科書にセッセと描いておったパラパラマンガであった。
マッチ棒のような線キャラの戦いを一冊の教科書に何作も書いておったものじゃ。
新たなページから前のページのキャラが透けて見え、オニオンスキンになっておったから動き具合を考えながらハイスピードで描き描きコ。
ほとんどが二人のキャラの戦いであった。
よし、それをやって見よう。
まずは一人でのシャドー格闘じゃが、後で相手のアニメーションを作ってアニメパッドを同時にスタートさせるとうまく戦いシーンとなれば面白そう。

ということで肩こりに圧(の)し掛かれられつつ239コマに及ぶアニメーションを仕上げたのじゃ。
フレームレートは毎秒12コマで約20秒、パンチキックを連発して飛び跳ねておるぞ。
アップロードしたのを観ると、Poserでの再生とスピード感やジャンプの高さ等が微妙に風囲気が違うが概ね再現されておる。
kakutou1が表示されているアニメパッドでTRY ON(お試し)出来るので是非ご覧あれ。
動く範囲が広くてkichijojiの店内では収まらんからアニメーション・フリースペース店(ここからGO)においており申す。





  

2007年08月12日

フリースペース出店とテレポート先URLコピー機能


kichijoji 上空にて

先日、アニメーション・フリーランドでのアニメクリエーター向け無料店舗の情報を紹介し、昨日の写真は「アニメーション・フリーランド」にて撮影したものを掲載し申した。
サーバーの不具合?にぶつかりグループ参加ができずショップ設営が行えなんだが、無事乗り越えての記念撮影じゃった。
ここにはスクリプトOKのsandboxがあり、ワシもよく利用しておった。
オーナー殿はクリエーターに協力しようとの志がお強く、この無料ショップも毎年3月に更新の方針で1年間ゆっくりと運営できるのじゃ。
一週間から3ヶ月位までの更新が多い中嬉しい限り。
皆様もアニメ作成されるなら是非参加されては如何?
ショップの表示物には英語表記が必須(日本語併記は可)であり、SIMにはカウンター毎に指定されおる外国語で話さねばならぬバーがいくつも設営されていたりと世界に眼を向けられてお