由于GPU驅動程序供應商通常不愿意noiseX在GLSL中實現,因此我正在尋找“圖形隨機化瑞士軍刀”實用程序功能集,最好對其進行優化以在GPU著色器中使用。我更喜歡GLSL,但是可以編寫任何語言的代碼,我可以自己將其翻譯為GLSL。具體來說,我期望:a)偽隨機函數 -N維,在[-1,1]或[0,1]上均勻分布,根據M維種子計算(理想情況下為任何值,但我可以限制種子設為0..1(用于統一結果分配)。就像是: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 噪聲這樣的連續噪聲 -同樣是N維,分布均勻,具有一組受限制的值,而且看起來不錯(一些配置外觀(如Perlin級別)的選項也可能有用)。我希望像這樣的簽名:float noise (T coord, TT seed);vec2 noise2 (T coord, TT seed);// ...我不太熟悉隨機數生成理論,因此我非常希望獲得預制的解決方案,但是我也很喜歡這樣的回答:“這里有一個非常好的,高效的一維rand(),讓我解釋一下您如何在其上制作一個良好的N維rand()...”。
3 回答

30秒到達戰場
TA貢獻1828條經驗 獲得超6個贊
對于看起來很簡單的偽隨機事物,我使用在互聯網上某個地方找到的這個單件套:
float rand(vec2 co){
? ? return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
您還可以使用任何喜歡的PRNG生成噪聲紋理,然后以常規方式上載此噪聲并在著色器中采樣值。如果您愿意,我可以在以后提取代碼示例。
添加回答
舉報
0/150
提交
取消