
在工作中我发现大多数美术(99%)对这个概念是不明晰的。为什么要明白这个概念呢?
顶点数量的优化在性能优化中是非常重要的。业内标准同屏面数50w,也就是说顶点数量150w,减少个1/10就可以优化掉15w顶点数,对于性能来说是非常大的优化了。 如果美术明晰这个概念,小手一抖就在资源层面优化了顶点数量,而且是个无损优化,性价比非常高。
2,Unity同屏面数,和你的认识可能有所不同
(1)藏在物体后面(或里面)的模型,就算看不见,也算面数
我先导入一个十面体(因为10个面好算。。)。然后再建一个面数很高的球,藏在10面体的身体里。如下图所示。

然后在game面板的Stats去看同屏面数,如图所示,显示/隐藏那个面数很高的球,同屏面数差别很大。


可以看到,虽然最终呈现的图像一模一样,但是面数却天差地别。
结论:不要以为藏在后面的,里面的,背面的就不算同屏面数了,都算在内的,真正的同屏面数比你想象的更可怕。
------------------------------选读--------------------------------
这是因为渲染管线的问题导致的,或者说硬件GPU就是这么设计的,现在手游一般都是forward渲染,就和它的名字一样,向前渲染。意思就是先画最前面的,再画后面的,一个个画过去(之所以没看见球是因为深度测试它的深度被完全挡住了,所以成像时候,像素被抛弃了),所以没看见的实际上也算了面数。
----------------------------选读结束---------------------------
(2)你埋在地下的模型,地上地下面数都会被算进去
把石头摆在场景中构景是美术常见的操作,但是我在项目中所见所闻实在令人窒息:他们会把一块石头90%藏在底下,10%露出来构景,他们会觉得我露出了10%,就只有这10%的面数,其他的都会被裁减掉。然后整个场景都会基于这种错误的理解,搭建出来。。。

这个问题涉及到摄像机裁剪矩阵(这个不懂没关系,往下看就懂了)的原理。就是摄像机能看见的范围,是一个视锥矩形。然后unity的摄像机有一个优化叫culling,这是啥呢?简单地说就是,摄像机看见的,在这个视锥矩形内的,我就画,看不见的,在这个视锥矩形外的,我就不画。这样的话看不见的东西就不用画了,多省啊!
陷阱就在这里了!一个物体,介于看得见和看不见之间的,要怎么办呢? 裁剪不掉!当做看得见的物体处理!
在Maya中新建一个面数很高的球和一个矩形。

丢进unity,保证摄像机裁剪矩阵不会和球相交。

然后发现,就算摄像机裁剪矩阵和球不相交(看不见球),同屏面数依然把面算了进去。

记得有过美术整张大地图的道路使用了一个mesh构建(十几万面),导致任何角度,只要摄像机矩阵和路相交(无论肉眼看得见看不见),这个路(十几万面)都画一次。如果美术理解这个同屏面数的基本概念的话,就不会做出这种操作,自然而然地会把mesh分批次切开。
(3)其他影响面数的常见因素
阴影Cast Shadow:


可以看到,开关Cast Shadows,同屏面数会翻倍。当然一般采用Cast shadows这个阴影方案的项目会做很多优化,比如用一个近似低面模型代替原模型进行阴影计算(阴影少很多面),比如使用CSM方案(简单理解为阴影LOD,越远精度越低,越近精度越高)。
但是大抵逃不过同屏面数暴增的命运。
SkyBox天空盒子:

Unity自带的天空盒实际上是一个巨大的球体模型,上面贴了图。这玩意儿也是要算面数的。
Terrain(地表):
就是地面,如果地表不做任何优化的话(比如CDLOD啥的),一整个地表的面数都会被算到同屏面数中去。
Camera:
多余的Camera是常见的面数暴增的因素,因为多一个Camera,整个场景的同屏面数就会多一倍!!多余Camera的问题原因可能有很多,常见的是技术脚本多创建,UI相机画了额外的东西,美术可能误操作。
ps:文中截图用的是Unity的URP渲染管线(一般项目都是用的URP,可能有些魔改但是万变不离其宗)
来源知乎专栏:游戏开发日常踩坑
作者:莉莉丝科技 · 技术美术 · 孙琦证 (原就职:字节跳动、网易游戏) 返回搜狐,查看更多