摘抄“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 Blinn 于 1977 年在文章 “Models of light reflection for computer synthesized pictures ” 中对传统 phong 光照模型基础上进行修改提出的。和传统 phong 光照模型相比, Blinn-phong 光照模型混合了 Lambert 的漫射部分和标准的高光 ,渲染效果有时比 Phong 高光更柔和、更平滑,此外它在速度上相当快,因此成为许多 CG 软件中的默认光照渲染方法。此外它也集成在了大多数图形芯片中,用以产生实时快速的渲染。 在 OpenG L 和 Direct3D 渲染管线中, Blinn-Phong 就是默认的渲染模型。

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

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

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

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

void main_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);

float3 V = normalize(eyePosition - worldPos);

float3 H = 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 进行光照渲染,在同样的高光系数下,高光领域覆盖范围较大,明暗界限不明显。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liu_lin_xm/archive/2009/11/21/4845848.aspx

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

  1. 计算机图形学绘制多边形代码_《GPU编程与CG语言之阳春白雪下里巴人》- 第二章(GPU 图形绘制管线)...

    第二章 GPU 图形绘制管线 万事开头难,每门科学都是如此. ------ 马克思 图形绘制管线描述 GPU 渲染流程,即"给定视点.三维物体.光源.照明模式,和纹理等元素,如何绘制一幅二维 ...

  2. 学习笔记-《GPU 编程与CG 语言之阳春白雪下里巴人》

    第一章 绪论 1.1 Programmable Graphics Processing Unit 发展历程 Programmable Graphics Processing Unit( GPU),即可 ...

  3. GPU编程与CG语言之阳春白雪下里巴人 读书笔记

    CHPT2 GPU图形绘制管线 本章作者对GPU图形渲染管线做了深入浅出的总结概括. 所谓渲染管线即图形是如何从三维空间变换到我们二维的屏幕上的.具体的过程可以分为如下几步: 几何阶段   主要工作是 ...

  4. GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(之一)。

    1.abs(x) 取得输入参数的绝对值. 2.acos(x) 反余切函数,为cos(x)的反函数,原来得到Y作为输入,的到对应的角度. (其实只要记得作用是:得到角度,值域为[0,π],输入范围为[- ...

  5. Linux MD5 programming in C Language

    Linux MD5 programming in C Language MD5(Message Digest, Unoffical Homepage,  Wikipedia, rfc1321) 是 R ...

  6. C++ Primer - 5th Edition - 书中源代码 - 课后习题答案

    C++ Primer - 5th Edition - 书中源代码 - 课后习题答案 C++ Primer - 5th Edition - 书中源代码 - 课后习题答案 1. C++ Primer, 5 ...

  7. 为什么安装的是gpu版本训练时还是用的cpu?_免费GPU哪家强?谷歌Kaggle vs. Colab | 硬核评测...

    作者 | Jeff Hale译者 | Monanfei责编 | 夕颜出品 | AI科技大本营(id:rgznai100) 谷歌有两个平台提供免费的云端GPU:Colab和Kaggle, 如果你想深入学 ...

  8. GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处

    在不少人的心目中,显卡最大的用途可能就只有两点--玩游戏.看电影,除此之外,GPU并没有其他的作用了.但是随着微软IE9的正式发布,不少人突然发现,微软一直提到一个名词:GPU硬件加速,从而也让不少人 ...

  9. [css] 说说你对GPU的理解,举例说明哪些元素能触发GPU硬件加速?

    [css] 说说你对GPU的理解,举例说明哪些元素能触发GPU硬件加速? GPU: 图形处理器,用于处理图形有关的任务,用于渲染页面在css中使用 transform: translateZ(0),可 ...

  10. android获取GPU信息;android获取GPU渲染器、供应商、版本和扩展名等信息

    android获取GPU信息:android获取GPU渲染器.供应商.版本和扩展名等信息 效果: 1.布局文件 <?xml version="1.0" encoding=&q ...

最新文章

  1. anaconda在ubuntu中安装后没有_听说90后的现状,并没有想象中那么美好!
  2. String类为什么被设计为不可变的?
  3. CSS3--2D3D的使用
  4. boost::stacktrace::detail::void_ptr_cast相关的测试程序
  5. oracle可以在liux上装_【Oracle】手把手教你做之Linux上安装Oracle11g
  6. NeHe OpenGL教程 第三十课:碰撞检测
  7. Dubbo面试 - dubbo 负载均衡策略和集群容错策略都有哪些?
  8. 服务器biosraid管理
  9. asp.net mysql所有数据库_asp.net 如何获取sql数据库所有列名称
  10. sublime text下 Python 问题:TabError: inconsistent use of tabs and spaces in indentation
  11. 使用RabbitMQ做的一些工作及经验教训
  12. 实验四------实验十二
  13. python对比php开发web_django学习系列——python和php对比
  14. 史上最全科研网站!!!
  15. 新式汉语拼音使用方法及相关数据,用与交流编程只能用英语字母的环境使用
  16. ckeditor 3.6一直提示“例外被抛出且未被接住”的问题的解决方法
  17. QQ音乐付费格式转换
  18. What is a hardlink and how to create one?
  19. Adobe Photoshop CC 2017图文安装教程,附下载地址
  20. 计算机课板书图片,小学信息技术课《插入图片及剪贴画》说课稿

热门文章

  1. 密码学系列之:blowfish对称密钥分组算法
  2. VBA-自动筛选符合条件的数据
  3. Linux关于qt缺少xcb问题解决办法
  4. [转]VC知识库文章 - 在MFC中用正则表达式对窗体进行有效性验证
  5. [渝粤教育] 兴义民族师范学院 数据结构 参考 资料
  6. 技术干货 | 如何用MindSpore优化器加速收敛高度逼近最优值?
  7. day4-数字类型和列表基础
  8. 过河孙小弟scratch
  9. Infor M3咨询服务调研报告-Infor M3咨询服务生产基地、总部、竞争对手及市场地位
  10. div 空隙的解决办法