打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
GPU实现“Blinn

摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”

 

 

9.4 Blinn-Phong光照模型

Blinn-Phong光照模型,又称为Blinn-phong反射模型(Blinn–Phong reflection model)或者phong修正模型(modified Phong reflection model),是由Jim Blinn1977年在文章Models oflight reflection for computer synthesized pictures中对传统phong光照模型基础上进行修改提出的。和传统phong光照模型相比,Blinn-phong光照模型混合了Lambert的漫射部分和标准的高光,渲染效果有时比 Phong 高光更柔和、更平滑,此外它在速度上相当快,因此成为许多CG软件中的默认光照渲染方法。此外它也集成在了大多数图形芯片中,用以产生实时快速的渲染。OpenGLDirect3D渲染管线中,Blinn-Phong就是默认的渲染模型。

phong光照模型中,必须计算的V和R的点积的值值,其中R为反射光线方向单位向量,V为视线方向单位向量,但是在Blinn-phong光照模型中,用N dot H的值取代了V dot RBlinn-phong光照模型公式为:

      

             

其中N是入射点的单位法向量,H是“光入射方向L和视点方向V的中间向量”,通常也称之为半角向量。注意:半角向量被广泛用于各类光照模型,原因不但在于半角向量蕴含的信息价值,也在于计算半角向量是一件简单、耗时不多的工作。

         

                       

通常情况下,使用Blinn-phong光照模型渲染的效果和phong模型渲染的效果没有太大的区别,有些艺术工作者认为phong光照模型比blinn-phong更加真实,实际上也是如此。Blinn-phong渲染效果要更加柔和一些,Blinn-phong光照模型省去了计算反射光线方向向量的两个乘法运算,速度更快。由于Blinn-phongphong模型的唯一区别一个使用半角向量,一个使用反射光方向向量,所以下面只给出Blinn-phong模型的片段着色程序代码。

代码 7 Blinn-phong模型片段着色程序

 

voidmain_f(VertexScreen posIn,

            out float4 color     : COLOR,

              uniform float4x4 worldMatrix,

              uniform float4x4 worldMatrix_IT,

              uniform float3 globalAmbient,

              uniform float3 eyePosition,

              uniform float3 lightPosition,

              uniform float3 lightColor,           

              uniform float3 Kd,

              uniform float3 Ks,

              uniform float  shininess)

{

   float3 worldPos = mul(worldMatrix,posIn.objectPos).xyz;

   float3 N = mul(worldMatrix_IT,posIn.objectNormal).xyz;

   N =normalize(N);

 

   //计算入射光方向/视线方向/半角向量

   float3 L = normalize(lightPosition -worldPos);

   float3V = normalize(eyePosition - worldPos);

   float3H = normalize(L + V);

 

   // 计算漫反射分量

  float3 diffuseColor = Kd *globalAmbient+Kd*lightColor*max(dot(N, L), 0);

 

  //计算镜面反射分量

  float3 specularColor = Ks *lightColor*pow(max(dot(N, H), 0), shininess);

 

  color.xyz = diffuseColor + specularColor;

  color.w = 1;

}

 

Blinn-phong光照模型的渲染效果如:


图形截屏,加上文档大小的限制,好像导致 19 20不能形成明显的对比。实际上,我在实现算法时认真对比过,phong光照模型确实要比blinn-phong渲染效果要真实。与phong光照模型相比,使用blinn-phong进行光照渲染,在同样的高光系数下,高光领域覆盖范围较大,明暗界限不明显。

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
[CG编程] 基本光照模型的实现与拓展以及常见光照模型解析
Ward BRDF实现心得
OpenGL 4.0 GLSL 采用平行光照模型
【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模...
【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)
Rman中的坐标系等
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服