屏幕虚化是非常简单的屏幕后处理特效之一,它的基本做法是对图片中的像素进行加权平均,也就是让每个像素的颜色都或多或少的受到周围像素颜色的影响,进而模糊画面,产生撸多了的效果,网上屏幕虚化的教程很多,在此就不再赘述了。


相较传统的“咔嚓虚化”,“淡入式虚化”的差别是:

1、前戏足,过渡自然,不生硬。

咔嚓虚化

淡入式虚化

2、分担了下GPU的DrawCall,将DC的峰值稍稍降低了些。

50次迭代虚化的渲染情况

咔嚓虚化DC

淡入式虚化DC

当然,“咔嚓虚化”和“淡入式虚化”这个名字是我起的,知道意思就行,不用较真。

________________________________________

其实,“淡入式虚化”与“咔嚓虚化”本质上没有区别,只是把多次虚化的动作放在了Coroutine中,大概流程是这样的:

OnRenderImage函数调用时,保存一张屏幕截图,并激活淡入式虚化。

在Coroutine中,按照预设的频次迭代虚化屏幕截图。

达到预设的虚化次数后,停止虚化并结束Coroutine。

到这里就讲完了,实现过屏幕虚化的朋友肯定已经明白了,再见。


如果对于屏幕虚化还不甚了解,或者自己以后年纪大了忘了思路,可到后面看一下几个关键点来辅助回忆,请吧。

本文讨论的两种虚化,有以下几个特点:

相同点:

1、通过适当的缩小截屏后的图片,可在提升效率的基础上加强模糊效果。这是因为缩小图片尺寸等于减少需要处理的像素点,因此效率更高;且图片先缩小,丢掉部分像素信息后再拉伸回原尺寸也能起到一定模糊的效果(因为使用了Bilinear的过滤方式)。

截屏时减小图片尺寸的虚化结果比对(迭代10次,采样半径1.2)

(注:这里所谓的“截屏”就是将相机渲染结果的颜色信息取出。后面的虚化处理就是对这个拷贝出来的颜色信息而做的。截屏是通过OnRenderImage函数完成的,这个函数调用的时机可参看Unity函数生命周期或上篇文章《ClearFlags 与 OnRenderImage》。)

2、多次迭代虚化图片,即每次都在上一次虚化的基础上再次虚化,可以提升虚化品质。

整迭代次数的虚化结果比对(采样半径1.2,降采样2倍)

3、合理调整虚化半径,卖二手手机号平台可以提升虚化品质。

调整采样半径的虚化比对(迭代20次,降采样1倍)

注:如果虚化半径调的过高,会让图片变得“瓷砖化”,正所谓过犹不及,适合自己的才是最好的。

4、使用两个Pass通道,分横纵两次进行虚化,减少DrawCall时的采样次数。

不同点:

“咔嚓虚化”的虚化动作直接放在OnRenderImage中。因此若迭代次数较高,这一渲染帧的DrawCall必然高。

“淡入式虚化”在OnRenderImage中仅做截屏操作,虚化动作则放在Coroutine中,即根据虚化强度及时间平均在各渲染帧中。


关键部分代码:

咔嚓虚化调用接口

淡入式虚化调用接口

OnRenderImage操作

咔嚓虚化直接迭代虚化图片

淡入式虚化分帧虚化图片

虚化Shader的两个Pass通道

仅额外采样像素周围4个点的信息,可增加。

进行像素颜色的加权计算

最后值得注意一个地方:

要对保存虚化图片的Texture2D进行些属性设置:

在Unity中做一个淡入式的屏幕虚化相关推荐

  1. Unity Shader 做一个简单的波浪 屏幕扭曲

    v2f vert (appdata v) {v2f o;v.vertex.y = v.vertex.y + sin(v.vertex.x + _Time.y) ;o.vertex = UnityObj ...

  2. 学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity

    MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 G ...

  3. android 工具栏沉浸 下拉,如何在Android应用中实现一个沉浸式状态栏效果

    如何在Android应用中实现一个沉浸式状态栏效果 发布时间:2020-12-08 17:04:42 来源:亿速云 阅读:151 作者:Leah 这篇文章将为大家详细讲解有关如何在Android应用中 ...

  4. 学习在Unity中创建一个动作RPG游戏

    游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...

  5. 学习用C#在Unity中创建一个2D Metroidvania游戏

    学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计,水平提升,米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Lear ...

  6. Unity中获取一个物体下所有的子物体的方法

    Unity中获取一个物体下所有的子物体的方法 方法1(获取全部子物体,无论子物体SetActive是否为true): using System.Collections; using System.Co ...

  7. Unity:图片的一个像素单位对应Unity中的一个距离单位

    当我们使用unity开发时2D项目时,如果需求是一个像素单位就要对应unity中的一个距离单位, 也就是:图片的1像素 = unity中的1个距离单位. 在该图片的属性面板中可以看到有个属性是:Pix ...

  8. unity 2020 怎么写shader使其接受光照?_如何在Unity中造一个PBR Shader轮子

    之前有业界大佬建议我去了解下Unity的PBR.说来惭愧,我查找了下资料才发现自己在这方面的知识居然是一片空白.经过几周的学习与尝试我对这一块算是有了初步的了解,于是写了这篇文章,一方面对自己学到的东 ...

  9. 如何在 Unity 中制作一个道具系统

    原文:How to make a Power-Up System in Unity 作者:Kevin Small 译者:kmyhy 如果音速小子中没有金色戒指和电动鞋,超级马里奥中没有了蘑菇,或者吃豆 ...

最新文章

  1. Hyperledger Fabric 管道(2) 管道的操作
  2. StevenBoyd--Convex optimization--0. Contents
  3. platform平台总线
  4. 计算机网络——访问网站数据传输过程
  5. linux用户与组权限管理
  6. css top 定位百分比,css 使用relative设置top为百分比值的方法(仿百度首页)
  7. jQuery画廊插件-GalleryView
  8. 宿主机上docker0 Linux 网桥设备是怎么来的?
  9. 分享一种免费的.FLV格式视频转.MP4的方法,方便高效且不用迅捷转换器。。。
  10. php: pcntl_signal信号处理
  11. 【毕业设计】基于云平台的火灾报警器 - stm32 物联网 单片机 OneNET云平台
  12. Atcode120E 1D Party
  13. select SCM type and URL 用m2e插件从svn导出maven项目
  14. 【Android】音乐播放器APP的设计与实现
  15. Gradle构造Spring boot项目(使用私服地址)
  16. 台式计算机反复启动,台式机总是一直重启怎么办
  17. 中国石油大学(北京)-《 完井工程》第一阶段在线作业
  18. mac、windows 设置终端代理
  19. Centos7下Fluka的安装教程(保姆级)
  20. Cwru轴承数据集解读(文末附数据)

热门文章

  1. centos标准分区调整大小_去繁化简解决CentOS下调整home和根分区大小的方法
  2. html select选择事件_用 Java 拿下 HTML,分分钟写个小爬虫
  3. zenmap nmap输出无显示_液晶显示器高压板坏的现象及维修思路 。
  4. xctf secret galaxy_三星SMARTTHINGS FIND正式发布 可帮助轻松查找GALAXY设备
  5. 把程序显示在最前面 delphi_地球程序员之神:没上过大学,曾拒盖茨的Offer,4代码农靠他吃饭...
  6. 机器学习基础-LASSO-07
  7. 深度学习-Tensorflow2.2-图像处理{10}-图像定位/优化/图运算/及GPU优化等-22
  8. 战略支援部队信息工程大学的计算机类,中国顶尖的两大“信息工程”高校翻新,南信大、军信大要崛起?...
  9. 合并数组:双针模型,原地实现
  10. 高斯混合模型(Gaussian Mixture Model)