原创作品

Shader中有哪些高开销的数学函数?

爱的战士 发表于   2024-04-19 19:04:30
985
3
15

在Shader编程中,特定的数学函数由于其复杂的计算过程,通常被认为是高开销的。使用这些函数时需要特别注意,因为它们可能会显著影响渲染性能,尤其是在大量像素上执行时。下面列出了一些在Shader中通常认为是高开销的数学函数:


1. 三角函数

sin()(正弦)

cos()(余弦)

tan()(正切)

这些函数在计算角度的正余弦值时非常有用,但由于涉及周期性和波动性的计算,它们是相对昂贵的操作。

2. 反三角函数

asin()(反正弦)

acos()(反余弦)

atan()(反正切)

atan2()(两参数的反正切)

这些函数用于从比例或比值中计算角度,计算开销通常比正三角函数还要大。

3. 指数函数和对数函数

pow()(幂函数)

exp()(指数函数)

log()(自然对数)

exp2()(以2为底的指数函数)

log2()(以2为底的对数)

这些函数在处理缩放、衰减等问题时非常有用,但由于涉及复杂的指数和对数运算,它们的计算成本较高。

4. 平方根和倒数平方根

sqrt()(平方根)

rsqrt()(倒数平方根)

计算一个数的平方根或其倒数平方根是频繁用到的操作,尤其是在处理距离和归一化向量时。

5. 超越函数

expm1()(计算exp(x) - 1)

log1p()(计算log(1 + x))

这些函数在数学和物理模拟中较为少见,但同样具有相对高的计算开销。

优化建议

对于需要频繁计算的结果,可以考虑预计算并使用查找表(LUTs)来代替实时计算。

在可能的情况下,尽量使用近似方法来替代这些高精度但高开销的函数。

将必要的计算从像素Shader转移到顶点Shader,因为顶点Shader的执行次数通常少于像素Shader。

在不影响视觉效果的前提下,使用较低精度的数学函数,如在GPU支持的情况下使用half精度计算代替float。

通过这些方法,可以在保持视觉效果的同时,有效减少Shader的计算负担,提高整体渲染性能。


在自己用ASE编写的Shader当中,大家注意这些函数的使用就好了。

正常的项目不能超过3个采样图。

分享分享欢迎大家支持。


一些关于Shader优化的技巧


QQ.png


没有标签
确定
评论(3)
G工仔
牛皮
回复
3天前
一页书
厉害了 大佬
回复
9天前
油栗子
大佬牛逼感谢整理
回复
10天前
爱的战士
回复
油栗子
没有不可能的说法,只要规避一些复杂函数,自己用ASE项目上是可以运行的。而且毫无压力。我亲身做实验过。
回复
9天前
没有更多啦~
  • 咨询
    客服
  • 扫码加入QQ群 或搜索QQ群号: 797421367
  • 扫码关注公众号 或微信搜索: cokey游戏特效