装饰公司315活动网站怎么做,wordpress安装后查看站点失败,襄阳信息网站建设,企业小程序开发1. Use less texture data
这条优化技巧非常直接#xff0c;减少texture的数据量#xff0c;减少分辨率或者降低位数#xff0c;虽然可能会降低渲染质量。但是通常使用16-bit textures并不会明显的感觉到渲染效果下降。
MipMap技术可以有效减少VRAM和Texture Cache之间来回…1. Use less texture data
这条优化技巧非常直接减少texture的数据量减少分辨率或者降低位数虽然可能会降低渲染质量。但是通常使用16-bit textures并不会明显的感觉到渲染效果下降。
MipMap技术可以有效减少VRAM和Texture Cache之间来回传递的texture数据量。值得一提的是Scene视图中有Mipmaps Shading Mode可以为哪些texture用mipmap技术比较合适提供信息。
2. Test different GPU Texture Compression formats
Unity中有很多种texture的压缩方式 比如DXT, PVRTC, ETC, and ASTC每个平台有各自支持的类型。Unity默认会选择综合起来最合适的压缩格式但是我们也可以手动更改成其他格式比如改成压缩度更高的会节约空间或者提高性能。
如果我们想自己撸一套压缩方法不到迫不得已尽量别这么做因为需要自己处理多种平台。
可以查看Texture压缩的相关文档https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
3. Minimize texture swapping
尽量减少texture数量是最直接的但是可能在渲染效果上无法接受。两个小方法
1.多个功能尽可能使用同一张贴图但是使用不同的material和shader属性比如超级马里奥中云朵和灌木丛就长的一样。要注意的是这种方法并不能Draw Call但是可以降低Memory BandWidth的开销。
2.如果多个贴图经常一起同时使用考虑打成图集Atlas这样可以避免在一帧中不断的分别拉取各个texture。
4. VRAM limits
大多数textures从CPU传输到GPU中是发生在初始化的时候但是也会发生在当需要渲染场景中未存在的texture时。这个加载处理过程是异步的因此我们会看到一个空的texture直到整个texture为渲染准备好我们应该避免频繁实时的加载texture。
4.1Preload textures with hidden GameObjects
加载过程中blank texture会十分影响游戏体验因此应该想办法让texture在真正需要使用前就从硬盘中加载到内存中然后再加载到显存中。
一种比较取巧的方法是在场景中放一个物体在其上引用texture并将物体隐藏。运行时当玩家面向这个物体时即使该物体是隐藏的其上的texture也将从内存传输到缓存中。将这个物体摆放的位置放在玩家真正需要这张texture渲染之前比如某个房间内所需的texture可以将隐藏的物体放在去往这个房间的路上。
我们也可以通过代码控制material的texture来完成类似的功能GetComponentRenderer().material.texture textureToPreload;
4.2 Avoid texture thrashing
有少数时候VRAM可能会被占满此时如果有texture需要传入必须要先清理一部分texture。这个过程开销非常非常的大应该无论如何都要避免。
对于PS4XBOX这类平台不存在这种问题因为他们的CPU和GPU共享内存这种设计是因为这些平台不存在多个应用同时运行的需求同一时刻只是有一款游戏在运行。
根据不同的目标平台texture要采用合适的文件大小和质量避免超过平台的VRAM上限。
5. Lighting optimization
5.1 Use real-time Shadows responsibly
之前已经介绍过Shadows很容易成为Draw Calls 和 Fill Rate的杀手。要仔细设置Shadow的参数来达到渲染质量和性能的平衡。Soft Shadows开销比较昂贵, Hard Shadows 开销小一些,No Shadows当然没有开销。Shadow Resolution, Shadow Projection, Shadow Distance, and Shadow Cascades等参数也非常重要也会影响Shadow的效果和性能。
Shadow Distance是控制实时阴影渲染的距离因为对于摄像机远处的部分有没有阴影其实意义不大。这个distance参数就是控制我们可视的阴影范围。
Shadow Resolution 和 Shadow Cascades参数如果设置的很高会加大Memory Bandwidth 和 Fill Rate的开销因为ShadowMap。更高的阴影质量开销自然会更大对于ShadowMap会有锯齿的问题离摄像机近处的物体阴影效果会比较差。Shadow Cascades就是为了解决这个问题根据和摄像机距离使用不同质量的ShadowMap。 关于级联阴影的作用可以参考这个官方文章https://docs.unity3d.com/Manual/shadow-cascades.html
SoftShadow和HardShadow相比除了Shader更复杂以外没有任何其他开销所以对于Fill Rate有余地的项目可以享受SoftShadow带来的快感。
5.2 Use Culling Masks
Light上的Mask属性可以通过Layer层级来限制那些物体受到该Light影响。这对于降低光照的开销很有效但是物理系统的优化也经常用到layer mask一个物体只能属于一个Layer所以要注意Light光照优化用到mask和物理系统优化用到mask是否有冲突冲突的话要根据需求抉择通常mask是以物理系统的优化为先。
5.3 Use baked Lightmaps
烘焙光照和阴影与实时渲染光照和阴影比起来性能提高非常大缺点是需要额外的存储空间和内存开销以及Memory Bandwidth的消耗。除非游戏中光照渲染用很简单的顶点光或者只有一个方向光否则我们都应该或多或少的去使用烘焙光照和阴影来提高性能。
有一些参数会对Lightmapping影响比较大比如resolution分辨率, compression压缩以及是否开启Pre-computed Realtime GI等当然场景中有多少个物体需要渲染也会影响很大。 static属性标志为Lightmap Static的会参与Lightmapper的绘制需要绘制的物体越多就需要生成更多的LightMaps所以尽量使用增量式加载减少每帧需要处理的物体数量。加载场景中的Lightmap可能会造成内存瞬间开销很大当旧场景卸载后应该立刻释放掉对应的LightMap。
6. Optimizing rendering performance for mobile devices
手机设备发展日新月异所以下边列出的一些优化方法是针对目前设备的随着硬件发展可能也会出现不适用开发时每个优化方法都应该根据当前需求进行对应测试。
6.1 Avoid Alpha Testing
移动端GPU和PC端GPU还有比较大的差距对于Alpha Testing开销会很严重在大多数情况下用Alpha Blending而不要用Alpha Testing。
6.2 Minimize Draw Calls
移动端的瓶颈经常是Draw Call而不是Fill Rate。应该在项目开发时尽早就使用合并mesh合批和图集等技术来减少Draw CallDeferred Rendering也是很不错的技术因为它和其他移动端需要考虑的问题也比较搭比如避免使用transparency等但是Deferred Rendering并不是所有硬件都支持。
6.3 Minimize Material count
这条跟Batching和Atlasing一起使用风味更佳可以有效减少Draw Call节约显存VRAM 和 Memory Bandwidth。
6.4 Minimize texture size
OpenGL ES1.1 只能最大支持1024x1024
OpenGLES 2.0 能支持2048x2048
OpenGLES 3.0 能支持4096 x 4096
尽量减少texture的大小对于不同目标平台使用合适的大小如果texture过大超过了限制在加载时也会被CPU降低缩小这会浪费宝贵的加载时间以及有可能导致渲染效果出现问题因为这个过程我们并不可控。
6.5 Make textures square and power-of-two
2次方的正方形贴图可以被GPU压缩从而提高性能。
6.6 Use the lowest possible precision formats in Shaders
这条其实之前在Shader优化部分已经说过了尽可能的降低Shader中数据的精度。
7.Summary
Dynamic Graphics这章就结束了作者说了这章内容信息很多需要慢慢消化也是Unity中最复杂的部分你要是都弄懂就牛逼了