[解決済み】GLSL用ランダム/ノイズ関数
質問
GPUドライバのベンダーは、通常、わざわざ
noiseX
をGLSLで探しています。
グラフィックランダム化 swiss army knife"
ユーティリティ関数セットで、できればGPUシェーダー内で使用するために最適化されていることが望ましいです。私はGLSLを好みますが、どんな言語でもコード化できますし、自分でGLSLに翻訳することもできます。
具体的には、以下のようなことを期待します。
a) 擬似乱数関数 - M次元の種(理想的には任意の値ですが、一様な結果分布のためには、種を例えば0〜1に制限してもらっても構いません)から計算された、[-1,1]または[0,1]の上のN次元、一様分布。というようなものです。
float random (T seed);
vec2 random2 (T seed);
vec3 random3 (T seed);
vec4 random4 (T seed);
// T being either float, vec2, vec3, vec4 - ideally.
b) 連続的なノイズ Perlin Noiseのような - 再び、N次元、+- 一様分布、値の制約されたセットと、まあ、見栄え(Perlinレベルのように外観を設定するいくつかのオプションも便利かもしれません)。というようなシグネチャを期待しています。
float noise (T coord, TT seed);
vec2 noise2 (T coord, TT seed);
// ...
私は乱数発生理論にあまり詳しくないので、一番熱心になるのは 既製のソリューション のような回答もお待ちしています。 1次元のrand()は非常に効率的で良いのですが、その上にN次元のrand()を作る方法を説明します。 .
どのように解決するの?
ごく簡単な擬似乱数っぽいものなら、ネットのどこかで見つけたこのワンライナーを使っています。
float rand(vec2 co){
return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);
}
また、好きなPRNGを使ってノイズテクスチャを生成し、これを通常の方法でアップロードして、シェーダで値をサンプリングすることも可能です。
また、以下をチェックしてください。 このファイル は、Stefan Gustavson による Perlin と Simplex noise の GLSL 実装です。
関連
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] 英数字のランダムな文字列を生成する方法
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み】大文字と数字を含むランダムな文字列の生成
-
[解決済み】Dartで乱数を生成するにはどうすればいいですか?
-
[解決済み】GLSL用ランダム/ノイズ関数
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン