我正在尝试按照SIGGRAPH 2013的Epic笔记实现区域灯光。它们提供了一种管区域灯的方法,我已经实现了它并且它正在工作。现在我正在尝试实现矩形区域灯,遵循与用于管灯的方法类似的方法。
认为管灯只是一个矩形灯总是面对阴影点,边缘有两个半球,我修改了Epic给出的最具代表性的点的计算。
这是计算MRP计算的输入数据的方式:
[HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command]
@="\"L:\\Portable_Python_2.7.3.1\\App\\pythonw.exe\" \"%1\" %*"
这是我修改的计算MRP的函数:
vec3 R = reflect(-viewDirection, normal);
vec3 P0 = LightPosition + LightLeft * -halfWidth;
vec3 P1 = LightPosition + LightLeft * halfWidth;
vec3 L0 = P0 - worldPosition;
vec3 L1 = P1 - worldPosition;
vec3 LightVector = GetRectangularLightLForSpecular(L0, L1, R, halfHeight, LightUp);
正如你从这张照片中看到的那样,结果并不是正确的,因为平面surgafe上的反射光的形状在每一端都有“帽”。