【转】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实战核心技术详解 ...
随机推荐
- 随便说一说bootstrap-table插件
如题... bootstrap-table插件是一个js的表格插件 找了一下资料发现并没有多少 这里放一下初始化的语法 这里在html中写一个目标table元素 <table id=" ...
- win7 iis7.5 配置错误解决办法
win7 iis7.5 配置HTTP 错误 404.3 在初次使用IIS7的时候经常遇到的一个错误解决办法1: 找到Visual Studio命令提示工具,运行aspnet_regiis.exe -i ...
- 对于EditText的详细用法
EditText这个控件对于每一个Android开发者来说都是再熟悉不过了,但是,为什么有的人的EditText可以表现的那么好看,而刚入学Android的程序员来讲却丑到爆.这就充分的说明对于Edi ...
- Asp.Net Mvc4 Ajax提交数据成功弹框后跳转页面
1.cshtml页面代码 @model Model.UserInfo @{ ViewBag.Title = "Edit"; var options = new AjaxOp ...
- 利用CART算法建立分类回归树
常见的一种决策树算法是ID3,ID3的做法是每次选择当前最佳的特征来分割数据,并按照该特征所有可能取值来切分,也就是说,如果一个特征有四种取值,那么数据将被切分成4份,一旦按某特征切分后,该特征在之后 ...
- php session 自定义的设置测试
<?php // ini_set('session.save_handler', 'user'); // 注意 set_session_save_handler() 一定要在 session_s ...
- java 使用substring 截取特殊字符串的后一位或者数字
关于截取特殊的字符串的后一位或者数字 需求:截取特殊字符为 . 后一位 String[] str = uri.split("/"); String str1 = str[st ...
- UITableView 全面详解
在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不 ...
- BASLER 镜头选型白皮书
本文翻译自Basler镜头选型白皮书 有许多方法来进行镜头选型.本文将会讨论其中的指导原则,以帮助你在项目中选择合适的镜头.我们将讨论许多镜头的基本概念,比如镜头接口.图像大小.放大率.焦距.F数和光 ...
- PyCharm如何设置显示行号?
File->setting->Editor->General->Appearance,勾选Show line numbers