gpt4 book ai didi

opengl - glsl 性能 : tan(acos(x)) vs sqrt(1-x*x)/x

转载 作者:行者123 更新时间:2023-12-03 18:10:44 24 4
gpt4 key购买 nike

我正在编写一个使用阴影映射的 glsl 片段着色器。按照本教程 http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/ , 我写了这行来评估 shaodw 偏差以避免阴影粉刺

float bias = 0.005 * tan( acos ( N_L_dot ) );

但我从数学中知道

tan ( acos ( x ) = sqrt ( 1 - x^2 ) / x

使用这样的身份而不是 tan 和 acos 会更快吗?在实践中,要使用这行代码

float bias = 0.005 * sqrt ( 1.f - N_L_dot * N_L_dot   ) / N_L_dot ;

我认为我的问题类似于“gpu 在执行 sqrt 和除法或 tan 和 acos 方面是否更快?”...还是我错过了什么?

最佳答案

使用 AMD GPU Shader Analyzer 显示 float bias = 0.005 * sqrt ( 1.f - N_L_dot * N_L_dot )/N_L_dot ;将在着色器程序集中生成更少的时钟周期指令(4 条指令估计 4 个时钟周期)。

其中 float bias = 0.005 * tan( acos ( N_L_dot ) ); 生成了 15 条指令,估计需要 8 个时钟周期才能完成。

我针对 Radeon HD 6450 汇编代码运行了两种不同的方法。但是对于不同的 Radeon HD 卡,结果似乎都可以很好地跟踪。

看起来 sqrt 方法通常会执行得更好。

关于opengl - glsl 性能 : tan(acos(x)) vs sqrt(1-x*x)/x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com