【发布时间】:2014-12-30 17:22:49
【问题描述】:
我正在尝试尽可能逼真地渲染一个场景,其中点光源撞击物体并以与面部法线相同的角度(入射角 = 反射角)反弹并照亮其他地方的场景。
现在,我知道threejs中的反射通常按照我在网上找到的示例处理CubeCamera-material,但这并不完全适用于我的情况,因为我可能是从某个点观察场景我可能无法观察到物体在另一个物体的镜面表面上的反射。
考虑this example prototype我正在处理:如果场景中从墙壁突出的盒子有一个类似镜子的材料(用CubeCamera完成),我将看不到绿色立方体在底面上的反射,除非相机位于特定位置;然而,在现实生活中,如果一个被光源照亮的物体经过另一个物体附近,它会部分照亮它,就好像它本身就是一个光源一样(当然,取决于物体的反射率指数)等等从接收间接照明的物体的任何角度都应该可以看到现象。
因此我想出了在立方体中添加PointLight 的想法,但这当然会对周围环境产生不良影响。
我将尝试用以下顺序来说明我的目标:
1) 在这里,我以后称为 balcony 的远端是正确的黑暗,而标有红色“x”的区域是立方体有一个孩子的结果@ 987654330@向四面八方闪耀。
2) 在这里,阳台的远面仍然是黑暗的,而随着立方体经过,阳台的底部会接收到更多的光线,这是可取的,但立方体后面的墙壁实际上应该是黑暗的(我没有添加阴影但是,我首先要弄好照明),以及它下面的地面和灯柱。
3) 最后,当立方体经过阳台时,阳台的侧面和底面被照亮是完全错误的,因为我们现在都不会反射光线返回它的来源。同样适用于灯柱。
现在我意识到发生的所有错误都是由于立方体本身发光,我希望您能帮助我确定一种产生物理精确反射光线的方法。
我想避免使用环境光或其他技巧来模拟现实生活场景并尽可能坚持物理;我怀疑我想要实现的渲染计算量很大,更不用说在实时用例中制作动画了,但这不是问题,因为我只是想开发一个概念验证,而不是必须的东西执行速度快。
据我所知,我可能应该为接收间接照明的材质编写自定义顶点和片段着色器,对吧?不幸的是,我不知道从哪里开始,谁能指出我正确的方向?干杯。
【问题讨论】:
-
我知道这个问题很老,但一个相关的主题叫做“radiosity”。我不知道有什么进步,但是对于架构渲染来说,单帧可能需要several hours。
标签: reflection three.js shader physics lighting