# shader 优化
避免 if、switch 分支语句。
避免 for 循环语句,特别是循环次数可变的。
减少纹理采样次数。
禁用 clip 或 discard 操作。
减少复杂数学函数调用。
使用更低精度的浮点数。OpenGL ES 的浮点数有三种精度:highp(32 位浮点), mediump(16 位浮点), lowp(8 位浮点),很多计算不需要高精度,可以改成低精度浮点。
充分利用向量分量掩码。
避免重复计算。可以将所有像素一样的变量提前计算好,或者由 C++ 层传入:
・向量延迟计算。
避免或减少临时变量。
尽量将 Pixel Shader 计算移到 Vertex Shader。例如像素光改成顶点光。
[将跟顶点或像素无关的计算移到 CPU,然后通过 uniform 传进来。既上面的全部像素一样的变量](https://www.cnblogs.com/timlly/p/15092257.html#:~:text = 色器参数.-,MyColorParameter,-.Bind (Initializer.ParameterMap)
分级策略。不同画质不同平台采用不同复杂度的算法。
顶点输入应当采用逐 Structure 的布局,避免每个顶点属性一个数组。逐 Structure 的布局有利于提升 GPU 缓存命中率。
尽可能用 Compute Shader 代替传统的 VS、PS 管线。CS 的管线更加简单、纯粹,利于并行化计算,结合 LDS 机制,可有效提升效率。
降分辨率渲染。有些信息没有必要全分配率渲染,如模糊的倒影、SSR、SSGI 等。
static TAutoConsoleVariable function()可以添加命令控制台,
function.GetValueOnAnyThread () 可以获取当前控制台的值