modoでキャラクター作成02 - ウェイト途中

09073101

XSI5.1でウェイト付けしております。

 

リグは1年前くらいに作ったものです。

久しぶりに触って、すっかり忘れているのにびっくりしました。

何とか使い方を思い出し、ウェイト付けが出来ました。まだ途中ですが、、

このポリゴン数のウェイト付けも久しぶりです。

 

GATORがないので、男に移植することが出来ません、、困りました。

やはり骨の数が足りないです。

 

関節がきれいに曲がりません。指の骨もありません。

今から付け足すこともままならないので、今回はこれで行きます。

 

うーん、色々と足りない。

 

ポージングはやはり指が動かないとしっくりこないですね。

顔と指の表情の豊かさと言うのはいつも驚かされます。

 

もう少し調整して完成させます。

modo401 sp1

09072701

modoがアップデートされておりました。

早速ダウンロードしてみました。

確かに動作が安定しています。

ペイントの問題も解決されており、ヘアーのパラメータも少し制御しやすくなったように思います。

そういえば、先日ヘアーのテストをしてみましたが、

期待をしていただけに、がっかりです。

これでまともに作れるのだろうか?と途方に暮れてしまうくらい制御しにくいものです。

ガイドをブラシで制御するのですが、思うようになってくれません。

建築用途を目的に設計されたものだそうなので、仕方が無いのだろうと思います。

今後に期待です。

個人的にショックだったのですが、

自分のモニタがおかしく、比率が狂っていたようです。

しかも直して何とかなるものでも内容で、右と左で違いました、、

ウィンドウを動かしていて気が付きました。

ページにアップした画像を違うモニタで見ると、とても長細く見えます。

自分のモニタでも左に持ってゆくと長細く見えます、、

良く今まで使っていた、と我ながら感心しました。

左側の比率が正確に近いようなので、バランスを見る時はそっちに持ってゆけば良いかな?

等と思っております。

09072702

ちなみにこれがヘアーを使ったものです。

地肌がどれだけ見えるか試していたので地肌を白にしています。

レンダリングは5分程度です。

ディフーズとスペキュラにグラデーションを入れただけの簡単なものです。

デモではもう少し毛先がきれいだったように思うのですが、気のせいでしょうか?

まだまだ理解が足りません。

こんなことやっていないで、早いところコミケの準備をしなくてはいけません、、

では、今回はこの辺で。

modoでキャラクター作成02 - modo401のペイント

image368l

図では分かりにくいのですが、あれれ、と言う感じです、、

302ではカラーペイントの際にテクスチャの切れ目が見えることはありませんでした。

テクスチャの解像度が極端に低い場合は仕方が無かったのですが。

しかし401になり、出てきてしまいます。

図ではUVビューを見ると分かりやすいのですが、場所によってはかなりぎりぎりのところに

ペイントされています。大きくはみ出す部分との差が大きいのが分かります。

ちなみに302では、動作していなかった、

メニューバー、システム>初期設定>表示>レンダリングの

「ベイク時のUV境界サイズ」がきちんと反応します。

しかし、ぎりぎりの部分は変わりません。自分の設定がおかしいのでしょうか?

それと、ブラシの色とカラーパレットがうまく連動してくれません。

302でもたまに接続が切れることがあったのですが、401ではパレット上でドラッグしている

最中に接続が切れてしまいます。要するに使い物になりません。これも問題です、、

09072401

男の顔を主に修正しておりました。

まだ修正の余地はありそうです。速いところ終わらせて骨入れしてみないとそろそろまずいです。

個人的なmodo401の感想ですが、静止画をメインに仕事をされている、特に建築、プロダクト系の

方でしたら十分にアップグレードの価値があるかと思います。

それ以外の方はバグフィックスが出るまで待つのも手かも知れません。

しかし、レンダリングの楽しさだけでもそれなりの価値はあります。

バグフィックスで大半のバグが解消され、プラスアルファがあることを期待しています。

では、今回はこの辺で。

modoでキャラクター作成02 - ポリゴンの割り

09072201

Luxologyにあるマテリアルを適用してみました。

UVを「UVプロジェクションツール」を使い、「重心」で作成すると図のようになります。

少しあった三角ポリゴンを無くして全て四角にしました。

ポリゴン数は24716ポリゴンです。(三角形計算)

0907220209072203

0907220409072205

出来るだけ筋骨格に合うように、出来るだけ縦横の割りになるように

という相反するせめぎ合いの結果です。

割りや流れを変えることは無いと思いますが、形はまだ修正して行きます。

見て分かるとおりですが、実際の人間のプロポーションと言うよりは、理想体型(?)です。

顔はゲルマン人と日本人が混じった感じかと思います。

それと、modo401についてですが、

個人的に期待していたリアルタイムビューでのテクスチャブレンドには対応していないようでした。

ただ、プレビューが早く回転させるにも問題ないのでそれで確認しながら作業できるかと思います。

なのでちょっと試しにこのモデルでテクスチャを試しで描いてみようかと思います。

その前にUVを取らなくてはいけませんね、、

では、今回はこの辺で。

modoでキャラクター作成02 - ピクセル比率

090721

ついにmodoを401にアップグレードしました。

自分の持っているものが、学生・教員版だったのでアップグレードをあきらめていたのですが、

先日Marsさんに問い合わせてみると、サブスクリプションと同じ扱いでアップグレードが出来る。

という情報を頂き、早速アップグレードしてみました。

してみたものの、現在作っているものを優先させるため新機能は殆ど試しておらず、

ショートカットの作成にもいたらないので、殆ど302を使っております、、

それでもアップした画像は新機能のプリセットによるhdriを使ってのレンダリングです。

hdriはそれほどでもないのですが、プリセット自体、種類が豊富で把握するのに一苦労しそうです。

色々とお手軽に出来るので便利な反面、プリセットを次々と変えて適用してゆくと

以前のものが残ったりしてゴミがたまりがちになりそうです。

furを試してみたいのですが、落ちやすいです、、

まだまともにテストできておりません。

プレビューが早くなり、カメラビューだけでなく、プレビューウィンドウを回転させても

十分に使用に耐えられるものになりました。これは地味にすばらしいです。

しかし、まだ何かと落ちやすいように思います、、

もっと詳しく触ってみてから言うべきですが。

それと表題の「ピクセル比率」ですが、自分の備忘録です。

以前少し書いたかと思うのですが、レンダリングとビューの比率がおかしい、と書きました。

自分が未だにCRTのモニタを使っているからそうなるのか、分かりませんが

シェーダツリーの、Render>フレーム>「ピクセル比率」を「1.05」にするといい具合になりました。

プレビューもウィンドウでは少し横長になりますが、ビューに埋まっているプレビューでは

そうはならない、と言うことも発見しました。違う環境で試す必要があります。

それとついでにもう一つ。

コミケで販売させ頂くデータですが、今回は素体にしようと思います。

テクスチャも装飾も無いものです。手抜きと言われてしまうと否めない部分はあるのですが、

今回発表する段階での描画エンジンでの見せるに適したもの、と言うことでは最適かと思いました。

どうもまだ、そう大したことは出来ないようです。エンジンの今後の発展にあわせキャラクターも発展させよう、

等とも考えてみました。苦しい言い訳ですが、、

まだ確定、と言うわけではないので時間いっぱいやってゆこうと思います。

では、今回はこの辺で。

modoでキャラクター作成02 - コミケ76

0001

変な絵です。

久しぶりの更新となります。

中々進みません、、リズムがとれないです。

0002

もっと変な絵です。

どんなものを着せようかまだ悩んでおります。

とりあえず作ってみた、と言う感じです。

女性の顔は男性の顔を移植して少し変形させただけです。

兄弟でしょうか?

まぁ、そんなくだらない冗談はさておき、

研究員Mがページを作成しました。

左のメニューに加わっているかと思います。

コミックマーケット76への参加報告です。

私個人的には殆ど縁の無いものなのですが、

今回参加させていただけることとなりました。

実はそのためにモデルを作っていたのです。

新たに作ると言った手前引くわけにも行かず、結果自分を追い込んでおります。

本当に出来るのでしょうか?

一応modoでモデリングを進め、XSI5.1のシーンデータとしてデータを付けるつもりです。

リグはオリジナルです。

半年くらい前にリグの解説をしてゆく、などといい加減なことを書きましたが

出来ずじまいでした。(今後やるつもりではいるのですが)

それを研究員Mが作成したエクスポータで出力しDirectXで描画、

と言った流れになるかと思います。

うわさでは彼は解説書も書くそうですが、本当なのでしょうか?

どうやらお互い追い込んでいるようです。

うまく出来るようがんばってゆきたいと思います。

何卒よろしくお願いいたします。

XSIのシーンからデータを抽出する3

今回はマトリクスとウェイトデータに関してです。

まずはマトリクスを取得します。

void Func( const X3DObject& obj )
{
    MATH::CMatrix4 global = obj.GetKinematics().GetGlobal().GetTransform().GetMatrix4();
    MATH::CMatrix4 local  = obj.GetKinematics().GetLocal().GetTransform().GetMatrix4();
    CString        name   = obj.GetName();

    CRefArray children = obj.GetChildren();
    for( LONG i = 0 ; i < children.GetCount() ; ++i ){
        X3DObject child( children[ i ] );
        Func( child );
    }

}

{
    Project project = app.GetActiveProject();
    Scene   scene   = project.GetActiveScene();
    Model   root    = scene.GetRoot();

    Func( root );
}

こんな感じでルートから再帰的に末端までのマトリクスを取得していきます。


ちなみにDirectXは左手系、XSIは右手系の座標系なので、
マトリクスも変換しなくてはいけません。

void ConvertMatrix( D3DXMATRIX& dst, const MATH::CMatrix4& src )
{
    double d00, d01, d02, d03;
    double d10, d11, d12, d13;
    double d20, d21, d22, d23;
    double d30, d31, d32, d33;

    src.Get(
        d00, d01, d02, d03,
        d10, d11, d12, d13,
        d20, d21, d22, d23,
        d30, d31, d32, d33
    );
    dst._11 = static_cast< float >(  d00 );
    dst._12 = static_cast< float >(  d01 );
    dst._13 = static_cast< float >( -d02 );
    dst._14 = static_cast< float >(  d03 );
    dst._21 = static_cast< float >(  d10 );
    dst._22 = static_cast< float >(  d11 );
    dst._23 = static_cast< float >( -d12 );
    dst._24 = static_cast< float >(  d13 );
    dst._31 = static_cast< float >( -d20 );
    dst._32 = static_cast< float >( -d21 );
    dst._33 = static_cast< float >(  d22 );
    dst._34 = static_cast< float >(  d23 );
    dst._41 = static_cast< float >(  d30 );
    dst._42 = static_cast< float >(  d31 );
    dst._43 = static_cast< float >( -d32 );
    dst._44 = static_cast< float >(  d33 );
}

なぜこのようになるかは面倒なので説明は省きます。
きちんと幾何学を解説しているページを探してみてください。
ちなみにベクトルもZ要素(厳密にはZとは限りませんが)の符号を反転する必要があります。

次にウェイトデータの取得方法です。
ウェイトデータもマテリアルの時のようにClusterクラスからアクセスします。

void Func( const PolygonMesh& mesh )
{
    CRefArray    clusters = mesh.GetClusters();
    CStringArray deformer_names;

    for( LONG i = 0 ; i < clusters.GetCount() ; ++i ){
        Cluster   cluster   = clusters[ i ];
        CRefArray envelopes = cluster.GetEnvelopes();

        for( LONG j = 0 ; j < envelopes.GetCount() ; ++j ){
            Envelope  envelope  = envelopes[ j ];
            CRefArray deformers = envelope.GetDeformers();

            for( LONG k = 0 ; k < deformers.GetCount() ; ++k ){
                X3DObject deformer = deformers[ k ];
                deformer_names.Add( deformer.GetName() );
            }

            CClusterPropertyElementArray weights = envelope.GetWeights( 0 );
            if( weights.GetCount() == 0 ){
                continue;
            }

            for( LONG k = 0 ; k < weights.GetCount() ; ++k ){
                CDoubleArray items = weights.GetItem( k );
                unsigned int num = 0;
                unsigned int deformer_indices = 0;
                float weight[ 4 ] = 0.0f;
                for( int index = 0 ; index < items.GetCount() ; ++index ){
                    // 1頂点につきウェイト付けできるマトリクスは4つまでにしておく
                    if( ( items[ index ] > 0.0f ) && ( num < 4 ) ){
                        deformer_indices |= ( ( 0x000000ff & index ) << ( num * 8 ) );  // 1byte毎にマトリクスのインデックスを格納する
                        weight[ num ] = static_cast< float >( items[ index ] * 0.01 );  // DirectXでは0.0 ~ 1.0 なので 100 で割る
                        ++num;
                    }
                }
            }
        }
    }
}

このようにdeformer(ウェイト付けされるオブジェクト)の名前と
どのdeformaerにウェイト付けされるかのインデックスを4byteの変数に格納したものと、
どのdeformaerに何%づつウェイト付けされているかの数値を取っておきます。
DirectXの固定機能パイプラインでは変換マトリクスは256個まで、
ウェイト付けできるマトリクスは1頂点につき4つまでなので、
上記のコードのようになります。


大分説明が足りていない気がしますが、これで一応必要なデータは揃いました。
これをプロジェクトに組み込んで見たのがこれです。
exporter02
見た目では分かりませんが、ちゃんとスキニングされています…
DirectXでスキンメッシュを表示させる方法はきちんと説明が必要かと思いますが、
とりあえず今回はプラグインの話なので割愛します。
次にアニメーションを実装してプラグインの話はひと段落して、
その時点でソースをまとめて公開したいと思います。

modoでキャラクター作成02 - 途中経過

image363l

現在このような感じです。

相変わらずどのようなキャラクターにしようか、考えながら進めております。

image364limage365l

やはり縦横の割りにしておくべきだったかなぁ、等とまだ葛藤しております。

前回のモデルに一段階スムースをかけ、メッシュスカルプトでモデリングを進めております。

modoのメッシュスカルプトですが、どうもZbrushに比べるとレスポンスに違和感を感じておりました。

筆圧の問題もあるかと思いますが、結構慎重にやらないと極端に反映されてしまいます。

いつも「押し出し」を使ってモデリングしていたのですが、ためしに「膨張」を使ってみました。

大分良い感じです。

それとツールの設定をいじって初期値が分からなくなった場合は前回紹介させていただきました

「Ctrl」+「d」でツールの初期化が出来ます。

401になってこの辺のショートカットも変わっているのでしょうか?

今回ページに乗せるためにレンダリングする時に401のプリセットがあればなぁ、

等と考えてしまいました。そう考えるとやはり欲しくなりますね。

先立つものが何とやら、です。

今しばらく作業を優先させていただきます。

modoのモデリング2

ずいぶんと更新が滞りました。

製作の方はいまいち思うとおりに進みません。

顔の割りは満足行く形が出来たのですが、体の割りはいまいちです。

image359l

今回は男です。

筋肉、骨格に沿わせるべきか、順当な縦横割で進めるか、

自分の中で葛藤し続けております。

ちょっと中途半端です。

こだわりを持っていると先に進めず、こだわりが無いと進むことすら出来ない。

なんだかそんな感じです。

自分の中で折衷案を見つけてゆくしかないのかと思います。

人のモデルを見ても様々です。

と、まぁグチのようなものはこの辺にして

今回はまた地味な機能(?)の説明です。

アップグレードしていないのでmodo302です。

アップグレードする気満々だったのですが、いざ機会を逃して情報を集めてみると

手放しに喜べないような印象を受けてしまいました。

自分で触っていないのでなんとも言いがたいのですが、

ひとまず今回のものを進める方が自分の中で優先度が高いのでまだ302を使います。

今回紹介する機能ですが、

これもものすごく個人的な事なのですが、プリミティブ形状を作成する時、

ドラッグして作るのは嫌いで、数値入力で作成する方を好みます。

ただ、modoの場合作成ツールをアクティブにし数値を変更し、「適用」もしくはドラッグ開始

ですが、自分としてはXSIやMayaのようにとりあえずパッと形を出してから

具合を見ながら数値をインタラクティブに変更できることを望みます。

modoでは「Ctrl」を押しながらツールをクリックすればデフォルト値で図形を作ることが出来ますが、

インタラクティブに変更できません。

これを解決する方法を見つけました。

image360l

まずは適当にプリミティブ作成ツールをアクティブにします。今回はシリンダーにしました。

image361l

画面で一度クリックします。

「Ctrl」+「d」を押します。これはツールの初期化のショートカットです。

他のツールでは大抵、複製にアサインされているものなので何だかしっくり来ません。

image362l

すると値が初期化され、デフォルトのシリンダーが作成されます。

この状態だと左の数値入力でインタラクティブに値を変更できます。

くだらない事だと思いますが、個人的には非常にヒットしました。

特にシリンダーなどでは、サイドとセグメントの値を見ながら調整したいです。

ただそれだけでした。

では、今回はこの辺で。

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です