Shader之旅3:通道分离+抖动

本文介绍了一种使用Shader实现的故障艺术效果,通过通道分离和画面震荡技巧,模仿了抖音上流行的特效。作者详细分享了GLSL shader代码,展示了如何在不同时间段应用抖动、分通道和正常显示等效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

书写本文的初衷是为了自我反省记录。如有表达不当,请批评指正

 

抖音上有类似的故障效果的拍摄特效。

其实就是利用通道分离,并将画面进行震荡,产生类似的效果。如下效果。

这是我写在shader上的效果

uniform float time;
float rand(float co) {
    return fract(sin(dot(co,12.9898+78.233)) * 43758.5453);
}
void mainImage( out vec4 fragcolor, in vec2 fragCoord ) {
	vec2 uv = fragCoord.xy / iResolution.xy;
	vec2 uv1 = uv;
    
    uv1.x-=rand(uv.y*iTime)/30.;
    vec4 e = texture(iChannel0,uv1);
    vec4 bn = vec4(vec3(e.r+e.g+e.b)/3.,1.0);
	
	vec2 offset = vec2(sin(iTime)/30.,0.01*rand(iTime));
    // 抖动
    if(iTime<=1.){
        fragcolor=e; 
    }
    //抖动+分通道 
    if(iTime>1.&&iTime<=2.){
        e.r = texture(iChannel0, uv).r;
	    e.g = texture(iChannel0, uv-offset.xy).g;
	    e.b = texture(iChannel0, uv+offset.xy).b;
        fragcolor=mix(e,bn,0.3);     
    }
    // 分通道
    if(iTime>2.&&iTime<=4.5){
        
        e.r = texture(iChannel0, uv).r;
	    e.g = texture(iChannel0, uv-offset.xy).g;
	    e.b = texture(iChannel0, uv+offset.xy).b;
        fragcolor=e;
    }
    // 正常
    if(iTime>4.5){
        fragcolor=texture(iChannel0, uv);
    } 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值