見出し画像

【MAYA】一発でUV画像書き出し

UVってマメに書き出してテクスチャ調整するんですけど
その度にオプション開いてApplyしないといけなかったり
シーンが変わるたびに保存先設定し直したりと結構面倒なんですよね。
この手のツールは沢山ありますけど、探すのと自分で作るの時間的には変わらないし、得るものもあるので作りました。

ブラウズしてセーブする書き出してるようなUIのくせした書き出してはいないMAYAくん
そういうところだぞ

ProjectSetでシーンやテクスチャをそれぞれフォルダ分けして作業するのがデフォなのに不親切じゃん…いつもだけど

現在のシーンを保存しているフォルダと同じ階層にあるフォルダにUVを画像書き出しします。
フォルダがなければ自動生成します。
冒頭の部分の説明に沿って編集すれば保存先、画像サイズが変更できます。

import maya.cmds as cmds
import os

#保存先のフォルダ名を指定(シーンの保存してあるフォルダと同じ階層のフォルダをしています。)
#"images"の" "の内側を変更してください(例:"texture")
#シーンの保存先が project/scenes/a001.ma である場合、projectフォルダ内のフォルダを指定、なければフォルダを自動作成します。  
save_directory_name = "images"

#画像サイズ(px)
#数値部分(1024)を任意の数字に変更してください。xは横、yは縦です。
x_pixelsize = 1024  
y_pixelsize = 1024

###
###以下処理コマンド(編集不可)###
###

# 現在選択されているオブジェクトを取得
selected_objects = cmds.ls(selection=True)
if not selected_objects:
    cmds.error("UVを画像書き出しするには、オブジェクトを最低1つ以上選択してください")
    # 以降の処理は実行されません

# 現在開いているファイル名と相対パスを取得
current_file = cmds.file(q=True, sn=True)
if not current_file:
    cmds.error("UVを画像書き出しするには、シーンを保存してください")
    # 以降の処理は実行されません

current_file_name = os.path.splitext(os.path.basename(current_file))[0]
print("Current File:", current_file_name)
print("File Path:", current_file)

# UVの書き出し
for obj in selected_objects:
    scene_directory = os.path.dirname(current_file)
    project_directory = os.path.dirname(scene_directory)
    sourceimages_path = os.path.join(project_directory, save_directory_name)

    if not os.path.exists(sourceimages_path):
        os.makedirs(sourceimages_path)

    uv_snapshot_path = os.path.join(sourceimages_path, f"{current_file_name}_{obj}_UV.iff")
    cmds.uvSnapshot(n=uv_snapshot_path, o=True, ff='iff', xr=x_pixelsize, yr=y_pixelsize)
    print(f"UV Snapshot saved at: {uv_snapshot_path}")

MAYA2023で動作確認済み
AIアシストを使って作成しています。

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