BufferGeometry上的灯不正确

时间:2017-07-17 10:47:14

标签: three.js

我有一个使用MeshLambertMaterial和VertexColors的BufferGeometry。当我按照下面的gif所示应用灯光时,当BufferGeometry由具有相同颜色的不同尺寸的面组成时,灯光会变形。如果我为每个面部使用不同的颜色(1x1),那么灯光看起来很好。我试图计算faceNormals,但这并没有解决问题。

我想念的一切?

Here is a gif showing the issue

1 个答案:

答案 0 :(得分:1)

您正在使用顶点光照,而您可能需要每像素光照。

https://en.wikipedia.org/wiki/Per-pixel_lighting

http://www.learnopengles.com/tag/per-vertex-lighting/

据我所知,three.js几乎专注于PBR照明/着色器。有了这种心态,我甚至不确定兰伯特应该用什么。无论哪种方式,Lambert仅支持每个顶点光照,而不是每个像素,因此您将始终通过针对不同拓扑进行插值来获得这些工件。没有任何限制可以阻止这种工作的不同,只是设计上的。

另一方面,

MeshPhongMaterial执行逐像素照明,但由于所有物理正确性,您可能很难删除镜面术语,只留下朗伯。

如果你选择这个,你可能会发现自己不得不做这样的事情

var myBlackTexture = obtainTextureThatIsBlack()
var myMaterial = new THREE.MeshPhongMaterial({... specularMap: myBlackTexture})

https://github.com/mrdoob/three.js/issues/10808

要点:

  

我想念的一切?

你错过了任意三个设计警告:)为什么这种材料按原样存在仍然是个谜,为什么它不只是在顶点/碎片光照之间翻转的标志。