はじめに シェーダー (HLSL) で乱数を発生させたくなることがしばしばあります。 直接的にはホワイトノイズ、間接的にはパーリンノイズなどが挙げられます。 そういうシェーダーを書いたことがある方は、 frac(sin(...)) みたいな擬似乱数生成器を目にしていることでしょう。 ですが、乱数を発生させる手法は星の数ほど存在します。品質や速度もそれぞれ異なる擬似乱数生成器がたくさんあります。 本稿ではそれらのシェーダー乱数の性能比較を行っていきたいと思います。 シェーダー乱数の定義 さて、乱数とはいっても、シェーダーでよく使われる乱数は CPU ベースの (メルセンヌツイスタ とかの) 擬似乱数生成器とは設計レベルで異なることが多いです。 まず、状態を持たない、ある種のハッシュ関数のような実装をすることがほとんどです。 大抵の場合、座標を引数にとることになるでしょう。毎フレーム変化する乱

