経緯
よく使うお手軽GPU乱数実装でパーティクルの位置を計算したら結構偏ってたので、以前から気になってたXorwowと比べてみた
お手軽乱数実装
float randSimple(float2 v)
{
return frac(sin(dot(v.xy, float2(12.9898, 78.233))) * 43758.5453);
}
普段は引数に時間などの値を混ぜて使っていたので問題なかったが
今回は同じシードから同じ状態になる再現性が欲しかったので出力を入力にフィードバックするような使い方をしてたところ
かなり偏るように見えた
環境
windows10
unity5.6.1f1
比較
上がお手軽乱数で、下がXorwow
1フレームに1回乱数を計算していて、白いラインがその値、1ピクセルずつ出現数分下に溜まっていくようにしています
思ってたよりもはるかに偏ってた!
ソース
Xorwowはnobnakさんのを使わせてもらいました
https://github.com/nobnak/XorwowUnity