Graphics 以任意法线为中心的环境遮挡半球

Graphics 以任意法线为中心的环境遮挡半球,graphics,raycasting,ambient,Graphics,Raycasting,Ambient,我正在使用余弦加权半球实现环境光遮挡。到目前为止,我假设半球以法线0,0,1为中心,它指向正z方向。我使用天顶角和方位角$$0

我正在使用余弦加权半球实现环境光遮挡。到目前为止,我假设半球以法线0,0,1为中心,它指向正z方向。我使用天顶角和方位角$$0<\theta<\pi/2,0<\phi<2\pi$$,围绕这个半球投射光线, 其中,射线的方向计算为sinθcosφ,sinθsinφ,cosθ


如何将其推广到任意法线?

找到曲面的局部坐标系

即,让z轴为法线。然后,找到x和y的两个正交轴。这可以通过首先假设0、1、0为y轴或备用轴(如果这是法线)来实现。然后计算x轴为x=crossy,z,并将y轴细化为y=crossz,x

然后可以使用点计算p作为此坐标系上的权重:

dir = p.x * x + p.y * y + p.z * z