什么是HDRP、URP![很多大公司使用的都是定制的SRP](https://img-blog.csdnimg.cn/20201223143215291.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NjX1N1cGVy,size_16,color_FFFFFF,t_70#pic_center)
很多大公司使用的都是定制的SRP; URP中 只有一个光源会起作用,即 开启多盏光源也无用
URP渲染一个表面,至少需要使用的pass
表面 1 Pass
深度 1 Pass
阴影 1 Pass 可用代理阴影来做优化
Realtime Reflection Probes 1 Pass 可开启,可关闭,可以让玩家自选
优化
1、LOD ,必须要使用,
2、GPU实例化,U3D自动对使用了这个shader的物体做GPU Instancing,使用这个材质的物体只渲染一次
3、代理阴影: 例:如果一个路灯,有一万个面,要对这个路灯做投影阴影的话,那么首先会将这个路灯本身先渲染,渲染1w个面,然后再对每个面计算投影,即 渲染了2万个面;其实,影子的需求 并不需要1万个面每个面都要投影,这就是多余的; 代理阴影 即是用一个 路灯的低模,我假设它是一个圆柱,投影的轮廓完全足以来表现路灯的影子效果,那么这个低模 圆柱可以只有20个面,那么我路灯的影子的计算面数,就可以是20而不是1万,表现出来的效果即是一样的;代理阴影 很重要
4、垂直同步:如果一个第一人称 或者第三人称游戏,频繁滑动屏幕,出现花屏,分条现象,就是因为相机的渲染每一次都是从左至右,左上角开始渲染每个像素点;有些处理慢的情况,上一次还未渲染完的情况,就收到下一次重新渲染的请求,才会出现的花屏现象;垂直同步就相当于自动校正,不然上一次未渲染完的画面渲染完才渲染新的请求,而是直接进行最新的渲染; 开启垂直同步的情况下,会自动限制帧率,即:开启垂直同步,必然限制帧率刷新
5、shader的LOD,写一个带有多个pass的shader,按照Quality,来启用不同的pass通道
6、环境光探针:Project Setting --> Quality --> Realtime Reflection Probes
7、碰撞器做优化,场景中不重要的物体,需要做碰撞检测的,不要要mesh collider,简单的 box collider 或 capsule collider 即可
网格其实是由一个个小的三角形拼出来的,这些小三角形就是网格的最基础的组成单位,而每一个mesh里面有大量的小三角形。在渲染Mesh Collider时需要对这些不规则形状的三角形进行大量计算,这些计算十分耗时。相对而言 元碰撞器Box Collider就容易渲染很多。从元碰撞器的参数来看,有size和center,意味着这是一个规则的三维方块,相比起来规则图形的运算就会简单很多,所以就算是一个规则图形的网格碰撞器的渲染也会比原碰撞器慢很多。
8、设置动态分辨率,这个 用于战斗时候,如果想要让战斗模块更加流畅,可以在人物多的时候,动态设置游戏分辨率降低一些,反之亦然,确保游戏更加流畅,多用于战斗,看需求加
简述GPU渲染一个面可能造成的内存消耗
先用一个渲染一个三角面为例聊一下存在的内存消耗点; 先找一个三角面的数据,假设存在于内存中,还没有做成GPU渲染对象,那么就涉及到把三角面从内存搬运到显存的过程,这叫数据拷贝的消耗,和数据总线带宽等有关系;三角面到了显存之后,接下来的消耗是把三角面乘一个MVP矩阵变成屏幕坐标的消耗,这里假设忽略掉其它光线的计算,那么这里主要就是一个向量乘矩阵的消耗,那么,三角面越多,执行这个乘法的次数就会越多; 当三角面被转化为屏幕坐标之后,就是对每个三角面里的像素填充颜色的消耗了,这里如果三角面越大,要填充的像素点的个数就会越多,消耗就越大,还有贴图也是需要从内存搬运到显存的,贴图的搬运消耗很大,贴图的尺寸影响着采样的速度。 各种商业引擎,比如unity 渲染之前先进行视椎体裁剪,甚至遮挡剔除,之后是对透明物体的排序等,等一个循环完成后,再对选出来的物体进行渲染,这个循环是很消耗的,各个引擎的瓶颈也都在这里