ニッチなblender手記

世の中には自分に似た人が3人いるとされています。その人達へと情報共有するために主にblenderの記事を書いていきます。

loose usage about The Grove (React)

概要

ここでは The Grove アドオンの React 機能に絞って記述する。

f:id:r9aArrowhead:20210126013008j:plain

参考

THE GROVE - React

利用環境

反射、反応 (React)

例によってドキュメントから大まかな機能を読み込んでみた。

- It can Block growth when a branch hits its surface.
- It can Deflect growth when a branch gets closer.
- It can Shade growth – the tree reacts by bending away, toward light.
- It can also Attract growth, as if it were a light.

大雑把な意味は以下の通り。

  • 枝が表面に当たったときに成長を妨げることができる。
  • 枝が近づくと成長をそらすことができる。
  • 木が光に向かって曲がることで反応するようにして、成長を遮ることができる。
  • 光であるかのように成長を引き寄せる。

この後、作者は注意書きのようにして以下のような説明もしている。

This is a good place to clear a common misconception.
Plants do not grow toward direct sunlight. If they would, they would all lean south.
They would soon lose balance, gravity would not be in their favor.
Plants bend only to indirect sunlight, the light bouncing around the sky all around us.
It is the blue color that a plant senses and loves.

意訳すると、植物は直接光に向かって伸びているわけではなく、自身の周囲を取り巻く環境光によって成長が決まるということらしい。
このアドオンにも作者のこの思想は含まれているので、注意が必要になる。

改めてアドオンの React パネルを見直すと、設定項目は極めてシンプルに以下の4つしかない。

  • Block
  • Attract
  • Deflect
  • Shade

前提

The Grove はそのままでは他のオブジェクトに干渉しないし、されない。
木の成長や形状に影響を与えるためには、 React へ設定しなければならないことになる。

f:id:r9aArrowhead:20210126013435j:plain f:id:r9aArrowhead:20210126013441j:plain

Block

指定したオブジェクトに含まれているメッシュを避けて成長するようになる。

項目から分かりやすい項目だったので下図のような配置で実験してみた。

f:id:r9aArrowhead:20210126013016j:plain f:id:r9aArrowhead:20210126013025j:plain

この辺りは予想通り。
細かい隙間とかはどういう判定するのかは気になるが、概ね機能自体はシンプルで分かりやすい。

Attract

指定したオブジェクトの表面から Radius の距離まで力を発揮する
引き寄せる力は基本的に指定したオブジェクトから遠ざかるほど弱くなる。
Strength はその位置に作用する力を乗算処理する。そのため、 1 より大きくすると強くなり、 逆は作用する力を弱める。Strength を強くしすぎると木の成長を妨げる点に注意

これも項目名からおおよそ察することができるので、下図のような配置で実験した。
オブジェクトを設定した後にパラメータが表示されたのが若干気になるが、まずはデフォルトで実行する。

f:id:r9aArrowhead:20210126013032j:plain f:id:r9aArrowhead:20210126013039j:plain

Attractに設定したオブジェクトに引き寄せられているのは視認できるが、上の方はほとんど影響が出ていない。

ドキュメントを確認。

The Attract and Deflect interaction types have a Radius of influence.
When a branch grows within this proximity, it gets influenced by the environment.
The closer it gets, the more powerful this effect becomes.
The Strength parameter multiplies this influence.

ドキュメントから分かるのは Radius 内の引力は範囲内で一定ではなく、中心点から減衰していくとのことだ。
つまり、Radius は一番弱い力がとなるまでの距離ということになる。
そして、 Strength は影響する力の乗算なので、この値が 1 未満ならば元の強さよりも弱くなる。

上記を踏まえて、下図のような設定にしてみた。
Attract オブジェクトの影響がお互いの中心で終わるようにして、 Strength は乗算が働かないようにしている。

f:id:r9aArrowhead:20210126013046j:plain f:id:r9aArrowhead:20210126013052j:plain

なんだかすごく面白い結果にはなった。
理論は分からないので、ここからは条件網羅式に確認していく。

f:id:r9aArrowhead:20210126013129j:plain f:id:r9aArrowhead:20210126013136j:plain f:id:r9aArrowhead:20210126013143j:plain f:id:r9aArrowhead:20210126013150j:plain f:id:r9aArrowhead:20210126013155j:plain f:id:r9aArrowhead:20210126013202j:plain

影響範囲が木の幹の部分と重なる条件の時だけ成長の停滞が著しいことが分かった。
そこで今度は影響範囲が重なり合うようにして影響力だけを徐々に変化させて確認していってみる。

f:id:r9aArrowhead:20210126013208j:plain f:id:r9aArrowhead:20210126013213j:plain f:id:r9aArrowhead:20210126013219j:plain f:id:r9aArrowhead:20210126013226j:plain f:id:r9aArrowhead:20210126013233j:plain

あまり結果は芳しくない。 確認しているなかで、これはもしかして Radius はオブジェクトの中心から考えるのではなく、オブジェクトの表面からの距離なのではという考えに至った。

早速確認。

f:id:r9aArrowhead:20210126013239j:plain f:id:r9aArrowhead:20210126013245j:plain f:id:r9aArrowhead:20210126013252j:plain f:id:r9aArrowhead:20210126013300j:plain

4枚目の画像から、 Radius の範囲が オブジェクトの表面からの距離 ということが分かる。
が、 Strength の関係性が分かりにくい。

twitterなどをあさってみたが、そもそもの Strength: 1.0定量的に指す内容は見当たらなかった。
結果論として、Strength は過度に強くしてはいけない ということだけは判明した。

一通り操作を確認したら開発者に凸するのもいいかもしれない

Deflect

設定したオブジェクトが、自己を中心に斥力を発生させて木を押すような効果を与える。 過度な強さを与えると成長が著しく抑えられるのは Attract と同じな点にも注意。

説明を見ただけだと Block と大差がないような気がするので、下図のような構成で一度動かして確認する。

f:id:r9aArrowhead:20210126013307j:plain

結果は下図となった。
これは結構分かりやすいと思われる。

f:id:r9aArrowhead:20210126013313j:plain

折角なので、パラメーターを変えていくつか実験してみた。

f:id:r9aArrowhead:20210126013321j:plain f:id:r9aArrowhead:20210126013327j:plain f:id:r9aArrowhead:20210126013333j:plain f:id:r9aArrowhead:20210126013340j:plain

要は Attract -> 引力 に対する Deflect -> 斥力 のような感じで使えばいい。

Shade

設定したオブジェクトが、光を遮るオブジェクトとして認識されるようになる。

これに関してはドキュメントにそれらしい記述は一切ない。
なのでいきなりあてずっぽうで実験する。

Shade というのだから陰に関することだろうという予測のもとで、下図のようにしてみた。

f:id:r9aArrowhead:20210126013346j:plain

実行すると下図のようになった。

f:id:r9aArrowhead:20210126013353j:plain

結果としては、指定したオブジェクトが光を遮って日陰部分として扱われるように見える。

ふと気になったので、光源との関係も実験してみた。

f:id:r9aArrowhead:20210126013401j:plain f:id:r9aArrowhead:20210126013407j:plain

特に関係なさそう?

f:id:r9aArrowhead:20210126013414j:plain f:id:r9aArrowhead:20210126013427j:plain

少なくとも、 Shade で日光を遮る範囲は成長へ影響を与えるようだ。

shade で遮る光の量は可変なのかどうかは気になるところではある。