我在任何地方都找不到这样做的充分理由。phong中使用的反射向量在物理学上具有简单的基础。但是,在blinn中使用的半向量似乎没有合理的基础,并且不能构成适当的反映。但是,它已用于所有所谓的“基于物理的”阴影功能中。如果有良好的身体基础,我想知道。
我找到的原因有几个:
它的速度更快 -对此的信息参差不齐,但是即使如此,这也仍然是一个很好的理由……在1998年。
据我所知,它处理角度大于90度的效果更好 -唯一的原因是,不当使用phong术语。反射和视图的点积给出介于-1和+1之间的角度。通常将此角度钳制为0到1,这是90度问题的直接原因。重新对角度进行归一化,而不是对其进行夹紧,即可获得完整的180度覆盖范围。我拒绝相信简单的x * 0.5 + 0.5运算已经使图形世界望尘莫及了40年。
它可以更好地处理边缘 -边缘“问题”在blinn解决方案中也存在,只是程度较小。主要原因是在终结器处对区域光照的模拟不正确,这对于任何“基于物理的”着色器来说都是必不可少的。但是,即使在较简单的情况下,S型函数也可以正确地逼近软终止线。乘以兰伯特项是不正确的,因为它会不适当地衰减镜面项,这可能会抵消菲涅耳项并导致进一步的误差。
它在边缘有很长的反射 -在我看来,尽管各向异性反射可能是现实的,但blinn并不是实现它们的正确方法,因为它们仅出现在边缘。H项中的错误恰好看起来是现实的,这只是一个快乐的巧合。
这些原因都不能令人满意,我想理清这种疯狂。
我想澄清的是,我并不是在专门讨论blinn和phong ,而是在讨论向量分量H和R,它们被用作这些着色器以及其他着色器的基础。