AN: Repeat Ray Reflection

昨日の投稿は1次レイをぶわーっと飛ばすヤツ。今日のは一本だけ、でも繰り返し反射させるヤツ。

ANでアニメーションついてます。

反射が出来なかった場合(Ray cast hit ==False)に打ち切りたいんですけど、どうすれば…。For文で言うBreakって無いのかな?

(追記)
ありましたBreak。Loopの出力ノードのConditionが非表示の状態になっているので、これを表示し任意の条件でFalseを入力すればループ処理から抜けられました。って事で修正!スッキリ!


AN: Ray Reflection

Vector MathノードにReflectって項目があったので試してみた。入射ベクトルと法線を入力するとまさに反射ベクトルが出力されます。Blender 2.93 + AnimationNodes 2.2.2です。

反射は一回だけ…

ところでVector Mathノードには外積(Cross)はあって内積(Dot)が無い、掛け算して総和を取るだけですけど。


Blender: Is inside volume or not?

久しぶりのAnimation nodes。メッシュボリューム内に任意のポイントがあるかどうかはメッシュのBVHTreeを作成して「Is Inside Volume」ノードで調査しますが結果はポイントの数だけのBooleanリストとして出力されます。で、ここからボリュームの内側あるいは外側のポイント(Vector)のリストを作成したい場合、「Expression」ノードを使用してフィルタリングすることになります。

青が外側、赤が内側のポイント

以下サンプルのblendファイル、Animation Nodes + Extra Nodes2.2.2を使用しています。

[x for x,y in zip(positions,insides) if y==True]

エクスプレッションはPythonで表記します。VectorリストとBooleanリストをzipで対にしたイテレータを作成し、それぞれx,yで取り出しています。ボリューム内にあるポイントを取り出すなら「y==True」を条件にして、x(Vecor要素)をリストに加えます。リスト内包表記ですね。

ループにVectorリストとBooleanリストを入力して「Switch」ノードを使用する事も考えられますが「Switch」ノードは必ず「If True」と「If False」でそれぞれ値を出力してしまします。Falseの場合は出力しないということが出来ないため今回の用途には向きません。

参考: Expression [docs.animation-nodes.com]


Blender2.92

以前よりα、β版の動画を見てますからこれと言って目新しくはありませんが、バージョン2.92です。

所有している有料アドオン「Meshmachine0.7.0」「Hardops0.98.7.5」「BoxCutter7.17.17」は普段使用している範囲では問題なく動作するようです。

Animation Nodes + Extra NodesはVersion2.2.2「Extra Nodes v2.2 for Blender 2.91-2.92」が動きました。GraphicAllで配布されている最新ビルドは2.93用でPythonは3.9なのでBlender2.92(Python3.7.7)では動かないと思います。

新たに加わったGeometryNodeはモディファイアとして機能するんですね。AnimationNodesはその後に評価されるので、AnimationNodesの結果をGeometryNodeで加工とはいきませんね。

Particle NodeのほうがGeometryより先にあったはずなのに、どうなったんやろ?