※記事製作時のバージョン:Blender4.3
今回の記事は、マテリアルの小技を紹介します。
作り方は簡単で使い処の多い手法なので、覚えておくと便利だと思います。
どんな小技?
[テクスチャ座標]の[オブジェクト]出力は、UV展開などの事前準備が不要で、歪みのないテクスチャが作れる便利な座標です。
しかし、そのオブジェクトをボーンなどで変形させると、オブジェクトは変形するけどテクスチャは動かず、模様が置き去りにされてしまいます。

これを改良して、ボーンなどでオブジェクトを変形した時にテクスチャも一緒に動くようにする方法を紹介します。

なお、代表格でボーンと書きましたが、ディスプレイス・ラティス・フック・カーブなど、変形タイプのモディファイア全般に使える手法です。
作り方
まず、新規Geometry Nodesを作成します。

[名前付き属性格納(Store Named Attribute)]と[位置(Position)]を追加します。
※[Shift+A]>[属性]>[名前付き属性格納]
※[Shift+A]>[ジオメトリ]>[読込]>[位置]

[名前付き属性格納]のパラメーターを次のように設定します。
- データタイプ(Data Type):ベクトル(Vector)
- 名前(Name):適当な名前を入力 ※ここでは "point_pos" としました。
- 値:[位置]を接続
これで、各頂点の座標が保存されます。

シェーダーエディターに移り、[属性(Attribute)]ノードを追加します。
※[Shift+A]>[入力]>[属性]

[属性]ノードの[名前(Name)]に、[名前付き属性格納]で入力した名前をコピペします。
これで、Geometry Nodesで保存した頂点座標をシェーダーエディターで使えるようになります。

テクスチャの[ベクトル]への入力を、[テクスチャ座標:オブジェクト]と[属性:ベクトル]で切り替えてみます。
すると、どちらも同じ模様になります。

そして[属性:ベクトル]を入力して作ったテクスチャは、ボーンなどでオブジェクトを変形すると、模様も一緒に動きます。
以上で、できあがりです。

これはモディファイアによる処理なので、Geometry Nodesより後に並んでいるモディファイアに効果があります。
用途に合わせてモディファイアの並び順を調整してください。

なお、ブーリアン・ベベル・リメッシュなどの頂点数が変化するモディファイアを使うと、模様が変化・または破綻します。
これらのモディファイアを使う場合は、Geometry Nodesより前に並べる必要があります。

2025/02/07 追記
[テクスチャ座標]の[オブジェクト]ではなく、[生成]をメッシュに固定したい場合
Geometry Nodesに[バウンディングボックス(Bounding Box)]と[範囲マッピング(Map Range)]を追加して、下の画像のように接続します。
※[Shift+A]>[ジオメトリ]>[処理]>[バウンディングボックス]
※[Shift+A]>[ユーティリティ]>[数式]>[範囲マッピング]
[範囲マッピング]の[データタイプ(Data Type)]は[ベクトル(Vector)]にします。

なお、サブディビジョンサーフェスを使っている場合は、上の画像のような微妙な模様の変化が生じます。
シェイプキーについて
シェイプキーはモディファイアよりも先に処理されるので、この手法はシェイプキーの変形に対しては効果がありません。
シェイプキーで変形した後の状態に対しては模様が固定されます。
以上、「テクスチャ座標の[オブジェクト]で作ったテクスチャをメッシュに固定する方法」でした。
※厳密には「テクスチャ座標の[オブジェクト]で作ったテクスチャ」ではありませんが、他に表現のしようがなかったのでご勘弁を・・・