玩抖音的时候,刷到一个抖音红发GET特效,感觉实现起来应该不太难。
于是小试牛刀。以刷到的一个视频一帧为原图
抖音红发GET特效拍出来的效果为
我实现的效果为:
基于Android平台,以OpenGL ES为工具,开发了一个滤镜相机。红发get特效实现的核心shader源码为
precision mediump float;uniform vec3 iResolution;
uniform float iGlobalTime;
uniform sampler2D iChannel0;
varying vec2 texCoord;float luminanceRatio = 1.0;void mainImage( out vec4 fragColor, in vec2 fragCoord )
{vec2 uv = fragCoord.xy;vec3 tex = texture2D( iChannel0, uv ).rgb;float shade = dot(tex, vec3(luminanceRatio));vec3 col = mix(vec3(0.5, 0.4, 0.2) * (1.0-2.0*abs(shade-0.5)), vec3(1.5, 0.2, 0.1), 1.0-shade);fragColor = vec4(col,1.0);
}void main() {mainImage(gl_FragColor, texCoord);
}
这只是一个简单粗略的模仿。大家可以稍微了解下shader语法,然后再逐行研究下以上源码。可以看到基本的shader操作和图像处理,并没有想象的那么难。
大家看到还有什么好玩的特效,可以评论区发出来,一起研究下怎么实现。