概要
用途
アルベドマップはメモリ削減のためにUVをラッピングさせて使いまわしたいけど、完全に重ねるとSubstancePainterなど外部ツールでのマップベイクで問題が起きる、みたいなときに使えるかと思います。
(なんか自動アンラップみたいな機能があるらしいですが、私のバージョンは古すぎるのかそのあたりの項目が見当たりませんでした。どっちにしろ不健全なリソースではあるのでBlender時点でこうしてしまおうという魂胆です。)
使用方法
ChatGPTに書いてもらいました。
まず、テキストエディタを開きます。
そうしたら、以下の内容を貼り付けます。
import bpy
import bmesh
# テクスチャ1枚分のオフセット値(通常は1.0が標準サイズ)
offset_value = 1.0
# アクティブオブジェクトを取得
obj = bpy.context.active_object
# UVマップが存在するか確認
if not obj.data.uv_layers:
print("UVマップが存在しません")
else:
# 編集モードに切り替え
bpy.ops.object.mode_set(mode='EDIT')
# BMeshを作成
bm = bmesh.from_edit_mesh(obj.data)
# UVレイヤーを取得
uv_layer = bm.loops.layers.uv.verify()
# 選択された面を取得
selected_faces = [f for f in bm.faces if f.select]
if len(selected_faces) == 0:
print("選択された面がありません。")
else:
# 最初の面のUVはそのままで、2つ目以降の面のUVをオフセット
for i, face in enumerate(selected_faces):
offset_x = i * offset_value
for loop in face.loops:
uv = loop[uv_layer].uv
uv.x += offset_x # X方向にオフセットを加える
# UVの変更を反映
bmesh.update_edit_mesh(obj.data)
print("UVオフセットの適用が完了しました。")
編集モードに入り、UVエディタの面選択モード→「Bキー」の矩形選択などでラッピングしている面を選択します。
面を選択したら、テキストエディタの再生ボタンでスクリプトを実行します。
成功すると、以下のような結果になっていることが確認できます。
以上です。