使用 WebGL 和 three.js 以适当的反射和阴影(逼真)渲染

Rendering with proper reflections and shadows (photorealistic) using WebGL and three.js

我一直在尝试渲染一个已经使用 3ds max 创建的场景。我已将所有对象导出为 obj 文件,并使用 three.js 库在浏览器上渲染场景。对于反射,我尝试使用 Cubecamera 方法,但它没有给出预期的结果。对于阴影,我尝试了阴影贴图,但我想我没有正确使用它们。我想知道是否可以只使用 three.js 和 WebGl 做任何我想做的事。如果是,有人请告诉我如何。另外,我知道反射和阴影很容易由 3ds max 软件使用 Mental ray 渲染器生成。那么three.js中有没有类似的渲染技术可以帮助轻松做到这一点?

这和我想要的差不多

不幸的是,这是一个很大的问题,而且有很多方法可以进行实时反射。 Mental Ray 计算反射的方式与您使用 WebGL(甚至 OpenGL)实时计算反射的方式完全不同。

最简单的方法是渲染场景两次,第一次是将场景上下颠倒(沿反射面的平面进行镜像)。这(就反射而言)非常简单,但确实将您限制在单一反射平面。鉴于您的形象,唯一的反光表面看起来像地板。这可能是最好的选择。

您甚至可以将镜像场景渲染为纹理,以便稍后在管道中对其进行操作(例如,如果您希望图像像透过水一样扭曲)。或者围绕不同的平面进行多次反射。渲染成本当然会急剧增加。

您可以使用您在原始 post 中提到的预渲染立方体贴图。虽然您可能需要不止一个,但对于这个场景。通过在场景中放置点来指示应捕获每个立方体贴图的位置。通常,这些质量相对较低,以保持较低的内存使用率。

第三个选项是屏幕 space 反射映射(可以找到合理的介绍,例如 http://roar11.com/2015/07/screen-space-glossy-reflections/) which do work but have some issues of their own (edges of the display) to solve. You will typically find all of these in a full game engine (Unreal Engine, https://docs.unrealengine.com/latest/INT/Resources/Showcases/Reflections/)。