再炫的特效没有声音也是不完整的~

Shader 特效 —— Film Burn.mp4

效果图

该特效可以分为以下 5 种效果的融合。

大 Blob 的效果

没添加随机性的大 Blob 示意图

结合代码可知,这其实就是二维 sin*cos 的效果。

sin(x)cos(y)

对纹理坐标增加了点随机性并随着 progress 移动后的效果如下

增加了随机性的大 Blob 动态示意图【gif 对颜色进行了量化】

增加了随机性的大 Blob 静态示意图

相应代码和注释如下

/// @note 大 Blob
/// 增加一点随机性,改变每个 blob 的形状f += .1 +sin(((p.x * rand(i) * 6.0) + ///< 影响 blob 的大小(progress * 8.0)) +     ///< 影响 blob 的速度rand(i + 1.43)) *cos(((p.y * rand(i + 4.4) * 6.0) + ///< 影响 blob 的大小(progress * 6.0)) +           ///< 影响 blob 的速度rand(i + 2.4));

小粒子的效果

相应代码和注释如下

/// @note 小粒子f += 1. - clamps(length(p -vec2(smoothRandom(vec2(progress * 1.3), i + 1.0),       ///< 控制粒子的运动位置和轨迹【通过插值确保产生的随机值是连续的】smoothRandom(vec2(progress * 0.5), i + 6.25))) *mix(20., 70., rand(i)));                                       ///< 影响粒子的大小,值越大粒子越小

其实就是在随机的位置【连续变化】画随机大小的圆。

大 Blob & 小粒子 随着 Progress 的变化

f 随着 progress 的变化

从上图中可以看出该效果是 “从无到有再到无” 的一个过程。

动态效果【gif 对颜色进行了量化】

静态效果

相应代码和注释如下

/// @note 颜色随着 progress 而变化
f = pow3(f * color,   ///< 着色vec3(1., 2. - sin(progress * PI), 1.3)); ///< 1., [2., 1.], 1.3
f *= sin(progress * PI);

纹理坐标的周期性缩放

这里对纹理坐标的值进行了调整以便显示

纹理坐标的缩放即是对纹理进行缩放的效果

相应代码和注释如下

/// @note 图像周期性缩放
p -= .5;    ///< 以屏幕中心为原点/// 随机对纹理坐标进行缩放
p *= 1. + (smoothRandom(vec2(progress * 5.), 6.3) * sin(progress * PI) * .05);
p += .5;    ///< 平移原点回左下角

带噪点的转场(结合纹理的缩放)

相应代码和注释如下

    float bluramount = sin(progress * PI) * .03;/// @note repeats 越大,毛玻璃效果越弱for (float i = 0.; i < repeats; i++){/// 角度转弧度float rad = radians((i / repeats) * 360.);vec2 q = vec2(cos(rad), sin(rad)) *(rand(vec2(i, p.x + p.y)) + bluramount); ///< 生成噪点vec2 uv2 = p + (q * bluramount); ///< 随机噪点偏移纹理坐标,毛玻璃效果blurred_image += textureSmoothMix(uv2); ///< 叠加随机偏移的纹理(同时随着 progress 变化)}blurred_image /= repeats; ///< 平均,模糊
/// @brief 纹理平滑混合
vec4 textureSmoothMix(vec2 p)
{return mix(getFromColor(p), getToColor(p), sigmoid(progress, 10.));
}

sigmoid 示意图

综上

综合以上所有效果后,完整代码和解释如下

float seed = 2.31;#define PI 3.141592653589
#define PI_HALF (PI/2.)
#define clamps(x) clamp(x, 0., 1.)#iChannel0 "file://./images/私の初めて、キミにあげます/1 (6).jpeg"
#iChannel1 "file://./images/私の初めて、キミにあげます/timg (4).jpg"float progress = 0.f;vec4 getFromColor(vec2 uv)
{return texture2D(iChannel0, uv);
}vec4 getToColor(vec2 uv)
{return texture2D(iChannel1, uv);
}float sigmoid(float x, float a)
{float b = pow(x * 2., a) / 2.;if (x > .5){b = 1. - pow(2. - (x * 2.), a) / 2.;}return b;
}float apow(float a, float b)
{return pow(abs(a), b) * sign(b);
}/// @brief 三通道的 apow
vec3 pow3(vec3 a, vec3 b)
{return vec3(apow(a.r, b.r), apow(a.g, b.g), apow(a.b, b.b));
}/// @brief 平滑混合
float smoothMix(float a, float b, float c)
{return mix(a, b, sigmoid(c, 2.));
}/// ---------------------------------------------------------
/// 随机函数部分
float rand(float co)
{return fract(sin((co * 24.9898) + seed) * 43758.5453);
}float rand(vec2 co)
{return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
}float rand(vec2 co, float shft)
{co += 10.;return smoothMix(fract(sin(dot(co.xy, vec2(12.9898 + (floor(shft) * .5), 78.233 + seed))) * 43758.5453),fract(sin(dot(co.xy, vec2(12.9898 + (floor(shft + 1.) * .5), 78.233 + seed))) * 43758.5453),fract(shft));
}float smoothRandom(vec2 co, float shft)
{return smoothMix(smoothMix(rand(floor(co), shft),rand(floor(co + vec2(1., 0.)), shft), fract(co.x)),smoothMix(rand(floor(co + vec2(0., 1.)), shft),rand(floor(co + vec2(1., 1.)), shft), fract(co.x)),fract(co.y));
}
/// ---------------------------------------------------------/// @brief 纹理平滑混合
vec4 textureSmoothMix(vec2 p)
{return mix(getFromColor(p), getToColor(p), sigmoid(progress, 10.));
}#iUniform vec3 color = vec3(1., 0.7, 0.6)
#iUniform float repeats = 50.0 in {0.0, 100.0}vec4 transition(vec2 p)
{/// @note 粒子效果vec3 f = vec3(0.);/// 粒子的个数for (float i = 0.; i < 20.; i++){/// @note 大 Blob/// 增加一点随机性,改变每个 blob 的形状f += .1 +sin(((p.x * rand(i) * 6.0) + ///< 影响 blob 的大小(progress * 8.0)) +     ///< 影响 blob 的速度rand(i + 1.43)) *cos(((p.y * rand(i + 4.4) * 6.0) + ///< 影响 blob 的大小(progress * 6.0)) +           ///< 影响 blob 的速度rand(i + 2.4));// -------------------------------------------------------------------------/// @note 小粒子f += 1. - clamps(length(p -vec2(smoothRandom(vec2(progress * 1.3), i + 1.0),       ///< 控制粒子的运动位置和轨迹smoothRandom(vec2(progress * 0.5), i + 6.25))) *mix(20., 70., rand(i)));                                       ///< 影响粒子的大小,值越大粒子越小}f += 4.;f /= 11.;  ///< 变暗/// @note 颜色随着 progress 而变化f = pow3(f * color,                  ///< 着色vec3(1., 2. - sin(progress * PI), 1.3)); ///< 1., [2., 1.], 1.3f *= sin(progress * PI);/// @note 图像周期性缩放p -= .5;    ///< 以屏幕中心为原点/// 随机对纹理坐标进行缩放p *= 1. + (smoothRandom(vec2(progress * 5.), 6.3) * sin(progress * PI) * .05);p += .5;    ///< 平移原点回左下角vec4 blurred_image = vec4(0.);/// @note 带噪点的转场效果float bluramount = sin(progress * PI) * .03;/// @note repeats 越大,毛玻璃效果越弱for (float i = 0.; i < repeats; i++){/// 角度转弧度float rad = radians((i / repeats) * 360.);vec2 q = vec2(cos(rad), sin(rad)) *(rand(vec2(i, p.x + p.y)) + bluramount); ///< 生成噪点vec2 uv2 = p + (q * bluramount); ///< 随机噪点偏移纹理坐标,毛玻璃效果blurred_image += textureSmoothMix(uv2); ///< 叠加随机偏移的纹理(同时随着 progress 变化)}blurred_image /= repeats; ///< 平均,模糊return blurred_image + vec4(f, 0.); ///< 毛玻璃+粒子}void main()
{vec2 uv = gl_FragCoord.xy / iResolution.xy;// uv.x *= iResolution.x/iResolution.y;progress = fract(.5 * iTime); ///< 线性速度gl_FragColor = transition(uv);
}

ShaderJoy —— Film Burn (炫光光晕)效果【GLSL】相关推荐

  1. fcpx插件:50组唯美梦幻棱镜光晕效果预设MotionVFXmPrism

    fcpx插件:50组唯美梦幻棱镜光晕效果预设推荐给大家!这是一套由MotionVFX出品的为影片增加唯美梦幻效果的预设,新颖独特,画面浪漫唯美!应用范围广!多项参数可再二次调节,达到您满意的效果!非常 ...

  2. PS教程:紫色光晕效果实现

    这里小千分享给大家一片PS实现紫色光晕效果的图文教程,同学们根据步骤操作即可. 1.新建800x800画布 2.设置前景色和背景色分别为#b38adb ,#212121;执行"滤镜" ...

  3. 【Unity3D日常开发】灯光系统,太阳光晕效果实现

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一.前言 太阳光晕的效果虽然用处不大,但是很漂亮,漂亮不就行了,那么就来看看 ...

  4. Android:RecyclerView滑动到边缘时的光晕效果

    相信大家对于RecyclerView 都已经不再陌生,我们都知道RecyclerView等可滑动控件默认的是会有滚动条以及滑动到边缘时的阴影(光晕)效果的,那么怎样去掉这两个默认属性呢,在这里简单的记 ...

  5. 剪辑美化视频的方法,每个视频添加光晕效果

    很多视频通过剪辑使视频更美观,有时候 也会给一些视频添加上光晕效果,那么如何快速剪辑多个视频,给每个视频添加上光晕效果呢?我使用视频剪辑高手,为你们分享批量的剪辑怎么做. 准备工具: 安装一个视频剪辑 ...

  6. 分享一个可以批量给视频去色并且添加一个光晕效果的方法

    我们在剪辑视频的时候往往都会遇到各种各样的剪辑问题,今天小编要给大家分享一个可以批量给视频去色并且添加光晕效果的简单方法,有需要的小伙伴可以进来学习哦! 首先让我们来看一下视频去色并加上光晕效果之后是 ...

  7. 多段视频画面四周同时插入光晕效果并导出的详细步骤

    在视频画面中插入光晕效果,是在很多视频素材中经常被用到的效果.那么这么效果是怎么制作出来的呢?下面一起来试试. 预览视频效果 先看一下用视频剪辑高手快速给多段视频同时插入光晕效果 双击视频进去查看,该 ...

  8. 教你快速剪辑多段视频,添加一个光晕效果

    最近有很多朋友在问,该如何剪辑多段视频,比如添加光晕效果,怎么实现?于是乎今天小编给大家分享一个新的技巧,一次能剪辑多段视频,省时省心省力,下面一起来学习. 材料准备: 一台Win系统的电脑 视频剪辑 ...

  9. 用AE实现一个文字光晕效果

    文字光晕效果 首先新建合成,调整视频的大小,然后再继续. 一.新建一个固态纯色背景层,可以是任何你喜欢的颜色,(右键-新建-纯色,然后再弹出的窗口修改颜色和名字) 二.再建一个纯色固态层,将颜色调整为 ...

最新文章

  1. 数据通信技术(三:VLAN划分)
  2. 重磅!Gartner公布2019年十大战略科技发展趋势
  3. Azure Bill
  4. 关节点(atriculation point)算法
  5. java-判断相同和对象比较大小
  6. 一个基础的 HTML 文档有哪些标签?(3)
  7. 从流水中倒推算出销量为多某值的日期
  8. python进阶(四) windows下虚拟环境使用
  9. Python面向对象之结构与成员
  10. Javascript 随机验证码
  11. Profile Options In INV,PO,OM,MS/MRP
  12. 喵哈哈村的魔法考试 Round #14 (Div.2) 题解
  13. Android Studio 每次运行都会再下载一遍,修改
  14. VB中连接access数据库的几种方法
  15. 工作中常用的27个Excel函数公式
  16. shader基础学习摘要(一)
  17. 浪潮4U服务器 raid5 直通(JBOD)
  18. 眼球追踪技术 Unity+ HTC vive Pro + DroolonF1 (一)
  19. HR人力资源部门在招聘、入职、参与和培训方面的 OKRs 案例集
  20. Hive DML 语句操作报错

热门文章

  1. [附源码]Python计算机毕业设计SSM基于微信的基层党建信息系统(程序+LW)
  2. c++快速实现比较三个数的大小
  3. 【考研数据】四.2023年BJTU计算机学院考研录取数据分析(实时更新)
  4. OpenOCD 通过 JTAG 调试树莓派
  5. python-sift-kmeans-svm图片分类
  6. 小米5进系统无显示无服务器,小米手机无法开机进入不了桌面怎么解决 两种办法解决小米手机无法开机问题...
  7. HTML入门1.HTML简介
  8. c语言小游戏 精简_【原创】用非常简单的c语言自编的一个小游戏
  9. html页面点击按钮上传文件,点击按钮实现文件上传及控制文件上传类型
  10. Linux文件上传不成功的问题解决