扭曲效果 效率优化 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);的方式手动抓取
GrabPass可以很方便地捕获当前渲染时刻的FrameBuffer中的图像。
其原理就是从当前FrameBuffer中copy一份纹理,通过SetTexture的方式设置纹理。
至于GrabPass的性能问题,一般认为是对FrameBuffer 进行的一些pixel copy operations造成的,
具体Unity是怎么实现的,不得而知。
GrabPass { } 不带参数的 默认名字为 "_GrabTexture" 会在当时为每一的使用的obj抓取一次
GrabPass { "TextureName" } 每个名字在 每帧,第一次使用时抓取一次
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;
}
扭曲效果 效率优化 GrapPass,CommandBuffer对比的更多相关文章
- 见招拆招-PostgreSQL中文全文索引效率优化
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- (转)热空气扭曲效果shader
转自:http://blog.sina.com.cn/s/blog_89d90b7c0102vaqy.html 热空气扭曲在大自然中形成是比较复杂的,这里只是通过取屏幕纹理和移动UV来模拟热扭曲效果. ...
- Unity3d代码及效率优化总结
1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU. 2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unli ...
- php效率优化
php效率优化 最近在公司一边自学一边写PHP程序,由于公司对程序的运行效率要求很高,而自己又是个新手,一开始就注意程序的效率很重要,这里就结合网上的一些资料,总结下php程序效率优化的一些策略:1. ...
- Unity Shader-热空气扭曲效果
GrabPass GrabPass是Unity为我们提供的一个很方便的功能,可以直接将当前屏幕内容渲染到一张贴图上,我们可以直接在shader中使用这张贴图而不用自己去实现渲染到贴图这样的一个过程,大 ...
- QRowTable表格控件(三)-效率优化之-合理使用QStandardItem
目录 一.开心一刻 二.概述 三.效果展示 四.QStandardItem 1.QStandardItem是什么鬼 2.性能分析 3.QStandardItem使用上的坑 五.相关文章 原文链接:QR ...
- Kettle中ETL的效率优化
ETL效率优化 开启数据库日志记录及性能监控 如果我们想要优化一个ETL(KTR或者KJB)的性能,我们首先需要知道的就是它的瓶颈在哪里.而这些信息一般只能在ETL运行的步骤度量中看到,并且是不会持久 ...
- 开发效率优化之Git分布式版本控制系统(一)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680本篇文章将先从Git分布式版本控制系统来阐述开发效率优化 一,企业 ...
- java关于for循环的效率优化
我们知道在实现一个功能的时候是可以使用不同的代码来实现的,那么相应的不同实现方法的性能肯定也是有差别的,所以我们在写一些对性能很敏感的模块的时候,对代码进行优化是很必要的,所以我们说一下for循环(w ...
随机推荐
- Python()- 面向对象三大特性----多态
多态: python 生来支持多态白话:一种事物的多种形态 (动物可以继承给狗,也可以继承给猫) class Animal: pass class Dog(Animal): def attack(se ...
- 洛谷——P2865 [USACO06NOV]路障Roadblocks
P2865 [USACO06NOV]路障Roadblocks 题目描述 Bessie has moved to a small farm and sometimes enjoys returning ...
- Linux 下使用 Sar 简介
Linux 下使用 Sar 简介 提交 我的留言 加载中 已留言 介绍 Sar 最早是实现在 Salaris Unix 系统里,后来移植到了大部分其他的 Unix 系统(如AIX,HP-UX等).Li ...
- SQL 撤销索引、撤销表以及撤销数据库
SQL 撤销索引.撤销表以及撤销数据库 通过使用 DROP 语句,可以轻松地删除索引.表和数据库. DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引. 用于 MS Access ...
- 微信小程序 常见问题 小结
1.微信小程序 尺寸单位 rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应.规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则 ...
- [iOS] dom解析xml数据,拿到<>里面的值
<response result="success" timestamp="1338890206" cityver="1.0"> ...
- js中字符串的拼接的另一种方法
// 按一定长度截断字符串,并使用 + 运算符进行连接. // 分隔字符串尽量按语义进行,如不要在一个完整的名词中间断开. // 特别的,对于HTML片段的拼接,通过缩进,保持和HTML相同的结构. ...
- HTML的简单学习
<html>与</html>之间的部分用来描述网页. <body>与</body>之间是页面的可见的内容. <h1>与</h1> ...
- Python爬虫开发【第1篇】【机器视觉及Tesseract】
ORC库概述 在读取和处理图像.图像相关的机器学习以及创建图像等任务中,Python 一直都是非常出色的语言.虽然有很多库可以进行图像处理,但在这里我们只重点介绍:Tesseract 1.Tesser ...
- 小贝_mysql数据库备份与恢复
mysql数据库备份与恢复 简要: 一.数据库备份 二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统执行中,增量备份与总体备份 例: 每周日总体备份一次,周一到周 ...