一、减少需要处理的顶点数目
顶点数目同样有可能成为GPU的性能瓶颈,下面给出3个常用的顶点优化策略。
1.1优化几何体
建模时尽可能减少模型中三角面片的数目,一些对于模型没有影响、或是肉眼非常难察觉到区别的顶点都要尽可能去掉。美术人员往往需要优化网格结构。很多三维软件都有相应的优化选项,可以自动优化网格结构。
在unity渲染统计窗口中可以查看到渲染当前帧需要的三角面片数目和顶点数目。需要注意的是,unity中显示的数目往往要多于建模软件里显示的顶点数,通常unity中显示的数目要大很多,其实这是因为在不同角度上计算的,都有各自的道理,但我们真正应该关心的是unity里显示的数目。
简单解释下造成这种不同的原因,三维软件更多地是站在我们人类的角度理解顶点的,即组成几何体的每一个点就是一个单独的点。而unity是站在GPU的角度上去计算顶点数的。在GPU看来,有时需要把一个顶点拆分成两个或更多的顶点。这种顶点一分为多的原因主要有两个:一是为了分离纹理坐标,另一个是为了产生平滑的边界。它们的本质,其实都是因为对于GPU来说,顶点每一个属性和顶点之间必须是一对一的关系。而分离纹理坐标,是因为建模时一个顶点的纹理坐标有多个。例如对于一个立方体,它的6个面之间虽然使用了一些相同的点,但在不同面上,同一个顶点的纹理坐标可能并不相同。对于GPU来说,这是不可理解的,因此他必须把这个顶点拆分成多个具有不同纹理坐标的顶点。而平滑边界也是类似,不同的是,此时一个顶点可能会对应多个法线信息或切线信息