点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

Surface Shading in Tiger Book

本文由知乎作者MrPhD授权转载,不得擅自二次转载。原文链接:https://zhuanlan.zhihu.com/p/111888991

最近这段时间一直学习计算机图形学方面的知识,很久没写东西,今天写点surface shading相关的东西,具体可以参考虎书Fundamentals of Computer Graphics, Fourth Edition的Chap 10,这本书有好几位前辈大力推荐,值得一探究竟。之后会不定期更新图形学相关的内容,近期内容会包括虎书和 @闫令琪 老师的GAMES101。另鄙人才疏学浅,如文章内容有误,敬请告知。

漫反射着色

世界上有很多物体被称为“磨砂”材质,例如纸、未加工的木材以及未打磨的石头。对于这些物体,在很大程度上其不会随着视点变化而发生颜色变化。通常,当人们凝视纸上某个特定点时,即使人们产生移动,但该点的颜色将保持恒定。对于上述类型物体,可以称之为Lambertian object。

Lambertian Shading Model

Lambertian object 满足 Lambert's cosine law,Lambert's cosine law认为物体表面颜色c与表面法线和光源之间的夹角余弦成正比。由线性代数知识可知,余弦夹角可以等价于法线方向向量 n 与光源方向向量 l 的点积。

Surface Shading in Tiger Book

通过改变光源强度或者表面反射程度能够使得表面变得更亮或者更暗,通过增加两个系数 Surface Shading in Tiger BookSurface Shading in Tiger Book 。其中, Surface Shading in Tiger Book表示表面反射的光的比例,对于不同的颜色,该系数不同。例如,对于一个红色表面,其将反射更多的红光,对应的Surface Shading in Tiger Book也会更大;Surface Shading in Tiger Book 表示RGB强度,最终表面颜色可以表示为:Surface Shading in Tiger Book 。(P.S. Surface Shading in Tiger BookSurface Shading in Tiger Book为虎书中的表示,在其他的一些资料中通常会使用漫反射系数 Surface Shading in Tiger Book 来代替 Surface Shading in Tiger Book

需要注意的是当 Surface Shading in Tiger Book 为负数时,两个向量的夹角已经大于直角,理论上此时该点应该没有光,也就是颜色为黑色,所以更进一步地,表面颜色可以表示为:Surface Shading in Tiger Book 。对于Surface Shading in Tiger Book 为负数的情况,还可以使用绝对值解决,但是这牵涉到了two-sided lighting,通常情况下使用 Surface Shading in Tiger Book 已经足够了。

Ambient Shading

Ambient Shading 通常期间下被称为环境光,在Lambertian shading model中如果任何一点,其法线与光源夹角大于直角,也就是光没有直射到表面,显然在该模型下此处颜色为黑色。在现实生活中,光线会在各处被反射,各个方向都有光照而产生环境光。为了解决上述问题,可以使用的一种方法是使用多光源。常见的包括在视点放置一个微弱的光源以便所有可见点都可以接收到光源,或者使two-sided lighting,但是最常见的方法是在 Surface Shading in Tiger Book 中增加环境光项(常数), 最终得到Surface Shading in Tiger Book

Vertex-Based Diffuse Shading

将先前得到的shading model 应用在一个由三角形组成的物体上,极有可能产生faceted外观(most often used to describe a gem or semi-precious stone that's been cut and polished)。为了避免该外观,在每个三角形顶点放置法向量,并且对每个法向量对应的顶点进行着色,对三角形顶点以外的点进行差值,方法在chap 8描述(之后写chap 8的时候再来介绍)。

使用Vertex-Based Diffuse Shading不可避免地需要获取顶点处的法向量,在很多模型中会提供法向量,当没有提供法向量时,可以通过简单的方式计算得到(这里借用闫老师的一张slide),对与该顶点的相连face的法向量求平均(或者加权平均)再进行单位化。

Surface Shading in Tiger Book

(P.S. 其实这里的Vertex-Based Diffuse Shading还被称作Gouraud shading

Phong Shading

一些表面从本质上是粗糙表面,但是包含高光,并且随着视点移动,高光在整个表面上移动,这需要额外使用一个单位向量 e 来表示视点方向。当仔细观察高光,会发现高光的颜色通常是光的颜色而不是物体的颜色。

Phong Lighting Model

给定反射方向 r,启发式方法应当是在视点方向 e 与反射方向 r相同时,高光最强,并且随着e 与 r 的远离逐渐减弱直至消失。上述想法能够通过夹角余弦实现:Surface Shading in Tiger Book

对于上述等式,存在两个问题:与上面类似,e 与 r 的点积可能为负数,这有很多办法解决,更严重的问题是上述等式产生的高光会比真实世界中观察得到的结果更大。为了解决两个问题,将等式更新为:Surface Shading in Tiger Book ,p 为Phong exponent,这是一个正实数,其能控制高光的聚集程度。

在Phong Lighting Model中,需要计算反射方向 r,r 可以通过法向量 n 与光源方向向量 l 计算得到。Blinn-Phong Reflectance Model通过引入半角向量 h,简化了原先的Phong Lighting Model(计算半角向量仅需要将视点方向向量 e 与光源方向向量 l 相机,再单位化为单位方向)。当半角向量 h 与法向量 n的夹角余弦更小时,意味着视点方向 e 与反射方向 r 更接近。

Surface Shading in Tiger Book

综合上述的漫反射光、环境光以及高光,某一点的光照能够使用该公式描述:Surface Shading in Tiger Book 。由于金属物体的高光颜色更加接近物体本身的颜色,上述公式可以进一步改为:Surface Shading in Tiger Book ,其中 Surface Shading in Tiger Book

Surface Normal Vector Interpolation

此时是对表面法线向量进行差值,再使用每个法向量进行着色会得到更好的结果。具体的方法调整到chap 8 中描述。基于每个法向量的着色方法也被称为Phong Shading

Artistic Shading

上述的Lambertian与Phong shading model均基于人们对真实世界的观察得到的启发式方法。Artistic Shading被设计用来模拟人类艺术家的绘画。在很多应用中,该shading方式有着较大优势,例如汽车制造商聘请美术师为车主手册绘制图表,创建此类图像通常被称为非真实感渲染。

Line Drawing

在生活中人类画作中看到,在现实生活中看不到的最明显的东西是轮廓。当拥有一组具有共享边的三角形时,当两个共享边的三角形中的一个面对观察者,而另一个三角形背离观察者时,应该将边缘绘制成轮廓(这里写的是一些启发式方法对Line Drawing中画一些轮廓和折痕,目前不太明白这个轮廓和折痕究竟指什么,先跳过,期待有大神解释一下)。

Cool-to-warm Shading

当艺术家对Line Drawing进行着色时,通常使用低强度的shading使得表面有一些impression of curve,并为对象赋予颜色。面向一个方向的表面使用冷色进行着色,相反方向的表面使用暖色进行着色,通常这些颜色不是很饱和,也不是很暗。这样黑色的轮廓就会很好现实出来,具有卡通的感觉。通过对暖色光源的计算得到上述结果:Surface Shading in Tiger Book ,其中Surface Shading in Tiger Book, Surface Shading in Tiger Book, Surface Shading in Tiger Book

Surface Shading in Tiger Book

One More Thing

还是有人看到这里了,先谢谢,还有一个很重要的东西需要特别注意——Phong Lighting Model和Phong Shading的区别,这里的区别非常大。Phong Lighting Model其实解决的是,对于一个点,应该在着色时着什么颜色;而Phong Shading实际是说着色频率的事情,Flatting shading是使用每个面的法向量进行着色;Gouraud shading是先对每个顶点(三角形面片也就是图元的顶点)进行着色,然后对整个面进行插值;Phong shading是对面上进行法向量插值,得到每个位置的法向量再做着色,计算量会大,但是效果也相对较好(当然也取决于物体本身的顶点数量)。

Reference:

Lecture 8: Shading 2 (Shading, Pipeline and Texture Mapping), GAMES101

上述内容,如有侵犯版权,请联系作者,会自行删文。

推荐阅读

吐血整理|3D视觉系统化学习路线

那些精贵的3D视觉系统学习资源总结(附书籍、网址与****)

超全的3D视觉数据集汇总

大盘点|6D姿态估计算法汇总(上)

大盘点|6D姿态估计算法汇总(下)

机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划

汇总|3D点云目标检测算法

汇总|3D人脸重建算法

那些年,我们一起刷过的计算机视觉比赛

总结|深度学习实现缺陷检测

深度学习在3-D环境重建中的应用

汇总|医学图像分析领域论文

大盘点|OCR算法汇总

重磅!3DCVer-知识星球和学术交流群已成立

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导,700+的星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

Surface Shading in Tiger Book

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

欢迎加入我们公众号读者群一起和同行交流,目前有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

Surface Shading in Tiger Book

▲长按加群或投稿

相关文章: