【Blender】ジオメトリノードで草にランダムな色がつかない?原因と解決法

記事内に広告が含まれています。

はじめに

Blenderのジオメトリノードを使って草や植物を大量に配置したとき、
草一本一本に違う色をつけたいのに全部同じ色になる
そんな現象に悩んだことはありませんか?

この記事では、以下のような現象を解決する方法を解説します。


問題の症状

以下のようにノードを組んだにもかかわらず……

  • Geometry Nodesで草を複製(Instance on Points)
  • シェーダーで Object Info → RandomColorRampBase Color

結果:すべての草が同じ色に。


なぜこうなるのか?(原因)

🔹 Object Infoノードの Random は「インスタンスID」ベース

Object Info → Random は、オブジェクトまたはインスタンスごとの「ID」をもとに異なる乱数を出します。

🔹 Realize Instances を使うとIDが失われる

インスタンスのままならランダム値が正しく使えますが、
Realize Instances を使うと、それらが一つのメッシュに統合され、インスタンスIDが消えてしまいます。

その結果、Random 出力はすべて同じ値になり、草が全て同じ色に見えてしまうのです。


補足:参考動画ではうまくいっていた理由

YouTube: Ducky 3D – Geometry Nodes Crystals
この動画でもGeometry Nodesでオブジェクトを複製していますが、うまくランダム配色ができています。

これはなぜかというと…

インスタンスを Realize Instances せず、そのままマテリアルに渡している
→ 各インスタンスがIDを保ったまま存在しているため、Random が有効に機能したのです。


解決策1:Realize Instances を使わない構成にする

インスタンスを「確定」しない限り、Object Info → Random は効きます。

ただし注意:

  • Realize Instances は多くの後処理(例えば属性の割り当て)で必要になる場面もあります。
  • その場合は次の解決策へ。

解決策2:ジオメトリノード側で乱数を生成して渡す

以下の手順で正しくランダムな配色が可能になります:

🔸 Geometry Nodes側

  1. Random Value ノードで 0〜1 の乱数を生成
  2. Store Named Attribute ノードで Color_id という名前で保存
     ※このノードは Realize Instances の後ろ に配置するのがポイント

🔸 シェーダー側(マテリアル)

  1. Attribute ノードを追加し、Name に Color_id と入力
  2. FacColorRamp に接続し、好きな緑色を4色ほど設定
  3. ColorRamp の出力を Base Color に接続

Before / After 比較

方法結果
Object Info → Random(Realize後)すべて同じ色、あるいは真っ黒
Attribute + Color_id草一本一本が異なる緑色で表現される

※スクリーンショットなどを添付するとさらに効果的です!


💡 まとめ

  • Object Info → RandomインスタンスIDに依存している
  • Realize Instances を使うと ID が失われ、ランダム性が失われる
  • 対処法として、属性として乱数を明示的に作成・伝達するのが確実

✍ おわりに

今回の問題は、Geometry Nodesとマテリアルノードの**「情報の受け渡しの仕組み」**を理解するよいきっかけになります。

一見うまくいっている動画と、自分のシーンで違う挙動になるのは、
Blenderが内部的に何を「同一」とみなしているかがカギです。

「草に色がつかない!」と悩んでいる方は、ぜひ試してみてください!

コメント

タイトルとURLをコピーしました