• xismo(キスモ)でキャラモデリングに挑戦してみる vol.5

    2017-11-05 22:191

    フリーの3Dモデリングソフトウェア「xismo(キスモ)」を利用し、MMDキャラモデリング作成の顛末を綴る日記です。

    自分用の「備忘録」をメインにキャラモデリングの初心者たるうp主が作業の進捗具合をゆるい感じに報告する趣旨のテキストです。

    なんか更新をサボっている間に前回から1か月以上経過してしまいましたw

    作業の方は日々進捗していまして、とりあえず一通りのウエイトを塗り終わり表情モーフのバリエーションを増やしているところです。

    ちなみに、気が向いたタイミングで↓のようなツイートしてます。

    https://twitter.com/sobamix/status/920274337189453825
    https://twitter.com/sobamix/status/923179527479615488

    5回目の今回は材質およびマッピングまわりの作業について書いてみます。
    主にxismoからPMXモデルを作成するにあたって、個人的に気になった部分をメインとしています。
    したがって基本的なパラメタの解説や詳細な使用方法については相当割愛していますのでご了承ください。


    ■材質設定について
    3DCGで何らかのモデルを作成した場合は、形状のほかに表面の材質がどんな特性を備えているかについても設定するのが一般的です。

    例えば紙と金属の質感の違いといったものはモデル表面の材質設定を適切に行うことで表現します。
    またモデル表面の模様は、別途、画像編集ソフト等で作成した画像(テクスチャ)をモデル表面に貼り付ける(=マッピング)ことで実現が可能です。

    xismo における材質は「シェーダノード」をプロジェクトに追加し、材質設定を行いたい面に対し「シェーダノード」を適用することで設定します。




    面に対してシェーダを適用するという事は、同一ノード内のオブジェクトであっても面単位に異なる材質を設定できることを指します。




    マッピング用の画像は「シェーダノード」とは別に「テクスチャ」として追加されます。




    シェーダとテクスチャは別に管理されますので、例えば異なる「シェーダノード」で同じ「テクスチャ」を使いまわすことが可能です。



    「テクスチャ」をうまく割り当てることで、マッピング用の画像ファイル群をコンパクトにまとめられます。
    ...が、今回はこのあたりの構成がイマイチでして結果的に以下のようなちょっと無駄っぽいデータ群になってしまいました(笑)

    • vocaloid.png
    • アウター.png
    • スカート.png
    • パンツ前.png
    • パンツ後.png
    • フリル.png
    • モーフ.png
    • 前髪.png
    • 小物.png
    • 後ろ髪.png
    • 瞳.png
    • 肌.png
    • 袖.png
    • 足.png
    • 顔.png


    マッピング画像のサイズ(タテヨコの大きさ)は8の倍数を指定するのが無難なようです。

    xismo の場合、[メニュー]-[ヘルプ]-[環境設定]-[OpenGL]の「最大テクスチャサイズ」で指定されたサイズが使用できる「テクスチャ」の最大サイズとなり、万が一これを超えるサイズの画像が読み込まれた場合は自動で設定されている最大サイズにリサイズされるようです。


    【環境設定にて「最大テクスチャサイズ」を設定】

    「テクスチャ」のサイズはマッピングされた後の品質を左右しますが、大きなサイズを多用すると最終的なモデルデータが重くなりますので、ディテールとリソース量を勘案して決定します。

    「テクスチャ」に使用できる画像のフォーマットは一般的な「.jpg」「.png」「.bmp」に加え、PhotoShopの保存形式である「.psd」にも対応しています。

    さらにxismoの場合、ソース画像への更新がリアルタイムに適用されるため、

    1. モデルにマッピング
    2. マッピング結果の確認
    3. テクスチャ画像の再調整


    といった一般的なワークフローにおける「2.」と「3.」の繰り返し作業が省力化できます。
    (画像更新の都度、再読み込みといった手間が省けるのは非常に大きいと思います)

    うp主の場合は、いったん「.psd」形式で「テクスチャ」の割り当てを行い、マッピング適用後のイメージが完成するまでトライ&エラーを繰り返すフローで作業しました。

    当然「.psd」形式の「テクスチャ」はMMD等で読み込みできないため、イメージ完成後に「.png」等に差し替えを行っています。


    ■マッピングについて

    ●マッピングの概要

    モデル表面に対するマッピングの設定は、CGモデル作成における難関のひとつではないか?と個人的に思っています。
    これは例えば人の顔のように複雑(?)な凹凸があるものを2次元のテクスチャ画像に割り当てするにあたり、UV編集と呼ばれる面倒な作業を行う必要があるためです。

    UV編集とは、モデリングした各頂点がテクスチャ画像のどの位置に割り当てされるのかを設定する作業でして、マッピング後に歪みが出ないよう結構細やかな作業を要求されるタフな工程(笑)でもあります。


    【顔のUV展開】

    xismo においては、このあたりの作業を出来るだけ省力化できるようなツールがいくつか実装されており、特に

    • 「選択ツール」の「ルート辺」と「UV自動展開」の組み合わせ
    • 「UVツール」の「ライブ」

    の2つは、面倒なUV編集の作業において非常に使い勝手の良い機能となっています。

    使用方法については、mqdlさんが自身のチャンネルで公開されている講座動画が非常にわかりやすいと思いますので、そちらを参考にしてみてください。

    https://www.youtube.com/watch?v=jyVbJXDn7mM
    https://www.youtube.com/watch?v=AMWp19JGEzo

    またUV編集の際は、

    1. 歪みが発生していないか
    2. テクスチャ画像のどこが頂点に割り当てられているか

    といった観点でチェックを行う必要が出てきますが、こちらはmqdlさんが配布されているチェック用のテクスチャ画像をありがたく使用させていただいております。
    (セットアップサンプルデータの「tex」フォルダに格納されている「uv.png」)

    なんとなくチェック用としてxismo内部に実装されていてもイイんじゃないか?と思ってしまうくらい便利な画像ですので、作業効率UPの観点からもオススメですw


    ●「曲面化」モディファイアに関して
    マッピングの作業において当初うp主が懸念していたのは「曲面化」のモディファイアと組み合わせたケースです。

    というのも、UV編集の作業はあくまでモディファイア適用前のローポリモデルに対して行いますが、実際にマッピングが適用されるのは曲面化適用後の形状となるため、UV編集編集時の頂点と必ずしも一致しないように思われたためです。

    結果的にはケースバイケースと思われますが、基本的にはxismoの方である程度の最適化を行ってくれるようです。

    以下は非常に極端な検証例ですが、「曲面化」の適用前・後それぞれでうまい具合にマッピングが行われています。




    今回の作業においては顔の作成において「曲面化」適用のままマッピングを行っています。


    【「曲面化」適用のままマッピングしても違和感は感じない】

    こちらの場合は、検証用のテクスチャを用いた場合に「曲面化」の適用前・後で若干の歪みが発生していますが、全体的にかっちりとしたディテールが不要な部位については「曲面化」モディファイア適用のままでも問題なくマッピングできるようです。





    ■xismoとMMDの互換性について

    ●見た目の違い
    xismo である程度のマッピング作業が完成し、試しにPMX出力してMMDで開いた際、
    「あれ?」
    っと思う事ないでしょうか?
    うp主は見た目がいきなり安っぽくなって一瞬、心が折れそうになりました(笑)




    この見た目の違いは何処に起因するものなのか?
    いろいろと調べた結果、xismoとMMDにおける材質関連の互換性の違いが原因となるようでした。

    すなわち、xsimo上でベストだと思われる状態で設定したパラメタ値が、MMD上では一部有効とならないため結果として見た目の齟齬が発生します。

    まず前提として、xismoの「環境」設定にあるライトの値は初期値では明るすぎるため、はじめに設定値を変更します。


    【「99」位に設定】

    次に「シェーダーノード」の各パラメタにおける「発光色」の設定を確認します。


    【「発光色」の初期値が実は黒ではない】

    初期値では、

    • R:16
    • R:16
    • R:32

    といった具合に若干の発光設定がなされていますがMMD側の材質設定においては、この「発光色」のパラメタが存在しないため、この分の情報が欠落し貧相な見栄えに拍車がかかる結果となっていましたw

    うp主のモデルの場合、特に肌色表現の差異が顕著でした。

    今後イチからモデルを作成する際はこのあたりも意識するとして、実際にテクスチャイメージまで完成したものをどうするかという問題ですが、今回はPhotoShop(または CLIPStudioPaint)の描画モード(合成モード)で回避しました。
    手順的には以下の通りです。

    1.発行色レイヤー作成
    前述した「発光色」と同じ色(R:16、G:16、B:32)で塗りつぶしたレイヤーを最上段に新規作成する。

    2.描画モード(合成モード)変更
    PhotoShopの場合は「1.」で作成したレイヤーの描画モードを「覆い焼き(リニア)-加算」に設定する。

    CLIPStudioPaintの場合は「1.」で作成したレイヤーの合成モードを「加算(発光)」に設定する。

    他にもスフィアマップの適用結果が微妙に違うような印象も受けました。
    このあたりは、微調整しつつMMD側で表示した際にベストとなるような調整を施しています。


    ●MMDでテクスチャが適用されない!
    たまにやってしまうのが「相対パス」と「絶対パス」の違いによる「MMD側でテクスチャが表示されない問題w」です。
    「テクスチャ」の設定で「相対パス化」するか、PMX出力時に「相対化」のチェックを付ける感じで回避可能です。


    【テクスチャの相対パス化】


    ●透明なテクスチャについて
    「テクスチャ」の形式を「.png」にした場合はアルファチャンネルによる透明なテクスチャも作成可能です。

    うp主のモデルにおいてはフリル部分について画像の一部が透明なテクスチャを使用しています。
    (板ポリに以下のようなテクスチャを割り当て)




    透明なテクスチャを使用した場合は描画順についても注意が必要となります。

    MMDを使用されている方はご存知の通り、奥に存在するものから先に描画しなければ望んだとおりに透明化されないケースです。

    xismoの場合は「シェーダーノード」の順番がMMDにおける描画順となるようですので、透明化テクスチャを使用しているシェーダーはなるべく後ろの方に配置します。








    ●その他、雑感
    一般的な話となりますが、3DCGモデルにおける材質(特にテクスチャ)の作りこみは最終的なルックの完成度にとって非常に重要だと思われます。

    特にテクスチャによる情報量のコントロール(主に増やす方)次第で、同じ造形でも結果が全然違うものになるというのが一通りマッピングの作業を終えた実感でもあります。

    今回制作している「初音ミク」では特にDX100をモチーフとした袖部分のテクスチャ作成に苦労しましたw

    当初はざっくりと雰囲気だけで描いたテクスチャを使用していたのですがどうにも納得がいかず、試しにネットで拾ったDX100画像を仮に割り当てたところ見栄えの説得力が全然違くてヘコみました(笑)

    さすがにそのままテクスチャとして流用はできないため、諸々資料を調べて最終的に以下のようなコンパネ画像をイラレで作りましたよ、ええ。




    縮小により最終的な解像度は落ちているとはいえ、やはりそれなりに書き込まれたものは説得力が違う感じですねw





    今回は材質およびマッピングまわりの作業について書いてみました。

    次回はいよいよボーンとウエイト関連の話です。
    今現在もウエイトの微調整で頭を抱えつつ、いまさら手戻りなんかもしている状態なのですが・・・
    とりあえず、間を開けずに投稿できればと思います。
    それでは、また次回ノシ



  • 広告
  • xismo(キスモ)でキャラモデリングに挑戦してみる vol.4

    2017-09-25 22:31

    フリーの3Dモデリングソフトウェア「xismo(キスモ)」を利用し、MMDキャラモデリング作成の顛末を綴る日記です。

    自分用の「備忘録」をメインにキャラモデリングの初心者たるうp主が作業の進捗具合をゆるい感じに報告する趣旨のテキストです。

    4回目の今回はローカル座標とスタンスの変更について書いてみます。
    てかこっちの更新をサボっている間にマッピングの作業もだいぶ進んで、今現在は↓のような状態になっています。




    前回の日記では「パンツを除いてモデリングか完了~」と書いていましたが、今回はパンツ(と他一部)を除いてマッピングが終了している状態ですw

    とりあえずUV展開とマッピングに関する諸々は次回に投稿する予定です。


    ■TスタンスとAスタンス
    前回の記事の最後に少しふれましたが、キャラクターモデル作成における初期ポーズは、両手を水平方向へ伸ばした「Tスタンス」と呼ばれる状態と、ハの字にした「Aスタンス」と呼ばれる状態が一般的なようです。

    MMDの場合は多くのモデルが「Aスタンス」を採用しているため、既存のポーズやモーションの互換性を考えた場合、「Aスタンス」を踏襲して作成することが望ましいと思われます。(初期ポーズが異なると正しいポーズやモーションとならないため)

    しかしながら、モデリングの作業に関してのみに言及すると「Tスタンス」の方が圧倒的に作り易いように思われます。
    これは両手を水平方向に伸ばした状態であれば、手や腕を作成したり調整したりする際に XYZの各座標軸に対し水平(または垂直)に編集を行うことができるためです。



    以上を踏まえて今回は「Tスタンス」で作りこみを行った後、「Aスタンス」へ変更する方式で作業を進めることにしました。


    ■スタンスの変更に関する考察
    スタンスを変更にするあたり、どのような方式が存在するか他のツールの用例なども参考にしつつ以下の2案を検討してみました。
    【方式1】ボーンを用いた変形
    いったん腕に対してボーンを適用し、ボーン変形モディファイアでスタンスの変更を行ったあと、変形をフリーズする。
    (某Blender関連の書籍で紹介されていた方式です)
    【方式2】ローカル座標ツールを使用した回転
    ローカル座標ツールを使用し、腕に関連するノードを回転する。
    今回は「方式2」で作業を行いました。
    というのも、うp主的にボーン・ウエイトの作業が未知の領域(笑)である点に加え、ローカル座標ツールを用いた方式の場合は後述するメリットを享受できそうに思えたためです。(実際メリットがあった)


    ■ノード情報
    まずは「Aスタンス」へ変更するための前準備とし、腕まわりのノード情報を下図のような感じで作成しました。



    「腕G」は空のメッシュノード(以降「親ノード」と呼称します)で、従属する子ノードの編集用に使用します。


    ■「Aスタンス」変更の作業手順について
    以下の手順で変更を行います。

    1.親ノードのローカル座標変更

    ノードツリーから親ノード(「腕G」)を選択します。



    この状態で「ローカル座標ツール」を選択し、



    ツールオプションにて「メッシュ変形」と「子を追従」のチェックを外します。(ココ重要



    この状態でローカル座標ツールを使用し、親ノードのローカル座標原点を回転の中心(腕の付け根辺り)へ移動します。
    (適宜、正面・側面等にカメラを切り替えて確認してください)




    2.親ノードの回転

    親ノードのローカル座標原点が決まったら、ツールオプションにて「メッシュ変形」と「子を追従」をチェックします。(ココ重要



    正面図からローカル座標の回転を行います。



    「Aスタンス」の角度は諸説(笑)ありますが、今回は「36度」としました。
    【注意】
    うp主の使用方法に問題がある可能性も考えられますが、スタンスの角度調節の際に「座標(ローカル座標)」から角度を直接入力した場合、編集中のデータが破損し undo も出来ない状態に陥る場合があります。(ただし保存済のデータは壊れません)
    上記の方法を試される場合は、事前にいったん保存を行うなどして万が一編集途中で破損しても元に戻せる状態にしておいてください。

    3.親ノードのローカル座標をコピー

    スタンスの角度設定が済んだら、[メニュー]-[ノード処理]-[ローカル座標をコピー]を実行します。



    再度、ツールオプションから「メッシュ変形」と「子を追従」のチェックを外します。(ココ重要



    各子ノードを選択し、[メニュー]-[ノード処理]-[ローカル座標をペースト]を実行し、親ノードのローカル座標情報を従属する子ノード全てへコピーします。(理由は後述)

    各子ノードへのコピーが済んだら、またまた「メッシュ変形」と「子を追従」をチェックしてください。





    4.肩と腕のマージ

    xismo の場合、同一のノードに限り頂点の結合が行えます。
    したがって腕と肩が別ノードのままだと頂点結合が行えないため、肩ノードを腕ノードへマージします。


    ノードをマージすることで、腕と肩の頂点を結合し自然な継ぎ目に編集できます。




    5.ローカル座標ツールを使用するメリットについて

    前述した通り、ローカル座標ツールを用いてスタンス変更を行った場合、後々の編集におけるメリットが存在します。(「3.」の手順でローカル座標のコピーを行ったのもこのためです。)

    はじめに記述した通り「Aスタンス」のように座標軸に対し水平(垂直)ではないオブジェクトに対する編集はめんどうな状態となります。
    これは「Aスタンス」変更後に微調整等が必要となった場合でも同様の問題が発生することを意味しますが、ローカル座標を用いることで解決することが可能です。

    xismo における頂点の編集には主にユニバーサルツールを使用しますが、ユニバーサルツールのオプションにて座標系の切り替えることで以下のような変更対象にあわせた編集が可能となります。

    肩を編集する場合はワールド座標を使用。




    腕から先を編集したい場合はローカル座標を使用。



    先ほど、親ノードからローカル座標をコピーしているため、ユニバーサルツールでローカル座標を指定した場合、腕が伸びる方向に向けて水平(垂直)に頂点編集が行える状態となります。



    以上、今回は主にスタンスの変更に関する内容をまとめてみました。
    次回はマッピングまわりの作業について投稿します。
    それではまた次回ノシ


  • xismo(キスモ)でキャラモデリングに挑戦してみる vol.3

    2017-09-10 21:552

    フリーの3Dモデリングソフトウェア「xismo(キスモ)」を利用し、MMDキャラモデリング作成の顛末を綴る日記です。

    自分用の「備忘録」をメインにキャラモデリングの初心者たるうp主が作業の進捗具合をゆるい感じに報告する趣旨のテキストです。

    3回目の今回は体のモデリング作業のなかで特に気になった点について、いくつかメモしてみます。

    今現在は↓のような感じで、ざっくりと全身パーツのモデリングが完了した状態(パンツ除くw)です。
    とりあえず細かい作りこみは後回しにし、全体のバランス把握を優先しました。




    ■ノードについて
    この連載の第1回目でも書きましたが、xismo の場合はメッシュ等のオブジェクトをノードと呼ばれるツリー状のまとまり単位に管理します。

    xismo の場合、現在アクティブになっているノードに対して編集を行うかたちになりますが、このとき他のノード内に存在するメッシュに対しては編集を行えません。

    つまりモデリングの作業を行うにあたり、ある程度共通的なパーツ単位にノードを作成することで、お互いが干渉せずに編集できるわけです。
    (「足」を作成中に「顔」の頂点も一緒に移動してしまった、、、等の事故が防げます)

    またノード単位で表示・非表示の指定も行えるため、邪魔なオブジェクトは一時的に画面から消して作業を行うことも可能です。

    一方で、以下のような制限も存在します。

    1.ノードを跨いだポリゴンの作成が行えない
    2.複数のノード選択し、まとめて移動したり拡縮できない

    「1.」については一体となるオブジェクトについてはひとつのノードにまとめるといった対策が必要となります。

    ノードの結合(CTRLキーを押しながら結合したいノードの上に移動)も行えるため、途中までは別ノードで作成し、最終的にひとつのノードにまとめたうえで頂点を結合するといった作り方も可能かと思います。

    今回は「手」を作成する際に、「手のひら」と「指」をそれぞれ別ノードで作業し、最終的にひとつのノードに結合する流れで作業を行いました。




    なお「スナップ」のオプションから「他ノードにもスナップ」を設定することで、頂点の結合は行えませんが他ノードの頂点と同じ位置に自ノードの頂点を移動することは可能です。




    「2.」については、ノードに親子関係をもたせローカル座標ツールを使用することで編集が可能となります。

    詳細な方法については「■バランスの調整(サイズ変更)」に後述します。
    とりあえず現時点でのノード情報は下図のような感じになっています。




    ■バランスの調整(サイズ変更)
    体の各パーツが出来上がってくると、どうしても全体のバランスを再調整しなければならないケースが発生します。

    今回も胴体がある程度かたちになった時点で顔がデカすぎることに気が付きまして、顔全体の大きさを変更しなければならなくなりましたw
    また顔の作成位置が上すぎて体全体を下に移動する必要もありました。

    前述した通り xismo では複数ノードをまとめて編集できないため、ノードを分割して作成している場合にそのままだと全体をまとめて移動したり拡縮できない状況になります。

    このあたりはモデルの制作前にある程度想定できた問題でしたので、とりあえず以下のような手順で実現できることを検証したうえで作業に着手しました。
    (今回もこの方法でバランスの調整を行っています)

    1.ノードに親子関係をもたせる
    親子関係となったノードの場合は親ノードのローカル座標を変更することで、子ノードに対する移動・拡縮も可能となります。
    この機能を利用するため、親ノードとして「メッシュを作成しないメッシュノード」(以降「ダミーノード」)を作成し、その下に実際のメッシュノードをぶら下げるかたちで作成しました。


    2.移動・拡縮
    移動・拡縮をまとめて行う場合は、ダミーノードを選択し「ローカル座標ツール」を使用します。

    このとき「ローカル座標ツール」のオプションで「メッシュ変形」「子を追従」がチェックされていることを確認します。




    ダミーノードのローカル座標を変更することで、従属する全ての子ノードも移動・拡縮されます。


    3.ローカル座標のリセット
    必須の手順かどうか微妙なところでもありますが、変更したローカル座標は毎回リセットしていました。(親・子共に)

    まず「ダミーノード」を選択し「ローカル座標ツール」のオプションで「メッシュ変形」「子を追従」のチェックを外した状態で、




    「座標(ローカル座標)」から位置・拡縮・回転を全て初期状態に変更し「適用」ボタンを押下します。




    [メニュー]-[ノード処理]-[ローカル座標をコピー]を実行したのち、従属する子ノードそれぞれに対し、[メニュー]-[ノード処理]-[ローカル座標をペースト]を実行することで、子ノードのローカル座標もリセットされます。




    以上の手順で全体のバランス調整が行えますが、ほかにもっとイイ方法がありそうな気もする件。

    まぁ当面はこの方式で作業を進めようと思います。


    ■TスタンスとAスタンス
    冒頭のキャプチャ画像を見ていただくとわかる通り、今現在は「Tスタンス」と呼ばれる状態(両手を水平に広げた状態)で作業を進めています。

    しかしMMDモデルの場合は、既存のポーズやモーションの互換性も考慮し「Aスタンス」と呼ばれる両手を「ハの字」に広げた状態で作成するのが望ましいと思われます。

    最終的に「Aスタンス」へ変更しますが、「Tスタンス」から「Aスタンス」への変更手順も含めて作業の報告がてら、次回にまとめる予定です。


    それではまた次回ノシ