【发布时间】:2013-07-13 14:16:11
【问题描述】:
我正在编写一个使用阴影映射的 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 方面是否更快?” ...还是我错过了什么?
【问题讨论】:
-
好吧,您是否尝试过在您关心的硬件上对其进行基准测试?答案可能会有很大差异(从“#1 更快”到“大约同样快”到“#2 更快”)取决于硬件和代码的其余部分(现代 GPU 显然非常擅长在等待时保持忙碌用于记忆)等。
-
@delnan 好吧,不,我想知道是否有独立于硬件的答案,因为我无法在许多不同的 GPU 上进行测试,我希望我的软件能够在任何 GPU 上快速运行现代高端 gpu。
-
您实际上可以删除我认为的 sqrt(我的数学有点生疏)。通过对偏差函数进行平方,然后将您与之比较的任何内容平方。如果你能做到这一点,新功能会更快。 (不确定对浮点精度等有什么影响)
-
@FullFrontalNudity 哈!谢谢那里!我认为这是一个很好的建议!如果我在比较之前对所有内容进行平方,它不应该影响浮点精度。
-
那么您能汇报一下您的发现吗?
标签: opengl glsl shadow-mapping