リンリンの物置き場

ゲーム、モデル制作の記録など。

制作記録05/30

シェイプキーについて勉強しました。

残りはUnityへの導入ですがいったん飛ばそうと思います。もうモデリングを始めたくてしょうがないです。

余談:ChatGPTくん有能すぎん?

体をつぶす貫通対策の仕方について聞いたらご丁寧に全部解説して、スクリプトまで書いてくれました。たまげたなぁ...

Q:服を外す場合も考慮して、服を着た時は体のポリゴンを縮めて服を着ない時は通常通りの形にする機能の実装方法を教えてください。

服を着た時に体のポリゴンを縮め、服を外した時は通常通りの形に戻す機能を実装するためには、以下の手順を参考にすることができます。

モデルの準備:

服と体のモデルを別々のオブジェクトとして作成します。
服のモデルは、体の形状を反映した状態で作成します。
ウェイトペイントの設定:

体のモデルと服のモデルの間にウェイトペイントを使用して接続を設定します。
体のポリゴンが縮む範囲を制御するために、服のモデルの一部の頂点に対してウェイトを設定します。
Pythonスクリプトの作成:

BlenderPython APIを使用して、服を着た状態と服を外した状態の切り替えを制御するスクリプトを作成します。
スクリプトは、オブジェクトのウェイト値を変更することによって体のポリゴンを縮めたり元の形状に戻したりします。
以下に簡単な例を示します。この例では、体のポリゴンを縮めるためにウェイト値を0.1に設定し、元の形状に戻すためにウェイト値を1.0に設定しています。

python
import bpy # 服のモデルと体のモデルの名前 body_name = "Body" clothes_name = "Clothes" # ウェイト値を設定する関数 def set_weight(obj, vertex_group, weight): bpy.context.view_layer.objects.active = obj bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.select_all(action='DESELECT') bpy.ops.object.vertex_group_set_active(group=vertex_group) bpy.ops.object.vertex_group_select() bpy.ops.object.vertex_group_assign(weight=weight) bpy.ops.object.mode_set(mode='OBJECT') # 服を着た状態にする関数 def put_on_clothes(): body = bpy.data.objects[body_name] clothes = bpy.data.objects[clothes_name] # 体のポリゴンを縮めるウェイト値を設定 set_weight(body, "Shrink", 0.1) # 服を表示し、体に対してウェイトを設定 clothes.hide_viewport = False set_weight(clothes, "Shrink", 1.0) # 服を脱いだ状態にする関数 def take_off_clothes(): body = bpy.data.objects[body_name] clothes = bpy.data.objects[clothes_name] # 体のポリゴンのウェイト値を元の状態に戻す set_weight(body, "Shrink", 1.0) # 服を非表示にし、ウェイトを削除 clothes.hide_viewport = True set_weight(clothes, "Shrink", 0.0) # 服を着た状態にする put_on_clothes() # 服を脱いだ状態にする take_off_clothes()

このスクリプトBlenderスクリプトエディタや外部のテキストエディタで保存し、実行することで、服を着た状態と服を脱いだ状態を切り替えることができます。必要に応じてスクリプトをカスタマイズしてください。

なお、この例は基本的なアプローチを示すものであり、より複雑なシステムや制御方法を実装する場合にはさらなるカスタマイズが必要になる可能性があります。