または任意の対応物?安価な乱数を生成するにはどうすればよいですか?
2 に答える
GLSL ES にはノイズ関数が付属しておらず、デスクトップ GLSL ノイズ関数はほとんど実装されていません。
ただし、いくつかのフリーウェアのノイズ関数が利用可能です。彼らはかなりまともで速いはずです。私はそれらを自分で使用したことはありませんが、動作するはずです。あなたがそれについて心配しているなら、それはMITライセンスのコードです。
「安い」の定義。
乱数がコンピューターで機能する方法は、実際にはランダムではありません。数値 (シード) から開始し、乱数ごとに、その数値に対して派手な計算を行って、ランダムに見える別の数値を取得し、その数値を乱数および次の乱数のシードとして使用します。番号。ガチャ詳細はこちらをご覧ください。
問題は、その手順が本質的にシーケンシャルであるため、シェーダーには適していないことです。
理論的には、フラグメント シェーダーで関数を記述して、たとえばフラグメント位置からハッシュを作成し、フレームごとにインクリメントされる可能性のある均一な int を作成することもできますが、それはフラグメント シェーダーにとって非常に多くの作業であり、何かを生成するだけです。それはノイズのように見えます。
OpenGL でノイズ効果を生成するための従来の手法は、ノイズの多いテクスチャを作成し、シェーダーにさまざまな方法で使用させることです。単純にテクスチャを標準テクスチャとしてサーフェスに適用することも、ストレッチしたりカラー値を固定したりすることもできます。時変効果の場合、3D テクスチャを使用するか、より大きな 2D テクスチャを使用して、ユニフォームを介してフレームごとにランダムなテクスチャ座標オフセットをフラグメント シェーダ ステージに渡します。
上記の効果のバリエーションを本質的に使用するperlin noiseも見てください。