原创作品

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

爱的战士 发表于   2024-04-19 19:04:30
4380
5
42

在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


没有标签
确定
评论(5)
放纵人偶
别太在意,做出来再优化
回复
327天前
xuebin
请问,纹理图集Textuere Atlas ,怎么用?
回复
398天前
爱的战士
回复
xuebin
连线
回复
6天前
G工仔
牛皮
回复
435天前
一页书
厉害了 大佬
回复
441天前
油栗子
大佬牛逼感谢整理
回复
442天前
爱的战士
回复
油栗子
没有不可能的说法,只要规避一些复杂函数,自己用ASE项目上是可以运行的。而且毫无压力。我亲身做实验过。
回复
441天前
没有更多啦~