和diffuse reflection对应的是specular reflection。一直以来,本人都将“specular reflection”理解为“镜面反射”。但是,现在来写总结时,发现牵涉到一个叫做“perfect specular reflection”的东东,这下有点乱了。两个都是“镜面反射”么?还是一个“理想镜面反射”,一个“镜面反射”?为了避免混淆,特此声明:

“perfect specular reflection”:等价于“mirror-likereflection”,译为“镜面反射”;

“specular reflection”:现在译为“高光反射”。

“镜面反射”发生在非常非常非常平的像镜子一样的物体表面。但是,现实中的物体表面都不是如此理想,表面都是粗糙的。比如这样一个球:

如果撤掉这个球的漫反射光,剩余的光呈现的是这样一张图:

这一团亮光是什么鬼?这个就是“高光反射”,对应的光被称为“高光”。

尽管现实的表面是粗糙的,但是粗糙的表面可以认为是由无数细微的mirror-like的微表面。所以,我们要先看看镜面反射(mirror-like reflection or perfect specular reflection)。

68.1.2.2.1 镜面反射(perfect specular reflection)

以前在“问题二十一:怎么模拟ray tracing图形中不同材料的颜色(diffuse and metal)”(http://blog.csdn.net/libing_zeng/article/details/54428494)中有求反射光线的方向向量F。重复贴图如下:

计算过程中用到的是入射光线和法线的方向向量的单位向量,这样求出的反射光线的方向向量也是单位向量。

对于“镜面反射”,就了解这么多吧。(入射角=反射角,知道怎么求得反射光线的方向向量)。

68.1.2.2.2 高光反射(specular reflection)

先前挖了这么一个坑:下图的高光反射光线为什么是三条,而不是一条?

当时的简单回答是:因为表面的上表面不是理想光学镜面(不是特别特别特别平)。

表面是粗糙的,夸张一点的示意图应该是这样的:

表面再粗糙点。表面越粗糙,高光则越是发散:

相比与“漫反射光”,这种反射光线(高光)强度要大很多,但是方向不像漫反射光线那么分散,而是聚集在某个方向周围。这样就可以解释之前那一团亮光了。(重复贴图如下)

很亮;但是为什只有这么一小团,而不是整个球面呢?原因就是“高光的方向聚集在某个方向周围”。之所以球面的其他位置上没有呈现高光,是因为这个位置的高光是聚集在其对应的某个方向周围,而这个方向范围的光没能进入相机(眼睛)。如果改变相机的位置,图片中高光的位置也会随之改变。

68.1.2.2.2.1 Phong反射模型

在包含高光的反射模型提出之前,生成的图形只有漫反射光。图形基本是这样的:

时间到了1975年,Bui Tuong Phong在他的论文[3]中提出了一个包含高光的反射的经验模型,这个模型后来被称为Phong反射模型(Phong Reflection Model)。Phong反射模型中高光部分是这个样子:

对应的高光部分大概是这个样子:

68.1.2.2.2.2 Blinn-Phong反射模型

  

对应的高光部分大概是这个样子:

  

Blinn-Phong相比Phong,在观察方向趋向平行于表面时,高光形状会拉长,更接近真实情况。

我们编程使用的是Phong反射模型和Blinn-Phong反射模型。后面“68.1.2.2.2.3 基于物理的反射模型——Cook-Torrance反射模型”章节算是理论延伸,没有编程实践。

68.1.2.2.2.3 基于物理的反射模型——Cook-Torrance反射模型

Blinn-Phong模型运算简单,适合早期硬件实现,在显卡只支持固定管线(Fixed Pipeline)的年代,Blinn-Phong模型是设计在显卡硬件中的,OpenGL/Direct3D固定管线的光照模型就是Blinn-Phong模型。但是Blinn-Phong模型毕竟只是一个经验模型,表现力有限,看起来有较重的塑料感。要想模拟各种不同材质的质感,得从光照的物理模型入手。

早在1967年,K. E. Torrance 和E. M. Sparrow在他们的论文[2]中提出了物理领域中粗糙表面的高光反射模型。到了1982年,Robert L. Cook 和K. E. Torrance在他们的论文[5]中将Torrance-Sparrow的高光反射模型引入计算机图形领域。计算机图形领域的该模型被称为“Cook-Torrance反射模型”。现在无论是CG电影,还是3D游戏,基于物理着色都是使用的这个模型。(该模型的详细推导,参考原论文[5]。)

反射示意图和Blinn-Phong模型是的是一样的。重复贴图如下:

原论文中的示意图是这个样子,也贴出来:

Cook-Torrance反射模型中高光部分如下:

上式中三个主要参数G、D、F。这三个参数的求解/建模一般都是很复杂的。当然,前人已经这三个参数提出各种求解模型。

D:微法向量分布函数

粗糙表面是由很多微镜面(micro mirror)组成,每个微镜面都有自己的法向量H。当入射光L照射在微镜面上时,反射光V能进入相机的条件是:H刚好是L和V的中间向量。也就是说,只有法向量刚好是L、V的中间向量的微镜面才可能是此次反射的“法向量有效的微镜面”。

上图中,整个表面如蓝色折线,但是“法向量有效的微镜面”(能够使得反射光进入相机)只有图中的红色线段表示的微镜面。也就是说“法向量有效的微镜面”(红色线段)只占所有微镜面(蓝色折线)的一部分。这个部分到底是多少比例呢???为了求这个比例/概率,有人就对各种粗糙表面进行了测试,然后建立分布模型(不要问我是怎么做的,我不知道,我也不管)。市面上比较流行的有这样两个分布模型:Gaussian分布模型Beckmann分布模型

Gaussian分布模型:

Beckmann分布模型:

这两个分布模型中的参数a是入射光线L和微镜面法向量H的夹角。(在前面的示意图中有标记),m是用户自行设置的参数。

我们不用管这些分布模型是怎么建立的,只要知道:求得D是“法向量有效的微镜面”在所有微镜面中所占的比例;D相当于一个概率值。

G:几何衰减因子

前面D求出了“法向量有效的微镜面”在所有微镜面中所占的比例。但是,这些“法向量有效的微镜面”并不能保证对应的反射光是沿着观测方向的,但是并不能保证反射光进入相机。也就是说,方向对了,但是还是不能到达目的地。为什么呢?中途遇到问题了。可能出现下图示意的两类问题:

问题a:“法向量有效的微镜面”的入射光被其他微镜面挡住了。这种入射光被遮蔽的情况称为“shadowing”

问题b:“法向量有效的微镜面”的反射光被其他微镜面挡住了。这种反射光被遮蔽的情况称为“masking”

不管是入射光被遮蔽了,还是反射光被遮蔽了。这两类遮蔽情况对应的“法向量有效的微镜面”被称为“被遮蔽的法向量有效的微镜面”

所以,“真正有效的微镜面”=“法向量有效的微镜面”-“被遮蔽的法向量有效的微镜面”。

“真正有效的微镜面”占“法向量有效的微镜面”的比例是多少呢??? James F. Blinn在他的论文[4]中有详细的计算过程。这里直接列出结果:

式子中:

第一项表示没有遮蔽时,“真正有效的微镜面”占“法向量有效的微镜面”的比例=1;

第二项表示(a)情况发生之后,“真正有效的微镜面”占“法向量有效的微镜面”的比例;

第三项表示(b)情况发生之后,“真正有效的微镜面”占“法向量有效的微镜面”的比例;

我们先不管G具体是怎么计算的,只要知道:求得G是“真正有效的微镜面”在“法向量有效的微镜面”中所占的比例;G和D一样,也相当于一个概率值。

所以,D*G则表示:“真正有效的微镜面”在“所有微镜面”中所占的比例

F:菲涅尔项(Fresnel Term)

通过前面的计算,我们已经直到“真正有效的微镜面”所占比例,所以,我们现在考虑的环境是“真正有效的微镜面”,相当于已经将“粗糙表面”转化为“镜面”了。

所以,下面我们考虑的是最简单的反射——镜面反射(mirror-like reflection)。

书上接下来是对计算过程进行加速。

(略)

 

Reference:

[1]. Andrew S. Glassner, An Introduction toRay Tracing, Xerox PARC, 1989.

[2]. K. E. Torrance and E. M. Sparrow,Theory for Off-Specular Reflection From Roughened Surfaces, Jouunal of theOptical Society of America, Vol. 57, No. 9, 1105-1114, September 1967.

[3]. Bui Tuong Phong, Illumination for ComputerGenerated Images, Communications of the ACM, V. 18, No. 6, pp. 311- 317, 1975.

[4]. James F. Blinn, Models of LightReflection for Computer Synthesized Pictures, Siggraph ’77.

[5]. Robert L. Cook and K. E. Torrance, AReflectance Models for Computer Graphics, ACM Transactions on Graphics, Vol. 1,No. 1, Janunary 1982.

[6]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.

[7]. Tomas Akenine-Moller, Eric Haines,Naty Hoffman, Real-Time Rendering, A K Peters Ltd, 2008.

[8]. https://en.wikipedia.org/wiki/Phong_reflection_model

[9]. http://www.raytracegroundup.com/

[10]. http://www.realtimerendering.com/

[11]. https://zhuanlan.zhihu.com/p/21376124

问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.2)——高光反射(specular reflection)相关推荐

  1. 问题六十八:光照模型(Light model)——关于“环境光”模型的补充

    之前在"问题六十八:着色模型(shading model)(2)--光照模型(Light model)"中已经对Ambient Model(环境光光照模型)进行了介绍,但是感觉推导 ...

  2. JavaScript学习(六十八)—表单校验案例

    JavaScript学习(六十八)-表单校验案例 学习内容 (一).如何获取页面的元素-利用id获取 格式:var 变量名称 =document.getElementById('要获取的元素的id的值 ...

  3. [转载]六十八个经典故事

    转自:http://www.cnblogs.com/flying_bat/archive/2004/11/04/60492.aspx 一.  用人之道去过庙的人都知道,一进庙门,首先是弥陀佛,笑脸迎客 ...

  4. 信息系统项目管理师必背核心考点(六十八)数字证书、数字签名

    科科过为您带来软考信息系统项目管理师核心重点考点(六十八)数字证书.数字签名和CA认证中心,内含思维导图+真题 [信息系统项目管理师核心考点]数字证书 1.具有不可抵赖性的特征(一段电子文档) 2.包 ...

  5. [转] 身为管理者 会讲的六十八个故事

    一.用人之道 去过庙的人都知道,一进庙门,首先是弥陀佛,笑脸迎客,而在他的北面,则是黑口黑脸的韦陀.但相传在很久以前,他们并不在同一个庙里,而是分别掌管不同的庙. 弥乐佛热情快乐,所以来的人非常多,但 ...

  6. 六十八个超级经典的管理故事

    一. 用人之道 去过庙的人都知道,一进庙门,首先是弥陀佛,笑脸迎客,而在他的北面,则是黑口黑脸的韦陀.但相传在很久以前,他们并不在同一个庙里,而是分别掌管不同的庙.弥乐佛热情快乐,所以来的人非常多,但 ...

  7. 六十八个超级经典管理小故事(转)

    一. 用人之道 去过庙的人都知道,一进庙门,首先是弥陀佛,笑脸迎客,而在他的北面,则是黑口黑脸的韦陀.但相传在很久以前,他们并不在同一个庙里,而是分别掌管不同的庙. 弥乐佛热情快乐,所以来的人非常多, ...

  8. 【Microsoft Azure 的1024种玩法】六十八.基于Azure云平台使用Azure Virtual machines快速搭建Docker容器

    [简介] Docker 是一个开放源代码软件,主要应用于开发应用.交付应用.运行应用,Docker 可以将应用程序及其依赖项打包到可以在任何 Linux.Windows 或 macOS 计算机上运行的 ...

  9. 六十八个超级经典小故事(做人、处事、经商之道)

    一.用人之道 去过庙的人都知道,一进庙门,首先是弥陀佛,笑脸迎客,而在他的北面,则是黑口黑脸的韦陀.但相传在很久以前,他们并不在同一个庙里,而是分别掌管不同的庙.弥乐佛热情快乐,所以来的人非常多,但他 ...

最新文章

  1. SCCM 2012系列9 补丁分发上
  2. 【数字信号处理】相关函数 ( 周期信号 | 周期信号的自相关函数 )
  3. chromium 源码下载地址
  4. C#多线程开发-使用并发集合
  5. Spring中Bean的生命中期与InitializingBean和DisposableBean接口
  6. UVA 10534 Wavio Sequence DP LIS
  7. Python 2 寿命即将终结,​是时候将 3500 万行代码迁移到 Python 3 了!
  8. 传感器市场需求大幅提升 中企能否满足?
  9. java绩效考核方案,基于jsp的职工绩效考核系统-JavaEE实现职工绩效考核系统 - java项目源码...
  10. 成功绩效评估面谈的八个步骤
  11. FAT32文件系统详解
  12. Oracle 中文转拼音
  13. 热门流量主小程序证件智能扫描A4系统开发
  14. 随机效应估算与固定效应估算_面板数据固定效应 vs. 随机效应
  15. 全球最强大脑在哪里?阿里小蜜算法团队在寻找
  16. 1.3读论文笔记:M. Raissi a等人的Physics-informed neural networks:A deep learning framework for solving forw..
  17. 金蝶K3开发-工业单据自定义控件
  18. 【U3D入门小白教程——案例篇】之一:球吃豆
  19. 学习笔记12--基于专用短程通信的车联网技术
  20. SQL Server 2008新特性之压缩备份(backup compression)

热门文章

  1. POJ 3037 SPFA
  2. 【JSP笔记】第四章 JSP内置对象【下】
  3. Android数据加密解密
  4. 【重点:BFS】LeetCode 407. Trapping Rain Water II
  5. 狸猫换太子--删除无头单链表中结点
  6. IEEE Signal Processing Letters
  7. tensorflow : 队列管理 FIFOQueue amp;amp; RandomShuffleQueue
  8. transform子元素,绝对定位失效
  9. Editplus配置VC++(1) 及相关注意事项
  10. Window phone7 修改程序语言