« C4D ThinkingParticles 簡単なスプラインエミッタを作ってみる。 | トップページ | C4D ThinkingParticles 簡単なスプラインエミッタを作ってみる -02「ごめんなさいスプラインエミッタ」… »

C4D 少しガッカリさせられた「ランダム」ノード…

「ランダム」ノードの頻度が皆無に近い常態だったので…
正直、他のノードもね…
だって、「C.O.F.F.E.E.」ノードとユーザデータ、やパラメータ等だけで、事足りるので…

「光線の衝突」「衝突判定」などは、「C.O.F.F.E.E.」ノードで組むと遅くなるし、厄介だから使いますが…
C4D ThinkingParticlesも「C.O.F.F.E.E.」ノードで100%制御できれば、他のノードは使う必要がなくなりますね…。

ま、「ランダム」ノードの代わりに「C.O.F.F.E.E.」ノードでRandomクラスを使うと言う手がありますが…
この方法も少し厄介ではありますけどね…

さて、「ランダム」ノードで吐き出される数値を見てみよう。
前回は、「ランダム」ノードが出力する実数の一部を見ました。

C4D XPresso[ランダム]ノードが出力する実数値
http://villager-and-c4d.cocolog-nifty.com/blog/2009/11/c4d-xpresso-f8e.html

今回は簡単なテストで、「実数」と「ベクトル」を見ます。

「RandomNord_02.ZIP」

Random_04_2

main()
{
  println("----- " , no , " ----");
  println(val);
  println(vec1);
  println(vec2);
}

ランダムシード用の「ランダム」ノードは「時間」「絶対値:On」です。
実数用とベクトル用の「ランダム」ノードの設定は「時間」「絶対値:Off」です。

ランダムな実数やランダムなベクトルを取得するための「ランダム」ノード。
この「ランダム」ノードの「ランダムシード」に入力するためのランダム値を生成する「ランダム」ノード。
文章にすると分かり辛いね…

10個のランダムシードから実数1個、ベクトル2個を10セット取得します。

結果が下のようになります。
C4D R11.5Demo使用です。

----- 325522208 ----
0.688047
[0.688047,0.712082,0.795034]
[0.688047,0.712082,0.795034]
----- 325591264 ----
-0.869890
[-0.869890,-0.436252,0.540987]
[-0.869890,-0.436252,0.540987]
----- 325660320 ----
-0.427827
[-0.427827,0.415415,0.286940]
[-0.427827,0.415415,0.286940]
----- 325729408 ----
0.016294
[0.016294,-0.560142,-0.467689]
[0.016294,-0.560142,-0.467689]
----- 325798464 ----
0.458357
[0.458357,0.291524,-0.721736]
[0.458357,0.291524,-0.721736]
----- 325867552 ----
0.902479
[0.902479,-0.684033,0.523636]
[0.902479,-0.684033,0.523636]
----- 325936608 ----
-0.655458
[-0.655458,0.167633,0.269588]
[-0.655458,0.167633,0.269588]
----- 326005696 ----
-0.211337
[-0.211337,-0.807924,-0.485040]
[-0.211337,-0.807924,-0.485040]
----- 326074752 ----
0.230726
[0.230726,0.043743,-0.739087]
[0.230726,0.043743,-0.739087]
----- 326143808 ----
0.672789
[0.672789,0.895409,-0.993134]
[0.672789,0.895409,-0.993134]

ここで注目する値は、実数と、ベクトルX成分が同じであることです。
別々のノードに同ランダムシードを入力し、片方が実数、もう片方がベクトルとしたとき、共通する数値が出力されます。
これによって、実数とベクトル間に規則性が出てくる事になります。
これでは、実数とベクトルを両方使う場合ランダムな性質が失われてしまいます。

2つの「ランダム」ノードを使って、2つのベクトルを取得すると、全く同じベクトルを取得する事になります。

では、1つの「ランダム」ノードから、「実数」と「ベクトル」を出力するとどうだろう…

「RandomNord_03.ZIP」

Random_05

main()
{
  println("----- " , no , " ----");
  println(val);
  println(vec0);
  println(vec1);
  println(vec2);
}

この結果が、意外にも…

----- 325522208 ----
0.688047
[0.712082,0.795034,0.200625]
[0.688047,0.712082,0.795034]
[0.688047,0.712082,0.795034]
----- 325591264 ----
-0.869890
[-0.436252,0.540987,-0.586467]
[-0.869890,-0.436252,0.540987]
[-0.869890,-0.436252,0.540987]
----- 325660320 ----
-0.427827
[0.415415,0.286940,0.626441]
[-0.427827,0.415415,0.286940]
[-0.427827,0.415415,0.286940]
----- 325729408 ----
0.016294
[-0.560142,-0.467689,-0.797716]
[0.016294,-0.560142,-0.467689]
[0.016294,-0.560142,-0.467689]
----- 325798464 ----
0.458357
[0.291524,-0.721736,0.415192]
[0.458357,0.291524,-0.721736]
[0.458357,0.291524,-0.721736]
----- 325867552 ----
0.902479
[-0.684033,0.523636,0.991035]
[0.902479,-0.684033,0.523636]
[0.902479,-0.684033,0.523636]
----- 325936608 ----
-0.655458
[0.167633,0.269588,0.203943]
[-0.655458,0.167633,0.269588]
[-0.655458,0.167633,0.269588]
----- 326005696 ----
-0.211337
[-0.807924,-0.485040,0.779786]
[-0.211337,-0.807924,-0.485040]
[-0.211337,-0.807924,-0.485040]
----- 326074752 ----
0.230726
[0.043743,-0.739087,-0.007306]
[0.230726,0.043743,-0.739087]
[0.230726,0.043743,-0.739087]
----- 326143808 ----
0.672789
[0.895409,-0.993134,-0.794397]
[0.672789,0.895409,-0.993134]
[0.672789,0.895409,-0.993134]

ベクトルのX成分が同じになると予想していたのですが、同じ「ランダム」ノードから「実数」と「ベクトル」を出力すると、違う数値になりました。

要するに、ランダムな実数とランダムなベクトルを2つ使う場合は、一つの「ランダム」ノードから出力すると問題が解決できそうです。

でも、絶対値の状態が両方とも同じであれば全く問題ないですが、片方が絶対値の場合は、処理を追加する必要があります。

では、このような1つのランダムシードからランダム実数とランダムベクトルを出力するXGroupはどうだろう。

「RandomNord_05.ZIP」

Random_06

Random_07

実数とベクトルは、独立して絶対値の指定ができます。
これ単体では、問題が無いように思えますが、XPresso全体、もしくはシーン全体で見ると意図した結果にならないかもしれません。

では、前回のスプラインエミッタのランダム値の取得部分を修正してみます。

C4D ThinkingParticles 簡単なスプラインエミッタを作ってみる。
http://villager-and-c4d.cocolog-nifty.com/blog/2009/11/c4d-thinking-13.html

1つの「ランダム」ノードから実数とベクトルを取得して適用すると下のようになります。
残念ながらC4D R11.5Demoのみです。

Random_08

放射状ランダムベクトルXGroupは解体しました。
パーティクルのランダムシード1とつから実数とベクトルを取得しています。
「PBorn」の「生成番号」は使用しないのでポートを削除しました。

Random_09

規則性が感じられず、結果には問題ありません。
他のバージョンでは、相変わらずの状態です。

「SplineEmi_03.ZIP」

これで、ランダム実数とランダムベクトルを同時に取得するときは「ランダム」ノード1つから同時に取得する事がベストだと言う事がわかりました。
それ以上必要なときは…
そうなった時にでも考えてください。

ところで、「ランダム」ノードの「ランダムシード」の下限上限を知っていますか?

0~

多くの人がそう思っていると思います。
実は…

-2174783647~2174783647までの数値だったのだ。
32bit符号ありの整数。
では、範囲外のランダムシードを与えるとどうなるか知ってますか…

「ランダム」ノードに範囲外の「ランダムシード」を与えたらどうなるのかテスト

「RandomNord_04.ZIP」

Random_10

main()
{
  print(seed , " : ");
  print(bl , " ");
  print(vec , " ");
  print(ft , " ");
  print(it , " ");
  println(nvec);
}

これは、繰り返し-30~30までを100,000,000倍して範囲を超えた数値をつくり「ランダム」ノードに入力します。
「ランダム」ノードから出力し「C.O.F.F.E.E.」ノードでコンソールに表示させます。

では、実行します。

-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]
-2147483647 : 0 [-0.167415,0.824266,-0.777004] -0.916279 -998864806 [-0.898561,0.267616,0.347807]

-2100000000 : 0 [0.368521,-0.655325,-0.611111] -0.792029 -1427973248 [0.490679,-0.869457,-0.057260]
-2000000000 : 1 [0.110066,0.179520,-0.713709] 0.804162 1494119808 [-0.692635,-0.647970,-0.316847]
-1900000000 : 1 [-0.148388,-0.985635,-0.816308] 0.400354 121245568 [-0.306770,0.705909,-0.638424]
-1800000000 : 0 [-0.406842,-0.150790,-0.918907] -0.003454 -1251628672 [0.151584,0.719092,0.678180]
-1700000000 : 1 [-0.665296,0.684055,0.978494] -0.407263 1670464384 [0.706275,0.623363,0.335551]
-1600000000 : 1 [-0.923750,-0.481100,0.875895] -0.811071 297590144 [-0.795392,0.603784,-0.052880]
-1500000000 : 0 [0.817796,0.353744,0.773296] 0.785121 -1075284096 [-0.175582,0.635354,-0.751995]
-1400000000 : 1 [0.559342,-0.811411,0.670697] 0.381312 1846808960 [0.475210,0.235610,-0.847740]
-1300000000 : 1 [0.300888,0.023434,0.568098] -0.022496 473934720 [-0.779671,0.076479,0.621501]
-1200000000 : 0 [0.042434,0.858279,0.465499] -0.426304 -898939520 [-0.719086,-0.091047,0.688930]
-1100000000 : 1 [-0.216020,-0.306876,0.362900] -0.830113 2023153536 [0.721629,-0.677886,-0.140438]
-1000000000 : 1 [-0.474474,0.527969,0.260302] 0.766079 650279296 [0.817162,-0.346482,-0.460648]
-900000000 : 0 [-0.732928,-0.637187,0.157703] 0.362271 -722594944 [-0.559199,-0.406185,-0.722710]
-800000000 : 1 [-0.991383,0.197658,0.055104] -0.041538 -2095469184 [-0.072591,-0.622633,0.779140]
-700000000 : 1 [0.750163,-0.967497,-0.047495] -0.445346 826623872 [0.516811,-0.769803,0.374581]
-600000000 : 0 [0.491709,-0.132652,-0.150094] -0.849155 -546250368 [-0.717061,-0.696539,-0.025652]
-500000000 : 1 [0.233255,0.702193,-0.252693] 0.747037 -1919124608 [-0.308359,0.868552,-0.387985]
-400000000 : 0 [-0.025199,-0.462962,-0.355292] 0.343229 1002968448 [0.195169,0.691413,-0.695598]
-300000000 : 0 [-0.283653,0.371882,-0.457891] -0.060580 -369905792 [0.617380,0.522367,0.588196]
-200000000 : 1 [-0.542107,-0.793273,-0.560490] -0.464388 -1742780032 [-0.682334,0.603301,0.412853]
-100000000 : 0 [-0.800561,0.041572,-0.663089] -0.868196 1179313024 [-0.095738,0.993222,-0.065905]
0 : 0 [0.940985,0.876417,-0.765688] 0.727995 -193561216 [0.732263,0.356984,-0.579960]
100000000 : 1 [0.682531,-0.288738,-0.868286] 0.324187 -1566435456 [-0.728792,0.099473,-0.677471]
200000000 : 0 [0.424077,0.546107,-0.970885] -0.079621 1355657600 [-0.371142,-0.023719,0.928273]
300000000 : 0 [0.165623,-0.619049,0.926516] -0.483430 -17216640 [0.542551,-0.328565,0.773100]
400000000 : 1 [-0.092832,0.215796,0.823917] -0.887238 -1390090880 [0.941107,-0.337324,-0.023008]
500000000 : 0 [-0.351286,-0.949359,0.721318] 0.708954 1532002176 [-0.690817,-0.524803,-0.497347]
600000000 : 0 [-0.609740,-0.114514,0.618719] 0.305145 159127936 [-0.006377,-0.580571,-0.814185]
700000000 : 1 [-0.868194,0.720331,0.516120] -0.098663 -1213746304 [0.471073,-0.598918,0.647601]
800000000 : 0 [0.873352,-0.444825,0.413521] -0.502472 1708346752 [-0.669956,-0.678458,0.301419]
900000000 : 0 [0.614898,0.390020,0.310922] -0.906280 335472512 [-0.269524,0.962892,-0.013967]
1000000000 : 1 [0.356444,-0.775135,0.208323] 0.689912 -1037401728 [0.299751,0.858613,-0.415852]
1100000000 : 0 [0.097990,0.059710,0.105725] 0.286103 1884691328 [0.629002,0.512645,-0.584424]
1200000000 : 0 [-0.160464,0.894555,0.003126] -0.117705 511817088 [-0.491596,0.510635,0.705397]
1300000000 : 1 [-0.418918,-0.270600,-0.099473] -0.521513 -861057152 [0.044706,0.739914,0.671215]
1400000000 : 0 [-0.677372,0.564244,-0.202072] -0.925322 2061035904 [0.901103,0.433429,-0.012368]
1500000000 : 1 [-0.935826,-0.600911,-0.304671] 0.670870 688161664 [-0.884570,0.160060,-0.438084]
1600000000 : 1 [0.805719,0.233934,-0.407270] 0.267062 -684712576 [-0.291766,0.009300,-0.956445]
1700000000 : 0 [0.547265,-0.931221,-0.509869] -0.136747 -2057586816 [0.378952,-0.152665,0.912737]
1800000000 : 1 [0.288811,-0.096376,-0.612468] -0.540555 864506240 [0.882883,-0.266844,0.386408]
1900000000 : 1 [0.030357,0.738469,-0.715067] -0.944363 -508368000 [-0.780353,-0.625331,-0.003180]
2000000000 : 0 [-0.228097,-0.426687,-0.817666] 0.651828 -1881242240 [0.084962,-0.808057,-0.582946]
2100000000 : 1 [-0.486551,0.408158,-0.920265] 0.248020 1040850816 [0.513420,-0.563651,-0.647068]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]
2147483647 : 1 [0.049384,0.928568,-0.754371] 0.372270 611742374 [-0.542488,0.360390,-0.758832]

「ランダム」ノードの「ランダムシード」に範囲外の数値を入力すると、下限上限でクリップされ、同じ数値が出力される。
と言う事…?

違うなぁ…

「計算」ノードから直接「C.O.F.F.E.E.」ノードに「seed」として取り込んだ数値がクリップされているので、「ランダム」ノードがクリップしているとは限らないか…

「計算」ノードの出力でクリップしている可能性もある…

同じ数値…

Splineemi_29

「スプラインエミッタ」を作ったとき、同じ位置から放出されていましたね…

次回、C4D ThinkingParticles 簡単なスプラインエミッタを作ってみる -02「ごめんなさいスプラインエミッタ」…

|

« C4D ThinkingParticles 簡単なスプラインエミッタを作ってみる。 | トップページ | C4D ThinkingParticles 簡単なスプラインエミッタを作ってみる -02「ごめんなさいスプラインエミッタ」… »