扭曲效果 效率优化 GrapPass,CommandBuffer对比
屏幕图像捕捉:
- 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)--------陈述设计类问题举例子,与 model-free优化计算的对比
陈述: 就是想看一下贝叶斯学派的陈述,从不同的学派的对比,看看有什么优缺点,然后自己思考下. 摘要: 通过设计恰当的概率代理模型和采集函数,贝叶斯优化框架只需经过少数次目标函数评估即可获得理 ...
- android 下拉窗帘,Android 窗帘(Curtain)效果二之波浪式动态扭曲效果
上一篇文章已经实现了如何把一张图片扭曲成波浪效果,那么这一篇文章我们介绍如何动态调整系数,去改变波浪图片的皱褶成度.我们自一次观察下图morning routine的效果: 仔细观察我们发现,当往右滑 ...
- 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...
作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...
- psql屏幕输出全部结果_CommandBuffer实现Distort屏幕扭曲效果
现在的游戏中很多特效都喜欢用到扭曲效果,常见的实现方案都是在Shader中使用GrabPass,来获取屏幕的画面然后去做计算.关于获取屏幕画面的几种方案的性能分析可以参考我上篇文章. idleworm ...
- 【总结】实现点击累加效果的几种方式对比
//实现点击累加效果的几种方式对比Author:李金涛:Time:2018-1-1(新年新气象,更上一层楼.持续写博客.不断总结优化,博观约取,才能厚积薄发!)// 1,利用全局作用域不销毁的原理,把 ...
- 1. 代码效率优化方法论
将"烂代码"优化为高效率代码的方法和路径 复杂度:衡量程序执行效率 场景:程序执行好几个小时.甚至好几天的情况,或者是执行过程中电脑几乎死机的情况 如果这个效率低下的系统是离线的, ...
- Shader Forge 入门学习(二) 实现发光、火焰燃烧、溶解、扭曲效果
引言:本篇博客主要记录ShaderForge的常用案例,包括外发光.火焰燃烧.溶解.扭曲等效果.由于内容较多会分成几篇博客记录.如果您对Shader Forge的常用操作还不熟悉,请先看 Unity3 ...
- BeanCopy和BeanCopier在实际开发中的使用(属性copy效率优化)
优化场景: 项目的实体类主要分为三种:dto.dao.query等,所以属性copy避免不了,是影响代码执行效率的主要方面之一. 当时的情况是,项目A接受url请求,然后会调用项目B的一个接口去处理明 ...
- Unity Shader-热空气扭曲效果(多种实现方案,包括移动平台)
原文地址:https://blog.csdn.net/puppet_master/article/details/70199330 简介 千等万等终于等到了<耻辱2>打折,本以为可以爽一发 ...
最新文章
- c语言memset函数用法,深入学习C语言中memset()函数的用法
- c语言向自定数组_数据结构之用C语言实现定义数组
- PHP对抗web扫描器的脚本技巧
- #每日一题 对局匹配(dp)
- Django redis的使用
- Pytorch(4)-模型保存-载入-eval()
- 学 Python 最大的 1 个误区,看看你中招了吗?
- 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案
- 将JSON对象带有格式的写出到文件中
- linux root密码激活,Linux - root初始密码设置
- ubuntu shuangxitong
- mysql 连接错误The server time zone value ‘?????????‘
- Spring MVC测试框架详解——服务端测试
- 几何畸变图像恢复 openCV3 - 数字图像处理作业3
- java访问修饰符_Java访问修饰符
- 使用Zabbix监控Windows主机
- 汇桔网与分众传媒正式达成全面深度战略资本合作
- 六石管理学:个人机器的开发环境也有硬性要求
- CodeForces 453A Little Pony and Expected Maximum
- finereport与OA系统集成的完全方案