考虑这个简单的房子3D模型。它有一个简单的Cube展开,应用了一些平铺纹理。
当我在它前面添加一个点光源时,房子看起来很正常,但是周围的地面(它是大地形网格的一部分)没有亮起。
在房屋网格内部,照明应用有趣,以某种方式与顶点相关,而不是正确地计算和添加颜色。注意照明是如何均匀分布的,但实际上你可以在那里看到一个多边形:
我认为这就是为什么巨大的地形网格忽略了光线的原因,因为多边形非常庞大并且只有几个顶点。看来光线需要一个顶点才能显示出来。
以下是没有光线的巨大地形网格的一部分:
我添加一个灯:
注意灯光放置不是直接在顶点旁边:
当我将灯光靠近顶点时,效果突然变得非常强烈
当我将灯放在中间时几乎没有效果
无论模型的大小和顶点的数量如何,我怎样才能使我的模型在任何地方都有光照?
答案 0 :(得分:2)
您必须停止按顶点照明并开始执行每片段照明。您需要一个片段着色器,它获取点的位置和法线,以及光的位置/方向,并执行各种光照计算。
答案 1 :(得分:2)
最终感谢@WestLangley
之前我正在使用MeshLambertMaterial,现在我切换到PhongMaterial并将material.perPixel
设置为true。
如果要动态添加灯光,也不要忘记将material.needsUpdate
设置为true! (和我一样)