效果图如下:

实现方法:

1.将需要产生残影的物体单独设置为一个Group;

2.新建两个sprite,设置为和残影物体相同Group,一个用于显示当前帧的残影,一个保存上一帧的残影用于摄像机渲染,修改sprite的透明度用于产生渐隐效果;

3.新建一个摄像机,摄像机位置需要与两个sprite一致(至少在渲染残影的那个时刻保持一致);

4.代码中新建两个RenderTexture,分别表示上一帧的渲染纹理(用于渲染当前帧的残影)和当前帧的渲染纹理(显示到屏幕);

5.两个RenderTexture交替作为摄像机的渲染目标。在当前帧渲染以前,把不是本次渲染目标的RenderTexture作为保存上一帧纹理的sprite的spriteFrame,然后摄像机执行渲染操作, 更新当前帧的RenderTexture;

实现思路:

保存上一帧的图像并与本帧的图像进行混合,自然就产生了残影效果。优势在于:不用修改透明度,不用动态添加节点,不关心屏幕外的物体是否产生了残影(因为只会渲染当前摄像机范围内的残影), 相当于做了屏幕后处理。缺点在于做了两次渲染,但可以通过设置group来显著减少drawcall。实测,产生残影仅使得drawcall增加了1。

代码:

const { ccclass, property } = cc._decorator;@ccclass
export default class AfterImage extends cc.Component {@property(cc.Camera)camera: cc.Camera = null;//表示当前帧的RenderTexture@property(cc.Sprite)spriteNew: cc.Sprite = null;//表示上一帧的RenderTexture@property(cc.Sprite)spriteOld: cc.Sprite = null;texture1: cc.RenderTexture;texture2: cc.RenderTexture;flag: boolean = true;public showAfterImage = false;public oldX: number = 0;public oldY: number = 0;onLoad() {//初始化渲染纹理this.texture1 = new cc.RenderTexture();this.texture1.initWithSize(cc.winSize.width, cc.winSize.height);this.texture2 = new cc.RenderTexture();this.texture2.initWithSize(cc.winSize.width, cc.winSize.height);}addShadow() {//设置相机的渲染目标if (this.flag) {this.camera.targetTexture = this.texture1;} else {this.camera.targetTexture = this.texture2;}if (this.flag) {//当前渲染目标为t1,则上一帧的缓冲为t2let spriteFrame = new cc.SpriteFrame();spriteFrame.setTexture(this.texture2);//更新残影图片this.spriteOld.spriteFrame = spriteFrame;} else {let spriteFrame = new cc.SpriteFrame();spriteFrame.setTexture(this.texture1);this.spriteOld.spriteFrame = spriteFrame;}//如果不涉及MainCamera移动的话,下面这句可以不要。需注意spriteNew是camera的子节点this.spriteOld.node.setPosition(this.camera.node.getPosition());//将摄像机拍摄的图像渲染到渲染纹理内this.camera.render(this.node.parent);if (this.flag) {//当前渲染目标为t1,则将t1显示到屏幕上let spriteFrame = new cc.SpriteFrame();spriteFrame.setTexture(this.texture1);//更新残影图片this.spriteNew.spriteFrame = spriteFrame;} else {let spriteFrame = new cc.SpriteFrame();spriteFrame.setTexture(this.texture2);this.spriteNew.spriteFrame = spriteFrame;}this.flag = !this.flag;}start() {this.schedule(this.addShadow, 0.1, cc.macro.REPEAT_FOREVER, 0);}
}

打了个包

cocos版本2.0.x(2.0.1)

链接:https://pan.baidu.com/s/1rGq41knUNyOvvyISpQPYag 
提取码:wkkh

cocoscreator,RenderTexture实现残影效果相关推荐

  1. 【包教包会】分享一个CocosCreator组件——动作残影

    一.效果演示 二.如何获取 1.https://github.com/szrpf/ActionShadowDemo/archive/refs/heads/main.zip 2.解压,导入cocos c ...

  2. 残影效果在URP中的实现及性能优化

    快速跳转 残影效果概述 对象池创建对象 残影数量未达到最大 残影数量达到最大 对象池技术优化 残影生成逻辑 生成残影的时机 残影材质处理 残影材质赋予 残影材质更新 残影动画匹配 实例化绘制 其他优化 ...

  3. Unity中实现3D人物残影效果

    一:效果演示 二:思路 --使用SkinnedMeshRenderer类中的BakeMesh方法去复制出新的Mesh --再使用Graphics.DrawMesh绘制会Mesh 三:核心代码实现 -- ...

  4. 【Unity】动作游戏开发实战详细分析-25-角色残影效果的实现

    [Unity]动作游戏开发实战详细分析-25-角色残影效果的实现 基本思路 Unity中的蒙皮网格组件提供了一个接口BakeMesh,允许我们拿到当前动画帧的网格数据,借此可对烘焙网格使用半透明的边缘 ...

  5. Unity学习笔记(8) Unity残影效果整理,3D、2D、通用方案

    Unity做残影效果是个不难的工作. 但是一些细节会对使用方法产生限制,这里整理一下各种情况下推荐的残影效果实现方案 1.3D网格 (高性能) 2.2D人物 (非骨骼动画) (高性能) 3.其它场景 ...

  6. unity实现3D物体的残影效果

    很久之前我写过一篇用对象池等知识实现的2D的残影效果 好像有挺多小伙伴看的添加链接描述 然后这几天我有入门了一下shader 接触了透明的效果 之后我就飘了 想实现一下3D残影的效果 但是这个仅限于u ...

  7. 游戏中制作酷炫拖尾残影效果实战

    发现好多人都想要这个拖尾残影的效果,今天贴出来. 今天制作拖尾残影效果,效果如图:两个视角 我的游戏中角色有冲刺技能,冲刺中身后要有一个残影效果,这种效果就满足了,现在分享给大家如何制作. 1.观察需 ...

  8. 用Python实现武侠小说中的武打动作残影特效

    创作背景 "飞雪连天射白鹿,笑书神侠倚碧鸳",相信很多90后知道这副对联的含义,这是武侠小说作家金庸先生的作品合集,说实话在所有的作品中我最喜欢的是倚天屠龙记和天龙八部,应该说基本 ...

  9. ThreeJS基础代码段(四)运动残影

    一.实际效果 先看实际效果: 二.AfterimagePass.js 实现运动残影的方式有许多种,有博客中给出了processing的实现方式,代码很简单,效果也不错.这里分享之前实现此效果的另一种方 ...

最新文章

  1. icinga服务器系统监控软件的安装
  2. matlab caxis 刻度,[求助]MATLAB画图问题,caxis.m的问题
  3. Windows和Linux双系统时间不对的问题。
  4. 数据结构与算法 -- 算法
  5. 混沌工程将成标配?落地腾讯游戏后带来了哪些惊喜?丨Gdevops峰会
  6. 【终极办法!】idea没有import project解决办法
  7. java 滚动加载,滚动加载,可视区域判断
  8. RHEL5.X 重启网卡出现./network-functions: line 78: .: ifcfg-eth0: file not found
  9. Java中的观察者设计模式
  10. Docker安装Redis(docker-compose.yml)
  11. h5封装去底部_Appium—Native+H5混合APP的自动化
  12. Python读取word文档(python-docx包)
  13. 《智慧城市》顶层设计解读
  14. python查找excel中重复数据_python中查找excel某一列的重复数据 剔除之后打印
  15. 医院私有云架构统一灾备中心建设最佳实践
  16. Kubernetes(K8s)最新版搭建
  17. 【软考】PV操作同步互斥
  18. STM32单片机初学心得
  19. 关于js中e = e || window.event
  20. 你还分不清谐波失真、总谐波失真、总谐波失真加噪声吗?

热门文章

  1. 阿里十年资深程序员吐血总结之Java代理模式
  2. zzw原创_mysql脚本打印出提示信息
  3. EXCEL_VBA_多个工作簿、相同区域的数据复制到一张工作簿的同一sheet中
  4. SimpleNote设计
  5. 论文笔记:Accurate Causal Inference on Discrete Data
  6. pygame 五子棋
  7. 颜色提取工具,一键颜色值复制工具
  8. 电赛校赛-三相逆变电源设计(单片机部分--MSP430F249仿真测频+串口发送机与串口接收机)
  9. Zortrax社区 教您用3D打印 玩转 角色扮演面具
  10. 高精地图——眼看他起高楼,眼看他宴宾客,眼看他楼塌了?