以下の内容はhttps://redhologerbera.hatenablog.com/entry/2024/12/26/234336より取得しました。


RenderDocを使用して描画しているモデルをBlenderに読み込む

本日はモデリング枠です。

先日Unityを使用したアプリケーション開発時にCanvasを使用したUIコンポーネントのメッシュをエクスポートしたいと思いましたが、Meshクラスを使用していない描画などでは、FBXExporterなどのツールが使用できないことがあります。

今回はRenderDocを使用してこういった特殊なメッシュをBlenderにエクスポートします。

〇環境

・Windows11PC

・RenderDoc

・Untiy2022.3.26f1

・Blender4.1

〇RenderDocを使用してBlenderでメッシュを再現する

今回はMRTK3のCanvasDialogプレファブで構成されるPlateオブジェクトのメッシュを抽出します。

このオブジェクトは前述の通り、MeshRendereではなくCanvas Element Rounded Rectコンポーネントによりメッシュが作成されています。

①RenderDocをロードします。

②RenderDocのキャプチャを撮影します。

③対象のメッシュのイベントを選択します。

Mesh Viewerウィンドウへ切り替えます。

CSVとしてメッシュデータをエクスポートします。

Blenderで以下のスクリプトを実行します。

なおCSVのファイルパスは任意に指定します。

import bpy
import csv

# CSVファイルのパス
csv_file = r"C:\Users\\Desktop\test.csv"

# 頂点と面のデータを格納するリスト
vertices = []
normals = []
uvs = []
faces = []

# CSVデータの読み込み
with open(csv_file, 'r') as f:
    reader = csv.reader(f)
    header = next(reader)  # ヘッダーをスキップ
    for row in reader:
        # POSITIONデータの抽出
        x = float(row[2])  # POSITION.x
        y = float(row[3])  # POSITION.y
        z = float(row[4])  # POSITION.z
        vertices.append((x, y, z))
        
        # NORMALデータの抽出
        nx = float(row[5])  # NORMAL.x
        ny = float(row[6])  # NORMAL.y
        nz = float(row[7])  # NORMAL.z
        normals.append((nx, ny, nz))
        
        # TEXCOORD0データの抽出 (UV座標)
        u = float(row[16])  # TEXCOORD0.x
        v = float(row[17])  # TEXCOORD0.y
        uvs.append((u, v))

# 面を自動生成(例: トライアングルとして繋げる)
for i in range(0, len(vertices) - 2, 3):
    faces.append((i, i + 1, i + 2))

# メッシュ作成
mesh = bpy.data.meshes.new("CustomMesh")
mesh.from_pydata(vertices, [], faces)

# カスタム法線を設定
mesh.normals_split_custom_set(normals)

# UV設定
uv_layer = mesh.uv_layers.new()
for i, loop in enumerate(mesh.loops):
    uv_layer.data[i].uv = uvs[loop.vertex_index]

# オブジェクト作成
obj = bpy.data.objects.new("CustomObject", mesh)

# スムーズシェーディングの設定
for poly in mesh.polygons:
    poly.use_smooth = True  # 各ポリゴンにスムーズ設定を適用

# シーンにリンク
bpy.context.collection.objects.link(obj)

# スムージング角度を有効化(Blender 4.1以降)
bpy.context.view_layer.objects.active = obj
bpy.ops.object.shade_smooth()  # オブジェクト全体にスムーズシェーディングを適用

これによってRenderDocで取得したメッシュがBlenderでも再現されます。

本日は以上です。




以上の内容はhttps://redhologerbera.hatenablog.com/entry/2024/12/26/234336より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14