搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
秋刀鱼在做梦
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
hadoop的三大核心组件之HDFS和YARN_yarn hdfs
2
openssl漏洞补丁修复
3
Linux第七章服务器硬件及RAID配置实战_linux raid控制器
4
midjourney 提示词中的拍摄角度_广角镜头--v5-ar 3:4
5
云数据盘扩容_ucloud优刻得 云盘扩容步骤
6
Android 系统的分区介绍_a b分区 recovery模式
7
git工作原理、从仓库创建到代码拉取提交整套流程_git从仓库拉代码
8
内网渗透测试:初探远程桌面的安全问题_winserver2019在远程桌面开启的情况下如何做安全防护?
9
Redis笔记总结和面试八股文_redies 八股文、
10
n-皇后问题(DFS深搜两种解法)_dfs算法n皇后
当前位置:
article
> 正文
解决Unity引擎后期渲染的性能问题(转)_unity buildin rendertarget
作者:秋刀鱼在做梦 | 2024-07-14 15:37:30
赞
踩
unity buildin rendertarget
一问题
Unity引擎里对渲染后期处理效果很多,如Bloom、运动模糊、景深等效果。实现过程是在作用的摄像机上加脚本并实现OnRenderImage方法,Graphics.Blit(source, destination, material);使用材质material的shader处理帧缓存的数据,再拷贝回屏幕帧缓存。
使用ImageEffect之后,发现在某些机型上(华为mate7、三星N7100),运行效率极低,明显卡顿。UnityProfiler查看真机渲染情况
二调查分析Unity文档并没有相关的详细介绍,实现的细节也不得而知。论坛里Camera.AAResolve解释为与抗锯齿有关系,关闭全屏抗锯齿之后测试,确实不会卡顿了。
目前主流移动 GPU 由三家公司生产,英国 Imagination 公司的 SGX 系列,美国高通公司的 Adreno 系列,以及著名显卡芯片商美国 NVIDIA 公司的移动 GeForce 系列。Arm的mali作为非主流,但在市场上有不小的份额,华为Mate7、三星N7100的GPU正是mali系列。
使用Mali Graphics Debugger查看渲染如图:
在前2个drawcall里都调用了glReadPixels接口
在glReadPixels的最后个参数不为空,则表示数据从显存传输到系统内存,从CPU到GPU的逆向传输,这是非常缓慢的过程,并且是阻塞模式。
看看其它机型渲染情况,下面是高通的gpu,使用adrenoprofiler查看。
它并没有调用glReadPixels,而是使用了glBindFramebuffer。FBO(Frame buffer object)在使用前需要绑定,void glBindFramebuffer(GLenum target, GLuint id);第一个参数是指定绑定操作,读、写或可读可写。第二个参数指定绑定的对象,如果是0,则是默认的帧缓存对象。
这是使用了改变渲染目标缓存的方法。
由此可知不同硬件上处理的方式不一样,具体是因为Unity内部实现的原因或是硬件支持不够。查看opengl版本的版本历史和发展
最大变化的版本是OPENGL3.0。其中正式把帧缓冲对象(framebuffer object)划入core profile;帧缓冲对象之间可以互相拷贝像素到持有的不同的render target,是性能上的提升。
在FBO中使用多重采样抗锯齿,在3.0版本才加入的特性,若渲染接口不支持,则用了比较低级的API来完成获取屏幕缓存数据,导致了卡顿。
我们项目使用的是OPENGL2.0,而mali系列并没有很好的支持OPENGL2.0的接口。
用OPENGL3.0导出apk运行在华为mate7(mali系列)上,是没问题的。
同样使用了改变渲染目标缓存的方法,因为3.0版本的FBO支持多采样。
三问题结论OPENGL2.0,ImageEffect屏幕后期处理时,改变渲染目标缓存,绑定FBO,若不在ProjectSettings里设置全屏抗锯齿是没问题的。若设置了全屏抗锯齿,不同硬件对不同版本OPENGL的支持不定。
四解决方案
1、关闭抗锯齿。
2、提升OPENGL版本到3.0。
3、不使用unity的OnRenderImage方法,直接使用渲染到纹理的方法。
第一种方案效果有损失,不可取;第二种可行,但版本的提升可能会有些不可预估的问题,3.0版本也弃用了很多的特性;第三种最可行,渲染到纹理的方法在绝多数机型都支持。实现方法如下:
1、摄像机上挂接一个脚本
2、Start方法,temp = RenderTexture.GetTemporary获取渲染纹理
3、Update方法,设置Camera.targetTexture = temp;
4、OnPostRender方法,设置Camera.targetTexture =null;Graphics.Blit(temp, null, material);
运行结果:
此证明我的mate7还是可以的,哈哈。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/825342
推荐阅读
article
Unity
改造
编辑器
组件
字段
显示
...
Unity
改造
编辑器
组件
字段
显示
Unity
改造
编辑器
组件
字段
显示
关于
Unity
中组...
赞
踩
article
Unity
编辑器
开发...
编辑器
开发基本有四个Button在 GUI 系统里我最常用 EditorGUILayout。_unity
编辑器
开发un...
赞
踩
article
Unity
CustomEditor
自定显示
Inspector
面板
属性
_
unity
多个custo...
1.
Unity
中,我们想自定义组件在
Inspector
面板中的
属性
显示。这时候就需要用到
CustomEditor
属性
了。...
赞
踩
article
Unity
自定义
编辑器
时让
子类
继承
父类
的
Inspector
显示效果_
unity
类面板中
子类
不显示...
官方文档里的 CustomEditor函数_
unity
类面板中
子类
不显示
父类
变量
unity
类面板中
子类
不显示
父类
变量...
赞
踩
article
【
Unity
】
继承
Button
,添加公开变量怎么显示在
Inspector
_
unity
继承
butto...
一、创建一个代码叫做
Button
Base的脚本,
继承
Button
using
Unity
Engine.UI;using D...
赞
踩
article
Unity
编辑器扩展_
unity
customeditor
(
typeof
())...
在
unity
自带的下拉菜单下添加按钮 using
Unity
Editor;using
Unity
Engine;publi...
赞
踩
article
Unity
c#中
Attribute
用法详解_
unity
c#
attribute
...
举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在
Unity
的Editor上...
赞
踩
article
游戏
开发
小结——我
在
Unity
中制作了
自定义
编辑器
_
unity
自定义
编辑器
...
在
开发
自己的
游戏
时,
在
Unity
中制作
自定义
编辑器
脚本可以改变
游戏
规则。根据您的项目需求量身定制的
自定义
检查器、窗口...
赞
踩
article
vue
-
unity
-
webgl
的
API
详细...
Vue-
unity
-
webgl
是一个用于在Vue.js项目中使用Unity WebGL的库。它提供了一组
API
,可以让你...
赞
踩
article
vue
-
unity
-
webgl
在
vue
3中怎么使用...
Vue-
unity
-
webgl
是一个用于在Vue.js应用程序中嵌入Unity WebGL内容的库。在Vue 3中使用它...
赞
踩
article
【
Unity
UIToolkit
】
UIBuilder
基础教程-制作简易的
对话
系统
编辑器
3步教你玩转...
随着
Unity
开发的深入,基本的
Unity
编辑器
界面并不能满足大部分玩家高阶开发的要求。为了提高开发的效率,有针对性的定...
赞
踩
article
【
Unity
】
UIElements
渲染细节,比
NGUI
/
UGUI
/
FairyGUI
好在哪?_uni...
为什么要关注
UIElements
? 因为要有运行时版本了。
UIElements
在一开始推出的时候就在文档中提到将来会...
赞
踩
article
【
unity
】UI
Builder
/UI
Element
使用实例_
uibuilder
制作
编辑器
教程...
安装 编辑 _
uibuilder
制作
编辑器
教程 示例
uibuilder
制作
编辑器
教程 示例 ...
赞
踩
article
Unity
基于
GraphView
的
对话
系统设计(一)
对话
数据与节点
编辑器
_
unity
graphv...
使用节点
编辑器
来编辑
对话
,便于策划等非程序岗参与项目开发拓展性强,可自定义节点,方便根据项目需求进行拓展使用逻辑简单、直...
赞
踩
article
Unity
UI
Toolkit
拓展编辑器...
1.1 导入UI Builder
Unity
版本2020及以上才支持,2020版本需要打开preview,才能使用1.2 ...
赞
踩
article
Unity
UIToolkit 自定义
VisualElement
组件_
unity
visual
el...
该文章使用的
Unity
版本为2020.1.7f1c1使用的package版本为UIBuilder:1.0.0-previ...
赞
踩
article
unity
5.x从入门到精通_[
Unity
]浅尝
UI
Toolkit
Runtime
...
御三家游戏引擎的
UI
系统,没有一个不拉垮的。——鲁迅其实讲真,
Unity
UI
(UG
UI
)算是游戏引擎界比较不错的一套U...
赞
踩
article
Unity
xNode
节点
插件简单使用介绍_
unity
node
gui
...
xNode
简单使用
xNode
中最基本的4个类NodeGraphNodeNodeEditorNodeGraphEditor...
赞
踩
article
Unity
UI
Toolkit
学习笔记-
Visual
Tree
_
unity
visualtree
...
UI
Toolkit
Visual
Tree
学习笔记_
unity
visualtree
unity
visualtree
...
赞
踩
article
Android
集成
unity
工程以及交互
的
那些事
_
android
unity
...
Android
端
集成
步骤第一步引入
unity
Library包到项目中File --> new --> import m...
赞
踩
相关标签
unity
编辑器
游戏引擎
html
c#
unity3d
vue.js
webgl
前端
javascript