Unity3D优化

优化的几种方式:
CPU
GPU(Lod,OC,烘焙GI)
Dawcall优化(批处理(动态批处理,静态批处理):使用条件及使用原理)
内存(代码优化:对象池,单例,减少堆对象的产生)

一个 Draw Call,等于呼叫一次 DrawIndexedPrimitive (DX) or glDrawElements (OGL),等于一个 Batch

Unity每次在准备数据并通知GPU渲染的过程称为一次Draw Call

批处理:

动态批处理:
1.共享相同材质
2.顶点数量少于900个,300个
3.镜像信息
4.渲染器

Dynamic Batching通过将所有物体的顶点转换为CPU上的世界空间来工作,所以它只能在渲染Draw Call的工作量小于CPU顶点转换工作量的时候,才会起到提高性能的作用

静态批处理:要让场景中的物体使用Static Batching,需要将其标记为Static,并在Mesh Renderer中共享相同的材质,因为Static Batching不会在CPU上做顶点转换,所以它通常比Dynamic Batching更有效。不过它会使用更多的内存,例如你的场景中有相同物体的多个副本,Unity会将它们组合成一个大网格并可能会增加内存使用。Unity将尽可能多的网格结合到一个静态网格中,并将其作为一个Draw Call提交。这种方法的缺点是:标记为Static的物体在其生命周期中不能移动。

    -

渲染管线:

定义:图形数据在CPU上经过运算处理,最后输出到屏幕的过程
1. 顶点处理:接收模型顶点数据、坐标系转换
2. 图元装配:组装面、连接相邻的顶点,绘制为三角面
3. 光栅化:计算三角面上的像素,并为后面着色阶段提供合理的插值参数(以及深度值)
4. 像素处理:对每个像素区域进行着色、写入到缓存中
5. 缓存:一个存储像素数据的内存块,最重要的缓存是帧缓存与深度缓存
• 帧缓存:存储每个像素的色彩(缓冲)
• 深度缓存 Z—buffer:前后排序(深度信息,物体到摄像机的距离)
Draw Call绘制调用:每帧调用显卡渲染物体的次数

Occlusion Culling遮挡剔除

定义:当物体被送进渲染流水线之前,
将视锥以内看不到的物体进行剔除,减少每帧的渲染量,提高渲染性能
步骤
1.创建层
2.为游戏物体指定层(将参与遮挡剔除)与标签(将自动附加 IOClod脚本)
3.物体添加碰撞器Collider组件
4.摄像机附加脚本IOCcam
属性
确保剔除物体显示正常的阴影。Layer mask:参与遮挡剔除的游戏对象层。
IOC Tag:将为指定标签的游戏对象自动添加IOClod脚本对象。
Samples:每帧摄像机发射的射线数目。数量多剔除效果 好,但性能开销大。通常在150—500之间。
Rays FOV:射线视野,应大于摄像机视野Field of View。
View Distance:视图距离,射线长度。将影响摄像机Clipping Planes –Far 数值。
Hide Delay:延迟隐藏,当物体被剔除时延迟的帧数,建 议50—100之间。
•PreCullCheck:检查采集信息,建议勾选,可以提高剔除 效率。
•RealtimeShadows:实时阴影,如果场景需要实时阴影, 建议启用,
注意:(物体需要添加Box Collider组件)
缺点:需要消耗额外CUP
适用:存在大量被遮挡的物体时使用
BUG:Realtime Shadows——使用会显示材质丢失
优点:减少渲染压力,优化GPU显示

烘焙GI:

烘焙:Lightmap
原定义:当场景包含大量物体时,实时光照和阴影对游戏性能有很大影响。使用烘焙技术,可以将光线效果预渲染成贴图再 作用到物体上模拟光影,从而提高性能。适用于在性能较 低的设备上运行的程序。

简述:将光线效果预渲染成贴图再作用到物体上模拟光影,从而提高性能,适合在性能较低的设备上使用

Tips:手游一般用烘焙GI)
烘焙后的贴图保存在Unity同目录下
步骤
1. 游戏对象设置为LightmapingStatic。
2. 设置Light组件Baking属性。
3. 启用Lighting 面板的Baked GI。
4. 点击Build按钮。(如果勾选Auto 编辑器会自动检测场景的改动修复光照效果)
•Light 组件Baking 属性:烘焙模式
–Realtime仅实时光照时起作用。
–Baked仅烘焙时起作用。
–Mixed 混合,烘焙与实时光照都起作用。
•可以通过Scene 面板Baked 模式查看光照贴图。
Baked GI
•Baked Resolution:烘焙光照贴图分辨率,建议比实时GI 分辨率高10倍。
•Baked Padding:光照贴图中各形状间距,取值2到200。

•Compressed:是否压缩光照贴图,压缩则提高性能,缩小容量,但画质会降低。

•Ambient Occlusion:环境遮挡表面的相对亮度,值越高 遮挡处和完全曝光处区别越大,建议为1。

•Final Gather:选中后提高烘焙质量,但会消耗更多时间。
•Atlas Size:光照贴图尺寸。
General GI
•常规GI设置,同时适用于实时GI与烘焙GI。
•Directional Mode 定向模式:
–Non– Directional 无定向模式,使用1种光照贴图存储 光照信息。
–Directional 定向模式,使用2种光照贴图存储光照信息, 相比之下效果更好,但空间占用更大。
–Direction Specular 定向反射模式,使用4种光照贴图存 储光照信息,效果最好,但占用空间最大。
•除无定向模式外必须运行在GLES2.0与SM2.0以上的设备。
GLES 指OpenGL ES 针对移动端,从iPhone5s 开始支持;
SM 指ShaderModel 针对PC 端,目前大部分显卡支持。
•Indirect Intensity 最终间接光照、反射光照的强度。1为默 认强度,小于1则减低强度,大于1则增大强度。
•Bounce Boost 增强间接光照。
•Default Parameters 高级GI参数。
–Default 默认
–Default –HighResolution高分辨率
–Default –LowResolution低分辨率
–Default –VeryLowResolution非常低的分辨率
烘焙后会产生LightingData(灯光信息,匹配图片)
光照贴图

猜你喜欢

转载自blog.csdn.net/fuliyefly/article/details/78785164