【转】unity3d 各种优化综合
检测方式: Game视窗的Stats去查看渲染统计的信息: 1、FPS fps其实就是 frames per second,也就是每一秒游戏执行的帧数,这个数值越小,说明游戏越卡。 2、Draw calls batching之后渲染mesh的数量,和当前渲染到的网格的材质球数量有关。 3、Saved by batching 渲染的批处理数量,这是引擎将多个对象的绘制进行合并从而减少GPU的开销; 很多GUI插件的一个好处就是合并多个对象的渲染,从而降低DrawCalls ,保证游戏帧数。 4、Tris 和 Draw Calls 预览的时候,可点开 Stats,查看图形渲染的开销情况。特别注意 Tris 保持在 7.5k 以下,有待考证。 Draw Calls 保持在 20 以下,有待考证。 2,FPS,每一秒游戏执行的帧数,这个数值越小,说明游戏越卡。 3,Render Textures 渲染的图片占用内存大小。 4,VRAM usage 显存的使用情况,VRAM总大小取决于你的显卡的显存。 二,代码优化 1. 尽量避免每帧处理 比如: function Update() { DoSomeThing(); } 可改为每5帧处理一次: function Update() { if(Time.frameCount % 5 == 0) { DoSomeThing(); } } 2. 定时重复处理用 InvokeRepeating 函数实现 比如,启动0.5秒后每隔1秒执行一次 DoSomeThing 函数: function Start() { InvokeRepeating(“DoSomeThing”, 0.5, 1.0); } 3. 优化 Update, FixedUpdate, LateUpdate 等每帧处理的函数 函数里面的变量尽量在头部声明。 比如: function Update() { var pos: Vector3 = transform.position; } 可改为 private var pos: Vector3; function Update(){ pos = transform.position; } 4. 主动回收垃圾 给某个 GameObject 绑上以下的代码: function Update() { if(Time.frameCount % 50 == 0) { System.GC.Collect(); } } 5. 优化数学计算 比如,如果可以避免使用浮点型(float),尽量使用整形(int),尽量少用复杂的数学函数比如 Sin 和 Cos 等等 6,减少固定增量时间 7,减少GetComponent的调用 使用 GetComponent或内置组件访问器会产生明显的开销。您可以通过一次获取组件的引用来避免开销,并将该引用分配给一个变量(有时称为“缓存”的引用)。例如,如果您使用如下的代码: [AppleScript] 纯文本查看 复制代码
function Update () { transform.Translate(0, 1, 0); } 通过下面的更改您将获得更好的性能: [AppleScript] 纯文本查看 复制代码
var myTransform : Transform; function Awake () { myTransform = transform; } function Update () { myTransform.Translate(0, 1, 0); } 8,避免分配内存 您应该避免分配新对象,除非你真的需要,因为他们不再在使用 9,使用iOS脚本调用优化功能 UnityEngine Slow and Safe – Mono内部默认的处理异常的调用 Fast and Exceptions Unsupported –一个快速执行的Mono内部调用。不过,它并不支持异常,因此应谨慎使用。它对于不需要显式地处理异常(也不需要对异常进行处理)的应用程序来说,是一个理想的候选项。 10, 优化垃圾回收 如上文所述,您应该尽量避免分配操作。但是,考虑到它们是不能完全杜绝的,所以我们提供两种方法来让您尽量减少它们在游戏运行时的使用: 如果堆比较小,则进行快速而频繁的垃圾回收 [AppleScript] 纯文本查看 复制代码
if (Time.frameCount % 30 == 0) { System.GC.Collect(); } 但是,您应该小心地使用这种技术,并且通过检查Profiler来确保这种操作确实可以降低您游戏的垃圾回收时间 如果堆比较大,则进行缓慢且不频繁的垃圾回收 这一策略适合于那些内存分配 (和回收)相对不频繁,并且可以在游戏停顿期间进行处理的游戏。如果堆足够大,但还没有大到被系统关掉的话,这种方法是比较适用的。但是,Mono运行时会尽可能地避免堆的自动扩大[url=http://www.unitymanual.com/forum-develop-1.html]unity 3d开发心得[/url] 因此,您需要通过在启动过程中预分配一些空间来手动扩展堆(ie,你实例化一个纯粹影响内存管理器分配的“无用”对象): [AppleScript] 纯文本查看 复制代码
function Start() { var tmp = new System.Object[1024]; // make allocations in smaller blocks to avoid them to be treated in a special way, which is designed for large blocks for (var i : int = 0; i < 1024; i++) tmp[i] = new byte[1024]; // release reference tmp = null; } 游戏中的暂停是用来对堆内存进行回收,而一个足够大的堆应该不会在游戏的暂停与暂停之间被完全占满。所以,当这种游戏暂停发生时,您可以显式请求一次垃圾回收: System.GC.Collect(); 另外,您应该谨慎地使用这一策略并时刻关注Profiler的统计结果,而不是假定它已经达到了您想要的效果。 三,模型 1,压缩 Mesh 导入 3D 模型之后,在不影响显示效果的前提下,最好打开 Mesh Compression。 Off, Low, Medium, High 这几个选项,可酌情选取。 2,避免大量使用 Unity 自带的 Sphere 等内建 Mesh Unity 内建的 Mesh,多边形的数量比较大,如果物体不要求特别圆滑,可导入其他的简单3D模型代替。 最简单的优化建议: 1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU。 1.为什么需要针对CPU(中央处理器)与GPU(图形处理器)优化? CPU和GPU都有各自的计算和传输瓶颈,不同的CPU或GPU他们的性能都不一样,所以你的游戏需要为你目标用户的CPU与GPU能力进行针对开发。 2.CPU与GPU的限制 GPU一般具有填充率(Fillrate)和内存带宽(Memory Bandwidth)的限制,如果你的游戏在低质量表现的情况下会快很多,那么,你很可能需要限制你在GPU的填充率。 CPU 往往渲染(Rendering)并不是一个问题,无论是在GPU和CPU上。很可能是你的脚本代码效率的问题,用Profiler查看下。 关于Profiler介绍:http://docs.unity3d.com/Documentation/Manual/Profiler.html 需要注意的是: 图片压缩将降低你的图片大小(更快地加载更小的内存跨度(footprint)),而且大大提高渲染表现。压缩贴图比起未压缩的32位RGBA贴图占用内存带宽少得多。 之前U3D会议还听说过一个优化,贴图尽量都用一个大小的格式(512 * 512 , 1024 * 1024),这样在内存之中能得到更好的排序,而不会有内存之间空隙。这个是否真假没得到过测试。 MIPMAps(多重纹理格式): http://docs.unity3d.com/Documentation/Components/class- |
||||||||||
[Unity3D]图形渲染优化、渲染管线优化、图形性能优化 |
||||||||||
|
||||||||||
|
【转】unity3d 各种优化综合的更多相关文章
- Unity3D性能优化--- 收集整理的一堆
http://www.cnblogs.com/willbin/p/3389837.html 官方优化文档--优化图像性能http://docs.unity3d.com/Documentation/Ma ...
- 深入浅出聊Unity3D项目优化:从Draw Calls到GC
前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...
- Unity3D项目优化(转)
前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...
- unity3d的优化场景技术LOD+IOC
一.unity3d的优化场景技术 LOD+IOC 遮挡剔除(occlusion culling)其实就是在摄像机范围内的物体才被渲染出来,没有在视野范围内的,统统关掉渲染,这样能让性能大大提高. I ...
- Unity3D - 性能优化之Draw Call
Unity3D - 性能优化之Draw Call 分类: Unity 3D2012-09-13 11:18 1002人阅读 评论(0) 收藏 举报 性能优化引擎测试脚本图形算法 Unity(或者说基本 ...
- Unity3D 图形优化
Unity3D 图形优化 例如DrawCall,我得到的是一些并不完全正确的信息,例如将N个纹理打包成一个图集,这个图集就只会产生一个DrawCall,如果不打成图集,那么就会有N个DrawCall. ...
- Unity3D 性能优化
Unity3D 性能优化 一.程序方面 01.务必删除脚本中为空或不需要的默认方法: 02.只在一个脚本中使用OnGUI方法: 03.避免在OnGUI中对变量.方法进行更新.赋值,输出变量建议在Upd ...
- [Unity3D]图形渲染优化、渲染管线优化、图形性能优化
原地址:http://blog.sina.com.cn/s/blog_5b6cb9500101dmh0.html 转载请留下本文原始链接,谢谢.本文会不定期更新维护,最近更新于2013.11.09 ...
- Unity3D内存优化案例讲解
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
随机推荐
- (转)META http-equiv="refresh" 实现网页自动跳转
***.html自动跳转文件代码如下: <HTML> <HEAD><META http-equiv="Refresh" content="5 ...
- javascript创建对象(一)
对象定义:无序属性的集合,属性包含基本值.对象.函数,相当于一组没有特定顺序的值. 创建自定义对象最简单的方式就是: var movie=new Object(); movie.name=&qu ...
- Jquery全选与反选checkbox(代码示例)
今天在公司要实现操作权限的功能,需要根据左边的树,选择一项,判断右边的操作权限,例如,增加,修改,删除,查看等按钮的显示与隐藏: 这个功能实现思路如下: 1.操作权限:增加.修改等按钮的ID和Text ...
- Top 12 Best Free Network Monitoring Tools (12种免费网络监控工具)
1) Fiddler Fiddler(几乎)是适用于任何平台和任何操作系统的最好的免费网络工具,并提供了一些广受欢迎的关键特性.如:性能测试.捕捉记录HTTP/HTTPs请求响应.进行web调试等很多 ...
- ASP.NET配置KindEditor文本编辑器-图文实例
1.什么是KindEditor KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(tex ...
- 自定义流程gooflow.08 demo在线演示
一.功能简介 gooflow功能清单1.自定义流程绘制2.自定义属性添加3.支持3种步骤类型 普通审批步骤 自动决策步骤 手动决策步骤 4.决策方式(支持js决策,sql语句决策) 5.审批人员参与方 ...
- 不同浏览器下的CSS HACK
今天接了个新项目,年底要做完.预祝我顺利完成工作吧.在搭CSS框架的过程中,遇到了一些浏览器兼容性问题.于是就统计一下各个浏览器专用的css hack吧. (粘贴自百科百科) 针对火狐浏览器的CSS ...
- 学渣也要搞 laravel(1)—— 安装篇
看到laravel(我叫它:拉瓦)那么热门,我也决定学上一学. Laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持.隐式模型绑定.简化Eloquent 全 ...
- Forward reference vs. forward declaration
Q:Im a bit confused. What is the difference between forward declaration and forward reference? Forwa ...
- iOS: AFNetworking手动配置(iOS7.1, AF2.2.4)
一.下载AFNetworking. 二.将AFNetworking-master下的AFNetworking目录拖入到项目中 三.为项目添加Linking to a Library or Framew ...