# shader 优化

  • 避免 if、switch 分支语句。

  • 避免 for 循环语句,特别是循环次数可变的。

  • 减少纹理采样次数。

  • 禁用 clip 或 discard 操作。

  • 减少复杂数学函数调用。

  • 使用更低精度的浮点数。OpenGL ES 的浮点数有三种精度:highp(32 位浮点), mediump(16 位浮点), lowp(8 位浮点),很多计算不需要高精度,可以改成低精度浮点。

  • 充分利用向量分量掩码。

    Untitled

  • 避免重复计算。可以将所有像素一样的变量提前计算好,或者由 C++ 层传入:

    Untitled

  • ・向量延迟计算。

    Untitled

  • 避免或减少临时变量。

  • 尽量将 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 () 可以获取当前控制台的值

Untitled

更新于

请我喝[茶]~( ̄▽ ̄)~*

Natsuneko 微信支付

微信支付

Natsuneko 支付宝

支付宝

Natsuneko 贝宝

贝宝