zoukankan      html  css  js  c++  java
  • 【Unity】后处理效果的优化尝试

    主要是在最近工作中的一些心得体会。

    后处理效果的性能问题主要在:

    1.屏幕每个像素都要进行计算。

    2.可能会创建多张RenderTexture的空间占用。

    3.多次Blit操作,比如高斯模糊多次迭代。

    4.偶尔还需要新建摄像机渲染到RenderTexture。

    优化提升性能的思路也比较简单,不过要结合具体后处理的效果来分情况优化。最重要的是找到新的廉价的实现方式,不过往往由于眼界局限,在短期内达到优化的结果很难,所以使用一些比较容易操作的Tips也是一种选择。

    1.全屏计算——>Quad局部计算(针对不对屏幕所有像素进行修改的后处理效果)

    后处理需要在屏幕空间逐像素进行计算,所以如果可以将计算的像素数量控制在较少的范围,则节约不少的ALU。

    在允许的情况下,可以使用场景中放置一个Quad来代替全屏后处理。思路是,将原来后处理的计算代码转移到Quad的Shader中执行,将当前摄像机RenderTexture传递到Quad的材质中,将Quad的顶点通过ComputeGrabScreenPos()计算得到屏幕空间的UV。

    举个例子,比如一个后处理的描边效果,如果应用比较局限,可以在需要描边的对象上放置一个Quad(根据需求决定是否使用Billboard),将边缘检测的计算转移Quad的Shader中进行计算。使用CommandBuffer来传递当前摄像机的RT。不过可能需要一些额外的操作,以及需要注意CommadBuffer的顺序,否则会造成显示不正常。

    2.RenderTexture&Blit

    RenderTexture&Blit的优化比较复杂,因为往往伴随的算法的优化。可以在一些对精度不敏感的效果中使用下采样来节约空间。不过并不建议修改RenderTexture的格式来节约空间,因为有部分移动设备效果显示不正常的情况。(对这块有研究的可以不用Care)

    3.尽量不要新建摄像机渲染到RT(针对新建摄像机的摄像机设置与主摄像机相同,尺寸除外)

    一些效果的实现中,采用新的摄像机渲染到RenderTexture,然后将此RT用于后续渲染的方式。虽然在实现原理上,这样做的思路比较清晰,但是在资源消耗方面,在移动平台并不适合使用。

    如果新建的摄像机的视口配置与当前的主摄像机一致,那么便可以使用这个优化方式。个人的实现方式,使用CommandBuffer,创建一张临时RT,然后将需要渲染的对象收集到一个Renderer类型的list中,然后遍历Renderer,DrawRenderer到临时RT中。这样的话,就不需要新建一个摄像机。

  • 相关阅读:
    中南财经政法大学深圳校友会政法分会上线
    我们为什么需要校友录 人脈存摺
    北京印刷学院校友录试运行
    南京理工大学校友会正式上线
    我们为什么需要校友录 校友录的传播学解读
    CC校友录贴吧 CCBarV0908 正式发布
    我们为什么需要校友录 快捷的校友信息云图
    我们为什么需要校友录 精英圈子准入证 一辈子的学分
    我们为什么需要校友录 某某大学深圳校友录年底盘点
    我们为什么需要校友录 又到一年毕业时毕业感怀文集
  • 原文地址:https://www.cnblogs.com/jaffhan/p/7643068.html
Copyright © 2011-2022 走看看