2012年12月30日日曜日

2012 Overview - まとめ

もうあと1日になっちゃった 2012 年ですが、各方面で「まとめ」的な投稿も多い中同じく個人的にまとめてみようかと思った次第でございます。

1. 念願の 上半身2-Chest 対応 MMDBVHToSLBVH を作成 & 公開

C# なんか触ったことありませんでしたが、まさに「仕方ない」のでやりました。でも、スライダーでダンス時間を変更するところはお友達にお願いしました(食事おごりでw)
詳しくはこちらを~w(MMDBVHToSLBVH のオリジナルコード作成のいちご先生からのコメントは嬉しかったです~)

http://snumaw.blogspot.jp/2012/09/chest.html

2. Blender 触った~、collada エクスポートするのに Avastar-1 買った~

やはり今の Secondlife で面白いのは mesh サポートですよね。何がどこまでできるか手探り状態ですが、MMD(MikuMikuDance) も Secondlife Mesh も基本は同じなので、とっても楽しくお勉強することができました。Blender も触ったことなかったのですが、使いはじめました。
調整があまいですが、MMD のモデルを Blender で読み込んで、Avastar-1 を使って Weight つけて collada に変換、Secondlife で踊らせてみた~の動画がこちらになります。



3. MLDU5+ 公開した~

正直いうと「自分が使えればいいじゃん」とつくった MMD 複数人対応のダンススクリプトですが、ハルちゃんや Kai さんが熱心に使っていただいたので、一般公開に踏み切りました   (><)。
公開した~の投稿は以下になります。

http://snumaw.blogspot.jp/2012/08/multi-motion-mldu5-55.html

あわせて MMD でのモーション作成者様にコンタクトをとり再配布の許可をいただいたり、いろいろと楽しませていただきましたw

4. SnuPoz+ も公開したった~

これも、、、一部のマニア向け(?) のフォーメーション スクリプトだったのですが、MLDU5+ で連携機能(ノートカード編集による起動)を追加したので、思い切って marketplace にあげました。一部コンパージョンで bug っていますが、私が思いもよらない使い方をしてくれるユーザーさんが増えてきたのはとてもうれしいことだと感じています。

http://snumaw.blogspot.jp/2012/07/snupoz-45-on-secondlife-marketplace.html

5. Secondife ダンス動画を結構作った~

MMD に比べると着せ替えはラクだし、背景やステージもインワールドにはいっぱいあるので動画作成はラクです。MMD からのモーション移植で曲に合わせるダンスが手元にあるのも大きな理由です。が、、、Secondlife での撮影と動画編集の限界みたいなものも感じたのも確かです、、、。特にカメラワークは難しいです。これ、なんとかしたなぁ、と思ったり。



6. 3DCG って面白いね、と再認識した~

たしかに Secondlife にインする時間が減ってるとおもいます。だけど、MikuMikuDance も 3DCG だし、WebGL なんかも 3DCG。考え方は一緒だし、結果つながるからとても楽しく遊んでるかも。MMD ではモデルのセットアップにトライしました。
こちらは9ヶ月かかってミクちゃんを MMD 用にセットアップした結果の動画です。



以下は WebGL、enchant.js、MMD on Web GL ライブラリー、jQuery その他 ネットで公開されている情報を参照させていただいて、ミクちゃんがおどる WebGL 作ってみた-になります。 IE/Safari はだめです。WebGLをサポートしている Chrome か FireFox でお楽しみください~。

http://snuma.com/mmd/index.html

・(右)左クリックでぐりぐり回転
・シフト+(右)左クリックで平行移動
・ホイールでズームイン・アウト
・F5のリロードでダンス最初から
・ブラウザのサイズに合わせて、モデルサイズ自動調整

JavaScript、、、LSLと一緒一緒と自分に暗示をかけてソースコード見てます><。

来年も楽しいことがいっぱいありますように。

2012年11月14日水曜日

No looped animation–secondlife vs. MMD

[Japanese follows English]

Sometimes people who tried MMD(MikuMikuDance) imported animation in secodlife said “Why these animations are not looped?”. Yes, almost all of secondlife dance animations are looped one so I understand your questions.

There is a big limitation of secondlife animation. All animations should be under 30 seconds for one animation. However mmd animations are not under 30 seconds therefore I should separate MMD motion into several dance motions for secondlife.

If I upload these separated motion files as “looped” animation, it will be so sensitive control to make sequencing dance with several motions by script. There are so many causes to delay script in-world. Therefore I also checked [loop] and use [In(%)] option.

 loopIn

This motion file will be looped motion as same as other secondlife dance animation but looping frame is the last frame only by In(%) 99.999 option. It will be just “looped pose” at the last frame.

Next dance animation will start from same pose, position and rotation. (to be exact, starting next frame in mmd motion) If you make sequencing dance order by dance HUD  notecard and set correctly play-time for each animation, you can see whole sequencing dance animation over 30 seconds in-world.

And it’s so important if you would like to dance over couple (like 3, 4, 5.. dancers) dance, you need to manipulate their positions and rotations.

Some guys say MLDU is couple dance HUD but I made MLDU5+ for not only couple dance but also multiple dancers as you like and if you have motions for multiple players.

Dance motion, avatar’s position and rotation can be described into MLDU5+ notecard for single motion, couple motion and more than couple. I would like to dance MMD dance motions in-world therefore this multiple avatars’ position and rotation control should be implemented in multi motion MLDU5+.

5 avatars MMD motion in-world [FREELY TOMORROW]

6 avatars MMD motion in-world [Maji Love 1000% by Miku Avatars]

To control avatar’s position and rotation, we need “sitting balls” rezzed from dance HUD or Balls. Like Intan provides sit balls for couple dance, MLDU5+ also rezzes sit balls for appropriate number of dancers.

Each sit ball has their own number. You can describe dance motion name, dancer’s position and rotation for the number. When avatar sits the ball, the avatar will dance and moving as you described in notecard.

If you are interested in how you can write the MLDU notecard, please see below.

10 FAQs of multi motion mldu5+ (part1)
10 FAQs of multi motion mldu5+ (part2)

Enjoy second life dancing!

multi motion mldu5+ in marketplace
https://marketplace.secondlife.com/stores/70251

[簡単な日本語]

配布している、MLDU5+に同梱している MMD 移植モーションですが、ときどき「ダンスアニメーションなのにループしてない?」という疑問を聞くことがあります。
セカンドライフのダンスモーションは30秒以下でなければならない、という制限があり、MMDのモーションは曲に合わせて2分や3分とあるので、分割しなければなりません。

分割したモーションをつなげて全モーションを踊る場合、もしひとつのモーションが他のセカンドライフのモーション同様に「ループ」すると、そのつなぎはとてもセンシティブになります。

そこでアップするMMDモーションは他のセカンドライフモーション同様に [ループ] のオプションを使いますが、ループイン(%)で 99.999 を指定します。これで、最後のフレームだけをポーズのようにループし続けるモーションになります。これならつなげやすいですよね。

また、MMDモーション、とくに2人以上、3人以上の場合はつなげるだけではだめで、ダンサーそれぞれの位置と向きが重要になります。これらをコントロールするためにカップルダンスで有名な Intan なども Sit ball を使うわけで、MLDU5+ も同様に Sit ボールでアバタ―の向きや位置をコントロールすることが可能です。

当ブログで過去にいろいろ紹介していますので、ご興味がある方は過去の投稿をご参考ください。

2012年11月11日日曜日

mesh–mmd motion-secondlife-dancing

最近 secondlife で rigged mesh の衣装が多くなってきましたね。
ボーンに追随する rigged mesh の衣装はダンスに最適ですね。

以下の動画は coldLogic さんのところの mesh 服でダンスしてますー。


rigged mesh の服はダンスを踊っても違和感が少ないのでとても気に入ってます。

coldLogic
official blog : http://coldlogic.wordpress.com/
marketplace: https://marketplace.secondlife.com/ja-JP/stores/103006
slurl: http://maps.secondlife.com/secondlife/Zyrra/74/115/23

こちらは Meli Imako さんのところの Tunic Dress と {mon tissu} Elie Spot さんのところの Sundress。いずれも rigged mesh です。

Meli ::Imako  
official blog: http://meliimako.com/
marketplace: https://marketplace.secondlife.com/stores/67299
{mon tissu}  
official blog: http://montissu.blogspot.jp/
marketplace: https://marketplace.secondlife.com/stores/72346

こちらは、GABRIEL さんところの rigged mesh (向かって左)と、スカルプのホットパンツ/ジャケット(右)。

ミニスカート系だと rigged mesh がきれいですよね。

GABRIEL
official blog: http://gabob.wordpress.com/category/gabriel/
slurl: http://maps.secondlife.com/secondlife/GABRIEL/128/127/23

2012年11月2日金曜日

Dance! Dance! Dance! in secondlife

ダンス楽しんでますか?

Spring Shower (春雨)


こちらの MMD モーションからお借りしました。

RAINBOW GIRL

こちらの MMD モーションからお借りしました。

mmd vmd –> bvh ツールの mio ですが、Python 2.6 系でないと動かないようです。
手順を書いた記事に追記しています。
http://snumaw.blogspot.jp/2012/03/windows7-64bit-mio-01-20123.html

良きセカンドライフ ダンスライフを~。

2012年9月30日日曜日

[LSL] ネギを投げるスクリプト

ネギを投げるスクリプト、、、ネギじゃなくても、モーションと組み合わせて「投げる」ということで結構苦労されている方も多いようなので、ひさしぶりに LSL の解説です。

で、みなさん苦労されているのは、いつもでてくる「グローバル座標軸」と「ローカル座標軸」、そして、アタッチしたときの軸の考え方、最後にダンス(アニメーション)中のアバタ―の向きの考え方が難しいのでは?と思います。

グローバルとローカル座標軸

グローバル座標軸とローカル座標軸の基本は以下の図になります。

グローバルローカル軸

これは、、OK ですね?

グローバル座標軸(東西)上で 1m 進むときのベクトル型の表現は <1.0, 0.0, 0.0> です。では、上の図のローカル座標軸(前後)で 1m 進むときのベクトル座標の表現はどうなるでしょう?
<1.0, 0.0, 0.0> としたいところですが、これではだめで、日本語で表現すると「今見ている方向の前に 1m 進むためには、東に X m、南に Y m、天に Z m 進む」としなければなりません。

えー、じゃー、ピタゴラスの定理を使って計算?ではありません。このような時の便利な関数が llRot2Fwd です。今向いている方向の前に1m進むためのグローバル座標軸上での移動距離を返してくれます。llRot2Fwd(今向いている方向) で 1m 前に進むためのベクトル型の数値を得ることができます。

では、今、向いている方向はどう取得するか、ということですが、それは llGetRot() になります。

なので、今向いている方向の前方に 1m 進むためのグローバル座標軸上の移動距離は

vector xv = llRot2Fwd(llGetRot());

でとれます。同様に今向いている方向の左右を yv、上下を zv とすると以下のようになります。

vector yv = llRot2Left(llGetRot());
vector zv = llRot2Up(llGetRot());

え? 50cm の場合は?うん、その場合は xv*0.5 でいいんですよ。3m の場合は xv*3 です。
前に1m、左に1m、上に1m の地点(targetV)までいくには、xv+yv+zv を移動すればいいわけです。

vector targetV = llRot2Fwd(llGetRot())+llRot2Left(llGetRot())+llRot2Up(llGetRot());

この長い targetV の式がポイントになります。

装着したオブジェクトとローテーション

ネギを投げるにはネギを「持って」いなければいけません。持つということは装着する、ということですが、スクリプトはその装着されたネギ(オブジェクト)に入ることになります。

すると、装着したオブジェクトの方向とアバタ―の方向は違ってきます。

装着軸

実線が装着したオブジェクトの前後左右上下軸で、破線がアバタ―の前後左右上下軸です。

装着したオブジェクト内のスクリプトでは両方のローテーションを取ることができます。

アバタ―の向き llGetRot()
オブジェクトの向き llGetLocalRot()

(正確に言うと、装着するオブジェクトが複数のプリムのリンクによって作成された場合は、ルートプリムか、子プリムかで変わりますが、まずは1プリム(もしくはスクリプトはルートプリムにしか入れない)をしっかりと理解しましょう)

イメージとしては、拳銃みたいなオブジェクトで、つねに銃身の向いている方向から弾丸を出したい、というような場合はオブジェクト(拳銃)の向きが重要ですよね。(あくまでイメージです。次のアニメーションの考え方を合わせないと投げるモーションや銃身から玉がでるスクリプトはうまくできませんよ)

アバタ―が向いている方向は、装着したオブジェクトの中から llGetRot() で取れる、と理解してくださいね。

ダンスをしている時のアバタ―/装着オブジェクトの向き

これが、、、落とし穴です。
ダンスをしていると、アバタ―が動きまわり、手にもったオブジェクトも動いているように見えます。でも、実はスクリプトから取れるアバタ―/オブジェクトの向きや位置はまったく変化していないのです。

うそーん?と思う方は以下の動画をご覧ください。3秒おきに llGetPos、llGetRot、llGetLocalPos、llGetLocalRot の数値をスクリプトが llOwnerSay で通知します。LocalPos や LocalRot は右手にもっているオブジェクトの既定装着場所からの相対的な位置・向きです。オブジェクトを持つ位置や向きはまったく変えていないのでゼロが並びます。llGetPos, llGetRot はアバタ―の位置と向きになりますよね。アバタ―が動けば変わるはず、、、、です。

アバターがダンスモーションで動き回っているのに、llGetPos() で取れる数値は踊っている時は <200.33750, 234.75000, 2495,57000> のままで、llGetRot() で取れる向きはゼロ(これは、常にゼロ、という意味ではなく、グローバル座標軸上で東を向いている状態です。向きが変わればゼロではありません)になっています。もちろん、ダンスを始める前、ダンスをやめた後で歩き回っている時の位置や向き(Z軸のみ)は変わっています。

ダンスを踊っている(モーションを再生している)時に動いているアバタ―って、ファントムのようにすり抜けるでしょ?実体はあくまでダンスを開始する直前の位置や向きのまま、モーションによってアバタ―が動いている「ように」見えている、とイメージしてください。なので、よく「ステージ上でダンスしているアバタ―をライトで追いかけるスクリプト」なんて話がでるのですが、ダンスしているアバタ―の位置は装着スクリプトなどでは取れないので簡単ではないのです。

相対位置からネギを投げる(REZする)

ではどうするか?ということですが、オブジェクトを投げる瞬間のアバタ―の位置もしくはオブジェクトが出現(REZ)される位置を、実体がいる場所からどのくらい離れているかを見つけるしかありません。実体との相対位置、相対角度は、実体がどんな位置にいようが、方向を向いていようが変りません。相対位置と角度がわかれば、「そのタイミング」でオブジェクトをREZ すればいい、ということですね。

相対位置と向きは、、、試行錯誤で見つけるしかありません。とはいえ、以下のようなスクリプトで相対位置と角度を探すことができます。

使い方:
・チャンネル 39 を使ったチャットコマンドです。もちろんソースから変更可能です。
・投げるオブジェクトを、スクリプトの入ったプリムのコンテンツフォルダーにいれます。(オブジェクトの属性は、物理属性でかつ一時にするとよいでしょう、、というか、してください)
プリムを装着して、/39 shoot でオブジェクトがでます。(物理設定されていれば、ポロン、、、と落ちますw。されていないとその場にとどまります。)
・上に飛ばしたい場合は /39 velz 10 といれると、ローカルのz軸(上下)の上方向に初速 10 m/s で rez されるように設定されます。/39 shoot で確認できます。
・前に飛ばしたい場合は /39 velx 10 といれます。前方かつ上方向の場合は /39 velz 10 のあとで、/39 velx 10 とすることで前方向と上方向を合成した「斜め前上」に向かって rez されます。
・位置は /39 posx 2 で前方向2m進んだ場所から rez される設定になります。/39 posx –2 で後ろに下がります。/39 posx -2 のあとで /39 posx –4 とすると、6m 下がった位置(-6)になります。posy や posz で左右、上下の調整が可能です。
・REZされるオブジェクトの向き(発射方向ではありません。REZされた瞬間のオブジェクトの向きです)は /39 rotz 10 などで z 軸で10度、という調整可能です。
・/39 info で設定している値を表示します。
・そのほかのコマンドもありますが、、、ソース見て下さいw
・最終的に相対位置と向きがきまったら、そのベクトル型の数値を 4行目の vector rezVel (投げ出す方向と速度)と 7行目の vector OFFSET に設定してあげると、/39 shoot だけで投げるようになります。
・ただし、以下のサンプルはエラー、例外処理がまったくありません。あくまで相対位置を探し、オブジェクトを発射するサンプルとして考えてくださいね。 

integer cmdChan = 39;
integer cmdHandle;
string rezObject = "";
vector rezVel;
vector rezRotV;
integer rezParam;
vector OFFSET;
default
{
    state_entry()
    {
        string s = llGetInventoryName(INVENTORY_OBJECT,0);
        if(s!=""){
            rezObject=s;
        }
        //オーナーの cmdChan のSayのみ
        cmdHandle = llListen(cmdChan,"",llGetOwner(),"");
        llListenControl(cmdHandle,TRUE);
    }
   
    attach(key id)
    {
        if(id!=NULL_KEY){
            llResetScript();
        }
    }

    listen(integer chan, string name, key id, string msg)
    {
        list t = llParseString2List(msg,[" "],[""]);
        string sCmd = llToUpper(llList2String(t,0));
        llOwnerSay("cmd:"+sCmd);
        if(sCmd=="SHOOT"){
            llOwnerSay(rezObject);
            if(rezObject!=""){
                llRezObject(rezObject,
                            //Position 投げ出す位置
                            llGetPos()+
                            llRot2Fwd(llGetRot())*OFFSET.x+
                            llRot2Left(llGetRot())*OFFSET.y+
                            llRot2Up(llGetRot())*OFFSET.z,
                            //Velocity 投げ出す方向と速度
                           //投げ出す方向とスピードはここの設定がポイント!!!

                            llRot2Fwd(llGetRot())*rezVel.x+
                            llRot2Left(llGetRot())*rezVel.y+
                            llRot2Up(llGetRot())*rezVel.z,
                            //Rotation 投げ出されるオブジェクトそのものの向き
                            llEuler2Rot(rezRotV)*llGetLocalRot(),
                            rezParam);
            }
            //実際に「投げる」場合はここに自分を消す関数をいれます。
            //複数プリムからなっている場合は llSetLinkPrimitiveParamsFast ですが、
            //プリムの「色」を複数使っている場合は message を使ってプリム間通信で
            //LINK されたプリムの表示・非表示をやります。単体なら llSetAlpha で。

//ここから下は微調整のためのスクリプト
        }else if(sCmd=="POSX"){
            OFFSET.x += llList2Float(t,1);
            llOwnerSay("NEW OFFSET:"+(string)OFFSET);
        }else if(sCmd=="POSY"){
            OFFSET.x += llList2Float(t,1);
            llOwnerSay("NEW OFFSET:"+(string)OFFSET);           
        }else if(sCmd=="POSZ"){
            OFFSET.x += llList2Float(t,1);
            llOwnerSay("NEW OFFSET:"+(string)OFFSET);           
        }else if(sCmd=="POS"){
            OFFSET = llList2Vector(t,1);
            llOwnerSay("NEW OFFSET:"+(string)OFFSET);           
        }else if(sCmd=="VELX"){
            rezVel.x += llList2Float(t,1);
            llOwnerSay("NEW VELOCITY:"+(string)rezVel);
        }else if(sCmd=="VELY"){
            rezVel.y += llList2Float(t,1);
            llOwnerSay("NEW VELOCITY:"+(string)rezVel);           
        }else if(sCmd=="VELZ"){
            rezVel.z += llList2Float(t,1);
            llOwnerSay("NEW VELOCITY:"+(string)rezVel);
        }else if(sCmd=="VEL"){
            rezVel = llList2Vector(t,1);
            llOwnerSay("NEW VELOCITY:"+(string)rezVel);
        }else if(sCmd=="ROTX"){
            rezRotV.x += llList2Float(t,1)*DEG_TO_RAD;
            llOwnerSay("NEW ROT-VECTOR:"+(string)rezRotV);
        }else if(sCmd=="ROTY"){
            rezRotV.y += llList2Float(t,1)*DEG_TO_RAD;
            llOwnerSay("NEW ROT-VECTOR:"+(string)rezRotV);           
        }else if(sCmd=="ROTZ"){
            rezRotV.z += llList2Float(t,1)*DEG_TO_RAD;
            llOwnerSay("NEW ROT-VECTOR:"+(string)rezRotV);           
        }else if(sCmd=="ROT"){
            rezRotV = llList2Vector(t,1)*DEG_TO_RAD;
            llOwnerSay("NEW ROT-VECTOR:"+(string)rezRotV);
        }else if(sCmd=="INFO"){
            llOwnerSay("Global Rot:"+(string)llRot2Euler(llGetRot())+", Local Rot:"+(string)llRot2Euler(llGetLocalRot()));
        }else if(sCmd=="TIMER"){
            if(llToUpper(llList2String(t,1))=="ON"){
                llSetTimerEvent(3.0);
                llOwnerSay("Timer On");
            }else{
                llSetTimerEvent(0.0);
                llOwnerSay("Timer Off");
            }
        }
    }
   
    timer()
    {
        llOwnerSay("llGetPos():"+(string)llGetPos()+",llGetRot():"+(string)(llRot2Euler(llGetRot())*RAD_TO_DEG));
        llOwnerSay("llGetLocalPos():"+(string)llGetLocalPos()+",llGetLocalRot():"+(string)(llRot2Euler(llGetLocalRot())*RAD_TO_DEG));
    }
}

位置、方向を決める長い llRot2Fwd, llRot2Left, llRot2Up と llGetRot の式は最終的には以下にまとめることができます。

//Position 投げ出す位置 の部分
llGetPos()+OFFSET*llGetRot();

//Velocity 投げ出す方向と速度 の部分
rezVel*llGetRot();

最後の仕上げは REZ するタイミング

こちらは前回のブログの記事をご覧いただければと思います。

mldu5.5+ のマクロでチャットコマンド

長くなりましたが、ご参考になれば幸いです~

[追記] 位置や回転(向き)をもっと理解したい~という方は、よろしければ過去に投稿した記事を参考にしてみてください。
[LSL] 位置と回転について (7回にわけて位置と回転について書いています)

2012年9月19日水曜日

上半身2ボーンと chest 対応変換などモーション変換について

以前の投稿で、MikuMikuDance のモーションで「上半身2」ボーンを使ったモーションの変換の話をご紹介しました。

http://snumaw.blogspot.jp/2012/03/secolife-avatar-pmd.html

当時よりちょっとだけ知識が増えたみたいなので、一度まとめてみようと思いました。

1) MMD のモーションを利用する場合は、、、まずは readme を読んでね

改造、利用、再配布条件などモーションを利用させていただくにあたり、大切なことが書かれているのは当然ですが、場合によっては特殊ボーン(標準モデルのボーンとは違うもの、、、と理解してください)についての記載があります。(無いこともありますw)

2) 特殊ボーンが使われていないか確認する

readme にはだいたい「XXXボーン必須のモーションです」という記述があるのですが、特に気を付けたほうがいい特殊ボーンは以下のようなものです。

・上半身2ボーン(これは以降ご紹介するツールで対応可能です)
・腕捩りボーン(左右腕、左右手)(ツールあり、、もしくはさらに手修正で対応可)
・すべての親ボーンやグルーブボーン (すべての親は影響ない場合もありますが、グルーブボーン必須の場合は、ちょっと雰囲気が違うモノになります。体全体でリズムをとるグルーブボーンの動きが変換されないからです。)
・腕IKボーン(変換はあきらめたほうがいいかも。mio で IK 計算できるかは試してません。)

readme に特に記述がなくても、一度、MikuMikuDance で vmd ファイルを読込んで確認したほうがいいです。その際には特殊ボーンがあらかじめ入っているモデルを使ってください。(腕IKは、、、さすがにかなり特殊なので readme にありますし、腕IKモデルは一般的ではありません。が、「うわぁ、すごいダンス!」というモーションで腕IK必須、というのがあるのも現実です)(追記:mio で「全ての親」ボーンがある PMD を使用すると bvh への変換がうまくいかないことが確認されています。全ての親ボーンが初期位置設定くらいしか使われていなければ、全ての親ボーンを無視していい場合がほとんどです。全ての親ボーンを使っていない PMD モデルを mio にて利用してみてくださいね。)

今回は特に「上半身2」ボーンと、腕の「捩りボーン」対策をご紹介します。

3) 上半身2ボーンは、セカンドライフのアバタ―の「chest」に相当します。その時は、、、

といっても、セカンドライフで QAvimator などを使って、ポーズを作ったことがないとさっぱり、、、かもしれません。

これまで一般に紹介してきた mio / MMDBVHToSLBVH では上半身2ボーンの対応モーション変換はできませんでした。MMDBVHToSLBVH が chest への回転データを作成しないことと、mio で「上半身2」ボーン入りのモデルを使わなくてはいけないこと、という2つの要素が重なります。

上半身2?chest ? そんなに違うの?と思われる方は以下の比較動画をご覧ください。

最近の MMD の秀逸なモーションは上半身2ボーン必須モーションが増えてきているので、これまでの MMDBVHToSLBVH では上半身が「暴れ」ます。MMDモデルの下半身ボーンと上半身ボーンは、MMDBVHToSLBVH では Secondlife モデルの「hip(腰)」と「abdomen(腹部)」に対応されます。(*1) これに加えて腰や腹部の動きと逆の動きを上半身2が対応する「chest(胸部)」で行うことで、胸より上の動きを抑えている、というモーションが結構あるからです。

(*1) 正確にいうと、MMDBVHToSLBVH で SL モデルの hip の動きは、MMD モデルの下半身ボーンとセンターボーンを合成させています。正確ではありませんでした。mio で変換された bvh の root と hip を合成しています。mio は MMD モデルのセンターを root に変換しているようです。

いまでも、、、ちょっとどころか、かなり自信が無いのですが、上半身2ボーン必須モーションも増えてきたので、私(とお友達)で esetomo 様が作られた MMDBVHToSLBVH を上半身2ボーン/Chest対応させたものを公開しました。(これをフォークして公開した、というようです。)

snumaw/MMDBVHToSLBVH
https://github.com/snumaw/MMDBVHToSLBVH

Readme は是非とも読んでいただきたいのですが、ツール(MMDBVHToSLBVH.exe)は、[MMDBVHToSLBVH.exe] のリンクをクリックすると、画面の上のほうに [View Raw] というリンクが出るので、それをクリックすればローカルへのダウンロードが始まります。

なお、このツールだけでは上半身2ボーン必須モーションは変換できません。何度も書きますが、mio で bvh に変換する時に使用するモデルに上半身2ボーンが入っていないとだめです。この点は注意してください。(モデル名の英語化も忘れずに!)

上半身2ボーン?確認の仕方がわからない、という人は MMD でモデルを読み込んで、左側のボーンリストを見てください。

同梱のあにまさ式ミクさんV2の場合
mmdbonecheck

人気のままま式GUMIさんの場合、上半身2ボーンがあります。
mmdbonecheck2

4) 腕・手の捩り(ねじり)ボーンを多用しているモーションは2つの対応方法

これは私も結構ハマるパターンです。mio/MMDBVHtoSLBVH で変換し Secondlife にあげてみると「コレジャナイ」感満載のモーションになります。

実はこの「星間飛行」のモーションは両腕捩ボーン、両手捩ボーンを多用したモーションでした。

動画は修正後のものですが、最初、secondlife にアップしてみて、、、、あれ?違う?と思い、MMD を立ち上げてオリジナルモーションを確認すると、、、上半身2はもちろん、捩ボーンを多用していました。

MMD001S

両腕・両手捩ボーンは標準モデルでもついているので使われてるケースは多いのですが、Secondlife に上げてしまうと手首から指にかけては正直相当アバウトなモーションになるので、極端に「肘が捩れている」場合や「腕の付け根が捩れている」場合でなければ気が付かない、もしくは無視しています。

ですが、今回は、どうみても別のモーションになっていました(涙
どのくらい別ものかは、後で、修正前、修正後のビデオでご紹介しますね。

このような場合は2つの方法で対応します。

a) 手作業で修正

星間飛行のモーション、よく見ると左手は常にマイクをもってあまり動きがなく、右手だけの修正で済みそう、、、と思い、実際動画のモーションは手作業で修正しました。

まず、捩りボーンのキーフレームをすべて無効化します。無効化の仕方はフレーム操作ボックスの下にあるフレーム数指定で 0~最後のフレーム で捩りボーンをドロップダウンから選択して、[範囲選択] ボタンを押します。それを繰り返して、すべての腕・手捩ボーンのキーフレームが選択された状態にします。

MMD002S

ここで、[フレーム編集] – [フレーム位置角度補正] という便利な機能を使って、すべての回転を無効にします。メニューバーから選ぶと以下のダイアログボックスが出るので、回転すべてに ゼロ を入れて [OK] を押せばいいんです。

MMD004

この状態が、secondlife にアップしてみた「コレジャナイ」モーションです。なので、もう1体モデルを読込み、同じモーションを読み込ませて、並べて見ながら、腕と肘の回転でだいたいあってる感じの回転を付与します。終わったら、モーションを保存して変換をかけることになります。

b) ツールで一気に修正

これは実は手作業した後で気が付いたのですが、MMD の姉妹ツール MikuMikuMoving 製作者の Mogg さんが便利なツールを1年以上も前に公開されていたんです。。。

VMD Motion Integrator
https://sites.google.com/site/moggproject/

以下、説明
--------------
VMD Motion Integrator
多段ボーン、捩りボーンのモーションを、元の1つのボーンモーションに統合するツールです。
これにより、多段/捩りボーンによるカスタムモデルのモーションを、他の通常モデルに適用することが可能になります。

下記のような感じで統合します。

- キーフレーム位置では補間曲線を使っていてもほぼ完全一致します
- キーフレーム間の補間では一致しないことがあります
- 捩りボーンは特にボーン構造が異なるため、多くの場合、動きが異なります。

* オリジナルファイルを上書きしてしまわないよう注意してください。
--------------

ね?簡単でしょ?。。。。。

とはいえ、そこはツールで一気に変換するわけで、モーション製作者があえて「捩りボーン」を利用している理由はあるわけです。最終的には目視による確認と手付による修正は必要、となります。でも、、、楽ですよね!

では、オリジナル(画面左)、捩りボーン無効(真ん中)、ツール変換で腕に統合(画面右) のモーションをお楽しみください、、、、

画面右の Mogg さんのツールモーションすごいですね。
一番いいのは Mogg さんツールで統合して、以下のような部分を手で修正かな~。

gumishoulder

ご参考になれば、、、(なるのかな?)幸いです~。

2012年9月16日日曜日

mldu5.5+ のマクロでチャットコマンド

こちらの動画で、mldu5.5 と MMD モーションで踊っていますが、今日の本題は「ねぎ」です(笑

この Ievan Polkka のために作りなれないネタ系スクリプトがんばったー><

ねぎの仕様は以下のようなものです。

・ 表示/非表示を左右の手もち状態で。
・ 投げることはできないので、llRezObject で速度をつけてねぎからねぎをRez
・ これらはチャットコマンドで操作可能

Ievan Polkka のモーションファイルは30秒ですが、mldu のマクロは以下のようなものです。

<Polkka MODE:SNUPOZ>
Polkka_1, 30.0, /3939 init
Polkka_2, 1.2
Polkka_2, 28.8, /3939 show left
Polkka_3, 3.8,  /3939 change
Polkka_3, 13.0, /3939 throw
</Polkka>

モーション開始前にねぎを両手にもっておきます。
最初のモーション Polkka_1 をはじめると同時に /3939 init で、右手のねぎ1本表示、左手のねぎは非表示にします。モーション時間は30秒です。
次のモーション Polkka_2 を 1.2 秒再生して、/3939 show left コマンドを発行、左手のねぎを表示します。そのときは残りのモーション 28.8 秒の再生指定になります。
最後のモーション Polkka_3 開始と同時に /3939 change コマンドで、左手のねぎを非表示にして、右手のねぎを2本表示にします。これで左手から右手にねぎをまとめたように見えます。3.8秒再生として、次のコマンド /3939 throw を発行、これで、右手のねぎを非表示にして、llRezObject でねぎ2本を上方向に速度をつけて rez します。のこり 13.0 秒の再生指定もします。

このマクロは MODE:SNUPOZ オプションで可能となる書き方です。

MODE:SNUPOZ は、フォーメーションシステムの SnuPoz 専用じゃなくて、上のようにチャットコマンドとの連動を可能にするもの、と考えると、もっと使い方の幅が広がると思いますよ~。

また、同じモーション指定を続けると、そのままモーションは動いたままで、通常モードだと Sit ボールに座ったアバターの向き・位置指定が可能になり、MODE: SNUPOZ だとチャットコマンドを発生させることができます。

このあたりの考え方は以前もご紹介しています。

タイトルが英語なので、、、、でも、同じモーションをつづけながらのコマンド指定の方法を説明しています。

http://snumaw.blogspot.jp/2012/07/mldu5-notecard-macro-tips-combination.html

ご参考になれば幸いです~。

2012年9月10日月曜日

パンダヒーロー モーション

パンダヒーロー セカンドライフで mmd モーション

マーケットプレースで 0L$ 購入可能になりました!
https://marketplace.secondlife.com/p/MMD-Panda-Hero-motion-files/3954144

根性P様によるモーショントレス、暴徒さん・けいたんさん踊りの「パンダヒーロー」です。
根性P様の読み物.txt( readme ですね )で、モーションの2次配布について、改変データ配布は OK ということ、その際の報告等も特に必要ありません、という条件なので、marketplace での 0 L$ 配布準備をしています。

根性P様のトレスによるパンダヒーロー

mio による vmd –> bvh および bvh –> slbvh の変換の過程で、MMD で動いているようにならない場合がいくつか発生します。また、モデルの体格差・構造の違いにより、どうしても secondlife の中でみると「ん~」となる部分もあります。

肩回りは常々問題となる構造の違いであり、secondlife での利用を考えると、極力、肩は動かさないように修正するのが無難です。また、MMDの「センター」と「左右足IK」との間隔が短くなると、どうしても足IKが「浮いてしまう」こともあります。(しゃがんだ時など)この場合は、センターを上に上げるか、試行錯誤で足を下げるなどの修正を行います。

今回はそれらの修正もしたうえで、「逆立ち」したときの手の位置がどうしても床に埋まるのを回避してみました。上の動画では 3分13秒あたりで RIN が逆立ちするところで、両手が床にかなり埋まっているのが確認できると思います。 (動画で使ったモーションは修正前です)
これを回避する修正をMMDでするとこんな感じです。

panda-gumi

センターと左右両足IKすべて選択して、Y軸(緑)方向の上に該当するキーフレームを上げてやります。試行錯誤でちょうどいい高さを選ぶしかないのですが、結構あがりますよね。

センターと両足 IKの位置と向きが決まると、途中のひざやふとももの根元の回転が決まります。MMD ではこれをリアルタイムに計算しています。めんどくさそうに思えますが、この 両足 IK のおかげで、MMD では床に設置するという動きを容易に作成できるように工夫されています。

MMD モーションを BVH にする際には、この IK から各関節(ひざ、大腿部付け根)の回転を計算しなくてはいけません。それをやっているのが mio です。mio の大きな役割は VMD という MMD モーションファイルを BVH に変換するときに IK 計算を行い、各関節の回転(向き)を算出しているのです。

そのとき、mio は secondlife でいう腰の位置、mmd でいうセンターの位置の変換も当然やっています。センター/IK の計算、モデルの構造(体格)の違いで、どうしてもこういう差がでちゃうんでしょうね。(私はさすがに mio のコード修正とか無理ですw)

mio では大腿部の長さや、すねの部分の長さから適切な関節部分の回転を割り出すので、どうしても参考とする「モデル」が必要となります。mio でモデルを読みこまなければいけない理由は IK の計算のため、ともいえます。読み込むモデルの体形が変われば、変換後の BVH の数値も変わるんですよ。

上の逆立ち修正をして VMD –> SLBVH した時の SS がこちら。

panda-miku

marketplace で無料(0L$)公開しました~
https://marketplace.secondlife.com/p/MMD-Panda-Hero-motion-files/3954144

2012年8月13日月曜日

multi motion mldu5+ (5.5+) 公開のお知らせ

昨日 8月12日(日)に新しい mldu5+ (5.5+) を marketplace で公開しました。

https://marketplace.secondlife.com/stores/70251

日本語版(Japanese)
mmmlud55 JA TRIAL

英語版(English)
mmmlud55 EN TRIAL

今回、同梱している README のノートカードを刷新しています。
はじめての人でも、とりあえず踊れる、ノートの編集ができるように構成しなおしました。

是非、mldu に慣れている人も、慣れていない人もお読みください。

mldu5+(5.5+)では、すでにご紹介しているようにノートカードのリモート更新機能を追加しています。正直、この機能追加のためにたった1か月で 5+ をひっこめた、、、といってもいいでしょう。

そのくらい、このノートカードリモート更新機能をみなさんに使ってもらいたかったし、私自身がこの機能をもっとも欲しかったのかもしれません。

ちょっと、、、リモート更新って安全?仕組みわからないと気持ち悪い、、、という方もいらっしゃるかと。そこでちょっと仕組みをご紹介します。

ノートカード リモート更新機能の仕組み

・EditBox は mldu の中のノートカードの「コピー」を持ちます。なので、EditBox を消しても、mldu のノートカードが消えることはありません。

・「コピー」を持つので、同じもの(EditBox)を何個も出すことが可能です。EditBox にコピーされたノートカードを編集し保存すると、保存されたノートカードで mldu の同じ名前のノートカードを置き換えます。

・ノートカードを置き換えるとき、乱数を使って同じ名前のノートカードの EditBox が複数あっても今処理しようとしているノートカードを「個別に認識」するようにしています。

・EditBox のノートカードの名前は変更できません。ノートカードの名前を変更するとメッセージが表示され、「本当の名前はこれ、、、名前を直すか、EditBox を出しなおして」とアドバイスします。

mldu の最初の初期化の時に EditBox との通信チャンネルをランダムに生成しています。mldu が複数その場にあっても多くの場合はチャンネルが違います。
さらに更新するたびに乱数を使ってキー交換するので、比較的チャットコマンドにありがちな「混線」発生の可能性は少なく、かつ、EditBox が沢山 rez されていても、違う箱のノートが mldu に送信される可能性はかなり少ないと思います。

ただし、この仕組みでやってはいけないことが1つあります。ほぼ、、、やる人は少ないと思いますが、注意として覚えておいてください。

・Editbox のノートを修正して保存する
・「本当に更新する?」のダイアログがでる
・ここで Editbox を削除する(やってはいけませんよ!
・Editbox を削除した上でダイアログの [OK] を押す

エラーはでません。mldu ではプレイリストを選んで踊ることもできます。ただし、前のノートカードの内容のものになります。

mldu のリセットをしたり、他のノートカードを更新したときにはじめて「Animation Xが見つからない」というエラーがでます。

これは、ダイアログで [OK] を押した時点で mldu は自分のフォルダーにあるノートカードを llRemoveInventory を使って削除します。削除して Editbox に向かって「新しいのをよこして~」と言います。ノートカード名と乱数のセットがマッチする EditBox が新しいノートカードを mldu に llGiveInventory を使って送るわけですが、EditBox がなければ送れませんよね。

こうなった場合は無くなったノートカードと同じ名前のものを用意して、直接 mldu のフォルダーに入れてください。(というか、そういうことないように気を付けてください。)

スクリプト的には llRemoveInventory による削除で CHANGE イベントの CHANGE_INVENTORY が動かない、ということを逆手にとってます。新しいノートカードを受け取った時だけ CHANGE イベントが走り、該当するスクリプトがリセットをかける仕組みです。(なので、やってはいけない方法ではリセットがかからないのでエラーがでないわけです)

将来的に llRemoveInventory によって CHANGE イベントが動くようになると、一度ノートカードが見つからない、というエラーになり、その直後に新しいノートカードが送られ、もう一度 CHANGE イベントが走り、スクリプトリセットが完了する、、、なんて動きになるかもしれません。

いろいろ例外処理とかチェックをいれて、ノートカードが無くなることがない、他のものに置き換わることがないようにしていますのでご安心ください。どうしても心配の場合はノートカードはフルパーですから、コピーをとっておくことをお勧めします。

2012年8月5日日曜日

mldu5+ リリースアップデートのお知らせ

Announcement of mldu5+ release update 
English follows Japanese

前回のブログでご紹介したように「ノートカード リモート更新機能」を追加した multi motion mldu5+ を近々に公開する予定です。バージョン変わらずで 5.5+ となりますが。。。
よりに MLDU シリーズはこれまで無料アップデートしてませんが、今回はバージョンアップではなく、リリースアップ(機能修正・不具合修正の部類)として置き換えますので、以前 MLDU5 をご購入くださいましたユーザー様には無償で配布いたします。ちょっとお時間かかるかもしれませんが(手作業。。。><)お待ちください。お試し版は、、ごめんなさい。勘弁してください ><。
そして、、、お試し版はこのリリースから「無料」にします!

5.5+ の修正・追加機能をまとめます~

ノートカード リモート更新機能

もうノートカード修正のためにコンテンツフォルダーが開くまでイライラしなくていいんですよ!
ほんと、アセットサーバーとプリムのコンテンツフォルダー(というかビューワーですが)の通信が弱くて、ちょっと名前かえたりするだけで、コンテンツフォルダーの開く時間が長くかかったり、ひどいときは「何もないよー」などというメッセージでイライラすることはありません!!!!

リモート更新でガンガン更新しちゃってください~
HUD モードでは使えません。mldu5+ を rez してリモート更新機能を使ってください。

[詳細設定] から [Note編集] を選べば、プレイリスト名のボタンが表示されます。
プレイリストのボタン(もしくはプレイリスト無効状態の [-Anim.X] ボタン)を押すと「EditBox」という名前の箱がアバターの足元に Rez されます。
EditBox にはノートカードとスクリプトの2つしか入っていません。なので、ノートカード編集ウィンドウはすぐに開きます。

ここでノートカードを修正して、ノートの保存を選ぶと以下の確認ダイアログがでます。

confirmdialog

ここで [OK] を押すと、mldu5+ のノートカードを EditBox で編集したものに置き換えます。ノートカードが置き換わると関連スクリプトの自動更新が走ります。

EditBox のノートカードは何度でも編集・保管が可能です。

ダンスグループ自動アサイン機能の改善

mldu5+ の特徴である複数ダンスを踊る機能は「ダンスグループ」で管理しています。ノートカードにアニメーションの書き方で danceA|danceB|danceC と書くと、ダンスグループ0に属しているアバターは danceA を、ダンスグループ1に属しているアバターは danceB を、ダンスグループ2 に属しているアバターは danceC を同じ開始タイミングで踊ります。

ダンスを踊るのに mldu5+ から rez する Sit ボールを使っていればあまり意識することはありませんが、Sit ボールを使わず、ダイアログメニューの[招待] から [検知] でアバターに直接ダンスを送信する場合は、明示的に所属するダンスグループを指定しなくてはなりません。

[自動] というボタンがあったのですが、、、これ、実は常に「ダンスグループ0」が指定されていました。これをそのときに設定されている最大ダンスグループ内で、もっとも数が少ない若い番号のダンスグループを [自動] でアサインするように変更しました。

これは Sit ボールを使わず、シンクロダンスを踊る時に「自動」を使い続けると、全員がグループ0にアサインされるので「時間差」に切り替えても時間差ダンスをしない、という状況を回避できます。

また、ダンスボールモードでゲストが mldu5+ にタッチしてダンスを開始する場合も「自動」モードでダンスグループをアサインします。

だれがどのダンスグループに所属しているかは [詳細設定] の [グループ表示] で確認できます。

テクスチャの新調

いあ、、、どうせテクスチャ変えるんだからいいでしょ?って思って手抜きした multi motion mldu5+ でしたが、、、それってどうなのよ?という暖かいアドバイスをお友達からいただきまして。。。。

ボールの場合はこんな感じ

mldu55

HUD も変えました

mldu5

お試し版の無料化と同梱ダンスの追加

いままで 1L$ でお試し版を提供していましたが、お試し版は 0L$ とします。
さらに作成者様から再配布許可をいただいたり、再配布可能になっている MikuMikuDance モーションの同梱数を多くしました。

1) Studio4D サンプルダンス プレイリスト(3つのモーション)
Studio4D Web ページ http://s4dda.blogspot.jp/
2) Nostalogic (MMD モーション 1人用)  のり様作
作者様ニコニコ動画 http://www.nicovideo.jp/watch/sm12968853
YouTube SLサンプル動画 http://www.youtube.com/watch?v=xEB9ooMx6i0
3) Perfume Global 配布モーション(perfume-global.com サイト配布 3人用)
BVH配布サイト http://www.perfume-global.com/
YouTube SLサンプル動画 http://www.youtube.com/watch?v=FEpo2QDYY-Q
4) ポーカーフェース(MMDモーション 4人用)あひる様作
作者様ニコニコ動画 http://www.nicovideo.jp/watch/sm16502322
YouTube SLサンプル動画 http://www.youtube.com/watch?v=R5D70AtikwQ
5) ヘビーローテーション(MMDモーション 5人用)Cruyff14 様作
作者様ニコニコ動画 http://www.nicovideo.jp/watch/sm15966770
YouTube SLサンプル動画 http://www.youtube.com/watch?v=rqHWQjTQgA4
6) マジLOVE1000%(MMDモーション 6人用)アガちん様作
    作者様ニコニコ動画 http://www.nicovideo.jp/watch/sm15838799
    YouTube SLサンプル動画 http://www.youtube.com/watch?v=D92rtxGwR3s
7) Wavefile(MMDモーション 1人用)hino様作
作者様ニコニコ動画 http://www.nicovideo.jp/watch/sm18065127
YouTube SLサンプル動画 http://www.youtube.com/watch?v=UMTIiYdYQBM
8) te-yut-te!(MMDモーション 1人用)つるかめ様作
作者様ニコニコ動画 公開中止
YouTube SLサンプル動画 http://www.youtube.com/watch?v=Mi2qvj8m7Bg

それぞれのノートカードにはモーションのクレジットおよびマクロ書き方のコメントをいれています。他のノートカード マクロを作る際の参考になるようにしました。

同梱しているモーションは私が MMD で若干のSL用の修正をした上で SL 用に変換していますので、セカンドライフでのモーションに関するお問い合わせなどはオリジナルの作者様にしないようにお願いします。

モーションのパーミッションは自分のフォルダー内ではコピー可ですが、譲渡は不可になります。mldu5+ 以外のダンス HUD で楽しみたい場合は、mldu5+ からモーションを抜いて(コピーして)利用可能になります。

また、お試し版の踊れるアバターの数は4人までとさせてください。
お試し版でも 6人用の MMD モーションおよび Sit ボールも 6人用を rez することが可能です。それぞれがどんなダンスを踊るかはダンスグループを選択、もしくは座る Sit ボールの番号で確認可能ですが、同時にダンスができるのは 4人までとさせてください。

逆に言うと、お試し版は踊れるアバターの数と管理できるプレイリストだけが少ないだけで、その他の機能には製品版とまったく違いがありません。

お試し版で確認して、6人用で35プレイリスト可能なものや、それ以上のアバターを踊らせるバージョンのご購入の検討を是非お願いします~。

不具合になりそうなコードの修正

- アニメーションをつなげたときのアニメーション存在チェックでアニメーション名の前後空白除去追加
(シングルアニメーションの場合は前後空白除去していました)
- 複数モーションの存在チェックのときに存在エラーが多い場合は途中で処理を中断する
(エラー表示によるメモリー消費のため、メモリー不足によるヒープ、スタックエラーが発生する可能性がありました)
- リモート更新機能導入による既存スクリプトの改変・修正

英語版と日本語版のスクリプトコードの同期

若干、、、、日本語版と英語版とではスクリプトの差異があったのですが、今回のリリースアップデートで日本語版、英語版ともにローカライズ以外は同じコードになりました。

新しい multi motion mldu5+ で Seconlife dance を楽しんでくださいね~。

***** English ******

I will publish new multi motion mldu5+(5.5+) on marketplace within a week. The new mldu5+ contains “Notecard Remote Update” and will give you efficient notecard macro editting soon. I didn’t provide free update of MLDU series however this new release is NOT version up therefore I will send new release of MLDU whom already purchased MLDU5/mlud5+ so far. Regarding to trial version, please get new trial version again. Godd news is new trial version will be free – 0L$.

Here is  the new functions of mldu5+(5.5) in the following.

Notecard Remote Update

You don’t need to wait a long time until opening content folder!!!
Remote update function gives you “EditBox” that includes Animations X notecard and update scrit file only. You can open Animations X notecard quickly from the EditBox and when you save notecard, Editbox sends and replaces notecard in mldu5+.

[ADVANCED] –> [NOTE EDIT]

Eng01

Eng02

You can see buttons of playlist.

Eng03

When you push button, mldu5+ rezes the EditBox that contains notecard playlist.

Eng04

EditBox has only Animations X notecard and one script. You can open and edit notecard without painfull waiting!!

Eng05

After editing notecard, push [Save] button on edit window, mldu5+ gives you the following confirmation dialog.

Eng06

When you push [OK], EditBox sends notecard to mldu5+ and mldu5+ try to replace it.
Also you can edit and save again and again with same Editbox.

Dance group Auto Assign – improved

In previous mldu5+, when you select [AUTO] in dance group assign dialog, dance group0 was always assigned.

Eng07

If you always use mldu sit ball, you don’t need to care this. However if you use [INVITE]-[SEARCH] or Dance Ball mode, group0 assign was not good solution.

In new mldu5+, If you select [AUTO], mldu finds dance group that has most less number of avatars within current max dance group.

This imporovement gives you the same usability of “Delayed dancing” until MLDU4.

New Texture

I thought that uses would replace mldu5 texture. However someone adviced me that default texture was important. I decided to apply new textures on mldu5+ as follows.

Dance Ball

mldu55

HUD

mldu5

Free trial version and new sample motions

Trial version will get free – 0L$ and up to 4 avatars.
I will add more sample dance animations – MMD Imported motions as follows.

1) Studio4D Sample dance motions - http://s4dda.blogspot.jp/
2) Nostalogic – MMD imoprted motions 
- NicoNicoDouga by original creator NORI-SAMA

- YouTube Secondlife Video http://www.youtube.com/watch?v=xEB9ooMx6i0
3) Perfume Global BVH motions – Official Site http://www.perfume-global.com/
- YouTube Secondlife Video http://www.youtube.com/watch?v=FEpo2QDYY-Q
4) POKERFACE – MMD imported motions
- NicoNicoDouga by original creator AHIRU-SAMA (@anatroccolo) 

YouTube Secondlife Video http://www.youtube.com/watch?v=R5D70AtikwQ
5) HEAVY ROTATION – MMD imported motions
- NicoNicoDouga by original creator Cruyff14-SAMA

YouTube Secondlife Video http://www.youtube.com/watch?v=rqHWQjTQgA4
6) MAJI LOVE 1000% – MMD imported motions 
- NicoNicoDouga by original creator AGACHIN-SAMA

YouTube Secondlife Vidoe http://www.youtube.com/watch?v=D92rtxGwR3s
7) Wavefile – MMD imported motions
- NicoNicoDouga by original creator hino-SAMA

YouTube Secondlife Video http://www.youtube.com/watch?v=UMTIiYdYQBM
8) te-yut-te! – MMD imported motions
- NicoNicoDouga by original creator TSURUKAME-SAM
NONE
YouTube Secondlife Video http://www.youtube.com/watch?v=Mi2qvj8m7Bg

Other remedies

- Animation checking – STRING_TRIM for multi motion animation name 
- Stop processing when too many animation checking errors occured
- Some remedies by adding Notecard Remote Update Function

Same code between En and Ja

Except localized strings/text, English version is same to Japanese one.

Enjoy secondlife dance life with new mldu5+!

2012年8月1日水曜日

mldu5+ ノートカード リモート更新機能追加の予定

ダンス楽しんでますか?

mldu5+ もお試し版はすでに 100 以上も marketplace から出ました。本当に感謝です。
mldu5+ は SL 用に移植した MikuMikuDance (シーケンスダンス - 複数の連続したダンス)やカップルダンス、グループダンスを 1 つの HUD で操作可能にしています。

ただ、、、mldu5+ からは管理できるプレイリストを35まで増やし、さらに再配布許可をいただいた MMDモーション/グループダンスを同梱しているので、初期状態からすでに mldu のコンテンツ(中身)フォルダーには 200 以上のアニメーションやスクリプト、ノートカードが入っています。

そうなるとプレイリスト ノートカードを更新するために、mldu のフォルダーを開いて、該当する(これも、、、最初はどのノートカード(Animation X)が、どのプレイリストかはなれてないとなかなかわからないはず、、、リセットメッセージでわかるのですが)ノートカードを開くのに時間がかかる、、、というのが私自身も含めて「なんとかならないの?」という最大の不満でした。

loading

試行錯誤でダンサーの位置や向きの調整をノートカードでやる場合は、位置や調整の数値の決定もさることながら、繰り返しで何度もノートカードを編集するには、別の mldu5+ を用意して、フォルダーのアニメーションやノートカードの数を最小限にして、、、、などという方法もありましたが、一般ユーザーにとっては「コンテンツフォルダーのスクリプトやノートカードを移動(削除)する」ってこわくてできませんよね。。。。

mldu5+ では「修正したノートカードと対象となるスクリプトのみをリセット」という機能を加えて、ノートカードの編集、確認の作業時間を短縮化する試みもしましたが、、、mldu のフォルダを開く時間はアニメが増えるとどんどん長くなる、、、、、><

で、、、2週間ほど前にスクリプトの神様降臨してくれましたw

現在テスト中ですが、ノートカードのリモート更新機能の追加です。
テスト中の画面と流れを紹介しますね。

[詳細設定] メニューに新しく [Note編集] ボタンが追加されます。

ノート編集
(CAUTION – THIS IS NOT MLDU5+. NOW TESTING MLDU5.5+)

[Note編集] を押すと、プレイリストボタンが表示されます。プレイリストが有効になっていない Animations X ノートカードは –Anim.X というボタン名になります。

ノート編集

ボタンを押すと、EditBox と呼ばれる「箱」が目の前に Rez されます。
その箱には押したボタンのプレイリストを含む Animations X ノートカード(のコピー)が入っています。

ノート編集2

EditBox にはたった2つのコンテンツしか入っていないので、コンテンツフォルダーの中身表示はすぐに完了して、ノートカード編集のウィンドウもすぐに開きます。

ノート編集3

ノートカードを編集して、ノートカード ウィンドウの [保存] ボタンを押すだけで、mldu5+ 本体側の同じ名前のノートカードを置き換えます。ノートカードが置き換わると、これまで同様の該当するスクリプトだけのスクリプト自動リセットが走ります。

アニメーション名の追加・削除、再生秒数変更、位置・回転の修正、プレイリストの無効化(プレイリスト名の前に // をつける)、プレイリスト名の変更など、通常のノートカード編集はすべて可能です。

この 一度 rez した Editbox は、mldu5+ のスクリプトを全リセットしても継続して利用可能です。でも、やっぱり編集したいときに新たに rez して作業することをお勧めします。ただし、複数の Editbox を出しても、同じノートの箱をだしても、近くに mldu5+ があっても、混線しない作りにしています。

なお、multi motion mldu5+ の6人用以上をご購入されたお客様には、この更新版(5.5+)を公開した時点でお送りいたします。機能的にはこの Editbox のみの追加となります。

お試し版の人は・・・お許しください>< また、お試し版をご購入ください(^^;

2012年7月27日金曜日

ume ちゃんが mldu5+ で動画を作ってくれました

うちの Second Life と違うのですけど(笑


Video streaming by Ustream

最近は SL ビューワーの Shader がかなり良くなってきたのと、グラフィックボートが5年前に比べて手に入りやすくなってきた、という状況になってきたので光と影の描画や DOF を使ったぼかしなどが手軽に試せるようになってきました。
といっても、さすがに ume ちゃんの動画レベルを撮ろうとなると、、、ゲームPCと呼ばれるカテゴリのハイスペックPCが必要になっちゃいますね。

うめちゃんのブログ
http://umesib.slmame.com/

光と影、被写界深度のぼかしに私も挑戦したのが以下の動画。

3Dマウス使わなかったのでカックカクなカメラワークですが、最近の Second Life もこのくらいまではできるようになった、、、ということでw

2012年7月24日火曜日

team Ä ・ S・ H @ DANCE QUEEN Dance Fes V と SnuPoz

(Sorry, this article doesn’t have English version so please try Google translate)

ハルちゃんKai さんも出演しているダンス インベント 「DANCE QUEEN Dance Festival V」が始まりましたね。世界各国の SL ダンサー、コレオグラファーが参加する一大イベントです。ハルちゃんの第1回ステージ、Kai さんの team ASH のステージはすでに終了していますが、YouTube に team ASH さんのショーケースが上がっていたのでご紹介です。

一番驚いたのは、team ASH の Lizu ちゃん。彼女のブログにも紹介されているのですが、今回初めて mldu5+ と SnuPoz を使ったショーケースに挑戦したんですけど、たぶん、、、2週間くらいしか準備期間(それも mldu / SnuPoz で初めて構成)なかったんじゃないかしら。

彼女が構成したダンスがこちら~

わずか2週間で、、、Kaiさんがそばにいるとはいえ、すごいわ。。。

mldu5+ は多機能すぎるのですべての機能をノートカードに書ききれていません。その中でも完全に割愛しているのが独立型フォーメーションシステムの SnuPoz との連携です。

SnuPoz は mldu とは全く別のスクリプトとして提供していました。元々は Club Zainモトちゃんから依頼されて作った、1にラグに強い、2にラグに強い、3にラグに強い(笑 フォメが欲しい、、ということから始まりました。なので、Huddles EZ 使いのモトちゃんは、Huddles 7個(だっけ?)と SnuPoz を使って Club でゲストに踊ってもらったり、イベントで使ったりしていたんです。

ということで mldu との連携は当初はまったくなかったのですが、Club Eflin では MLDU4 と SnuPoz を使ったショーケースを行うようになり、次第に MLDU と SnuPoz の組み合わせで使っていただくクラブが多くなってきました。ただし、MLDU の操作と SnuPoz の操作は別々に行う必要があります。

そして Kai さんが MLDU4 と SnuPoz の組み合わせをメインにイベントでのショーケースを行っていただくようになり、mldu5+ の開発の時に「SnuPoz との組み合わせできないかな、、、」と検討して、今回の mldu5+ になっています。

利用は簡単です。SnuPoz 側にはまったく変更はありません。mldu5+ のノートカードでダンスセット/プレイリスト名を記述する <> の中に MODE:SNUPOZ といれて、通常 XYZ の位置と回転を書くところに SnuPoz のコマンドを入れるだけ、、、なんですwww

<Sample MODE:SNUPOZ>
animA, 24.0, /123 x fomation base
animB|animA|AnimB, 20.0, /123 x fomation 1
animC, 22.0, /123 x formation 2
</Sample>

この MODE:SNUPOZ の指定で、llShout を使って指定されたチャットを mldu5+ が行ってくれます。SnuPoz だけじゃなくて、チャットコマンド対応のパーティクルやステージスクリプトなんかにも応用可能です。

もう1本ビデオを。Kai さん/teamASH によるステージ @ DANCE QUEEN Dance Fes V

このダンサーがのっかっている赤い円盤、、、これ SnuPoz を編集したものです。SnuPoz は外観編集が可能ですので、単純な Sit ボールとしてはもちろんですが、移動オブジェクトとしても使えます(というか、そういう使い方するんだ、、、と感心させられましたwww)

瞬間移動のフォメだと魅力半減ですが、いまの SnuPoz はスムース移動機能もついているので、上の動画だと後半の 3:40 あたりで「乗り物」のように移動してバックステージに消えていくのがわかるかと思います。あの動きを実現するのが SnuPoz スムース移動です。

SnuPoz Smooth Moving Function

いまの SnuPoz はコンバート機能がついています。一度セットしたフォーションを違う場所、違う SIM で使えるように、記憶している位置と向きを新しく Rez して設置した場所を元に計算しなおす機能です。ちょうど Kai さんがその使用感想をブログに書いてくださいました。

SnuPoz のフォメの設定ではノートカードは一切書かず、見た目で置いた場所を記憶します。そういう意味では mldu5+ でノートカードの数値調整をするよりはるかに直感的で設定が早いと思います。

唯一の欠点、、、というか連携しきれていないところは SnuPoz を使った場合は手動でダイアログからアバタ―にダンスを送らなければいけないところです。mldu5+ から rez する sit ボールは mldu5+ の子供なので連携可能、座るだけでダンス アニメーションを送りますが、SnuPoz は今のところできません。

mldu6 かなぁ、、、連携 。。。

2012年7月23日月曜日

mldu5+ notecard macro tips – combination of different dance time animations

(English follows Japanese)

mldu5+ でマルチモーション、マルチアバタ―でダンスを楽しめますが、mldu5+ では時間の違うダンスを楽しむための拡張をしています。

以下のようなノートカードになります。

<sample>
animA|animB, 12.0
animA|animC, 3.0
animD|animC, 6.0
animD|animE, 9.0
nothing|animE, 6.0
nothing|nothing,30.0
</sample>

ダンスグループ0のアバターは animA(15秒)>animD(12秒)>nothing(36秒) という順番で踊り、ダンスグループ1のアバタ―は animB(12秒)>animC(9秒)>animE(15秒)>nothing(30秒) という順番でダンスを踊ることができます。

このノートカードだけをみるとイメージしづらいと思うのでちょっとわかりやすくチャートにしたのが以下。

mutimotion1

mldu5+ では、現在踊っているダンスと同じ名前のアニメーション名が指定された場合は「無視する」という仕様にしています。それにより、animationA|animationB というダンス アニメーションの指定の仕方でも、再生時間の違うダンスを複数扱うことを可能にしています。

現実は、、、こういったノードカードを書くのは 2~3名が限界だとは思いますが、この記述方法でアニメーションと位置・回転を指定してあげると、それぞれのダンスグループのアバタ―を個別にダンス再生、位置・回転指定をすることが可能になります。

この方法は MaHal さんからのご要望を元に、シングルモーションとカップルモーションを組み合わせてショーケースを作るための拡張として mldu5+ に組み込みました。

ちょっと難しいけど、是非お試しください~

- English -

mldu5+ provides you multi motion/avatar functions and also has the extension to handle different time animations.

Here is a sample Animation X notecard.

<sample>
animA|animB, 12.0
animA|animC, 3.0
animD|animC, 6.0
animD|animE, 9.0
nothing|animE, 6.0
nothing|nothing,30.0
</sample>

The avatar of dance group 0 will dance animA(15.0sec)>animD(15.0sec)>nothing(36.0sec)、and the other avatar of dance group 1 will dance animB(12.0sec)>animC(9.0sec)>animE(15.0sec)>nothing(30.0sec) by the above playlist notecard.

It’s a little bit hard to make sense by only notecard therefore the following chart could help you to understand it.

mutimotion1

Because mldu5+ ignores same dance animation name if current dance animation is same to next dance animation. This specification enables us to manipulate different dance time animations by animationA|animationB description in notecard.

From a practical point of view, we can write such a notecard macro for two or three avatars. Howerver this notecard spec make us to control avatars motions, positions and rotations particulary.

MaHal, who is the best advisor for mldu5+, would like to  combine single dance and couple dance in her showcase. mldu5+ has finally this extension by her strong and valuable requests.

It’s a little bit complicated and not easy but please try it for your dance life!

2012年7月21日土曜日

10 FAQs of multi motion mldu5+ Part2

Here is the part2 FAQs of mldu5+. (日本語簡易版は文末にあります)
The following link is part1. If you don’t read it yet, please refer to this, too.
http://snumaw.blogspot.jp/2012/07/10-faqs-of-multi-motion-mldu5.html

1) When I deleted sample motions, I have Error!

mldu5+ always tried to check all animation files described in Animation notecard in script reseting.
The reason why you have error is that there is a notecard which includes deleted animation file names.

To find invalid notecad, please taka a look at reseting message carefully.

faq2-1

In red rectangle, you can see “Notecard Animation 2 . No specified animation in my folder. Please check typo, Upper/Lower case, blank/space charactor.: kashiyu_0” and so on.

If you delete “kasyuyu_0” animation file and don’t delete/comment out the motion file name, you have the above message.

Please delete/comment out the animation file name from appropriate notecard before you delete animation files in mldu5+ content folder.

2) How can I comment out animation files in playlist notecard?

If you would like to comment out the line, please place double slush “//” at the forefront of the line as follows;

<Perfume(3)>
aachan_0|kashiyu_0|nocchi_0, 30.0, 0|0|0, 1.5|0|-1.5
//aachan_1|kashiyu_1|nocchi_1, 30.0, 0|0|0, 1.5|0|-1.5
aachan_2|kashiyu_2|nocchi_2, 30.0, 0|0|0, 1.5|0|-1.5
aachan_3|kashiyu_3|nocchi_3, 30.0, 0|0|0, 1.5|0|-1.5
</Perfume(3)>

The above orange line will be ignored. It means aachan_1, kashiyu_1 and nocchi_1 motion files will not be checked by script.

3) I would like to have all dances ignored in a notecard...

Of course you can set “//” at the forefront of ALL line but I provides two ways as follows.

a) Place “//” at the forefront of a playlist name.

//<Perfume(3)>
aachan_0|kashiyu_0|nocchi_0, 30.0, 0|0|0, 1.5|0|-1.5
aachan_1|kashiyu_1|nocchi_1, 30.0, 0|0|0, 1.5|0|-1.5
aachan_2|kashiyu_2|nocchi_2, 30.0, 0|0|0, 1.5|0|-1.5
aachan_3|kashiyu_3|nocchi_3, 30.0, 0|0|0, 1.5|0|-1.5
</Perfume(3)>

Playlist “Perfume(3)” will be ignored therefore animation files in playlist will not be checked by script.

b) Delete all animation names in a notecard.

<Perfume(3)>
</Perfume(3)>

Playlist doesn’t have any animation files therefore the playlist will be ignored by script. 
Also playlist “Perfume(3)” will not appear as a playlist button label on dialog menu.

4) What’s limitaions of play time in a notecard?

You can set over 1.0 second playtime for a line as follows.

<sample>
animation01, 30.0
animation02, 1.0
animation03, 600.0
</sample>

If you set 0.5 seccond, the play time is ignored but no error message. When you play the playlist, mldu5+ uses a default playtime.

You can NOT set under 1.0 second playtime in a playlist notecard.

5) I can not set under 5.0 sec playtime on Time Setteing menu.

From dialog menu, you can use [Play –1 sec] or [Play +1 sec]. But mldu5+ doesn’t set under 5.0 sec as default playtime. You can see any time your default play time on dialog menu and check it.

faq2-2

If you would like to set under 5.0 seconds for dance, please describe a playtime for dance in a playlist notecard.

6) What is [Play 0 sec] and Dance Play Time:0sec?

Dance Play Time:0sec is special value. When you describe playtime for dance animations, mldu5+ does NOT use default play time. But If you set 0sec as default playtime, mldu5+ ignores notecard playtime. Only pushing [NextDance] or [PrevDance], mldu5+ changes dance animations in playlist notecard.

faq2-3

7) After saving notecard completely, I can not change dance by [NextDance] botton.

If you are playing the playlist and edit its notecard at the same time, you need to change playlist to other and back to again after updating playlist completely. Automatic update script replaces playlist memory therefore re-loading memory is needed.

8) I don’t use 35 playlists now and would like to shorten reset time. How can I do?

You can do it. BUT DON’T DELETE ANIMATION X NOTECARDS.

Please move SynchManager X script from mldu5+ content folder to your inventory.
If you would like to use 12 playlists, you move scripts as follows;

SynchManager       
SynchManager 1
SynchManager 2
SynchManager 3
-------
-------
SynchManager 8
SynchManager 9
SynchManager 10
SynchManager 11
SynchManager 12<--- MOVE TO INVENTORY
SynchManager 13<--- MOVE TO INVENTORY
-------                  <--- MOVE TO INVENTORY
-------                  <--- MOVE TO INVENTORY
SynchManager 33<--- MOVE TO INVENTORY
SynchManager 34<--- MOVE TO INVENTORY

After moving SynchManager scripts to your inventory, Please reset mldu5+ from [Advanced] – [RESET].

After reseting scripts completely, you can see 12 playlists buttons on dialog menu [PLAYLISTS].

9) I see no text in notecard window... What’s happened?

It might depends on Linden Server performance, sometimes we can see no text in notecard. Please close window and open notecard again.

10) In dance machine mode, I edit mldu5+ texture. But Texture is animated. What’s this? Can I stop it?

When you rez mldu5+ on a ground, mldu5+ is dance machine mode.
You can edit/add mldu5+ texture and color.

Default apprearance mode makes texture animated. If you don’t like texture animation, please click left mouse button over 5 seconds and release it. This operation makes texture animation ON/OFF.

(日本語簡易版 Simple Japanese Version)

1)サンプルのモーションを消してリセットしたらエラーになります
mldu5+はリセット時に Playlist ノートカードに書かれているモーションの存在チェックをします。いづれかのノートカードに消したモーション名があるためエラーになっています。
リセット時のメッセージには存在しないモーション名と、そのモーション名が書かれているノートカード名が表示されているので、メッセージを参照してノートカードを修正してください。

2)プレイリストノートカードのモーション(アニメーション)を無効にする方法は?
その行の先頭に // をつけると、その行が無効になります。

3)ノートカードのすべてのダンス(モーション)を無効にしたいのですが簡単な方法は?
<> で囲っているプレイリスト名の前に // をつけてください。
もしくは、以下のように <> のプレイリスト名を残して、ダンス記述を全部削除してください。

<Perfume(3)>
</Perfume(3)>

上記の例の場合はアニメーション記述がないため、 Perfume(3) のプレイリストそのものも無効になり、ダンス選択のボタンに表示されなくなります。

4)Play time (再生時間)の制限は?
プレイリスト ノートカードで指定できるのは 1.0 秒以上です。1.0秒未満は使用できません。
1.0秒未満を指定するとデフォルトの再生時間が使われます。

5)ダイアログから5秒未満の再生時間設定ができません
ダイアログで [再生 +1秒] [再生 -1秒] を使って5秒未満のデフォルト再生時間を設定することはできません。5秒未満の設定はノートカードで行うことができます。

6)間隔設定で再生時間0秒があるけど???
特殊な設定になります。再生時間 0秒を設定すると、ノートカードに再生時間の記述がある、なしにかかわらず、次のダンスを自動的に再生しなくなります。つまり、今のダンスを踊り続けるようになります。

7)問題なくノートカードの保存(とリセット)が完了したけど、[次のダンス] でダンスが変わらないのですが?
たぶん、現在踊っているプレイリストを編集したのだと思います。一度他のプレイリストに変えて、プレイリストを指定しなおせば、だいじょうぶです。

8)35のプレイリストはしばらく使わないので減らしたい、、、
日本語の説明がすでにあるので以下をご覧ください。
http://snumaw.blogspot.jp/2012/07/mldu5.html

9)ノートカード編集のウィンドウに文字がなく真っ白になってます。。。
日本語の説明がすでにあるので以下をご覧ください。
http://snumaw.blogspot.jp/2012/07/mldu5.html

10)Rezしてダンスマシンモードにしてテクスチャを変更したら、テクスチャアニメーションになってテクスチャが動いています。止められますか?
はい。止められます。マウスの左ボタンで5秒以上長押しをして離してください。テクスチャアニメーションが止まります。止める、動かくはこの繰り返しになります。

2012年7月18日水曜日

明るすぎる facelight への対応

たしかに 2007 年当時はシェーダー(わらかない人は、光、影のセカンドライフ ビューワー内の表現って考えてればいいかな?)もまだまだだったので facelight を付けないとアバタ―がきれいにならない、ということがありました。

最近はグラフィックボートの性能もあがり、それに対応してビューワーのシェーダーも改善されてきたので、あんまり facelight を使う機会は多くないと思います。Windlight での設定などで、facelight なしでもきれいに見えますし、逆にグラフィックの設定で影付きなんかを選んでいると facelight で「白とび」する場合も多くなりました。

今日、ひさしぶりに、すごい facelight (っていうか、その light オブジェクト、、透明にもなってないんですけど。。。)を付けてるアバタ―がいらっしゃいました。。。。

suzukisonoko

こういう場合は前にも紹介したことありますが、自分のビューワーで対応することが可能です。お友達なら「明るすぎるよ~」って言えますが、そうじゃないと、、、、ね。

英語メニューでごめんなさい。日本語だと「開発」タブから選びます。

DevelopRender

英語で [Render Attached Lights] のチェックをはずすと、装着されているライティング オブジェクト(ま、ほとんどは facelight ですが)の明かりを消すことができます~。

ご参考になれば幸いです~