ジオメトリーノードの「インスタンスを実体化」ノードを利用すると、インスタンスの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ビューのヘッダー > オブジェクト > [結合]