🔢 パーリンノイズ実装

float noise(vec2 p) {
    vec2 i = floor(p);
    vec2 f = fract(p);
    
    // 四隅のランダム値
    float a = hash(i);
    float b = hash(i + vec2(1.0, 0.0));
    float c = hash(i + vec2(0.0, 1.0));
    float d = hash(i + vec2(1.0, 1.0));
    
    // スムーズ補間
    vec2 u = f * f * (3.0 - 2.0 * f);
    
    return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
}
処理の説明:

1. 座標を整数部と小数部に分ける
floor()で整数部、fract()で小数部を取得。

2. 四隅のランダム値を取得
グリッドの4つの角に対応するランダム値を生成。

3. スムーズに補間
四隅の値を、スムーズステップ関数で滑らかに補間。 これで自然なノイズパターンが生成されます。