忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

【ジオメトリーノード】「インスタンスの実体化」をして壊れたUVを修正する方法【Blender】

Blender

投稿日:

ジオメトリーノードの「インスタンスを実体化」ノードを利用すると、インスタンスのUVが壊れる。
これの修正方法を紹介する。

[インスタンスの実体化]の必要性

ジオメトリーノードで作ったインスタンスのメッシュは、そのままではモディファイアを適用してもメッシュとして残らないし、他のモディファイアを重ねがけしても影響させることができない。

インスタンスをメッシュとして使えるようにするには、インスタンスの実体化をする必要がある。

しかし、実体化をするとUVが引き継がれない問題がある。

事前にUVを出力しておく

実体化前のジオメトリのUV(面コーナー)を、属性転送ノードで出力しておけば、マテリアルノードの方で壊れる前のUVを利用することができる。

UVの実データへの適用はひと手間必要

ただ、UVを実際のUVデータとして実体化するには、現状モディファイア適用後に手動でスクリプト使って修正するしかない模様。

スクリプト

import bpy
obj = bpy.context.active_object
obj.data.uv_layers.new(name="UVMap")

attrUV = obj.data.attributes["UVMap"].data
targetUV = obj.data.uv_layers[0].data

for i, elem in enumerate(targetUV):
    elem.uv[0] = attrUV[i].vector[0]
    elem.uv[1] = attrUV[i].vector[1]

通常のオペレーターの方を使う

外部に書き出したい場合は毎回スクリプトを挟ませるのは手間である。
そのため、書き出すのならばジオメトリーノードの方ではインタンスを実体化せず、 オペレーターの方の[インスタンスを実体化]と、オブジェクトの[結合]の方を利用するとよい模様。

  • 3Dビューのヘッダー > オブジェクト > 適用 > [インスタンスを実体化]
  • 3Dビューのヘッダー > オブジェクト > [結合]

参考

https://blender.stackexchange.com/questions/241507/where-is-a-proper-way-to-get-back-uv-map-after-realize-instances

3Dモデルなどの制作依頼はこちら

-Blender
-

Copyright© 忘却まとめ , 2022 All Rights Reserved Powered by STINGER.