很远的点光源无法正确渲染

时间:2019-11-01 08:25:15

标签: three.js aframe

如果我尝试用一​​个球体和点光源按比例放大工作场景以使对象之间的距离非常大(> 1E5),则渲染的光照是不正确的-它看起来像是一条狭缝在对象上移动当我在Oculus Quest或Google Cardboard上显示时,VR视点会发生变化。在桌面上的非VR网络浏览器中,该场景看起来正确。

这显然是距离,精度和非球面物体以及它如何与远距离的灯光和相机反应的问题。但是我需要一种解决方法。我正在尝试以真实比例(至少就行星之间的距离而言)模拟太阳系。为了使月亮离观察者足够远,使其在我四处走动时不会移动,我需要对其进行缩放,以使月亮距离相机至少2000 m。这样一来,太阳就在800000 m之外,这就是太阳光的来源。结果,其他行星无法正确渲染。 如果我向下缩放,则一切正常,但是当我站起来或四处走动时,月亮相对于其他物体移动。

我可以在这里使用替代方法吗?是否有已发布的限制说明了系统的哪一部分是问题所在-显然比框架更低,但我不确定它是不是Three.js或oculus上的webgl实现还是什么。

<a-scene background="color:black;">
  <a-sphere id="mars" position="0 500E3 -2000E3" radius="40E3" color="#FFBBBB"></a-sphere>
  <a-entity id="sunlightnear" light="color: #00FF00; type: point;" position="0 0 -1000"></a-entity>
  <a-entity id="sunlightfar" light="color: #FF0000; type: point;" position="0 0 -1000E3"></a-entity>
  <a-entity id="mainCamera" camera="far:1E10;" position="0 1.6 0"  look-controls></a-entity>
</a-scene>

这使用两个距离不同的灯。我希望火星球被均匀照亮。取而代之的是,从第一个光线来看,它始终是绿色的,但是从第二个光线来看,红色是一个带状的,随着我移动眼睛,带状物体在怪圈中移动。

1 个答案:

答案 0 :(得分:0)

不要使用点光源。如果光源很远或很大,最好用directional light

近似

Example和相应的HTML

我还建议使用小数字。易于使用,不会遇到精度或溢出问题。最好专注于正确设置距离和尺寸比。