1. 将部分计算从片元着色器移到顶点着色器来计算
如果你的游戏需要在配置非常低的平台上进行流畅运行,你可以考虑牺牲一定的效果精度将部分片元着色器的内容放到顶点着色器计算。比如你可以将镜面反射的计算放到顶点着色器阶段进行计算,在在片元阶段对其进行插值。虽然会损失一定的精度,不过能带来明显的效果提升。
2. 为你的着色器增加对Vertex-lit的支持
不是所有的光照都需要进行完整的光照计算。比如一些氛围灯。你可以在主Pass的顶点阶段使用
o.vertexLights = ShadeVertexLights (v.vertex, v.normal);
这一行代码来完成对VertexLight的支持
3. 完整的使用Frame debugger来检查一遍你场景的绘制流程
你需要观察你绘制一个物体的所需的pass数量已经你的场景网格是否正确的进行了批处理batching。
还有一些外部工具可以用来检查你的渲染流程。iOS上的Xcode就自带了非常方便的frame profiler。可以极大程度的准确的让你了解你的应用的渲染耗时。
PC上有Intel GPA可以帮助我们进行检查。
需要主要的是,针对Android手机的性能检查,需要根据针对平台的硬件使用不同的检测器。
比如Android上GPU就分为了ARM Mali之类的。
7个简单的优化方法。
1. 尽量使用常数运算减少超越运算。
2. 先计算浮点型的乘法,再进行向量型的乘法。
3. 尽量不要使用discard这个指令,特别是手游上,这会打断手机上的tile based render。
4. 将不重要的计算内容放到顶点着色器上。
5. 如果不是一整个float3或者float4都参与计算,请多多使用特定的分量来计算
6. 避免在shader中根据外部数值导致的分支计算(少用if-else)
7. 根据你的render model(OpenGL 2, OpenGL 3, OpenGL ES, etc.),检查你在着色器的指令。比如ddx,ddy, discard, floor之类的指令
unity学习交流群点击加入交流学习
网友评论