屏幕图像捕捉:

  • Shader的GrabPass
    GrabPass可以很方便地捕获当前渲染时刻的FrameBuffer中的图像。
    其原理就是从当前FrameBuffer中copy一份纹理,通过SetTexture的方式设置纹理。
    至于GrabPass的性能问题,一般认为是对FrameBuffer 进行的一些pixel copy operations造成的,
    具体Unity是怎么实现的,不得而知。
    GrabPass { } 不带参数的 默认名字为 "_GrabTexture" 会在当时为每一的使用的obj抓取一次
    GrabPass { "TextureName" } 每个名字在 每帧,第一次使用时抓取一次
  • commandBuffer
    GrapPass在每帧至少捕获一次,优化思路是可以统一关闭,减少抓取次数
    基本思路是,独立一个只绘制扭曲层的相机,在OnPreRender中检查抓取cd,引用次数,扭曲开关等,
    用Graphics.ExecuteCommandBuffer(commandBuffer);的方式手动抓取

核心部分代码

private void Awake()
{... ...var cam = GetComponent<Camera>();rt = RenderTexture.GetTemporary(cam.pixelWidth, cam.pixelHeight, 16, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Default, 1);commandBuffer = new CommandBuffer();commandBuffer.name = "GrabScreenCommand";commandBuffer.Blit(BuiltinRenderTextureType.CurrentActive, rt);
}void OnPreRender()
{if (UseCount <= 0 || Time.time < nextGrapTime)return;nextGrapTime = Time.time + grapCD;Graphics.ExecuteCommandBuffer(commandBuffer);
}

扭曲效果

主要使用两个内置函数 https://www.jianshu.com/p/df878a386bec

  • float4 ComputeScreenPos(float4 pos)

    将摄像机的齐次坐标下的坐标转为齐次坐标系下的屏幕坐标值,其范围为[0, w]
    值用作tex2Dproj指令的参数值,tex2Dproj会在对纹理采样前除以w分量。
    当然你也可以自己除以w分量后进行采样,但是效率不如内置指令tex2Dproj

  • half4 tex2Dproj(sampler2D s, in half4 t) { return tex2D(s, t.xy / t.w); }

    扭曲使用贴图计算UV偏移

核心部分:

v2f vert (input v) {v2f o;o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);o.texcoord = v.texcoord;o.uvgrab = ComputeGrabScreenPos(o.vertex);return o;
}fixed4 frag (v2f i) : COLOR {fixed2 norm = UnpackNormal(tex2D(_Distortion, i.texcoord)).rg;i.uvgrab.xy -= _Strength * norm.rg * _RaceDropTex_TexelSize.xy;fixed4 col = tex2Dproj(_RaceDropTex, i.uvgrab);return col;
}

转载于:https://www.cnblogs.com/Hichy/p/9274866.html

扭曲效果 效率优化 GrapPass,CommandBuffer对比相关推荐

  1. 论文: 贝叶斯优化方法和应用综述(1)--------陈述设计类问题举例子,与 model-free优化计算的对比

    陈述:     就是想看一下贝叶斯学派的陈述,从不同的学派的对比,看看有什么优缺点,然后自己思考下.  摘要: 通过设计恰当的概率代理模型和采集函数,贝叶斯优化框架只需经过少数次目标函数评估即可获得理 ...

  2. android 下拉窗帘,Android 窗帘(Curtain)效果二之波浪式动态扭曲效果

    上一篇文章已经实现了如何把一张图片扭曲成波浪效果,那么这一篇文章我们介绍如何动态调整系数,去改变波浪图片的皱褶成度.我们自一次观察下图morning routine的效果: 仔细观察我们发现,当往右滑 ...

  3. 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  4. psql屏幕输出全部结果_CommandBuffer实现Distort屏幕扭曲效果

    现在的游戏中很多特效都喜欢用到扭曲效果,常见的实现方案都是在Shader中使用GrabPass,来获取屏幕的画面然后去做计算.关于获取屏幕画面的几种方案的性能分析可以参考我上篇文章. idleworm ...

  5. 【总结】实现点击累加效果的几种方式对比

    //实现点击累加效果的几种方式对比Author:李金涛:Time:2018-1-1(新年新气象,更上一层楼.持续写博客.不断总结优化,博观约取,才能厚积薄发!)// 1,利用全局作用域不销毁的原理,把 ...

  6. 1. 代码效率优化方法论

    将"烂代码"优化为高效率代码的方法和路径 复杂度:衡量程序执行效率 场景:程序执行好几个小时.甚至好几天的情况,或者是执行过程中电脑几乎死机的情况 如果这个效率低下的系统是离线的, ...

  7. Shader Forge 入门学习(二) 实现发光、火焰燃烧、溶解、扭曲效果

    引言:本篇博客主要记录ShaderForge的常用案例,包括外发光.火焰燃烧.溶解.扭曲等效果.由于内容较多会分成几篇博客记录.如果您对Shader Forge的常用操作还不熟悉,请先看 Unity3 ...

  8. BeanCopy和BeanCopier在实际开发中的使用(属性copy效率优化)

    优化场景: 项目的实体类主要分为三种:dto.dao.query等,所以属性copy避免不了,是影响代码执行效率的主要方面之一. 当时的情况是,项目A接受url请求,然后会调用项目B的一个接口去处理明 ...

  9. Unity Shader-热空气扭曲效果(多种实现方案,包括移动平台)

    原文地址:https://blog.csdn.net/puppet_master/article/details/70199330 简介 千等万等终于等到了<耻辱2>打折,本以为可以爽一发 ...

最新文章

  1. c语言memset函数用法,深入学习C语言中memset()函数的用法
  2. c语言向自定数组_数据结构之用C语言实现定义数组
  3. PHP对抗web扫描器的脚本技巧
  4. #每日一题 对局匹配(dp)
  5. Django redis的使用
  6. Pytorch(4)-模型保存-载入-eval()
  7. 学 Python 最大的 1 个误区,看看你中招了吗?
  8. 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案
  9. 将JSON对象带有格式的写出到文件中
  10. linux root密码激活,Linux - root初始密码设置
  11. ubuntu shuangxitong
  12. mysql 连接错误The server time zone value ‘?????????‘
  13. Spring MVC测试框架详解——服务端测试
  14. 几何畸变图像恢复 openCV3 - 数字图像处理作业3
  15. java访问修饰符_Java访问修饰符
  16. 使用Zabbix监控Windows主机
  17. 汇桔网与分众传媒正式达成全面深度战略资本合作
  18. 六石管理学:个人机器的开发环境也有硬性要求
  19. CodeForces 453A Little Pony and Expected Maximum
  20. finereport与OA系统集成的完全方案

热门文章

  1. tyvj1194 划分大理石
  2. 【Unity入门】场景、游戏物体和组件的概念
  3. 1.LeetCode字符编辑距离
  4. 函数中的 arguments
  5. 【VM】—VM安装包
  6. Wampserver 下载安装!!!踩坑总结系列
  7. 前端—每天5道面试题(7)
  8. iTunes是什么意思
  9. 夏季外出旅游,有哪些方面需要注意?
  10. 如果孩子早恋是支持还是反对?