こんにちは!

このチュートリアルでは、Blender 3.0 (Alpha)export_layout関数を使用して、シーンで使用可能なすべてのMESH オブジェクトのUVマップ(またはLayouts)を書き出す方法を説明します。

このスクリプトは、3D シーンを 3D ストック Web サイトで公開する場合などに、UV マップをPNG 画像として提供する必要がある場合に役立ちます。

私たちが使用するbpy.ops関数は、実際には非常に簡単です: 2 つのパラメーターが必要です(作成するイメージのファイル パスとピクセル単位の UV サイズ), しかし、シーンで利用可能なすべての MESH オブジェクトに使用する必要があります, そのため、MESH オブジェクトに対してFOR ステートメントを使用します。

まず、BLENDファイルを開きましょう。新しいファイルから始めることもできますが、プロジェクトの同じフォルダに PNG ファイルを配置するため、どこかに保存する必要があります。

BPY 3 UV export tutorial 1

基本的なインポートを行いましょう。

 import bpy

 from bpy import *

前に述べたとおり、export_layout関数には 2 つのパラメータが必要なので、2 つの変数を定義しましょう (関数自体に値を書き込めますが、ここでは明確にするために定義します)。

 UVpath = bpy.path.abspath(“//”) + “UV-LAYOUT---”

 UVsize = (2048, 2048)

BPY 3 UV export tutorial 2

ご覧の通り, “bpy.path.abspath " は、BLEND ファイルのディスク上の絶対パスを生成します; すべての画像ファイルにプレフィックス(“UV-LAYOUT---”)を追加しますが、変更または削除することができます。

UVsize パラメータは、作成する画像のサイズtupleである 2 つの数値の組です。私は2048を書いているので、2kの画像を作成しています。

シーンで使用できるすべてのMESH オブジェクトに対して関数を実行するには、FOR ステートメントを作成する必要があります:

for o in bpy.data.objects:

次に、FOR ステートメントで(だから:テキストをインデントすることを忘れないでください), オブジェクトの型に”フィルタ”を追加できます:

if(o.type==”MESH”):

条件は明確です: 現在のbpy.data.objectの型はMESH である必要があります。

次のステートメントは IF の内部に置かれなければならないので、再度テキストを書き込むことを忘れないでください!

bpy.context.view_layer.objects.active = o

bpy.ops.uv.export_layout(filepath = UVpath + o.name, size = UVsize)

BPY 3 UV export tutorial 3

割り当てによって、シーンの ACTIVE オブジェクトが設定されます。現在のメッシュをcontext.view_layer.objects.active;に割り当てる; 次のOPS (Blender Python operationは、唯一の ACTIVE オブジェクトで実行されるため、これを行う必要があります。(覚えておいてください: 複数のオブジェクトを選択できますが、一度にアクティブなオブジェクトは 1 つだけです)。

OPSステートメントは、指定された ACTIVE オブジェクトのレイアウトをエクスポートします。filepath (UVpath 変数によって作成され、“UV-LAYOUT---”というプレフィックスと、ACTIVE オブジェクトの名前が付けられます) 指定されたサイズでピクセル単位で指定します。

BPY 3 UV export tutorial 4

このチュートリアルを閉じる前に、私はあなたに割り当てを与えるつもりです: シーンで使用可能なメッシュの 2k 4k の UV レイアウトを両方とも書き出すために、このスクリプトを編集します, 2 つの異なるプレフィックス ("UV-2K ---" と " UV-4k ---" など) を画像に提供します。

それだけです!私はあなたがこのチュートリアルを楽しんだことを願っています!

じゃあね!