Math 改进WebGL中的区域照明&;三个
我一直致力于WebGL中的区域照明实现,类似于此演示: 上述three.js中的实现是从gamedev.net上ArKano22的工作移植而来的: 尽管这些解决方案令人印象深刻,但它们都有一些局限性。ArKano22最初实现的主要问题是漫反射项的计算不考虑曲面法线 几个星期以来,我一直在扩充这个解决方案,并和redPlant一起改进以解决这个问题。目前,我有正常的计算纳入解决方案,但结果也有缺陷 以下是我当前实现的预览: 介绍 计算每个片段的漫反射项的步骤如下:Math 改进WebGL中的区域照明&;三个,math,3d,three.js,webgl,lighting,Math,3d,Three.js,Webgl,Lighting,我一直致力于WebGL中的区域照明实现,类似于此演示: 上述three.js中的实现是从gamedev.net上ArKano22的工作移植而来的: 尽管这些解决方案令人印象深刻,但它们都有一些局限性。ArKano22最初实现的主要问题是漫反射项的计算不考虑曲面法线 几个星期以来,我一直在扩充这个解决方案,并和redPlant一起改进以解决这个问题。目前,我有正常的计算纳入解决方案,但结果也有缺陷 以下是我当前实现的预览: 介绍 计算每个片段的漫反射项的步骤如下: 将顶点投影到区域灯光所在的
- 顶点位置
- 顶点法线(单位向量)
- 灯光位置、宽度和高度
- 光法线(单位矢量)
- 灯光右侧(单位矢量)
- 亮起(单位矢量)
- 从顶点到灯光平面的投影点(3D)
- 从灯光中心的投影点偏移(2D)
- 夹紧偏移(2D)
- 此夹紧偏移的世界位置–最近点(3D)
castingPoint.location
是THREE.Vector3
的一个实例,是拼图中缺失的一块。您还应该注意到,草图左下方有两个值–这些值会动态更新,以显示相关向量之间的点积
我想这个解决方案需要另一个伪平面,它与顶点法线的方向对齐,并且垂直于灯光的平面,但我可能错了 我们一致认为施法点总是在边缘 假设“照明部分”是空间的一部分,由沿法线拉伸的灯光四边形表示 如果曲面点位于照亮的部分,则需要计算保持该点的平面,它是法向量和灯光的法线。该平面和灯光之间的交点将为您提供两个点作为选项(仅两个,因为投射点始终位于边上)。因此,测试这两个,看看哪一个贡献更大 如果该点不在照明部分中,则可以计算四个平面,每个平面都有曲面点、其法线和灯光四边形的一个顶点。对于每个灯光四边形顶点,您将有两个点(顶点+另一个交点)来测试哪一个贡献最大 这应该能奏效。如果您遇到任何反例,请给我反馈。 如果我理解正确: 定义L“点x0的灯光” L~K/S^2 S=sqrt(y^2+x0^2) L=和(k/(sqrt(y^2+x0^2))^2,y=0..无穷大 L=和(k/(y^2+x0^2)),y=0..无穷大,x>0,y>0 L=积分(k/(y^2+x0^2)),y=0..infinity=k*Pi/(2*x0) 答复: L=k*Pi/(2)*