ComputeShader에서 난수의 편향을 조사해 보았습니다.

경위



자주 사용하는 간편 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 님을 사용했습니다.
htps : // 기주 b. 이 m / b k / r를 얻는다.

좋은 웹페이지 즐겨찾기