デモシーン11作目

デモシーン

昭和の遊園地のようなイメージです。

モザイクを取り入れてドット絵風の絵柄にしました。

コードは下記です。これをglslファイルとして保存して、shaderToyなどで実行すれば動画ができます。
僕はVSCodeのshaderToyの拡張機能(Preview)で実行してます。

vec3 pallete (float t) {
        vec3 a = vec3(0.8, 0.5, 0.4);
        vec3 b = vec3(0.2, 0.4, 0.2);
        vec3 c = vec3(2.0, 1.0, 1.0);
        vec3 d = vec3(0.00, 0.25, 0.25);
    return a + b*cos( 6.28318*(c*t+d) );
}

//平面
float sdPanel(vec3 p, vec3 n, float h){
    return dot(p,n)+h;
}

float map(vec3 p){
    float d;
    float bottompanel = sdPanel(p, vec3(0.0,1.0,0.0), 2.);
    float toppanel = sdPanel(p, vec3(0.0,-1.0,0.0), 2.);
    d = min(bottompanel, toppanel);
    return d;
}

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

    //モザイク
    float mosaic_size = 0.05 ;
    vec2 mosaic = vec2(mosaic_size);
    vec2 uv_mosaic = floor(uv / mosaic) * mosaic;

    // ノイズ
    float mosaic_noise = floor(fract(sin(dot(uv_mosaic, vec2(12.9898, 78.233))) * 43758.5453) * 3.);
    
    uv = uv_mosaic;
    
    //レイマーチング
    vec3 ro = vec3(0.0,0.0,-3.0);
    vec3 rd = normalize(vec3(uv,1.0));
    float t = 0.0;

    for(int i=0; i<100; i++){
        vec3 pos = ro + t*rd;
        float d = map(pos);
        col = pallete(pos.x * sin(iTime * .2));

        if(d<0.001 || t>100.0){
            col = vec3(t * .3);
            col *= pallete(pos.x + iTime);
            break;
        }
        t += d;
    }    
    totalColor += col;
    fragColor = vec4(totalColor,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