« 2011年7月 | トップページ | 2011年9月 »

2011年8月

2011年8月27日 (土)

俺を縛り付けているのはいったい誰だ。

またもや急造のテキトーなスクリプトを載せますよ。




flagViewVis = true;
flagRendVis = true;
flagSelectable = true;
flagShowAllow = false;

var TheFuckingRestricters = XSIFactory.CreateObject( "XSI.Collection" );
for ( var i=0; i<Selection.count; i++ )
{
    var oOwners = Selection(i).Owners;
    for ( var j=0; j<oOwners.count; j++ )
    {
        var oO = oOwners(j);
        if ( oO.type == siGroupType || oO.type == "Partition" || oO.type == "Layer" )
        {
            IsThisGuyTheFuckingGuy = WhoTheFuckIsRestrictingMe( oO, flagViewVis, flagRendVis, flagSelectable, flagShowAllow );
            if ( IsThisGuyTheFuckingGuy )
            {
                TheFuckingRestricters.Add( oO );
                Logmessage(  Selection(i) + " を縛り付けている人 --> " + oO );
            }
        }
    }
}
if ( TheFuckingRestricters.count != 0 )
{
    SelectObj( TheFuckingRestricters );
    for ( var i=0; i<TheFuckingRestricters.count; i++ )
    {
        InspectObj( TheFuckingRestricters(i), null, null, siLock );
    }
}
else
{
    Logmessage( "誰もあなたを縛っていません。" );
}

function WhoTheFuckIsRestrictingMe( oOwner, flagViewVis, flagRendVis, flagSelectable, flagShowAllow )
{
    ResultTotal = 0;
    if ( flagViewVis )
    {   
        IsThisParamRestricting = CheckVis( oOwner.Viewvis.value, flagShowAllow );
      
//Logmessage( oOwner.Viewvis + " : " + oOwner.Viewvis.value  + " ---> " + IsThisParamRestricting );
        ResultTotal += IsThisParamRestricting;
    }

    if ( flagViewVis )
    {   
        IsThisParamRestricting = CheckVis( oOwner.Rendvis.value, flagShowAllow );
       
//Logmessage( oOwner.Rendvis + " : " + oOwner.Rendvis.value  + " ---> " + IsThisParamRestricting );
        ResultTotal += IsThisParamRestricting;
    }

    if ( flagSelectable )
    {   
        IsThisParamRestricting = CheckVis( oOwner.Selectability.value, flagShowAllow );
       
//Logmessage( oOwner.Selectability + " : " + oOwner.Selectability.value  + " ---> " + IsThisParamRestricting );
        ResultTotal += IsThisParamRestricting;
    }

    if ( ResultTotal != 0 )
    {
        return true;
    }
}

function CheckVis( VisVal, flagShowAllow )
{   
   
//    Show Members(Allow selectiong members ) の時も、反応
    if ( flagShowAllow == true )
    {
        if ( VisVal == 0 || VisVal == 1 )
        {
            return true;
        }
        else
        {
            return false;
        }
    }

  //    Hide Members(Do not allow selectiong members ) の時だけ反応
    else
    {
        if ( VisVal == 0 )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}



これもですね、ついにブチ切れて書きました系なんですがね。


View Visibility, Render Visibility, Selectability ってありますよね。 ビューポート上で見えているか否か、レンダされるか否か、ビューポート上で選択可能か否か。 各オブジェクトが持っているし、Group や Layer や Partition も持っている属性です。


ブツが Group, Layer, Partition に入っていてこの Visibility が上書きされていた場合、当然その  Group, Layer, Partition にたどりつかなければ変更はできないわけですが、自分で Group とかに入れたのならともかく、他人様からもらったデータだとこのオブジェクトがどの Group に入ってるのかとかわかんないじゃないですか。 それを調べるスクリプトです。




人からもらったデータで作業するときによくあるわけですが、例えばリギング済みのキャラクターで、ご丁寧にもジオメトリやデフォーマは選択不可の状態になっている。そりゃそうですね、アニメータが下手にいじれたら困りますもんね。 リグのコントローラだけが選択可能で、それ以外は選べなくしてあるわけです。これでいいのです。合理的です。


でも、何かの都合でジオメトリを選択しなければいけない時もあるわけですよ。 あるいは、アニメータとして作業する仕事ではなく、リグを改造するとか追加するとか、アニメーションセットアッパー的なタスクを請け負うこともあるわけです。 そんなとき、まずは選択可能にしたいのですが、オブジェクトのビジビリティのプロパティを見てみると、Selectability のアニメーションアイコンは水色の三角アイコンになっており、チェックボックスはグレーになって編集不可の状態になっています。つまり、Group か何かでロックされているわけですよ。 じゃあ、どの Group に所属しているんだ? というのを調べる所から始めねばなりません。



でも、大抵の場合、人からもらったデータって信じられないくらいわかりにくいですよね。 個人によってデータの整理方法が違うから、というのもありますが、場合によっては全く未整理だったり、同じ作品の複数キャラで整理方法のポリシーが違っていたり(Group分けの基準が違ったり)することもよくあるわけですよ。っていうかほとんどの場合、そうなのですよ。 自分の会社なりチームなりで作ったデータなら、整理を頼むとか整理ポリシーの修正を指示するとかできますが、クライアント様からもらったデータだとそうも行かない。 だから毎回、なんだこの汚いシーンはちゃんと整理しやがれそれが仕事を振る側の責任だお前それでもプロかこのクソ野郎  などと心の中でクライアント様へ罵倒の言葉を浴びせ続けながら仕事をしているのは内緒です。



こうなると Group を徹底的に探し出し、やっと Selectabiliy をロックしている Groupを見つけ出し、解除します。 すると・・・・・ まだ選択可能な状態になっていません。 どうやら複数の Group でロックされているようです。 アホか複数でロックするんじゃねえ選択可能不可能で Group 分けするならその目的だけの Group を1つだけ作りやがれ名前もそれと判るようにつけやがれ他のGroup には同じ役割を持たせるんじゃねえこのマゾ野郎 と更に罵倒は続きます。


やっと他の Group を探し出して解除すると・・・・。まだ選択可能な状態になっていません。 じゃあパーティションか? どうすんだよ Pass が10個とかに分かれちゃってるじゃねえかよ全部の Pass でパーティション見て行けってことかよこのハゲ野郎 と罵倒しながら全てのパーティションをチェックすると、どれもロックしていない。



あれ? と思って、ここでレイヤをチェックしていないことに気づき 6 を押したらレイヤがずらり。 
 
ええ~ こんなにレイヤ要るの~? Left と Right でレイヤ分ける意味あるのかよ~ 細かく分けりゃいいってもんじゃねえだろう無目的に分けるのは整理じゃねえよどういう運用方法を想定してるのかちゃんと注釈テキストくらい付けろよこのファック野郎 

などと、ほぼ丸一日罵倒を続けた挙句窓から遠投されるモニタの数は増え続けEIZOの営業さんは喜ぶし俺の筋肉は鍛えられます。




ということで、ビジビリティの主要3つのパラメータ View Visibility, Render Visibility, Selectability に関して、そのオブジェクトをロックしている Group, Layer, Partition を見つけようというのが、このスクリプトの役割です。


ブツを選んで実行します。複数を選んでもいいけど、複数だとわかりにくいので、まずは1つだけ選んで実行したほうがいいと思います。

すると、そのブツをロックしている Group, Layer, Partition が選択されます。また、スクリプトエディタ上にもログされます。見つかった Group, Layer, Partition の PPGも表示されます。 見つけちまえばこっちのもの、あとは自分でロックを解除して下さい。




スクリプト冒頭を書き換えると、挙動が変わります。

flagViewVis = true;
flagRendVis = true;
flagSelectable = true;
flagShowAllow = false;


現状このようになってますが、どれをチェック対象にするかをここで決めています。現在、ViewVis も RendVis も Selectable も、 true になってますね。

例えば ViewVis が true なら、ViewVis はチェック対象に入っているということです。 つまり ViewVis がハイドになっている Group, Layer, Partition を探しに行きます。 ここを false と書き換えると、ViewVis はチェック対象から外れるので、ViewVis がどうなっていようが関係なくなります。ブツが所属する Group, Layer, Partition で View Visibility がハイドになっていても無視するということです。

最後の flagShowAllow ってのは、Show members( Selectability の場合は Allow selecting members )の状態をどう見るか、のフラグです。 Visibility には、 No effect on members, Show members, Hide members の3つの状態がありますよね。 「ロック」という意味では、Show もロックなわけです。必ず表示する、という状態にロックしているわけですからね。 なのでこのフラグを true にしておくと、Show になっている Group, Layer, Partition もヒットします。 false にすると Show になっている Group, Layer, Partition はヒットしないので、Hide になっている Group, Layer, Partition だけを探そうとします。





同じような目的のスクリプトで、貴様、どのレイヤだ。 というのを以前載せました。 これは所属しているレイヤを探し出すためだけのスクリプトでしたが、今回のはレイヤだけでなくグループとパーティションも対象であり、かつ、ロックされているかどうかという条件で探すものになっていますね。

実は似たようなスクリプトはずっと以前から、いくつも書いてきています。よく使っているのは オーナーさん というスクリプトなのですが、これはまさに、そのオブジェクトが所属する Group Layer Partition を探し出すためのスクリプトです。 スクリプティング的に、所属する Group, Layer, Partition は Owners というプロパティからたどるので、オーナーさんと呼んでいます。 オーナーさんを探し出してスクリプトエディタにログするのが初期のバージョンで、現在はオーナーさんを XPOP にズラズラと表示するようになっています。 XPOP でその項目を選ぶと、オーナーさんが選択されるしくみになっています。 これに、オーナーさんの Visibility の状態が今どうなっているのかの表示を付け加えようと思っていたんですが、それをやる前に、単体でそういうスクリプトを書いてしまったというのが、今回のこのスクリプトです。 オーナーさんは個人的にはすごく便利なので、そのうちここにも載せます。

※Owners プロパティについてはこの記事に書いてましたね。この記事のスクリプトに、ビジビリティチェック機能を付けたようなものですね、今回のスクリプトは。




ということで、クライアント様におかれましては、超美しく整理されたデータを出して頂けるよう、何卒よろしくお願い致します。






久しぶりに曲行きましょう。



良すぎます。
この人と結婚したいです。
しばらくハマっています。
テイラーちゃん。俺は毎日あなたの歌を聴きながらつらいタスクも頑張ってこなしているよ。



それにしても、いちおうカントリーミュージックとして分類されることが多いテイラーさんですが、ううむ、この曲なんかは全然カントリーじゃないよなあ。

ま、でも、よく聴いてみると最近のカントリーって、通常の歌モノポップスとかロックミュージックとかに、バンジョーやマンドリンの音を足してるだけ、と言っても過言ではないかも知れません。あの金属的な響きが加わればもうそれでカントリー、あめりかーんな感じ、みたいな。

あとは歌のテーマや、歌詞に登場するアイテムかしら。 
家族愛とか、愛国主義とか、時にはアメリカ軍万歳とか、キリスト教とか、野球やアメフトなど庶民が好きなスポーツとか、ジャックダニエル、マルボロ、カウボーイハット、カウボーイブーツ、、レッドネックとトラクター、ピックアップトラック、工場で働くお父ちゃんがんばれとか、そんなキーワードが入ってればもうカントリー、みたいな。


日本で言う演歌みたいな感じなのかなあ。
カントリー良いですよ。
あんまりベタな古いカントリーじゃなくて、このテイラーちゃんみたいな現代風のやつが好きですけどね俺は。




.

| | コメント (0) | トラックバック (0)

2011年8月26日 (金)

女~るFcurve。

とりあえずバージョン1なんですが。





var oP = XSIFactory.CreateObject( "CustomProperty" );
oP.name = "女~るFcurve";
oP.AddParameter2( "iTimeScalePivotMode", siInt4, 1 );
oP.AddParameter2( "dTimeScalePivot", siDouble, 1 );
oP.AddParameter2( "dTimeScaleFactor", siDouble, 1 );
oP.AddParameter2( "iValueScalePivotMode", siInt4, 2 );
oP.AddParameter2( "dValueScalePivot", siDouble, 0 );
oP.AddParameter2( "dValueScaleFactor", siDouble, 1 );

var oL, oItem;
oL = oP.PPGLayout;
oItem = oL.AddButton( "Reset", "R   e   s   e   t" );
oItem.SetAttribute( siUICX, 310 );
oItem.SetAttribute( siUICY, 16 );

oL.AddRow();
    oL.AddGroup( "Time Scale" );
        var aArray = Array( "First key", 1, "Mid key", 2, "Last key", 3, "Specify pivot frame", 4 );
        oItem = oL.AddEnumControl( "iTimeScalePivotMode", aArray, "Time Pivot", siControlCombo );
        oItem = oL.AddItem( "dTimeScalePivot", "Pivot Frame" );
        oItem = oL.AddItem( "dTimeScaleFactor", "Time Scale" );
        oItem = oL.AddButton( "DoTimeScale", "時間女~る" );
        oItem.SetAttribute( siUICX, 0 );
    oL.EndGroup();
    oL.AddGroup( "Value Scale" );
        var aArray = Array( "Max value", 1, "Mid value", 2, "Min value", 3, "Specify pivot value", 4 );
        oItem = oL.AddEnumControl( "iValueScalePivotMode", aArray, "Value Pivot", siControlCombo );
        oItem = oL.AddItem( "dValueScalePivot", "Pivot Value" );
        oItem = oL.AddItem( "dValueScaleFactor", "Value Scale" );
        oItem = oL.AddButton( "DoValueScale", "値女~る" );
        oItem.SetAttribute( siUICX, 0 );
    oL.EndGroup();
oL.EndRow();

oL.Language = "JScript";
oL.Logic =    OnInit.toString()+
            iTimeScalePivotMode_OnChanged.toString()+
            iValueScalePivotMode_OnChanged.toString()+
            DoTimeScale_OnClicked.toString()+
            DoValueScale_OnClicked.toString()+
            Reset_OnClicked.toString();

function OnInit()
{
    iTimeScalePivotMode_OnChanged();
    iValueScalePivotMode_OnChanged();

}
function iTimeScalePivotMode_OnChanged()
{
    if ( PPG.iTimeScalePivotMode.value == 4 )
    {
        PPG.dTimeScalePivot.Readonly = false;
    }
    else
    {
        PPG.dTimeScalePivot.Readonly = true;
    }
}
function iValueScalePivotMode_OnChanged()
{
    if ( PPG.iValueScalePivotMode.value == 4 )
    {
        PPG.dValueScalePivot.Readonly = false;
    }
    else
    {
        PPG.dValueScalePivot.Readonly = true;
    }
}

function DoTimeScale_OnClicked()
{
    var oFcurves = FcurveSelection;   
//    現在選ばれているFカーブを取得
    if ( oFcurves.count != 0 )
    {   
        for ( var i=0; i<oFcurves.count; i++ )
        {
            var oFcurve = oFcurves(i);

            if ( PPG.iTimeScalePivotMode == 1 )
            {
                ScalePivotFrame = oFcurve.GetMinKeyFrame();
//最初のキーがピボット
            }
            else if ( PPG.iTimeScalePivotMode == 2 )
            {
                ScalePivotFrame = oFcurve.GetMidKeyFrame();
//真ん中のキーがピボット
            }
            else if ( PPG.iTimeScalePivotMode == 3 )
            {
                ScalePivotFrame = oFcurve.GetMaxKeyFrame();
//最後のキーがピボット
            }
            else if ( PPG.iTimeScalePivotMode == 4 )
            {
                ScalePivotFrame = PPG.dTimeScalePivot.value;
//指定したフレームがピボット
            }

    //    Fカーブスケールを実行
            oFcurve.BeginEdit();
            oFcurve.Scale( PPG.dTimeScaleFactor.value, 1, ScalePivotFrame, null );
            oFcurve.EndEdit();
        }
    }
    else
    {
        Logmessage( "No fuckin Fcurves selected.", siError );
    }
}

function DoValueScale_OnClicked()
{
    var oFcurves = FcurveSelection;
    if ( oFcurves.count != 0 )
    {   
        for ( var i=0; i<oFcurves.count; i++ )
        {
            var oFcurve = oFcurves(i);

            if ( PPG.iValueScalePivotMode == 1 )
            {
                ScalePivotValue = oFcurve.GetMaxKeyValue();
//最大値キーがピボット
            }
            else if ( PPG.iValueScalePivotMode == 2 )
            {
                ScalePivotValue = oFcurve.GetMidKeyValue();/
/真ん中キーがピボット
            }
            else if ( PPG.iValueScalePivotMode == 3 )
            {
                ScalePivotValue = oFcurve.GetMinKeyValue();
//最小値キーがピボット
            }
            else if ( PPG.iValueScalePivotMode == 4 )
            {
                ScalePivotValue = PPG.dValueScalePivot.value;
//指定した値がピボット
            }

            oFcurve.BeginEdit();
            oFcurve.Scale( 1, PPG.dValueScaleFactor.value, null, ScalePivotValue );   
            oFcurve.EndEdit();
        }
    }
    else
    {
        Logmessage( "No fuckin Fcurves selected.", siError );
    }
}

function Reset_OnClicked()
{
    PPG.dTimeScaleFactor.value = 1;
    PPG.dValueScaleFactor.value = 1;
}

InspectObj( oP, null, null, siLock );





Fカーブをスケールするツールです。

Scalefcurve

数値を入力してスケールしたいとか、ひとつの基点ではなくFカーブそれぞれの中間値を基点にスケールしたいとか、そういうことをするために書いてみたんですがね。


実行すると PPG が現れます。
いくつでもいいのでFカーブを選択します。
時間スケール、値スケールの基点やスケール値を決めて、ボタンを押します。
するとFカーブにスケールがかかります。

基点にグローバルな値、つまり全てのFカーブに共通のひとつの基点を与えたい時は、ドロップダウンメニューで Specify を選ぶと、グレー表示だった部分が入力できるようになって、任意の値を決められます。

これ以外のモードでは、各Fカーブから値をゲットします。 サイクル周期や、値変動のレンジが全然違う複数のFカーブに対して、それぞれのFカーブの基点でスケールすることがそもそものこのツールの目的でした。





問題はですね、
自動でアップデートされないのですよ。
つまり、実行後、画面は何も変化がないように見えるのです。
ビューポート上のオブジェクトはそのまんま。
Fカーブエディタ上のFカーブもそのまんま。


次のフレームに移動するなど、刺激を与えてやればビューポートはリフレッシュされます。 Fカーブは、Fカーブエディタのアップデートボタンを押せば、ちゃんと実行後の状態が反映されて表示されます。


自動じゃないのが気に食わないですね。
どうやったらいいのかわかりません。
Fカーブに変更を与えた後に、Refresh や SceneRefresh を実行するようなスクリプトにしてみても、アップデートされせんでした。 現状、上記のように、手で刺激を与えてやるしかない。


ということで、どなたか教えて下さい。スクリプトからFカーブをいじった後、ビューポートやFカーブエディタが自動で変更後の状態にリフレッシュされる方法をご存知のお方、教えて下さい。




.ではごきげんよう。




.

| | コメント (9) | トラックバック (0)

2011年8月22日 (月)

対象複製同時名前健作痴漢。

ぶしつけにスクリプトを載せる。

とうとうブチ切れて急いで書きました系。




//名前変換ルール
SearchL1 = "L_";
SearchL2 = "_L";
SearchR1 = "R_";
SearchR2 = "_R";

ReplaceL1 = "R_";
ReplaceL2 = "_R";
ReplaceR1 = "L_";
ReplaceR2 = "_L";


// 相変わらずよく分からないまま使う正規表現
var RE_L1 = new RegExp( SearchL1, "gi" );
var RE_L2 = new RegExp( SearchL2, "gi" );
var RE_R1 = new RegExp( SearchR1, "gi" );
var RE_R2 = new RegExp( SearchR2, "gi" );

//性器表現ならもちろんよく ry


var oObjects = FilterX3D( Selection );   
//    変なもの(3Dオブジェクト以外)をはじく
if ( oObjects.count != 0 )
{
   
//  名前置換の元にするので複製元のオブジェクトを格納しておく
    var oSourceNodes = XSIFactory.CreateObject( "XSI.Collection" );
    for ( var i=0; i<oObjects.count; i++ )
    {
        oSourceNodes.Add( oObjects(i) );
        oSourceNodes.AddItems( oObjects(i).FindChildren() );
    }


//    デバッグ用
//    for ( var i=0; i<oSourceNodes.count; i++ )
//    {   
//        Logmessage( i + " - " + oSourceNodes(i) );
//    }
//    Logmessage( "----" );



    var oDups = DuplicateSymmetry( oObjects, null, true, 1, 0, 0, 0, null);   
//俺様設定で複製実行

    //複製されたブツを格納しておく 複製元と格納順が同じである(らしい)性質を利用している
    var oTargetNodes = XSIFactory.CreateObject( "XSI.Collection" );
    for ( var i=0; i<oDups.count; i++ )
    {
        oTargetNodes.Add( oDups(i) );
        oTargetNodes.AddItems(  oDups(i).FindChildren() );
    }


    //    複製ブツをループして、置換ルールに一致すれば置換する  複製元と格納順が同じだからこそ可能
    for ( var i=0; i<oTargetNodes.count; i++ )
    {   
        OriginalName = oTargetNodes(i).name;
        if ( OriginalName.match( RE_L1 ) )
        {
            oTargetNodes(i).name = oSourceNodes(i).name.replace( RE_L1, ReplaceL1 );
        }
        else if (  OriginalName.match( RE_L2 ) )
        {
            oTargetNodes(i).name = oSourceNodes(i).name.replace( RE_L2, ReplaceL2 );
        }
       
        else if ( OriginalName.match( RE_R1 ) )
        {
            oTargetNodes(i).name = oSourceNodes(i).name.replace( RE_R1, ReplaceR1 );
        }
        else if (  OriginalName.match( RE_R2 ) )
        {
            oTargetNodes(i).name = oSourceNodes(i).name.replace( RE_R2, ReplaceR2 );
        }

       
       
//logmessage( i + " - " + oTargetNodes(i).name )       
    }
}



// 3Dオブジェクト以外をはじくファンクション

function FilterX3D( in_Objs )
{
    var oCol = XSIFactory.CreateObject( "XSI.Collection" );
    for ( var i=0; i<in_Objs.count; i++ )
    {
        if ( in_Objs(i).IsClassOf( siX3DObjectID ) )
        {
            oCol.Add( in_Objs(i) );
        }
    }
    return oCol;
}
 



Duplicate Symmetry するときに、名前の L_ とか _LR_ とか _R に勝手にリネームするスクリプトです。 シンメトリに複製するんだから、L と R の名前の書き換えとかよく発生するじゃないですか。 標準機能で欲しいなあ。



通常の Duplicate Symmetry を実行した時に出てくる PPG は出てきません。 俺様設定で有無を言わさずシンメトリ複製します。 スクリプトを書き換えてオプションを変えるしかありません。 L R の名前の変換ルールも、スクリプト冒頭部分を手で書き換えるしかありません。

また、名前の中に同じパターンが出てきたら全部置換してしまうので、例えば L_arm_Link などという名前のオブジェクトは R_arm_Rink になってしまうと思われます。冒頭や末尾だけの場合に反応するだとか、そういう高級なこともしていません。





使い勝手が良くて今後も使いそうだと思った場合のみ、様々なオプションを変えられる PPG を付けたり、置換がもう少し便利にならないか改良してみたりするわけです。






っていうか、すでにこういう機能のスクリプトがどこかに存在していたような気もする。






ごきげんよう。



.

| | コメント (4) | トラックバック (0)

2011年8月14日 (日)

第2次XSI男Tシャツ発送しますた。

お待たせしてほんとすみません。


先日発送したので、そろそろ届き始めていると思います。
Img_0049

で、2次募集を締め切った後に、さらに欲しいという人が出てきまして。
なので、やります。 3次募集やりますよ。


ただ、10枚を越えないとかなりコストがかかってしまいます。できれば注文が10枚たまるまで待ちたいところです。 また、版の保存期間が過ぎてしまったので、版の作り直しにまたコストがかかると思います。 まあ、販売価格の3500円は変えないと思います。 その分寄付額が減ってしまうわけですが、かと言って4000円も5000円もするTシャツじゃ多くの人が買ってくれず、そうなると福島に行くお金はかえって減ることになるので逆効果です。


諸般の事情により、3次募集は8月20日くらいから始めると思います。
少しお待ちくださいませ。




スペイン人のミケルも買ってくれたから、SHED で宣伝してくれないかなあ。 サンフランシスコのアドビ本社に勤める友人(日本人)も買ってくれたので、アドビ王国にも切り込みましょう。 世界中を XSI 男で埋め尽くしましょう。



.

| | コメント (0) | トラックバック (0)

2011年8月13日 (土)

みける祭り2。

陽気なスペイン野郎、ミケル君と吞んで来ましたよ。
http://www.akaosaru.com/


まず集合で笑かしてくれました。
渋谷の待ち合わせ場所に行ってみると、なにやらガイジンが警官二人と言い合っている。

近寄ってよく見てみると、

ミケルが職質されてましたw


挙動が怪しかったんですかね。


しかもミケルくん、滞在している友人宅にパスポートを置いてきたと言う。
パスポート持ち歩いた方がいいと思うぞ。

警官は、パスポート見せてくれれば別に問題ないんだけどねえと言う。
警官には俺の友達だからあやしい者じゃないと説明して解放してもらいました。
ああ面白かった。






あとは吞み屋でひたすら吞みながら歓談。

Img_0070
マシンガントークのミケル君、こちらに思考の猶予を与えません。次から次へ出てくる色んな話。 マシンガンというよりガトリングガンです。 スペイン訛りの英語に必死に耳を傾ける日本人4人。 なかなか大変ですが、楽しいです。




この人、芋焼酎が大好きだそうです。
Img_0071
1~2杯ビールを吞んだ後はずーーっと芋焼酎でした。

なんでも昔、東京国際映画祭だかなんだかのイベントで来日した時に、スタジオ4℃の方々と吞む機会があって、森本晃司さんが店でキープしていた芋焼酎の一升瓶を皆で吞み尽くして泥酔した、ということを言っていました。 なんだか状況はよくわかりませんがそんなようなことを言ってました。 それ以来大好きだそうです。


カナダのモントリオールで SHED というプロダクションでキャラクタTDのようなことをやっている彼ですが、モントリオールだけに Softimage の本拠地でもあるし、それ以外のCG関連の企業も近所にいっぱいあるし、なかなか面白い環境のようです。 Softimage の人にも会うと言っていたし、Thiago Costa さんはすぐ近くに住んでいるそうです。

Momentum で有名な Helge Mathee さんはミケルと StudioNEST 時代に一緒だったわけですが、彼の近況を聞くと、どうやら今は独逸に帰って独自のプロジェクトをやっているようです。なにやら、特定のタスクに限らないフレームワークのようなものを作っている、とか、WEB ブラウザ上で動くフレームワークで、Qt みたいなものだ、とかなんとか言っていました。 俺にはあまり意味がわかりませんでしたが、CGに限らない色んなツールを開発する上で土台になるような、汎用的で基礎になるようなもの、を作っていると言っているように聞こえました。 ううむ、曖昧ですいません。  ちなみに Momentum のように Exocortex と組んでやっているわけではないそうです。



SHED では、 Maya も1~2本あるけど、ほぼ全領域で XSI を使っているそうです。

SHED では、レンダラはほぼ Arnold になったそうです。

レンダはだいたい3~4pass で済むそうです。でもフレームバッファを自由に出せるから従来の MR 的な素材分けをするにも何にも問題ない、と言ってました。

彼は本来キャラクタTD/アニメータなのですが、TD的な人はヘタに何でもできてしまうので、あまり関係のない仕事をよく頼まれると言っていました。 AfterEffects関連の何かを頼まれたり、って言ってましたね。 この先会社内での自分の方向性を注意深く見ていかないとなんでも屋になってしまう、という懸念を持っているようでした。 Fmt さんは大いに共感していましたね。

XSI や Maya などの特定のツールに完全に頼るのではなく、例えば Python など多くのツールで汎用的に使えるものを重点的に学びたいとかなんとか言ってました。

奥さんをバルセロナに置いてモントリオールで単身赴任していたミケルくんですが、この後一度バルセロナに戻り、支度を整え、奥さんを連れて一緒にモントリオールに移住し、子作りにはげむと言っていました。 奥さんはサッカー専門のTV番組制作会社に勤めていた、と言ってましたね。  俺はサッカー詳しくないのですが、彼が言うには、なでしこジャパンが優勝し、そしてスペインのバルセロナが何年も連続でトップにいるので、俺たち夫婦はサッカーの頂点にいるんだとかなんとか、そんなようなこと言ってました。



そうそう、俺が布教用にスペアとして持っていた XSI男Tシャツを、ミケルが買ってくれました!
Img_0073
このTシャツの存在は、このブログを読んで知っていたそうです。日本語は読めないけど、We pray for Fukushima のスローガンで内容は明白なので意味はわかっていた、だそうです。 彼は赤十字を通じて寄付をしてくれていたそうです。 そして今回あらたに、Tシャツも買ってくれたわけです。 ありがとうミケル。 お前の祈りは俺が責任持って福島に届ける。

東日本大震災に関してはミケルも相当胸を痛めていたそうです。自分のボスのいとこが仙台空港で被災したと言っていたような気がします。ミケルの奥さんは日本人ですし、奥さんの親は長野に住んでいて、今回の一連の地震で長野でも大きな揺れがあったし、ミケルにとってひとごとではないようです。 地震の話題になると、アホみたいに陽気なミケルも、顔が曇っていましたね。


2次会であらたに2人と合流して、24時近くまで吞みは続きました。楽しかったねえ。またやりましょうねえ。

ミケルと陽気な仲間たち。
M
地震が来ているわけではありません


律儀なミケルは、またもや俺にお土産をくれました。
Img_00022
スペイン産の、ポピュラーなビールと、スペシャルなビールと言っていた気がします。あと、なにやら漬物のようなもの。 ビールのつまみにいいそうです。 そのまま食うそうです。 辛くない唐辛子みたいなもの、と言っていたような気がします。

Muy bien (((゚∀゚)))



.

| | コメント (2) | トラックバック (0)

2011年8月 9日 (火)

2012 SAP。

Softimage の中の人、LucEric さんのつぶやきに導かれるなど。


嘔吐デスク様公式
http://news.autodesk.com/news/autodesk/20110808006852/en/Autodesk-Announces-Subscription-Advantage-Packs-2012-Entertainment


eX-SI Support
http://xsisupport.wordpress.com/2011/08/08/autodesk-announces-subscription-advantage-packs-for-2012-entertainment-software/



嘔吐デスク様からコピペ


The Subscription Advantage Pack for Autodesk Softimage 2012 software delivers practical production tools to Softimage artists and technical directors. The Advantage Pack provides:

    New modeling and selection tools that greatly improve productivity and ease of use
    New options for ICE (Interactive Creative Environment) rigid body dynamics that enhance the simulation toolset
    Extended SDK access that provides greater control over customization



ほうほう。



New modeling and selection tools = 新しいモデリングツール/選択ツールってのは、Luceric さんのつぶやきによると、Thicknes operator,  cap holes,  dbl click to select loops, island selection だそうですよ。



Thickness operator ってのは、XSI ユーザの長年の悲願であったポリゴンを押し出して厚みを付けるツールのことですね?  大昔から言われ続けたこの機能。 XSI 3.5 の頃は、Helge Mathee さんが MindThinkTools などという有料のプラグインセットの中で Solidify なんてのを提供してくれてました。 金アルディスさんも TinyThickness などというプラグインを出してました。 あるいは Move Normal というプラグインで実現したり、Push オペレータと組み合わせた GOTETZ さんの Interactive Thickness なんてのもありました(これが実は一番手軽で使いやすい)。 最近ならもしかするとそういうことをする ICE コンパウンドがあるかもしれません。

こうしてユーザが工夫をしながらも、ずっと長いこと「XSI はなんでこんな基本的な機能すら付いてねえんだよドルァ」と、コミュニティではずっと罵倒され続けて来ましたね。ここ1~2年は皆あきらめてしまって、それを言う人は少なかった気もします。


 満を持して、2012年に登場! 
 XSI の厚み付けツール!! ( ´,_ゝ`)プッ

 基本的なモデリング機能だけど、
 サブスクリプションユーザのみの特典!! ( ^∀^)ゲラゲラ




・・・・いや、すみません。 久しぶりに XSI らしいアナウンスがあって嬉しかっただけです。


Cap holes ってのはポリゴンの穴埋めですわね。 俺は Remy Alex さんのをよく使ってますが、同じく金アルディス将軍も TinyCap ってのを出していたし、RCTools の中にもそういう機能があるし、背の高いあの人もそういうツールを作ってますし、これも怠惰な Softimage の代わりにコミュニティの皆さんの互助精神でどうにかなってきた機能です。 まあ、Duplicate → Collapse という標準機能の2段階でもできたんですがね。 厚み付けと同様、満を持して登場したみたいですね。


 そうかあ、厚み付けと穴埋めっていう特典があるのかあ
 すげえなあ
 2012年最新のモデリング機能かあ
 やっぱりサブスクリプション入らないとなあ
 ( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \




dbl click to select loops ってのは、エッジループとかポリゴンループを選択するのに、ダブルクリックするだけでできるようになっただとか、そういう意味ですかね? 詳しくはわかりません。 でも、確かにこれまでのループ選択はやりにくいと感じることも多かったですね。 Alt 押しながら中クリック、追加選択の場合は更に Shift も押して、かつモディファイヤキーを押す順番も考慮しないと選択外れちゃったり・・・・という感じだったように思えます。まあもう慣れたといえば慣れたんですけどね。 RCTools は最近なぜか動かなかったしな・・・。

Island Selection ってのも、詳しくはさっぱりわかりません。 ポリゴンの島、つまり1オブジェクトの中の地続きになっているポリゴン群を選択する機能だと思いますが、今までも選択フィルタの中に Island なフィルタはあったので既にこれはできているわけですが、その拡張版ですかね?





いずれにせよ地味! いいんです。 実に地味な発表を SIGGRAPH にどかんとぶつけてくるこの心意気、さすが Softimage です。






お。 追記です。  これを書いている間に LucEric さんがまたつぶやいている。 「ノーマルに沿ったエクストルードもあるぜよ」 だそうですよ。 上の厚み付けとカブる気もするが、どうなんだろう。 法線の方向が直角やそれ以上の角度で変わるカドの部分、上手く行くんだろうか?  っていうか、これも同じく、 2012年の新機能! という所が激しく XSI らしくて良い。


あれ? and also a Add Smooth Edge operator, which preseves continuity (like Flow Connect in Max) とかも書いてますよ? これってもしかして、曲線(曲面)を考慮した分割のことじゃないの?  今までは Shift + D などで分割を入れるとただ真ん中に分割を入れるだけでしたが、 Local Subdivision した時のような前後のポリゴンの曲面っぷりを引き継いで丸くスムーズになるような分割はできなかったわけですよ。これ、すんげえ欲しかった。 これで解釈合ってるなら、うむ、これだけでサブスクリプションの価値があるかも!( ゚∀゚)

っていうかサブスクリプションじゃなくてその機能だけ単体でプラグインで売って欲しいよ俺は。






ええと、モデリングは終わり。次は ICE。 
New options for ICE rigid body dynamics that enhance the simulation toolset
      という部分は、公式ページにはサラッとこれしか書かれてないですけど、Luceric さんのつぶやきや e-XSI Support を読むと、これが Bullet 搭載ということだそうですよ! ICE の Rigid Body のオプションとして Bullet が選べるらしい。 つまり、今までの Simulate Rigid Bodies ノードの代わりに、あるいはその中で選べるソルバとして、Bullet が使えるということでしょうかね? だとするとこれは地味じゃない気がする。

Bullet は Momentum にも採用されているオープンソースな物理エンジンなわけですが、これ使ったら何が良くなるだとかは、正直俺もよくわかりません。が、広く使われている優秀なエンジンで、速いというのは聞いたことがあります。 

そして何より嬉しいのは、 Actual Shape なコリジョンでしょう。 Bullet なら何でも Actual Shape なコリジョンだというわけではないと思うのですが、Luceric さんのつぶやきによると "Bullet for exact shape RBD in ICE" というコトバを使っているので、少なくとも今回の ICE へのインプリメントでは Actual Shape コリジョンができる形になっているはずだと思います。たぶん。

だとすると、ICE 登場初期、皆さんも体験した「穴開けた箱に ICE Particle でインスタンスしたブツを流し込んだらブツは穴の中に落ちず穴の表面のところで跳ね返ってしまって唖然( ゚д゚)ポカーンとし調べてみたら ICE の RBD はバウンディングボックスだかコンベックスハルなコリジョンしかできないことが判明しプゲラ(^Д^)は解消されることになるんじゃないでしょうかね! 




ん? まさか、XSI に Momentum を搭載したという意味ではないですよね? 去年の SAP で Lagoa を搭載したことを考えると、ありえなくもないパターンにも思えるが・・・?  いや、わかりません。 まあ違うでしょうたぶん。





Extended SDK access that provides greater control over customization       ってのはなんざんしょね?  カスタムツールの UI とかをいじれる余地が増えたということですかね?  スクリプト書きとしては気になりますが、今はこれ以上の情報を持っていません。以上。









今日明日のうちにまた情報が出てきそうですねえ。
そうか、いつのまにか新バージョン発表は GDC とかの時期になり、SIGGRAPH は SAP 発表の場になってしまったのか。 まあ、もうどうでもいいですけどね。 一応、お祭りに少しでも参加した気分になりたく情報漁ったりしてますが、疲れるのでもうやめよう。



あ、2012 SAP の出荷は9月末だそうですよ。
遅れるなよこのハゲ








追記:
http://www.autodesk.co.jp/adsk/servlet/item?siteID=1169823&id=17466848

ここにより詳しく、というか分かり易く。 いや、分かり易くもないか。まだ概念的ですね。 今日(2011年8月9日)中にもっと詳しい情報がアップされるそうですよ。


おお? 「ICE コンパウンド プロパティ ページ内でスクリプト コードをアタッチして実行する機能」 ですと?  これあるといいと思ってた。 いくらビジュアルプログラミングって言っても、ごく単純な数値の代入とかまでノードに出すのはどうかと思っていたし、その辺がコードで書けるようになってくれているなら歓迎したいが、そういうもんではないのですかね?





さらに追記:
詳しい情報出ましたね。
http://area.autodesk.jp/product/softimage/softimage-2012-sap.html

おおお、なんだか、すごく良さそうじゃないですか?


.

| | コメント (2) | トラックバック (0)

2011年8月 5日 (金)

ミケル迎撃。

スペイン生まれのキャラクタTD&アニメータ野郎、ミケル・カンポスくんが再来日します。

ミケルに関してはこちら。
http://junkithejunkie.cocolog-nifty.com/blog/2011/01/post-eaab.html


諸般の事情により、1次会はごく少人数でやることになってます。

2次会から参加したいというお方がいらっしゃいましたら、連絡下さい。

2011年8月12日(金) 22:00 
東京渋谷の↓ここ集合。

大きな地図で見る

上の地図、表示されなかったら↓このリンクで。
http://bit.ly/n13SES


「初つぼみ」ってお店の看板がありますね。 その前に集合です。



連絡が無くとも、いきなり来てもいいです。ただ俺と面識がないお方だと落ち合えるかわからないですね。 でもまあ、俺は正装して行くので、それでわかると思います。



ちなみに2次会の場所は予約してません。誰かその場でパシリになって店を探して下さい。まあどっか入れるでしょ。 ミケルは陽気なスペイン野郎なので、「俺2次会はいいよ、帰るよ」とかそういうことは絶対に言いません。前回も2次会が終わった後、朝まで踊っていたらしいですから。なので来れば必ずミケルに会えます。




さあスペイン人と情熱のビールを酌み交わしましょう。




.

| | コメント (3) | トラックバック (0)

« 2011年7月 | トップページ | 2011年9月 »