AE 特效 AdobeLinearWipe

效果说明:AdobeLinearWipe是 After Effects 的Linear Wipe(线性擦除),效果名"ADBE Linear Wipe"。一条直线扫过图层,扫过的一侧透明度变成 0,颜色不变。百分比从 0 到 100,图层从完整显示变成完全擦掉。

着色器把每个像素到这条擦除线的垂直距离和当前进度比较。进度线前面的像素 alpha 置 0,后面的保留原 alpha。羽化为 0 时是硬切;大于 0 时在进度线前一段 emergence 像素里用 smoothstep 做渐隐。进度会加上羽化宽度,所以 100% 时软边也会完全移出画面。

默认 90° 时,线从左边缘往右扫,左边先消失。角度每转 90°,起点换到画面的一个角,方向跟着转:0° 从下往上,180° 从上往下,270° 从右往左。中间角度则是斜向擦除。

简码如下:

"mat2 Rotate(float theta){return mat2(cos(theta), -sin(theta), sin(theta), cos(theta));}\n" \

"float pointToLineLength(vec2 P, vec2 P0, vec2 P1) {\n"\

"    vec2 v = P1 - P0;\n"\

"    vec2 w = P - P0;\n"\

"    float b = dot(w, v) / dot(v, v);\n"\

"    vec2 Pb = P0 + b * v;\n"\

"    return distance(P, Pb);\n"\

"}\n"\

"    mat2 rotation = Rotate(radians(270.0-wipeAngle));\n"\

"    vec2 on = rotation * vec2(0.0, 1.0);\n"\

"    float maxDist = pointToLineLength(corner.xy, vec2(0.0), on) + pointToLineLength(corner.zw, vec2(0.0), on);\n"\

"    float dist = pointToLineLength(vec2(gl_FragCoord.x,viewSize.y - gl_FragCoord.y), startPoint, startPoint + on);\n"\

"    float distance = (maxDist + emergence) * completion;\n"\

"    float offset;\n"\

"    if (emergence == 0.0) { offset = step(distance, dist); }\n"\

"    else { offset = smoothstep(distance - emergence, distance, dist); }\n"\

"    vec4 texColor = texture2D(currTexture,uv);\n"\

"    float alpha = mix(0.0,texColor.a,offset);\n"\

"    gl_FragColor = vec4(texColor.rgb, alpha);\n"          \

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容