値ノイズ
https://gyazo.com/c3d1739812893cd474ceb5e91259d2af
https://www.shadertoy.com/view/lsf3WH
value noiseとも。空間を格子状に区切り、格子点に対応する乱数(ハッシュ値)を割り振る。この乱数を使い、格子点間はエルミート補間などで補間してあげることで得られるノイズ。隣り合う格子点の値がほぼ一緒だったりすると、値が一様になってブロック状のムラが出てしまう。計算コストは低め。
フラクタルなノイズを作る場合は、この値ノイズでも十分良いらしい。
code:glsl
// 一部省略して値ノイズの部分のみ抜粋
// https://www.shadertoy.com/view/lsf3WH
float noise( in vec2 p )
{
ivec2 i = ivec2(floor( p )); // 格子点の座標
vec2 f = fract( p ); // 格子点間のどの位置にいる?
// quintic interpolant
vec2 u = f*f*f*(f*(f*6.0-15.0)+10.0);
return mix( mix( hash( i + ivec2(0,0) ),
hash( i + ivec2(1,0) ), u.x),
mix( hash( i + ivec2(0,1) ),
hash( i + ivec2(1,1) ), u.x), u.y);
}
若干計算コストは高くなるが、勾配ノイズは値ノイズより、ムラの少ない高品質なノイズ。