非常远的点光源无法正确渲染



如果我试图用一个球体和点照明来放大工作场景,使对象之间的距离非常大(>1E5(,那么渲染的照明是不正确的-当我在Oculus Quest或Google Cardboard上显示时,它看起来像一个微小的狭缝,随着VR视点的变化而在对象上移动。在桌面上的非VR网络浏览器中,该场景看起来是正确的。

这显然是一个距离、精度和a球对象的问题,以及它在大距离内如何与灯光和相机反应。但我需要的是一个变通办法。我正在尝试以真实的尺度模拟太阳系(至少是行星之间的距离(。为了让月亮离观察者足够远,当我四处移动时不会移动,我需要缩放它,使月亮距离相机至少2000米。这使太阳位于80万米外,这就是阳光的来源。因此,其他行星无法正确渲染。如果我向下缩放,一切都可以,但当我站起来或四处走动时,月亮会相对于其他物体移动。

这里有我可以使用的变通方法吗?是否有一个已公布的限制来解释系统的哪一部分是问题所在——它显然比aframe更可能处于更低的级别,但我不确定是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>

这使用两个不同距离的灯光。我希望火星球体能得到均匀的照明。相反,当我移动眼睛时,第一束光总是明显的绿色,但第二束光的红色看起来像一条带,带着奇怪的伪影在球体上移动。

不要使用点光源。如果光源很远或很大,最好用定向光来近似

示例和相应的HTML。

我还建议使用小数字。更易于操作,不会遇到精度或溢出问题。最好将注意力集中在正确的距离和尺寸比例上。

最新更新