ピクセルシェーダーの擬似乱数を取得するのは簡単ではありません。CPU上の疑似乱数ジェネレーターには、関数の呼び出しごとに読み取りと書き込みの両方の状態があります。ピクセルシェーダーではできません。
いくつかのオプションがあります:
ピクセルシェーダーの代わりにコンピューティングシェーダーを使用します-バッファーへの読み取り/書き込みアクセスをサポートしているため、標準のPRNGを実装できます。
スクリーンスペースの位置などのパラメーターに基づいて、ランダムデータを含む1つ以上のテクスチャのサンプル。また、テクスチャを検索するために使用する前に位置でいくつかの数学を行うことができます。これにより、数学が描画ごとのランダムシェーダ定数を含む場合、テクスチャを再利用できます。
「十分にランダムな」結果を与える、画面スペース位置の数学関数を見つけます。
グーグルで簡単に検索すると、次の機能を備えたこのページが見つかりました。
float rand_1_05(in float2 uv)
{
float2 noise = (frac(sin(dot(uv ,float2(12.9898,78.233)*2.0)) * 43758.5453));
return abs(noise.x + noise.y) * 0.5;
}
float2 rand_2_10(in float2 uv) {
float noiseX = (frac(sin(dot(uv, float2(12.9898,78.233) * 2.0)) * 43758.5453));
float noiseY = sqrt(1 - noiseX * noiseX);
return float2(noiseX, noiseY);
}
float2 rand_2_0004(in float2 uv)
{
float noiseX = (frac(sin(dot(uv, float2(12.9898,78.233) )) * 43758.5453));
float noiseY = (frac(sin(dot(uv, float2(12.9898,78.233) * 2.0)) * 43758.5453));
return float2(noiseX, noiseY) * 0.004;
}