我正尝试在太阳系的规模上创建与物体的场景。THREE.js:由远处光源投射的阴影
的我想要的是一些例子:
-When a small (on the order of 10m in diameter) object, crosses behind
a large object (earth sized), which blocks the light source
(THREE.DirectionalLight), the smaller object is shadowed by the larger
object.
-When a moon crosses between the light source and a planet,
a shadow is cast on the planet.
-All objects must cast, and receive shadows (except stars, which only cast).
我知道我应该拍摄到“煎饼”我的影子相机尽可能,但我需要的规模可变的性质,这变得非常困难。
在如此可变的比例尺上创建阴影场景时,可以使用哪些技巧或技巧?
是否有某种对数深度缓冲区用于阴影(就像渲染一样)?
或者我能以某种方式利用相机/轨迹球控制事件来动态调整阴影相机的平截头体? (随着相机(场景)距离越来越远,请使用更粗糙的缓冲区/扩大阴影相机的平截头体)
请查看此JSfiddle以获取相关但不同的问题示例。这是两个小物体,靠近在一起,有一个非常遥远的光源。
http://jsfiddle.net/mtcq070x/6/
注意阴影是如何闪烁开启和关闭,并有阴影的球(这不应该有)的前面。
编辑:我改变了jsfiddle使用适当的偏见,球现在收到并投下阴影。注意阴影如何增加自我阴影的恶化。降低阴影黑暗不是一种选择,因为投射到飞机上的阴影消失了。
这里也正是我工作的样子(规模太阳能系统)
这有助于不接受阴影的东西,也可以铸造它们。我意识到小提琴并不完全符合我的想法,因为飞机前面的球体也必须得到阴影。这里是更新的小提琴,它接收并投射阴影:http://jsfiddle.net/mtcq070x/6/当它接受阴影时,我认为它是自我阴影。 – Boogiechillin
@Boogiechillin我不太明白新的小提琴什么是错的。但编辑中的图片可能是由于阴影贴图相对于您的场景而言太大,所以您只能有效地使用阴影贴图中的几个像素。你需要使用较小的shadowleft值,等等(尽可能小到适合场景)。是的,这意味着您可能需要动态计算只能捕获您感兴趣的对象的阴影。 –
jsfiddle的问题实际上与我的照片中出现的问题相同:球体正面有阴影。如果你在阴影中陷入阴影黑暗,前面的阴影消失了,但是球体投射到阴影上的阴影也消失了。我尽可能多地煎出平截体,仍然得到上面显示的内容。此外,将球体的材料切换为Phong(它是Lambert)似乎可以平滑前部阴影的锐利边缘。 – Boogiechillin