日: 2026年3月7日

  • blender 5 – bodyに服を着せる方法(2),bodyの一部を複製し服meshを作るとarmatureされたbodyの形の変化にフィットできる [2025/03/07]

    blender 5 – bodyに服を着せる方法(2),bodyの一部を複製し服meshを作るとarmatureされたbodyの形の変化にフィットできる [2025/03/07]

    はじめに

    bodyを作ても服を着せないと文化的でないので,この記事では,armatureで動くようにしたbodyに追随するように服を作る。

    armatureで bodyを動かすことが可能になっているのなら,bodyのmeshの一部を複製し別objectにする.この服objectは,bodyより外側に大きくすめばシャツなどインナーの出来上がりだ.

    注) この記事内容は,何が必要なのかを記録した備忘記録なので初学者では実行は難しいかもしれない.詳細を記録するのは大変なので先ずは骨子をここに記する.いずれは詳細を示せればいいなと思う.


    服objectを作る

    下図は,腰から太もものmeshをもとにして,その複製でスカートの元objectを作り,太もものedgeを使ってfaceを追加したところになっている.「へそ」がまだ残っているので,これはフラットにしていく.元objectと追加した面の結合処理も必要.追加faceには補間としてloop cut処理も必要だが,この記事では述べていない.

    Image
    Image
    1. body objectをediti modeで服にするvertexを選択する.
    2. Shift + D (複製を作る)
    3. LMB > separate > selected (別objectにし,名前を付ける)
    4. Object modeにして服objectを選択
    5. Edit mode
    6. A key (全vertexを選択)
    7. 外側に大きくする(なにかの方法にて実施.僕は自作add-on使用*1)
    8. スカートなど,左右の足の間を補完する(*2)
    9. 追加した面の補間edgeを追加(*3),及び面を整える(*4)
    10. Materialを設定(色を付ける)
    11. animationで動きを確認する

    *1: 単にS key + マウスカーソル操作でもとりあえずは可能.

    *2: 垂直のedgeを選択しE key > G key > Drag(中央に移動)して面を増やす.中央に空間が空く場合は,mirror modifierの設定をいじる

    *3: 法線を追加したら,一旦すぐにobject modeにして確定させる.そうでないと予期しないことが起こる

    *4: 面を整えるには,Edit modeで,A key > Shift Nで法線を整える


    Shape Key

    bodyにshape keyを設定しているなら,服objectもbodyにフィットさせていないと具合が悪い.別記事で解説しているShrink wrapもいいが,なかなか思い通りのフィットができない.そこで,driverを服objectのShape keyに設定してやると追随可能となるので,これらのツールはAI君に作らせた.

    1. bodyからmeshを複製して別の服objectにすると,shape keyも引き継がれるので,服objectは,独立してshape keyで操作が可能になっている
    2. そのままでは,bodyのshape が変化したときに自動フィットはしない
    3. そこで,body shapeのそれぞれに対応する服object shapeを同期させてやれよいことになる
    4. 解決策は,bodyから服objectにshape keyを同期させことになる.それにはdriverを使う

    まとめ

    1. bodyがすでに設計されていること
    2. bodyには,armatureによるboneが設定されていること
    3. bodyには,shape keyが設定してあること
    4. 以上の前提でbodyのmeshの複製により服objectを作る
    5. 以上の作業でbodyの動きに合わせて動く服ができあがる
    6. shape keyもdriverで同期させてやると,例えばbodyの腕を太くするshape keyの変更に合わせて服の腕も自動的に太くさせることが可能となる
    7. 追加,どうしてもmeshが滑らかにならない場合は,modifierのweightednormalを配置するといい.

    編集履歴

    2026/03/07, KenJin