Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (6)

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来完成类似的功能:GetComponent<Renderer>().material.texture = textureToPreload;

4.2 Avoid texture thrashing

有少数时候,VRAM可能会被占满,此时如果有texture需要传入,必须要先清理一部分texture。这个过程开销非常非常的大,应该无论如何都要避免。

对于PS4,XBOX这类平台,不存在这种问题,因为他们的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 Call,Deferred 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中最复杂的部分,你要是都弄懂就牛逼了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 面试题57 - II(剑指offer) 和为s的连续正数序列

今天毕业五年了&#xff0c;一直忙于工作和享受&#xff0c;自从当年找完工作后就一直没有再刷过题&#xff0c;作为搬砖的码农&#xff0c;觉得还是应该养成长期刷题的习惯坚持下去。之前坚持了每天被一会单词&#xff0c;如今雅思一本也快看完了&#xff0c;从今天开始准备在…

反走样技术相关文章

https://zhuanlan.zhihu.com/p/28800047 https://zhuanlan.zhihu.com/p/57503957 https://zhuanlan.zhihu.com/p/33444125 https://zhuanlan.zhihu.com/p/33444429 走样的原因及其分类 说到走样&#xff0c;首先要说的就是采样。这也算是很多图形学专著中提到反走样相关技…

求n的阶乘的算法框图_单片机常用的14个C语言算法

问&#xff1a;怎么每天看到这种文章&#xff1f;答&#xff1a;只需搜索公众号"51单片机学习网"免费关注算法(Algorithm)&#xff1a;计算机解题的基本思想方法和步骤。算法的描述&#xff1a;是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述&#xff…

LeetCode 286. 墙与门 多源BFS和DFS

思路1&#xff1a; DFS&#xff0c;对于每个门进行一次DFS搜索&#xff0c;记录每个位置对每个门的距离&#xff0c;当有更小距离的门时更新这个数值 public void WallsAndGates(int[][] rooms) {for (int i 0; i < rooms.GetLength(0); i){for (int j 0; j < rooms[i]…

贝塞尔曲线

文章参考于&#xff1a;https://www.jianshu.com/p/0c9b4b681724 https://gameinstitute.qq.com/community/detail/129188 贝赛尔曲线的前世今生&#xff1a; 贝塞尔曲线&#xff0c;这个命名规则一眼看上去大概是一个叫贝塞尔的数学家发明的。但&#xff0c;贝塞尔曲线依据…

如何控制局域网网速_单臂路由|N1盒子(OpenWRT)单线多拨实现网速叠加

受于某些现实条件&#xff0c;有些同学苦于家里的网络带宽太小无法尽情冲浪。如何在不额外花钱升级宽带的情况下提升家里网络呢&#xff1f;且看一个盒子加路由器即可实现网络单线多拨&#xff0c;成倍提升网速完成网速叠加。题图是我家里的路由器加N1盒子。前置条件光猫有超级…

linux离线安装redmine_Linux 下一款非常好用的翻译软件

前面有一个半月的时间&#xff0c;我非常详细且非常基础的介绍了 Ubuntu 18.04 desktop 桌面系统的安装和基本使用&#xff0c;在知乎上也开了一个专栏《Linux 漫游之旅》&#xff0c;上面记录了所有的文章&#xff0c;这个专栏的目的呢是手把手教新接触 Linux 操作系统的朋友如…

vivo应用商店电脑版_VIVO应用商店代理商江湖的那些关系

VIVO应用商店代理商江湖的那些关系需要源文件清晰版本加微信wps007其他干货文章如何不花钱或者少花钱把ASO的活给干了&#xff1f;2020最新主流安卓应用市场ASO技巧以及注意事项App推广的高阶玩法&#xff0c;一箭双星&#xff01;今日头条定向优化技巧今日头条广告创意优化指南…

华为阅读下载的文件在哪里找_华为手机还要天天清理内存?1键关闭这2个设置,手机用到2035年...

阅读本文前&#xff0c;请您先点击上面的蓝色字体“科技荟 ”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。 华为手机还要天天清理内存&#xff1f;1键关闭这2个设置&#xff0c;手机用到…

pyautogui 打包 运行 窗口_试试动态窗口管理器 dwm 吧

以不到 2000 标准行的代码写就的 dwm&#xff0c;是一个速度极快而功能强大&#xff0c;且可高度定制的窗口管理器。-- Adam Šamalk(作者)如果你崇尚效率和极简主义&#xff0c;并且正在为你的 Linux 桌面寻找新的窗口管理器&#xff0c;那么你应该尝试一下 动态窗口管理器(dy…

ArcMap 导入 wrl_flmic拍摄的素材如何无损导入电脑

点击上方“九尾短视频研习室” 可以订阅哦&#xff01;今天分享使用 iPhone 或者安卓版 filmic 拍摄的素材&#xff0c;如何无损导入到win 或 Mac 电脑中~01iPhone Mac使用 iPhone 和 Mac 的朋友&#xff0c;可以使用“隔空投送”无线传输&#xff0c;但是这个过程中&#xff…

LeetCode 97: 交错字符串

这里我们考虑用 s1和 s2的某个前缀是否能形成 s3 的一个前缀。 这个方法的前提建立于&#xff1a;判断一个 s3的前缀&#xff08;用下标 k表示&#xff09;&#xff0c;能否用 s1和 s2 的前缀&#xff08;下标分别为 i和 j&#xff09;&#xff0c;仅仅依赖于 s1 前 i个字符和…

苹果6发布时间_苹果秋季发布会将在北京时间9月16日举办

点击上方蓝字&#xff0c;关注我们苹果正式公布了苹果秋季发布会9月16日举办&#xff0c;届时国内可在五大平台上观看直播&#xff0c;据悉本次发布会将发布的产品有iPhone、ipad和Apple Watch等系列新品&#xff0c;那么这场发布会可以在哪看呢?下面小编带来了2020年苹果秋季…

安装ccs5.5总出现错误_《西游记》“斗法降三怪”,出现错误而补拍,观众总觉得改过结尾...

文|平小山86版《西游记》播出多年&#xff0c;每一年寒暑假都会在电视台重播&#xff0c;看了无数遍还是让观众乐在其中。后来无论是TVB版、浙版、还是张纪中版翻拍的《西游记》&#xff0c;都始终无法撼动它的经典地位。在86版《西游记》中有一集&#xff0c;就是在车迟国的“…

LeetCode面试题03. 数组中重复的数字

方法一&#xff1a;遍历数组 由于只需要找出数组中任意一个重复的数字&#xff0c;因此遍历数组&#xff0c;遇到重复的数字即返回。为了判断一个数字是否重复遇到&#xff0c;使用集合存储已经遇到的数字&#xff0c;如果遇到的一个数字已经在集合中&#xff0c;则当前的数字是…

涨跌因子计算器下载哪里下载_微信爱情指数计算器整蛊app下载_爱情指数计算器整蛊测试下载...

微信爱情指数计算器整蛊app是一款不错的爱情必备的计算器服务&#xff0c;让情侣们有一个很有意思的整蛊服务的App&#xff0c;喜欢的话快来下载吧。微信爱情指数计算器整蛊app介绍1、爱情指数计算器整蛊app是很有意思的一款爱情指数计算器软件2、操作起来也比较的简单&#xf…

如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?

第一章&#xff1a;小明和他的手机 从前有个人叫小明 小明有三大爱好&#xff0c;抽烟&#xff0c;喝酒…… 咳咳&#xff0c;不好意思&#xff0c;走错片场了。应该是逛知乎、玩王者农药和抢微信红包 小明的三大爱好 我们用一段简单的伪代码&#xff0c;来制造一个这样的小…

closewait一直不释放_夏至太阳庆典 || 巨蟹座日蚀新月大释放蜡烛魔法仪式(寻找新的幸运儿)...

太阳庆典. 2020夏至 太阳庆典蜡烛魔法仪式夏至(MIDSUMMER)是四个至点之一&#xff0c;站在春分与秋分之间&#xff0c;并且成为光明力量的象征&#xff0c;因为在这一天白昼的时间是最长的&#xff0c;也代表阳性力量会在这一天达到顶端。许多古老文化会利用火元素来象征这一…

Postman status: 415_415亩!白云首宗农村土地规模化流转成功签约

6月3日钟落潭镇竹二村土地经营权流转签约仪式在白云产权中心顺利举行这是白云区首宗由政府主导的规模化土地流转↓↓↓<< 点击上方&#xff0c;观看完整视频 >>签约现场当天下午&#xff0c;竹二村经济联合社、广州市云供农业科技有限公司和广东三青农业科技有限公…

昆仑通态复制的程序可以用吗_一个PLC连接两个触摸屏例子,昆仑通态和普洛菲斯举例...

以昆仑通态触摸屏和普洛菲斯触摸屏说事啊。昆仑通态TCP7062普洛菲斯GP4402W在自动化设备中&#xff0c;如果设备跨度比较大的话&#xff0c;只有一个屏幕会让使用者不易看数据&#xff0c;要跑来跑去或者操作看不到动作点诸多问题&#xff0c;我做的项目中就有一个电柜只有一个…