渲染001_BlinnPhong
原创2026/9/3大约 1 分钟
Blinn-Phong 光照模型
下面的示例只使用 Three.js 加载模型、传递矩阵并提交绘制,光照计算由自定义的 ShaderMaterial 完成,没有使用 MeshPhongMaterial。顶点和片元着色器分别存放在独立的 .vert.glsl 与 .frag.glsl 文件中,由 JavaScript 按路径加载。
🖱️ 拖拽旋转 · 滚轮缩放 · 右键平移
三个光照分量
Blinn-Phong 将最终颜色拆为环境光、漫反射和镜面反射:
环境光使用一个常量近似间接光:
漫反射遵循 Lambert 余弦定律。法线
Blinn-Phong 高光
首先计算光线方向
然后用法线与半程向量的夹角计算高光:
坐标空间
顶点着色器使用 modelViewMatrix 将顶点变换到观察空间,并使用 normalMatrix 变换法线。片元着色器中的法线、观察方向和光线方向全部处于观察空间,只有处于同一坐标空间的向量才能进行点乘。
使用右上角面板可以分别关闭环境光、漫反射或镜面反射,观察每个分量对最终结果的影响。