
はじめに
Blenderのジオメトリノードを使って草や植物を大量に配置したとき、
「草一本一本に違う色をつけたいのに全部同じ色になる」
そんな現象に悩んだことはありませんか?
この記事では、以下のような現象を解決する方法を解説します。
問題の症状
以下のようにノードを組んだにもかかわらず……
- Geometry Nodesで草を複製(Instance on Points)
- シェーダーで
Object Info → Random
→ColorRamp
→Base 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側
Random Value
ノードで 0〜1 の乱数を生成Store Named Attribute
ノードでColor_id
という名前で保存
※このノードはRealize Instances
の後ろ に配置するのがポイント
🔸 シェーダー側(マテリアル)
Attribute
ノードを追加し、Name にColor_id
と入力Fac
をColorRamp
に接続し、好きな緑色を4色ほど設定ColorRamp
の出力をBase Color
に接続

Before / After 比較
方法 | 結果 |
---|---|
Object Info → Random (Realize後) | すべて同じ色、あるいは真っ黒 |
Attribute + Color_id | 草一本一本が異なる緑色で表現される |
※スクリーンショットなどを添付するとさらに効果的です!
💡 まとめ
Object Info → Random
は インスタンスIDに依存しているRealize Instances
を使うと ID が失われ、ランダム性が失われる- 対処法として、属性として乱数を明示的に作成・伝達するのが確実
✍ おわりに
今回の問題は、Geometry Nodesとマテリアルノードの**「情報の受け渡しの仕組み」**を理解するよいきっかけになります。
一見うまくいっている動画と、自分のシーンで違う挙動になるのは、
Blenderが内部的に何を「同一」とみなしているかがカギです。
「草に色がつかない!」と悩んでいる方は、ぜひ試してみてください!
コメント