【问题标题】:lighting from point light has strange artifacts on my models in three.js来自点光源的照明在我的三个.js 中的模型上有奇怪的伪影
【发布时间】:2013-08-27 18:14:32
【问题描述】:

考虑一下这个简单的房子 3d 模型。它有一个简单的立方体展开,应用了一些平铺纹理。

当我在它前面添加点光源时,房子看起来很正常,但是周围的地面(它是大型地形网格的一部分)没有被照亮。

在房屋网格内部,照明应用很有趣,以某种方式与顶点相关,而不是正确计算和添加颜色。请注意光照分布不均匀,但您实际上可以在那里看到一个多边形:

我认为这就是巨大的地形网格忽略光线的原因,因为多边形非常巨大,只有几个顶点。似乎灯光需要附近有一个顶点才能显示出来。

这是没有灯光的巨大地形网格的一部分:

我加了一个灯:

请注意灯光位置不是直接靠近顶点:

当我将灯光靠近顶点时,效果突然变得超级强烈

当我把灯放在中间时,几乎没有效果

无论模型的大小和顶点的数量如何,我怎样才能让我的模型到处都有光?

【问题讨论】:

  • 在底部图像中,地形是否平坦?
  • 您能否提供一个简单示例的实时链接?此行为是MeshLambertMaterial 的症状。你用的是这个吗?
  • @WestLangley 是的,我正在使用 MeshLambertMaterial!我应该改用什么?
  • @a.lasram 很抱歉造成混乱,最后的图像是大型搅拌机猴子头的眼睛(测试...),并且头部指向地平线
  • @Nick 在你的情况下,你应该使用MeshPhongMaterial

标签: three.js webgl vertex lighting


【解决方案1】:

您必须停止进行逐顶点照明并开始进行逐片段照明。您需要一个片段着色器来获取点的位置和法线,以及光线的位置/方向,并执行各种光照计算。

【讨论】:

    【解决方案2】:

    感谢@WestLangley 终于找到了它

    我之前使用的是 MeshLambertMaterial,现在我切换到 PhongMaterial 并将 material.perPixel 设置为 true。

    如果您要动态添加灯光,请不要忘记将material.needsUpdate 设置为true! (和我一样)

    【讨论】:

    • 另外,对于在three.js 中实现的LambertPhong 之间的确切区别,请参阅this answer
    • material.needsUpdate 添加灯光后为我做了。谢谢=]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多