Sha*_*son 23 3d graphics three.js
我理解Lambert和Phong在一般计算机图形学中的区别.我也理解如何使用three.js更改和创建自己的材料.但我无法弄清楚MeshLambertMaterial和MeshPhongMaterial在默认状态下的区别.
我试过用一个定向光源和125个球体在一个场景上切换它们,我看不出任何差异.Three.js正在我书的一章中使用,所以我需要确保所有信息都准确和准确.
谢谢,谢恩
Rah*_*jee 23
谢恩,你感到困惑并不是你的错.
Lambert是从表面反射的光的照明模型(具有物理基础),以入射照明相对于入射点处的表面法线的方向表示.
Phong是一个更加细致入微的阴影模型(虽然它更像是一个hacky),它说光是由环境+漫反射+镜面反射组成.它将环境分量视为常量(hack!),使用上述Lambertian模型的漫反射分量,以及使用幂律衰减的镜面反射分量(这是一个聪明的黑客,大致接近实际的BRDF).
"Phong"这个词也是一种插值方法(当用于现代三角形渲染管道的上下文中时).计算三角形内部像素的照度时,您有两种选择:
Gouraud着色:使用重心坐标计算三个顶点的颜色并在内部进行插值,或者
Phong着色:使用三个顶点处的法线,在内部插入法线,并使用每个像素处的内插法线计算着色.
这就是为什么(正如@RayToal指出的那样),如果你的镜面"高光"落在三角形的内部,没有一个顶点是明亮的,但是Phong阴影会插入法线,内部会有一个亮点你渲染的三角形.
Wes*_*ley 21
我假设你想要在three.js中实现MeshLambertMaterial和之间的确切区别MeshPhongMaterial.
您必须区分着色模型和照明模型.Three.js没有实现'纯'Phong或Lambert模型.
因为MeshLambertMaterial,在每个顶点处执行照明计算,并且在多边形的面上内插所得到的颜色.(Gouraud阴影;(广义)Lambert照明模型)
因为MeshPhongMaterial,顶点法线在多边形的表面上插值,并且在每个纹素处执行照明计算.(Phong着色;(普遍)Phong照明模型)
当你有一个接近一个面的pointLight时,你会看到一个明显的区别 - 特别是如果光的衰减距离小于到面顶点的距离.
对于这两种材质,在这种情况下FlatShading,面法线取代每个顶点法线.
three.js.r.66