Unity 性能优化总结(适合初学者) | 您所在的位置:网站首页 › unity3d优化软件 › Unity 性能优化总结(适合初学者) |
性能优化
引言: 本篇博客总结了一些常用的性能优化方法,希望能帮到和我一样在开发道路上前进的童鞋们!在此,需要感谢CSDN、简书的一些博主,泰课、Siki学院和B站的一些老师们。 开发版本: Unity 2017 文章目录 性能优化1. 前提Mono虚拟机DrawCallUnity ProfilerUnity Statistics 2. 资源优化移动端优化标准模型、贴图优化地形资源监测与分析 3. 渲染优化CPU/GPU分工批处理LODOcclusion CullingLightmapping合并Mesh 4. 其他优化优化工具:Amplify Impostors 1. 前提 Mono虚拟机Mono可以实现强大的跨平台功能,Unity打包时会将Mono一起打包进来,所以哪怕空场景打包,安装包也会有二三十兆的大小。 DrawCallDraw Call,就是CPU对图形绘制接口的调用,CPU通过调用图形库(DirectX/OpenGL)接口,命令GPU进行渲染操作。 因为每次绘制时,CPU都需要调用DrawCall,而每个DrawCall都需要很多准备工作,检测渲染状态,提交渲染数据,提交渲染状态等,而GPU本身具有很强大的计算能力,可以很快处理完渲染任务。 但是当DrawCall过多时,CPU就会产生很多额外的开销用于准备工作,CPU就可能处于负载状态。 知乎Unity游戏开发杂谈之走近DrawCall Unity ProfilerProfiler是用来分析游戏运行性能,内存使用等情况的工具,可以准确定位到影响游戏性能的脚本方法,内存过高的资源等等。可以在Window菜单中打开。 Unity Statistics
尽量选择使用常规网格地形,而非Unity的地形系统 默认的Unity地形系统性能不佳,会产生数百个额外的Draw Call和上千个分布糟糕的多边形,而常规网格可以按照需求。为默认的地形系统编写着色器受限。 资源监测与分析UWA资源监测与分析 3. 渲染优化 CPU/GPU分工 CPU负责逻辑运算、数值处理等GPU负责场景渲染、灯光处理等 CPU和GPU采用渲染流水线的方式进行并行工作和交互,两者相互独立互不依赖。 批处理Unity中有两种批处理的方式,分别是动态批处理和静态批处理。 动态批处理是Unity自动完成的。不需要我们自己操作,但是有很多限制,一不小心破坏,就能导致Unity无法处理使用相同材质的物体。 动态批处理条件如下: 使用同一种材质的物体顶点数量小于900所以使用相同材质的对象必须使用同一个缩放尺寸使用LightMap的物体不会批处理使用过多Pass的shader的对象会中断批处理接受实时阴影的对象也不会批处理所以是否能动态批处理,随缘吧~ 静态批处理,自由度高,限制少,但不能移动。 只需要勾选物体的Static属性即可,Unity在运行的时候会合并所有标识为“Static”的物体。 LOD层次细节(Leves of Detail)是根据物体在游戏中所占视图的百分比来调节不同复杂度模型的。当摄像机距离某物体较远的时候,采用低模,当摄像机距离较近的时候,采用高模。可有优化游戏渲染效率,但会占用更多的内存。 添加LOD Group组件遮挡剔除(Occlusion Culling)在对象被其他静态物体遮挡,摄像机无法看到的时候,禁用对象的渲染。遮挡剔除和视椎体剔除(Frustum Culling)不同,视椎体剔除只禁用摄像机视野外的对象渲染,不会禁用视野内被遮挡对象的渲染。在使用遮挡剔除的时候,任然受益于视椎体剔除。 未开启遮挡剔除的场景渲染效果实时光照对于移动平台是个非常昂贵的操作。如果只有一个平行光还好,但如果场景中包含了太多光源并且使用了很多多Passes的shader,那么很有可能会造成性能下降。灯光贴图技术可以预先计算场景中的灯光信息,并且生成灯光贴图 在物体面板中将要烘培光照贴图的物体设置为LightMap Static,这样Unity就会知道哪些物体是需要被烘培的将多个模型合并成一个物体 提高运行性能统一材质,创建统一的材质,方便控制、分配所有物体方便控制人物动画,将不同衣服、武器、裤子、人物骨架等结合成一个物体,再由同一个骨架控制运动,就能实现不同组合角色,却可以做一样的动作Mesh Beaker 简介:用于合并网格、贴图,将场景中细碎的模型合并,可以有效提高性能 基础操作: GameObject->CreateOther->MeshBaker->Mesh And MaterialBaker 创建MeshBeaker对象点击Open Tools For Adding Objects选中需要合并的物体,点击Add Selected Meshes,注意需要合并的物体材质必须使用相同的ShaderMeshBaker0的ObjectsToBeCombined里就是刚才选择的物体,当然,自己手动拖进去也是可以的简介 Amplify Impostors是一种一键式解决方案,可以极大的减少你的多边形面数和DrawCall的调用次数。使用这种技术的目的就是为了能够使用非常低的多边形数来表示遥远的物体,例如:树木、灌木丛、岩石、遗迹、建筑物等。Impostors(冒牌者)是面向摄像机的扁平的四边形,或者是简单的多边形形状。通过渲染一个原始资源的虚假替代品,来替换复杂的高多边形对象,可以在运行时进行编辑或者创建。目前只支持在编辑器状态下烘焙对象,之后会添加实时生成的功能。Impostors在运行时,可以移动、旋转、缩放,并且可以接受和投放阴影,甚至可以和其他对象或Impostor交互。Impostors可以直接和LOD或第三方的LOD系统搭配使用,可以在近距离显示实际的网格,一定的距离使用Impostor。 地址:百度云下载地址 密码:2lz0 注意:支持Unity 2017.1或者更高版本,商用请到Asset Store购买快速上手 选择场景中的游戏对象或者项目中的预制体为你选择的对象在Inspector窗口添加“Amplify Impostor”组件点击“Bake Impostor”按钮,并且选择你想要保存Impostor Asset的文件夹The Inspector 当Impostor Asset赋予到该组件时,你可以配置高级烘焙设置 Bake Type:以效果对比来说 Spherical < Octahedron < HemiOctahedronTexture Size:设置烘焙图像的纹理大小Axis Frames:每个轴向的帧数,如果值为16,则代表对于一个Impostor有256(16*16)个不同的摄像机,帧数越大,效果越好,当然数据量也越大Pixel Padding:设置图像边缘像素溢出的大小Billboard Mesh:设置更适合的形状Max Vertices:设置最大顶点数Outline Tolerance:允许顶点更加贴合形状Normal Scale:根据形状的法线,展开顶点。当值为1时,可以快速生成四边形 |
CopyRight 2018-2019 实验室设备网 版权所有 |