使用perf等工具看一下火焰图,检查一下时间都去哪了👀

减少uniform更新次数
使用UBO将多个uniform打包,并绑定到相应的mesh上,比如材质属性和纹理加载状态
TODO:会增加GPU内存开销,没具体验证过实际影响,也不一定是最佳实践 🤷♂️
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15layout (std140) uniform MaterialBlock { vec4 materialDiffuseColor; vec4 materialSpecularColor; float Opacity; float Shininess; float ShininessStrength; bool texture_diffuse_load; bool texture_specular_load; bool texture_normal_load; bool texture_ao_load; bool texture_alpha_load; bool texture_roughness_load; bool texture_metallic_load; bool texture_emissive_load; } material;
去重,能不更新就不更新
通过一定的逻辑和判断等等,减少不必要的uniform更新,比如在控制车门旋转的时候,这个车门的部件是可以共享一组uniform的,不需要为每个部件都更新一次设置。
png格式的纹理加载速度慢,使用其他GPU友好的格式
TODO:还没尝试过