手游上的着色器优化策略

 

  1. 将部分计算从片元着色器移到顶点着色器来计算

如果你的游戏需要在配置非常低的平台上进行流畅运行,你可以考虑牺牲一定的效果精度将部分片元着色器的内容放到顶点着色器计算。比如你可以将镜面反射的计算放到顶点着色器阶段进行计算,在在片元阶段对其进行插值。虽然会损失一定的精度,不过能带来明显的效果提升。

 

  1. 为你的着色器增加对Vertex-lit的支持

不是所有的光照都需要进行完整的光照计算。比如一些氛围灯。你可以在主Pass的顶点阶段使用

o.vertexLights = ShadeVertexLights (v.vertex, v.normal);

这一行代码来完成对VertexLight的支持

 

  1. 完整的使用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)

根据你的render model(OpenGL 2, OpenGL 3, OpenGL ES, etc.),检查你在着色器的指令。比如ddx,ddy, discard, floor之类的指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值