このチュートリアルでは、BlenderのPython関数、UV export layoutを使用して、シーン内の全ての利用可能なMESHオブジェクトのUV mapsレイアウトをエクスポートする方法を学びます。
動画の書き起こし
こんにちは!
このチュートリアルでは、BlenderのPython関数、UV export layoutを使用して、シーン内の全ての利用可能なMESHオブジェクトのUV mapsレイアウトをエクスポートする方法を学びます。
このスクリプトは、3Dストックウェブサイトで3Dシーンを公開する際など、UV mapsを画像として提供する必要がある場合に役立ちます。
このチュートリアルはBlenderのバージョン3.3を使用して記録されました。時々、Blenderの開発者はBlender Python APIs(BPYと略します)に変更を加えますが、このスクリプトはバージョン3.0以降で動作するはずです。
使用するbpy ops関数は非常にシンプルで、作成する画像のファイルパスとUVサイズ(ピクセル単位)の2つのパラメーターが必要です。しかし、シーン内の全ての利用可能なMESHオブジェクトに対してこれを使用する必要があるため、MESHオブジェクトに対してFORステートメントを使用します。
さらに、私はファイルの拡張子を指定します。これはデフォルトではPNGです。
実際には、レイアウトをPNGとしてエクスポートしますが、SVGやEPSファイルとしてUVレイアウトをエクスポートすることもできるので、指定方法を示すためにこれを行います。
多くのオブジェクト、それぞれに独自のUVレイアウトが含まれているため、私のアセットであるDesk set 3を使用しています。
スクリプトがすべてのレイアウトをエクスポートする方法を見ていきましょう。
もちろん、このチュートリアルをフォローし学ぶために、このアセットを持っている必要はありません!
さて、始めましょう!
BLENDファイルを開きます。
新規のファイルから始めることもできますが、プロジェクトと同じフォルダにPNGファイルを保存するため、どこかに保存する必要があります。
基本的なインポートをいくつか行いましょう:
import bpy
from bpy import *
前述の通り、export_layout関数は2つのパラメータを必要とするので、2つの変数を定義しましょう。
関数自体に値を書くこともできますが、わかりやすさを重視してここで定義します:
UVpath = bpy.path.abspath("//") + "UV-LAYOUT---"
UVsize = (2048, 2048)
ご覧の通り、bpy path abspathはBLENDファイルのディスク上の絶対パスを返します。
すべてのPNGファイルに接頭辞、U V LAYOUTを追加しますが、これを変更したり削除したりすることも可能です。
U V sizeパラメータは、作成する画像のピクセル単位の寸法である2つの数値のタプルです。ここでは2048と書いているので、2kの画像を作成します。
シーン内の利用可能なすべてのMESHオブジェクトで関数を実行するには、FOR文を作成する必要があります。
したがって、以下のように記述することができます:
for o in bpy.data.objects:
そして、FOR文のブロック内に(テキストをインデントするのを忘れないでください)、オブジェクトのタイプにフィルターを追加することができます:
if(o.type=="MESH"):
条件は明確です:現在のbpy data objectのタイプはMESHでなければなりません。
以下の文はIF内に配置する必要があるので、再度、テキストをインデントするのを忘れないでください!
bpy.ops.objects.select_all(action='DESELECT');
これは他のすべてのオブジェクトの選択を解除するために、毎回行う必要があります。そうしないと、重なった2つ以上のUVマップを持つ画像が得られてしまいます。
bpy.context.view_layer.objects.active = o
この代入は、シーンのアクティブなオブジェクトを設定し、現在のメッシュをcontext.view_layer.objects.activeに割り当てます。
これは、次のOPS(Blender Python operation)が一つのアクティブなオブジェクトに対して実行されるためです。
複数のオブジェクトを選択できますが、一度にアクティブなオブジェクトは一つだけであることを覚えておいてください。
bpy.ops.uv.export_layout(filepath = UVpath + o.name, size = UVsize, mode='PNG')
ops文は、アクティブなオブジェクトのレイアウトを、U V path変数によって与えられたファイルパスにエクスポートします。これには、U V LAYOUTの接頭辞とアクティブなオブジェクトの名前が含まれ、ピクセル単位で指定されたサイズが適用されます。

以前述べたように、U VレイアウトをPNG、EPS、またはSVGファイルとしてエクスポートすることができます。
出力フォーマットは、私が示したように、modeパラメータで指定できます。
出力フォルダを見てみると、メッシュの数だけ画像が作成されていることがわかります。

私の3Dモデル「Desk set 3」内のメッシュは、重複しないU V島と同じレイアウトを共有しているため、すべてのオブジェクトをまとめ、スクリプトを再度実行すると、アセットの重複しないU Vレイアウトマップが1つだけ得られます。

このチュートリアルを終える前に、あなたに課題を出します:このスクリプトを編集して、シーン内の利用可能なメッシュの2kと4kのU V layoutsをエクスポートし、画像に2つの異なる接頭辞(例えば、U V 2 KとU V 4 K)を提供してください。
このチュートリアルはこれで終わりです!また近いうちにお会いしましょう!