Cocos Shader 转场特效合集!卡牌必备,免费开源!

news2024/12/27 16:27:31

接前两期,孙二喵的 AIGC 卡牌接近尾声了!链接:

  • AIGC 制作卡牌1

  • AIGC 制作卡牌2

最近,二喵遇到一个很头疼的问题!就是如何实现既流畅、又生动的转场特效。

8f629b2535feb4ff24d046374890a7d3.gif

经过一番大战之后,我实验了多个效果,一共写了 7 个转场特效,在此分享给大家,希望大家喜欢。

8a2e35483656e577fddab3eb88e90330.gif

H5 预览地址:http://learncocos.com/shader1/

下载地址见文末阅读原文

01 线性转场

注意:图片不能合图,合图需要转换UV

主图片使用默认的精灵,需要转场的图片,我们可以新建一个subTex,或者只是用透明色。

77f708b0655f6736637dd4e62a085339.png

线性转场相对而言,效果比较简单

#include <builtin/uniforms/cc-global>

const float tranSize = 0.1; 
vec4 LinearTransition(vec4 color,vec4 mixcolor, vec2 uv, float progression,bool isUVX) {
  float dir = isUVX?uv.x:uv.y;
  float f = dir*(1.0-tranSize) + tranSize - (progression * (1.0 + tranSize));
  float m = smoothstep(0., -tranSize,f);
  color = mix(color,mixcolor,m);
  return color;
}

我们使用了 smoothstep,先看下 smoothstep 的源码:

float smoothstep(float t1, float t2, float x) {
  // Scale, bias and saturate x to 0..1 range
  x = clamp((x - t1) / (t2 - t1), 0.0, 1.0); 
  // Evaluate polynomial
  return x * x * (3 - 2 * x);
}

根据 x 在 t1 和 t2 之间的距离,返回 0-1 的平滑过渡值。

这里使用了f = dir *(1-s)+s-p*(1+s)使选定的 uv 轴向,返回在进度参数下的混合系数。效果如下:

f94773c9100a8ec78423073303cb1754.gif

02 风吹线性过渡

注意:图片不能合图

在线性过渡上加入,随机的风吹效果,Cocos Shader 代码如下:

#include <builtin/uniforms/cc-global>

// Variables
const float tranSize = 0.25; 

float rand (vec2 co) {
  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

vec4 WindTransition(vec4 color,vec4 mixcolor, vec2 uv, float progression) {
  float r = rand(vec2(0, uv.y));
  float m = smoothstep(0.0, -tranSize, uv.x*(1.0-tranSize) + tranSize*r - (progression * (1.0 + tranSize)));
  color = mix(color,mixcolor,m);
  return color;
}

效果见下:

7a0db235bc992fa1880c2bb63b699276.gif

03 圆形过渡

#include <builtin/uniforms/cc-global>

float rule(vec2 coord)
{
    vec2 uv2 = coord - vec2(0.5, 0.5);
    float angle = atan(uv2.x, uv2.y);
    return angle / 2.0 / 3.1416 + 0.5;
}

vec4 CircleTransition(vec4 color,vec4 mixcolor, vec2 uv, float progression) {
  float rule = rule(uv);
  float vague = 0.2;
  float phase = progression * (1.0 + vague);
  float p0 = smoothstep(rule, rule + vague, phase);
  color = color * (1.0 - p0) + mixcolor * p0;
  return color;
}

效果见下:

0b3b5c39964d350cf9c0a57d48e25747.gif

04 随机方块过渡

float smoothness = 0.5; // 0-1

float rand (vec2 co) {
  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
const float tranSize = 10.;

vec4 RandomTransition(vec4 color,vec4 mixcolor, vec2 uv, float progression) {
  float r = rand(floor(vec2(tranSize) * uv));
  float m = smoothstep(0.0, -smoothness, r - (progression * (1.0 + smoothness)));
  color=  mix(color, mixcolor, m);
  return color;
}

效果见下:9dccf871757c88a765b33b69024a0459.gif

05 规则方块过渡

这个效果来自 shadertoy。

#include <builtin/uniforms/cc-global>

const float tranSize = 32.;

vec4 BoxTransition(vec4 color,vec4 mixcolor, vec2 uv, float progression) {
  vec2 fragCoord = gl_FragCoord.xy;
  vec2 blockPos = vec2(progression) * cc_screenSize.xy;
  vec2 p = ceil(fragCoord / tranSize) * tranSize; 
  float progress = (p.x + p.y) / (blockPos.x + blockPos.y);
  vec2 v = abs(fragCoord - p + vec2(tranSize/2.));
  if (max(v.x, v.y) * progress < tranSize/2.) {
      color = mixcolor;
  }
  return color;
}

效果见下:a91e54a846d0070144de879985539c0d.gif

06 棱形过渡

#include <builtin/uniforms/cc-global>

const float tranSize = 32.;

vec4 SideTransition(vec4 color,vec4 mixcolor, vec2 uv, float progression) {
  uv.x = 1.0 - uv.x;
  float xFraction = fract(gl_FragCoord.x / tranSize);
  float yFraction = fract(gl_FragCoord.y / tranSize);
  
  float xDistance = abs(xFraction - 0.5);
  float yDistance = abs(yFraction - 0.5);

  if (xDistance + yDistance + uv.x + uv.y < progression * 4.0) {
      color = mixcolor;
  }
  return color;
}

效果演示:0fcd88a936f44aa40f8aea7963a485fb.gif

07 燃烧转场

注意:该效果可以合图

float fr(vec2 c, float seed) 
{
return fract(43.0 * sin(c.x + 7.0 * c.y) * seed);
}

float fn(vec2 p, float seed)
{
    vec2 i = floor(p), w = p - i, j = vec2(1.0, 0.0);
    w = w * w * (3.0 - w - w);
    return mix(mix(fr(i, seed), fr(i + j, seed), w.x), mix(fr(i + j.yx, seed), fr(i + 1.0, seed), w.x), w.y);
}

float fa(vec2 p, float seed) 
{
    float m = 0.0, f = 2.0;
    for (int i = 0; i < 6; i++) {
    m += fn(f * p, seed) / f; 
    f += f;
    }
    return m;
}
vec4 BurnOut(vec4 MainColor, vec2 UV, float Intensity) 
{
    float t = fract(Intensity * 0.9999);
    float cc = smoothstep(t / 1.2, t + 0.1, fa(3.5 * UV, 1.));
    vec4 c = vec4(cc);
    c = MainColor * c;
    c.r = mix(c.r, c.r * 15.0 * (1.0 - c.a) * 8.0, Intensity);
    c.g = mix(c.g, c.g * 10.0 * (1.0 - c.a) * 4.0, Intensity);
    c.b = mix(c.b, c.b * 5.0 * (1.0 - c.a), Intensity);
    return vec4(c.rgb, c.a);
}

演示效果:ed49abc7eb59b345fb0bf52fdc4f85c6.gif

战斗效果: 

d10bc9164041f2f22b9c72a7e4de8950.gif

08 代码下载

源码已上架 Cocos Store 免费开源。

c4547b12e25be1dafbf76012bc0a5ce0.jpeg

你可以将这些效果,应用于画面截图、透明色做混合,实现场景消失,或者卡牌溶解等等。

今天的分享就到这里,快去下载吧!点击阅读原文直达。

往期精彩

  • CocosStore卖家成长指南

  • Creator 3.x 入门修炼指南  

  • 用ChatGPT做一款二次元卡牌游戏

  • AIGC 游戏创作,2小时开发微信小游戏

  • 坚持做一个长期主义者

  • 一个公式35岁让自己过的越来越好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录--vue3优雅的使用element-plus的dialog

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 如何优雅的基于 element-plus,封装一个梦中情 dialog 优点 摆脱繁琐的 visible 的命名&#xff0c;以及反复的重复 dom。 想法 将 dialog 封装成一个函数就能唤起的组件。如下&#xff1a; addDialog(…

Python每日一练(20230518) 螺旋矩阵 I\II\III\IV Spiral Matrix

目录 1. 螺旋矩阵 I Spiral Matrix i &#x1f31f;&#x1f31f; 2. 螺旋矩阵 II Spiral Matrix ii &#x1f31f;&#x1f31f; 3. 螺旋矩阵 III Spiral Matrix iii &#x1f31f;&#x1f31f; 4. 螺旋矩阵 IV Spiral Matrix iv &#x1f31f;&#x1f31f; &#…

探索Vue的组件世界-组件通信

目录 组件跨层级访问 访问外层组件 定向消息 ref&#xff08;父组件访问子组件&#xff09; 依赖注入 依赖注入&#xff0c;vue2.0实现源码 组件封装 组件二次封装 小结 组件跨层级访问 访问外层组件 // 获取 根组件 的数据 this.$root.pri;// 写入 根组件 的数据 t…

人机融合智能的测量、计算与评价

老子在《道德经》第二十一章写道:"道之为物,惟恍惟惚。惚兮恍兮,其中有象;恍兮惚兮,其中有物。窈兮冥兮,其中有精;其精甚真,其中有信。"&#xff08;“道”这个东西&#xff0c;没有清楚的固定实体。它是那样的恍恍惚惚啊&#xff0c;其中却有形象。它是那样的恍恍惚…

怎样才能做好企业内部wiki知识库呢?

企业内部wiki知识库是一种常用的知识管理方式。通过建立企业内部wiki知识库&#xff0c;企业可以更好的管理和共享知识&#xff0c;提高员工的工作效率和生产力。 详解如何做好企业内部wiki知识库的方法&#xff1a; 一、设计知识库架构 企业内部wiki知识库的架构设计是非常…

抖音seo源码优化/企业号搜索排名/开源搭建

什么是抖音seo&#xff1f; 抖音SEO是指通过提高在抖音平台的关键词排名&#xff0c;来获取流量、获取客户的目的。抖音的流量主要分为付费流量、推荐流量和搜索流量&#xff0c;其中搜索流量因为付费太贵、上热门太累而成为另一种进入方式1。抖音拥有庞大的用户基数&#xff…

shell命令以及运行原理,命令行解释器/bash,Linux Kernel与Shell简单理解等

引入 输入指令的过程本质上就是在输入一个字符串&#xff0c;然后指令的本质就是编译好的程序.exe与脚本。它们都是在系统的特定路径之下放着呢。然后我们所有指令最终都是要到操作系统内部去运行的&#xff0c;也就是说各种各样的指令都需要操作系统的参与。我们有各种各样的…

WordPress 如何开启多站点 含Apache和Nginx伪静态规则

WordPress 3.0以上的版本支持直接开启多站点模式,这样一来,你可以在一个后台切换多个站点进行管理。 最近打算折腾一个主题演示站,给每个主题使用独立的子站点来搭建演示,如果是Apache环境,配置就比较容易,但是倡萌使用的是 Nginx,花了大量的时间测试了N多网络上的伪静…

什么是无头浏览器?如何使用Golang实现无头浏览器截图?

前言 在Web开发中&#xff0c;有时需要对网页进行截图&#xff0c;以便进行页面预览、测试等操作。 而使用无头浏览器来实现截图功能&#xff0c;可以避免手动操作的繁琐和不稳定性。 这篇文章将介绍&#xff1a;使用Golang进行无头浏览器的截图&#xff0c;轻松实现页面预览…

苹果电脑PS Raw增效工具:Camera Raw 15中文版

Camera Raw 15是Adobe公司开发的一款用于处理RAW格式图像的插件软件&#xff0c;它可以帮助用户在Photoshop、Lightroom等软件中对RAW格式图像进行调整和优化。Camera Raw 15提供了丰富的调整工具&#xff0c;包括白平衡、曝光、色彩、锐化、噪点、透视等&#xff0c;可以让用户…

home assistant添加天气预报

先上效果图&#xff0c;大体就是这个样子 1.天气API链接 https://www.windy.com 选择页面嵌入式微件 下面是完整的HTML 代码&#xff0c;但是需要修改一下 <iframe width"1000" height"600" src"https://embed.windy.com/embed2.html?lat21.2…

【腾讯云Finops Crane集训营】利用云原生成本优化项目实现降本增效泰裤辣~

Crane 是一个基于 FinOps 的云资源分析与成本优化平台。在保证客户应用运行质量的前提下实现极致的降本。 文章目录 一、 前言&#x1f350;二、 Crane开源项目简介&#x1f34e;2.1. Crane整体框架&#x1f352;2.2. Crane主要功能&#x1f345; 三、Crane实验前期准备&#x…

PaLM 2 硬刚 GPT-4,未来还有变数

在 ChatGPT 没有出现之前&#xff0c;谷歌多年来一直是 AI first战略 &#xff0c;不出意外的话还会是领头羊&#xff0c;手握 DeepMind 和 Google Brain 两大 AI 王牌&#xff0c;再加上投资技术实力雄厚的 Anthropic&#xff0c;论资排辈都得是他。时不我与&#xff0c;被 Op…

链表--part 1--链表基础理论(概括)

文章目录 单链表双链表循环链表链表链表的定义删除节点增加节点 首先什么是链表&#xff0c;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最…

低代码平台的分类及选择参考

目录 零、认识低代码 一、低代码平台的分类 1.1通用低代码平台 1.2垂直低代码平台 1.3开放式低代码平台 二、低代码平台的特点 三、低代码平台的优缺点对比 四、低代码平台的选择参考 为什么选择IVX&#xff1f; 五、iVX平台与其他低代码平台的区别 零、认识低代码 …

机器学习项目实战-能源利用率 Part-2(探索性数据分析)

Part-1部分的博客可见下&#xff1a; 机器学习项目实战-能源利用率 Part-1&#xff08;数据清洗&#xff09; 这部分进行的是探索性数据分析。 探索性数据分析 Exploratory Data Analysis 简单的说&#xff0c;就是画图来分析数据。 分析标签数据 data data.rename(colum…

c++ 11标准模板(STL) std::set(六)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…

STL配接器(容器适配器)—— queue 的介绍使用以及模拟实现。

注意 &#xff1a; 以下所有文档都来源此网站 &#xff1a; http://cplusplus.com/ 一、queue 的介绍 queue 文档的介绍&#xff1a;https://cplusplus.com/reference/queue/queue/ 1. 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其…

将本机安装的chrome插件移至其他电脑

国内chrome应用商店默认是打不开的&#xff0c;属于绕过应用商店安装的一种办法 假设已安装插件的电脑为A电脑 待安装插件电脑为B电脑 首先在A电脑打开chrome浏览器&#xff0c;然后输入chrome://version/ 找到"个人资料路径"对应位置 个人资料路径下的Extensions目…

LabVIEWCompactRIO 开发指南22 CVT客户端通信(CCC)

LabVIEWCompactRIO 开发指南22 CVT客户端通信&#xff08;CCC&#xff09; 如果使用第3章中讨论的CVT进行进程间通信&#xff0c;请考虑使用CCC。如果已经创建了CVT标签&#xff0c;并且想在网络上发布此数据&#xff0c;CCC不失为一个简单而优雅的解决方案。它基于TCP/IP&am…