昭和の遊園地のようなイメージです。
モザイクを取り入れてドット絵風の絵柄にしました。
コードは下記です。これを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:
コメント