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

Rendering performance enhancements

Enable/Disable GPU Skinning

开启GPU Skinning可以减轻CPU或GPU中Front End部分中某一个的负担,但是会加重另一个的负担。Skinning是mesh中的顶点根据动画中骨骼的当前位置进行计算,从而让角色摆出正确的姿势。

顶点的计算过程可以放在CPU也可以放在GPU的Front End 部分,取决于是否开启GPU Skinning。可以通过 Edit | Project Settings | Player Settings | Other Settings | GPU Skinning 设置。

开启后,计算会放在GPU的Frond End中,但是CPU并不是一点工作都不做了,还是需要传输数据到GPU并且要在Command Buffer中生成指令。如果不开启,则计算在CPU中完成,传输到GPU中的数据已经是计算好的顶点数据。所以根据CPU和GPU的状态可以灵活决定应该在哪算,如果CPU负担太重就开启,把工作丢给GPU。

Reduce geometric complexity

这条跟GPU中的Font End相关。很多时候用不到需要多套无用UV和法线数据的mesh。尽量减少顶点数量,有三种途径:

1. 让美术老铁们手动减少顶点数量重新生成mesh

2. 干脆从场景里删掉,当然这是最坏情况

3. 使用LOD等技术自动对mesh进行culling

Reduce Tessellation

通过Geometry Shaders中使用Tessellation技术会带来很大的体验提升,但是也给GPU中Frond End增加了负担。目前对于如和优化Tessellation也没啥好办法,还是尽量优化Frond End中其他地方给Tessllation省出更多空间吧。

Employ GPU Instancing

GPU Instancing比Dynamic Batching更高效,因为它并不需要mesh的合并,但是也要求更严格,material引用和mesh必须都一致才可以。GPU Instancing可以有效的减少Draw Call,但是它在Unity中默认是没有被开启的,在每个material中可以设置是否开启。

  • Unity automatically picks MeshRenderer components and Graphics.DrawMesh calls for instancing. Note that SkinnedMeshRenderer is not supported.

  • Unity only batches GameObjects that share the same Mesh and the same Material in a single GPU instancing draw call. Use a small number of Meshes and Materials for better instancing efficiency. To create variations, modify your shader scripts
     to add per-instance data (see next section to learn more about this).

https://docs.unity3d.com/Manual/GPUInstancing.html

Use mesh-based Level Of Detail(LOD)

LOD就是根据物体和摄像机的距离不同可以自动使用不同精度的mesh,因为距离很远的地方根本没必要用精度很高的模型。

LOD的缺点之一是开发起来比较费劲,会需要美术提供不同精度的模型,场景设计师需要生成LOD Groups,还要进行测试效果,这会花费很多时间,当然目前一些插件提供了自动生成LOD Mesh的功能。

LOD另一个缺点是需要消耗更多的磁盘和内存以及CPU,但是优点也非常明显,就可以有效减少顶点数量,降低Draw Call和Fill Rate以及 Memory Bandwidth。

LOD也不是总适用,对于内景以及摄像机是从上往下俯角的游戏,比如RTS和MOBA类游戏,物体和摄像机的距离基本都一致,所以LOD根本不会起到什么效果。

总之是否使用LOD需要视情况而定,如果性能并没有出现瓶颈,没有必要使用。

Culling Groups

通过脚本,可以自定义LOD系统,比如可以根据distance使用不同精度的动画,使用不同的shader以及粒子特效等。当然使用Culling Gropus也会带来开发上额外的工作量。https://docs.unity3d.com/Manual/CullingGroupAPI.html

Make use of Occlusion Culling

同时能降低Fill Rate和Overdraw最好的途径之一就是使用Occlusion Culling(遮挡剔除)。Frustum Culling(视锥剔除)只能剔除掉摄像机外的物体,但是对于摄像机内的物体,常规渲染的顺序是从远到近,因此当近物体挡住了远处物体时,就会产生OverDraw。

Regular frustum culling renders all Renderers within the Cameras view.
没有遮挡剔除时,远处物体也会被渲染
​​​​

Occlusion Culling可以有效剔除摄像机内被近处物体挡住的部分。Unity把场景切割成cells,在Editor中烘焙生成Cells间遮挡剔除关系的数据,在运行时,加载烘焙好的数据到内存中,对于设置了遮挡剔除的摄像机,就会根据这个数据来进行渲染。

Occlusion culling removes Renderers that are are entirely obscured by nearer Renderers.
使用遮挡剔除时,远处物体会被剔除掉
​​​​

只有标记为Occluder Static 或者 Occludee Static的物体可以产生遮挡剔除数据。对于普通物体,既能遮挡其他物体又能被其他物体遮挡,使用Occluder。对于透明物体,并不能遮挡其他物体,使用Occludee。

开启Occlusion Culling会增加存储空间和内存以及CPU的开销,因此对于Occlusion Culling烘焙时要设置合适的Cell参数。

特别注意的是即使物体被Occlusion Culling剔除掉了,但是它的阴影依然会被渲染。

Optimizing Particle Systems

粒子系统中,要注意粒子生成的数量以及使用Shader的复杂度,粒子的数量会影响Front End,而shader中使用大量的Texture会

在Back End消耗Fill Rate和Memory Bandwidth。

最直接的优化方法就是减少粒子数量和减少特效数量,使用图集也是优化方法之一。但是经常忽略的一个优化方法是使用Particle System Culling。

Make use of Particle System Culling

关于 Particle System Culling 的一篇blog:https://blogs.unity3d.com/2016/12/20/unitytips-particlesystem-performance-culling/.

Particle System Culling的基本原理就是是否可以预测,如果一个粒子特效的各种参数设置使得其行为样式时可以被预测的,当它并不在视野中时就可以自动的被剔除掉,当重新进入视野中时,因为是可以预测的,所以可以计算出此时此刻应有的样子。

但是一些设置可能会导致粒子系统变得不可预测或者非程序化,那就无法使用Particle System Culling,无论是否可见,粒子系统必须一直保持运行。比如Particle System 使用world-space坐标,使用碰撞,或者复杂的动画曲线等等,都可能会使得其不可预测。Unity提供了一个非常有用的Warning,来提示改设置是否会导致粒子系统无法自动 Culling。

 Avoid recursive Particle System calls

 Particle System中很多方法都是递归的,调用他们会遍历每一个child并且调用 GetComponent<ParticleSystem>()函数,当层级非常复杂时,会有比较大的开销。

 Start(), Stop(), Pause(), Clear(), Simulate(), and isAlive()都是这种函数。但是这些函数里其实有个withChildren参数,Unity默认设置为true,如果手动设置为false,就可以避免递归行为。

 

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

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

相关文章

Unity手游开发札记——布料系统原理浅析和在Unity手游中的应用

原文&#xff1a;https://zhuanlan.zhihu.com/p/28644618 0. 前言 项目技术测试结束之后&#xff0c;各种美术效果提升的需求逐渐成为后续开发的重点&#xff0c;角色效果部分的提升目标之一便是在角色选择/展示界面为玩家提供更高的品质感&#xff0c;于是可以提供动态效果的…

行为树(Behavior Tree)实践(1)– 基本概念

原文&#xff1a;http://www.aisharing.com/archives/90 行为树&#xff08;Behavior Tree&#xff09;实践&#xff08;1&#xff09;– 基本概念 自从开博以来&#xff0c;每天都会关心一下博客的访问情况&#xff0c;看到一些朋友的订阅或者访问&#xff0c;不胜欣喜&…

Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (5) Shader优化

Shader optimization Fill Rate和 Memory Bandwidth开销最大的地方就是Fragment Shader。开销多大取决于Fragment Shader的复杂程度&#xff1a;多少纹理需要采样&#xff0c;多少数学计算函数需要使用等等。GPU的并行特性意味着在线程中如果任何地方存在瓶颈&#xff0c;都会…

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

1. Use less texture data 这条优化技巧非常直接&#xff0c;减少texture的数据量&#xff0c;减少分辨率或者降低位数&#xff0c;虽然可能会降低渲染质量。但是通常使用16-bit textures并不会明显的感觉到渲染效果下降。 MipMap技术可以有效减少VRAM和Texture Cache之间来回…

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…