dar*_*ius 3 opengl glsl shadow-mapping
我正在编写一个glsl片段着色器,其中我使用阴影贴图.按照本教程http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/,我写了这一行来评估shaodw偏见以避免阴影痤疮
float bias = 0.005 * tan( acos ( N_L_dot ) );
Run Code Online (Sandbox Code Playgroud)
但我从数学上知道
tan ( acos ( x ) = sqrt ( 1 - x^2 ) / x
Run Code Online (Sandbox Code Playgroud)
使用这种身份而不是棕褐色和acos会更快吗?在实践中,要使用这行代码
float bias = 0.005 * sqrt ( 1.f - N_L_dot * N_L_dot ) / N_L_dot ;
Run Code Online (Sandbox Code Playgroud)
我认为我的问题类似于"在执行sqrt和划分或tan和acos时,gpu更快吗?" ......或者我错过了什么?
使用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方法通常会表现得更好.
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |