3D图形学与可视化大屏:什么是Phong 、Blinn-Phong 光照模型?
·
一、Phong 光照模型
(一)基本原理
Phong 光照模型是一种局部光照模型,它将物体表面的光照分为三个部分:环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面反射光(Specular Light)。

- 环境光
环境光是均匀地从各个方向照射到物体上的光,它不依赖于光源的位置和方向。环境光的强度通常是一个常量,它的作用是为物体提供一个基本的亮度,使得物体在没有直接光照的情况下也能被看到。 - 漫反射光
漫反射光是当光线照射到物体表面时,被物体表面随机地向各个方向反射的光。漫反射光的强度取决于光线的入射方向和物体表面的法线方向之间的夹角。当光线垂直入射到物体表面时,漫反射光的强度最大;当光线与物体表面的法线方向平行时,漫反射光的强度为零。 - 镜面反射光
镜面反射光是当光线照射到物体表面时,被物体表面按照一定的规律反射的光。镜面反射光的强度取决于光线的入射方向、物体表面的法线方向和观察者的视线方向之间的夹角。当观察者的视线方向与镜面反射光的方向重合时,镜面反射光的强度最大;当观察者的视线方向与镜面反射光的方向垂直时,镜面反射光的强度为零。
(二)计算公式

- 环境光计算公式
环境光的强度可以用以下公式计算:I_ambient = k_a * I_light_ambient其中,I_ambient 表示环境光的强度,k_a 是物体对环境光的反射系数,I_light_ambient 是环境光的颜色。 - 漫反射光计算公式
漫反射光的强度可以用以下公式计算:I_diffuse = k_d * I_light_diffuse * max (0, dot (normal, light_direction))其中,I_diffuse 表示漫反射光的强度,k_d 是物体对漫反射光的反射系数,I_light_diffuse 是漫反射光的颜色,normal 是物体表面的法线方向,light_direction 是从物体表面指向光源的方向,dot (normal, light_direction) 表示法线方向和光照方向的点积。 - 镜面反射光计算公式
镜面反射光的强度可以用以下公式计算:I_specular = k_s * I_light_specular * pow (max (0, dot (reflection_direction, view_direction)), shininess)其中,I_specular 表示镜面反射光的强度,k_s 是物体对镜面反射光的反射系数,I_light_specular 是镜面反射光的颜色,reflection_direction 是镜面反射光的方向,view_direction 是从物体表面指向观察者的方向,pow (max (0, dot (reflection_direction, view_direction)), shininess) 表示镜面反射光的高光强度,shininess 是物体表面的光泽度。
(三)作用

- 增强真实感
Phong 光照模型通过模拟环境光、漫反射光和镜面反射光的效果,可以使物体在 3D 场景中看起来更加真实。环境光为物体提供了一个基本的亮度,漫反射光使物体表面看起来有立体感,镜面反射光则可以模拟物体表面的高光效果,使物体看起来更加光滑和有质感。 - 提高可视化效果
在可视化大屏中,Phong 光照模型可以使 3D 图形更加生动和吸引人。通过调整光照参数,可以突出显示重要的信息,增强数据的可视化效果。例如,在展示一个 3D 地图时,可以通过调整光照参数,使地形更加清晰地显示出来,提高地图的可读性。 - 支持动态效果
Phong 光照模型可以与动画和交互技术相结合,实现动态的光照效果。例如,可以通过改变光源的位置和颜色,或者调整物体的材质属性,来实现动态的光照变化。这种动态效果可以使可视化大屏更加生动和有趣,提高用户的参与度和体验感。
二、Blinn-Phong 光照模型
(一)基本原理

Blinn-Phong 光照模型是对 Phong 光照模型的一种改进,它通过引入半程向量(Halfway Vector)来计算镜面反射光的强度。半程向量是指从物体表面指向光源的方向和从物体表面指向观察者的方向之间的中间向量。
(二)计算公式
- 环境光计算公式
与 Phong 光照模型相同,环境光的强度可以用以下公式计算:I_ambient = k_a * I_light_ambient - 漫反射光计算公式
与 Phong 光照模型相同,漫反射光的强度可以用以下公式计算:I_diffuse = k_d * I_light_diffuse * max (0, dot (normal, light_direction)) - 镜面反射光计算公式
镜面反射光的强度可以用以下公式计算:I_specular = k_s * I_light_specular * pow (max (0, dot (normal, half_vector)), shininess)其中,half_vector 是半程向量,它可以通过以下公式计算:half_vector = normalize (light_direction + view_direction)
(三)作用

- 提高计算效率
Blinn-Phong 光照模型通过引入半程向量,可以避免直接计算镜面反射光的方向,从而提高计算效率。在实时渲染中,计算效率是非常重要的,因为它直接影响到渲染的帧率和性能。 - 更加真实的高光效果
Blinn-Phong 光照模型可以产生更加真实的高光效果,因为它考虑了观察者的视线方向和光源的位置之间的关系。与 Phong 光照模型相比,Blinn-Phong 光照模型的高光更加柔和和自然,能够更好地模拟真实世界中的光照效果。 - 支持更多的材质属性
Blinn-Phong 光照模型可以支持更多的材质属性,例如粗糙度(Roughness)和金属度(Metallic)等。这些材质属性可以使物体表面看起来更加真实和多样化,提高可视化效果。
本人是10年经验的前端开发和UI设计资深“双料”老司机,1500+项目交付经历,带您了解最新的观点、技术、干货,下方微信可以和我进一步沟通。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)