さくらいだい

ゲーム系キャラクターモデラー 日々重要だと感じたものを自分用に箇条書きしています。自分向けのTIPSです。

さくらいだい

ゲーム系キャラクターモデラー 日々重要だと感じたものを自分用に箇条書きしています。自分向けのTIPSです。

最近の記事

オブジェクト同士のスナップ

オブジェクトのface同士をスナップできる。便利。

    • Maya上のオブジェクトをX線化するMEL

      X線化するアイコンをMELで再現したもの。ホットキーに登録することで効率化を図れる。 { $panel = `getPanel -withFocus`; if(`getPanel -typeOf $panel` == "modelPanel") modelEditor -e -xray (!`modelEditor -q -xray $panel`) $panel; }

      • Maya上で選択したオブジェクトのみを表示するMEL

        選択したオブジェクトのみを表示させることができる。ホットキーにMELを登録すればより効率的に作業を進められる。 global proc obj_isolate() { global int $onoff; if($onoff == 1) { $onoff = 0; } else { $onoff = 1; } string $hoge = `paneLayout -q -pane1 viewPanes`; enableIsolat

        • 肘のトポロジーの最大公約

          肘やひざといった人体のなかで形状が大きく変化する関節箇所のトポロジーはどういう形が「制作時に作りやすく、ウェイト調整がしやすく、見た目にもわかりやすく、美しいか」の検証の末、この形にいきついた。 ハイエンドのゲームモデルであっても使えるポリゴンが無限にあるわけではなく、ポリゴンをたくさん使ったからと言って美しいシルエットになるというわけでもない。 映像用のフォトリアルの造型であればリアリティを意識した形状を求められるがゲームモデルは形状のわかりやすさはかなり優先される

          brSmoothWeightTool

          とても優秀なツールです。MayaのskinWeightEditorとどこが違うのかというといくつかありますが、特に決定的に優秀な面は2つ。 「意図しないジョイントのウェイトが振られることがない」と「スムーズな変形をブラシで容易に調整が可能」の2つ。 このツールを使う場合にオススメなのはインフルエンス数(ジョイント間の影響範囲のこと)を「2」で設定して、特定のジョイントに頂点ウェイトを「1」でバッキバキにあらかじめ振っておく。その後、インフルエンス数を「4」にしてスムーズで

          続・美しいスカートのアールの実現

          先日書いたスカートの美しいアールを実現するための考察をさらに推し進めた結果、無事に最適解のひとつを見つけたので記録として残しておくことに。 色々な試行の中でわかったことが「ジョイント間のエッジ数が増えるほどきれいなアールを描くのは困難になる」ということ。 それはジョイント同士の適切な引っ張り合いで頂点が綺麗なアールを描く必要があるため、頂点の数が増えるほど調整が非常にむずかしくなる。 個人的にジョイント間の頂点数は3か5がやりやすく、7以上になると曲線が深くなりすぎて凹

          続・美しいスカートのアールの実現

          スカートのウェイトとシルエット

          ロングスカートのような長い揺れものを綺麗なシルエットやラインにするにはどのようなウェイトを振るのが適切なのかを検証した。 結論として、最も近接のジョイント周辺の頂点に「1」を振るのが形状としてゆがみの少ないシルエットになる。 上記はスカート用の簡易メッシュ このメッシュをケージとしてオリジナルのメッシュにウェイトを移植している。 問題だったのは周辺ジョイントに均等にウェイトを振る形を取ると回転したときに各ジョイント間で不要な凹のアールができてしまうことだった。 これ

          スカートのウェイトとシルエット

          3Dくささ

          3D臭さがでているキャララクターモデルと魅力的なキャラクターモデル 出来不出来は作り手によるところがとても大きい。この2つには一体どれほどの壁があるのだろうか? そして、この壁は具体的にどんな要素から構成されているのかを考察してみたいと思う。 そもそも3Dくさいモデルはどんなものかパッと思い浮かべてみて思いつくのがバタ臭かったり、無駄にごてごてしていたり、形が狙った造形と異なりプリミティブな原形を残している場合だと考えられる。 自分はこれを「立体情報の取捨選択ができて

          トランスフォームノードの特性

          オブジェクトにはトランスフォームノードとシェイプノードの2種類があり、形状を座標に配置するのがトランスフォームノードの役割だ。 そのトランスフォームノードはオブジェクトを結合した場合などで単体として残っていることがよくある。 この段階では、結合したオブジェクトにはpolyuniteのヒストリーが残っていると内部的にはまだ結合したオブジェクトと結合前のオブジェクトにあったトランスフォームノードはつながったままになっている。 そのためヒストリーを消去しないまま、残されたトラ

          トランスフォームノードの特性

          シーンサイズの最適化のメリット

          FIXのモデルにも内部に不要なノードが残っている場合が多い。 この場合、まず必要なオブジェクトのみを選択して.ma形式で別ファイルにする。これで不要なノードを消去することできる。 そのうえでシーンサイズの最適化を行う。 シーンサイズの最適化には不要なヒストリーを消去したりできるぞ! 例えば、 分割しているオブジェクト群を一つに結合した際にできるPolyUniteというノードは、デフォーマーを除いたヒストリーを使用しても消去することができない場合があったりする。 し

          シーンサイズの最適化のメリット

          DoraSkinWeightのfileとobjの違い

          DoraSkinWeightのウェイト値の保存にはfileとobjの2種がある。 保存データをシーン内に格納するか外部にファイル化するかであって、ウェイト自体の保存に違いはない。 obj化するとアトリビュートに各ウェイト値を格納したトランスフォームノードが生成される。頂点数が少ない場合は特にきにしなくてよいが、ポリ数が10万近くなるとかなりシーンのファイルサイズが大きくなるので注意をしたほうがいい。シーンを開くのにも時間がかかるようになる。 objだとそのシーン内でしか

          DoraSkinWeightのfileとobjの違い

          Unable to find the bind pose for

          スキニングしたモデルをFBX形式で出力する際にでてくるトラブルシューティングのひとつ これは要するに「バインドポーズが見つかりません。再設定よろ!」という意味。長々でてくるからおっかなびっくりだけど、根は単純だ。 今回、まったくバインドポーズに戻すことなくスキニングをしてしまった。その過程でインフルエンスの追加を行った。それも大量に。結果的に不要なバインドポーズ群が爆誕してしまっていたのだ。 この問題は、バインドしなおしてウェイトを振りなおすことで解決するぞ! 1.必

          Unable to find the bind pose for

          髪のような長いメッシュのウェイト移植のポイント

          ケージを使って髪にウェイトを移植する際に、ケージの頂点のウェイトの割り振りをジョイント前後0.5ずつにする。ガタガタになるけど、ハンマーでたたくことで比較的綺麗に慣らすことができるぞ。 ハンマーで対応しきれない凹凸はウェイト値を変えて微調整すると良い。これなら比較的短時間で良い結果を得られる。多くのジョイントにウェイトを与えるのは最後にした方が良い。

          髪のような長いメッシュのウェイト移植のポイント

          skinClusterの結合

          複数のオブジェクトをまとめるとスキニングされたオブジェクトそれぞれのskinClusterノードが別々に格納される。 ひとつにまとめたいときは結合のオプションの項目に「スキニングの結合(skinning Combine)」をチェックするとskinClusterノードをまとめてくれるぞ!

          skinClusterの結合

          ソースメッシュとベースメッシュの順番

          別オブジェクトで左右対称のものにウェイトをミラーするときは、ソースメッシュ(ウェイト情報をもっているほう)、次にベースメッシュ(ミラーで移植したいほう)の順で行うと良い。

          ソースメッシュとベースメッシュの順番

          不要なbindposeノードの削除

          再バインド等により過去のbindposeノードが出力に残ってしまう。ヒストリー消去でも消すことができないので、この場合はノードエディタを開き、表示された不要なノードを選択>backspaceで消去することができる。 親のトランスフォームノードの不要ノードを削除すれば子のノードも自然に消える。

          不要なbindposeノードの削除