見出し画像

動画補足:解説 ! VroidStudioで作成した VRMを wonderdynamics (WonderStudio) でCustom Characterとして使えるようにする


上の動画の補足とか書く

動画内で使わせていただいたアプリやアドオン

blender.3.6.2

Validation Addon

VRM Add-on for Blender

WonderStudio

追記

動画内では特に書かなかったが導入して重宝したアドオン

Spreadsheet Batch Renamer】スプレッドシートで名前を一括変更したり元に戻せるアドオン【Blenderアドオン】
Boneやブレンドシェイプの名称を指定の名称に変えると変換がしやすいので
忘却野さんのこのアドオンが大変重宝しました。

忘却野さんのアドオン使ってVroidから指定のBone名に一括変換する際に使ったcsv置いておきます。

表情の方もVroidのブレンドシェイプから一括変換したいですね…(使用を把握すれば出来るはず)ドキュメントの読み込みが足りないので完全にはできてません!

Mtoonのままだと光の影響がなくてのっぺりしちゃう!

MtoonのLit Color TextureとNormal Map Textureだけ生かしてBDSFに変えるスクリプトをCOPILOTに描いてもらったよ! blenderのテキスにコピペして実行してみてね

import bpy

# すべてのマテリアルをイテレート
for mat in bpy.data.materials:
    # マテリアルがノードを使用していることを確認
    mat.use_nodes = True
    nodes = mat.node_tree.nodes
    links = mat.node_tree.links

    # Mtoon1BaseColorTexture.Image (Lit Color Texture) と Mtoon1NormalTexture.Image (Normal Map Texture) ノードを探す
    mtoon1_base_color_texture_node = None
    mtoon1_normal_texture_node = None
    for node in nodes:
        if "Mtoon1BaseColorTexture.Image" in node.name:
            mtoon1_base_color_texture_node = node
        elif "Mtoon1NormalTexture.Image" in node.name:
            mtoon1_normal_texture_node = node

    # Mtoon1BaseColorTexture.Image (Lit Color Texture) と Mtoon1NormalTexture.Image (Normal Map Texture) ノード以外のすべてのノードを削除
    for node in nodes:
        if node != mtoon1_base_color_texture_node and node != mtoon1_normal_texture_node:
            nodes.remove(node)

    # Principled BSDF シェーダーノードを作成
    principled_bsdf_node = nodes.new(type='ShaderNodeBsdfPrincipled')

    # Mtoon1BaseColorTexture.Image (Lit Color Texture) を Principled BSDF の Base Color と Alpha に接続
    if mtoon1_base_color_texture_node is not None:
        links.new(mtoon1_base_color_texture_node.outputs['Color'], principled_bsdf_node.inputs['Base Color'])
        links.new(mtoon1_base_color_texture_node.outputs['Alpha'], principled_bsdf_node.inputs['Alpha'])

    # Mtoon1NormalTexture.Image (Normal Map Texture) がある場合、Normal Map ノードを作成して接続
    if mtoon1_normal_texture_node is not None:
        normal_map_node = nodes.new(type='ShaderNodeNormalMap')
        links.new(mtoon1_normal_texture_node.outputs['Color'], normal_map_node.inputs['Color'])
        links.new(normal_map_node.outputs['Normal'], principled_bsdf_node.inputs['Normal'])

    # Principled BSDF を Material Output に接続
    material_output_node = nodes.new(type='ShaderNodeOutputMaterial')
    links.new(principled_bsdf_node.outputs['BSDF'], material_output_node.inputs['Surface'])

# 成功メッセージを出力
print("すべてのマテリアルが、既存の Mtoon1BaseColorTexture.Image (Lit Color Texture) と Mtoon1NormalTexture.Image (Normal Map Texture) を保持して、Principled BSDF シェーダーに更新され、アルファも接続されました。")


これが
こうなる。あとは適宜調整してね。

何故動画を作ったか

昨年知ったWonderStudio!実写の人物の動画を3Dモデルに置き換えるのが便利そう!と思ったのですがカスタムcharacterのアップロードで詰まりまくって、サポートに相談に乗りまくってもらって半月くらいかけてか何とかキャラクターをアップロードしました。あまりに大変で新しいキャラクターをアップロードすることはおろか、サービスを触ることすらしていませんでした。
しかしふと気になって久しぶりに触ったところ、顔が見えていなくてもしっかりモーションキャプチャーしてくれるのが、自転車に乗るVtuberの私に合ってると感じました。視聴者さんに借りた動画で出来たのが以下

これがかなりいい感じだったので改めて別のモデルをアップしたくなり調べたところ、検証用のアドオンが完成していることを知り、再度キャラクターをアップロードを試み始めました。アドオンを入れると、アーマチュアの名前を変え、ボーンを指定するだけで変換できたのでうれしくてチュートリアル動画も作ってみました。最近動画編集も頑張っているのでいい練習になりました!

2024.05.11 追記

Vroid以外の方法で作ったモデルは上記の方法だとうまくいきませんでした。
そんなとき は以下のようにデータの構成、名称を変えてみてください
アーマチュアの名前…BODY_BODY
体のメッシュの名前…myCharacterSkeleton_BODY
顔のメッシュの名前…FACE_FACE
これで2回の成功例があるので多分これで行ける!

この記事が気に入ったらサポートをしてみませんか?