当前位置 : 主页 > 网络安全 > 测试自动化 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在编写一个glsl片段着色器,其中我使用阴影贴图.按照本教程 http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/,我写了这一行来评估Shaodw偏差以避免阴影痤疮 float bias =
我正在编写一个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

使用这种身份而不是棕褐色和acos会更快吗?在实践中,要使用这行代码

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

我认为我的问题是“在使用sqrt和分区或tan和acos时,gpu更快吗?”
……或者我错过了什么?

使用AMD GPU Shader Analyzer,它显示浮动偏差= 0.005 * sqrt(1.f – N_L_dot * N_L_dot)/ N_L_dot;
将在着色器组件中生成更少的时钟周期指令(4条指令估计4个时钟周期).

浮动偏差= 0.005 * tan(acos(N_L_dot));生成15条指令,估计完成8个时钟周期.

我针对Radeon HD 6450汇编代码运行了两种不同的方法.但结果似乎跟踪了不同的Radeon HD卡.

看起来sqrt方法通常会表现得更好.

网友评论