Help us understand the problem. What is going on with this article?

ComputeShaderで乱数の偏りを調べてみた

More than 3 years have passed since last update.

経緯

よく使うお手軽GPU乱数実装でパーティクルの位置を計算したら結構偏ってたので、以前から気になってたXorwowと比べてみた

お手軽乱数実装

float randSimple(float2 v)
{
    return frac(sin(dot(v.xy, float2(12.9898, 78.233))) * 43758.5453);
}

http://qiita.com/shimacpyon/items/d15dee44a0b8b3883f76

普段は引数に時間などの値を混ぜて使っていたので問題なかったが
今回は同じシードから同じ状態になる再現性が欲しかったので出力を入力にフィードバックするような使い方をしてたところ
かなり偏るように見えた

環境

windows10
unity5.6.1f1

比較

上がお手軽乱数で、下がXorwow
1フレームに1回乱数を計算していて、白いラインがその値、1ピクセルずつ出現数分下に溜まっていくようにしています
思ってたよりもはるかに偏ってた!

ソース

https://github.com/fuqunaga/GPURandTest

Xorwowはnobnakさんのを使わせてもらいました
https://github.com/nobnak/XorwowUnity

fuqunaga
最近はnoteに記事を書いてます https://note.mu/fuqunaga
https://fuquna.ga
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away