Help us understand the problem. What is going on with this article?

Blender2.81以降で、Shapekeyを持ったオブジェクトのModifierを適応したオブジェクトを得る方法

9日が空いていたので書きました。

なんでもいいからワンクリックでさせてくれ

アドオンを御用意しました。

ただし、いきなりいじると参照が弱いのか落ちるので、実行したら保存して開き直すことを推奨します。

適応したいメッシュオブジェクトを選択し、虚無を右クリックからAdd Modifier Applied Objectを実行するととなりに出来ます。
https://github.com/iCyP/Add_Modifier_Applied_Object_forBlender2_8 から
1. Clone or Download からZIP DOWNLOAD
2. zipをそのままaddon install
3. testingから有効にする
4. あとは実行するだけ

説明

2.80以前からの変更概要:2.81からto_mesh()で得たメッシュは一時的なものとなり、直接オブジェクトの作成のソースにすることができなくなりました。
そのため、to_mesh()で得たメッシュをcopy.copy()で複製したものをオブジェクト作成のソースにする必要があります。
いいたかったことはそれだけ。

ではやる事(スクリプトベース)(上のアドオンにコメントをつけたようなものです)

ob_eval = base_obj.evaluated_get(bpy.context.view_layer.depsgraph)
#にて、現在ビューポートにあるメッシュの状態を持ったオブジェクトを入手します。
tmp_mesh = ob_eval.to_mesh().copy()
#to_mesh()でモディファイアがApplyされたメッシュを入手し、copy.copy()で複製します。
#これをシェイプキーを一個のみずつ値を1にして、すべてのシェイプキーのメッシュを得ます。
#得たメッシュを
meshs = [bpy.data.objects.new(s.name,s) for s in shapes[1:]]
for s in meshs:
    context.collection.objects.link(s)
#のような形でシーンに紐づけます
#以下のコードで頂点グループをベースから適応後に転送します
for vg in base_obj.vertex_groups:
    dup_obj.vertex_groups.new(name=vg.name)
    #元のオブジェクトにある頂点グループの名前で、新しいオブジェクトに空の頂点グループを作る。
mod = dup_obj.modifiers.new(name="tmp", type="DATA_TRANSFER")
mod.object = base_obj
mod.use_vert_data = True
mod.data_types_verts = {'VGROUP_WEIGHTS'}
bpy.ops.object.modifier_apply(apply_as='DATA', modifier=mod.name)
#ここまででDATA_TRANSFERモディファイアで頂点グループを転送し、適応します。
    #shapekey_transfer
    #シェイプキー用メッシュをすべて選択し、適用後用オブジェクトをアクティブにしたのち、
    #blenderの機能で一気にシェイプキーを転送します
    dup_obj.shape_key_add(name="Basis")
    bpy.ops.object.join_shapes()
    #一時的に作成した、シェイプキー用メッシュオブジェクトとそのオブジェクトを削除します
    for s in shape_objs:
        bpy.data.objects.remove(s)
    for shape in shapes[1:]:
        bpy.data.meshes.remove(shape)
    #マテリアルスロットにマテリアルが割り当てられていないので、もとのオブジェクトから割当ます。
    for fmat, tmat in zip(base_obj.material_slots, dup_obj.material_slots):
        tmat.material = fmat.material

雑文ご拝見ありがとうございました。

iCyP
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away