デモシーン12作目

デモシーン

12作目です。

ノイズについて勉強中。

下記サイトがすごく勉強になるけど、まだまだわからない部分も多い。

The Book of Shaders
Gentle step-by-step guide through the abstract and complex universe of Fragment Shaders.

コード書いておきます。参考までに。

// 2Dランダム関数
float random(vec2 st) {
    return fract(sin(dot(st.xy, vec2(12.9898,78.233))) * 43758.5453123);
}

// 2Dノイズ関数
float noise(vec2 st) {
    vec2 i = floor(st);
    vec2 f = fract(st);

    // 4つの隅の乱数値を取得
    float a = random(i);
    float b = random(i + vec2(1.0, 0.0));
    float c = random(i + vec2(0.0, 1.0));
    float d = random(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;
}

// フラクタルブラウン運動(fBm)関数
float fbm(vec2 st) {
    float value = 0.0;
    float amplitude = 0.5;  // 振幅
    float frequency = 0.0;  // 周波数

    for (int i = 0; i < 6; i++) {
        value += amplitude * noise(st);
        st *= 2.0;
        amplitude *= 0.5;
    }

    return value;
}

// タービュランス関数
float turbulence(vec2 st) {
    float value = 0.0;
    float amplitude = 0.5;
    float frequency = 1.0;

    for (int i = 0; i < 6; i++) {
        value += amplitude * abs(noise(st * frequency));
        st *= 2.0;
        amplitude *= 0.5;
    }

    return value;
}

// Ridgeノイズ関数
float ridge(float h, float offset) {
    h = abs(h);
    h = offset - h;
    h = h * h;
    return h;
}

// フラクタル Ridge ノイズ関数
float fractalRidge(vec2 st) {
    float value = 0.0;
    float amplitude = 0.5;//+ fbm((vec2(iTime * .07, iTime * .05))) * .7;
    float frequency = 1.0;
    float offset = 1.0; // Ridge ノイズのオフセット

    for (int i = 0; i < 6; i++) {
        value += amplitude * ridge(noise(st * frequency + vec2(cos(iTime * .1)*cos((1. + cos(iTime * .1)) * PI),sin((1.-sin(iTime * .3)) * PI))), offset);
        st *= 2.0;
        amplitude *= 0.5;
    }

    return value;
}

//--------------------------------
//Color

vec3 pallete (float t) {
        vec3 a = vec3(0.5, 0.5, 0.5);
        vec3 b = vec3(0.5, 0.5, 0.5);
        vec3 c = vec3(1.0, 1.0, 1.0);
        vec3 d = vec3(0.263, 0.416, 0.557);
    return a + b*cos( 6.28318*(c*t+d) );
}

//--------------------------------
void mainImage(out vec4 fragColor, in vec2 fragCoord){
    vec2 uv = fragCoord/iResolution.xy;
    uv = (fragCoord * 2.0 -iResolution.xy) / iResolution.y;

    vec3 col = vec3(0.0);
    vec3 finalCol = vec3(0.0);

    float ridge = fractalRidge(uv * 2.0 + iTime * 0.0);
    for(int i = 0; i < 2; i++){
    ridge = fractalRidge(vec2(ridge) + uv * 2.0 - iTime * 0.0);
    }
    col = vec3(ridge);
    col = pallete(ridge + iTime * .2);


    finalCol += col;


    fragColor = vec4(finalCol,1.0);
}

制作続けていきます。では。

#デジタルアート #デモシーン #3DCG #シェーダーコーディング #レイマーチング #SF #demoscene

Please follow and like us:

Follow me!

コメント

Social Share Buttons and Icons powered by Ultimatelysocial
YouTube
YouTube
Instagram
Copy link
URL has been copied successfully!
PAGE TOP