中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 34414|回复: 28

【PBR】基于物理渲染的基础理论1.0版

[复制链接]
发表于 2014-11-17 00:03:35 | 显示全部楼层 |阅读模式
本帖最后由 trace 于 2014-11-17 00:30 编辑

本篇作为理论的概括介绍,并不涉及公式的部分,如果有问题或错误请留言讨论,谢谢指正,我也会不断补完这篇

基于物理渲染的优点
  • 很容易就可以作出真实和照片级的效果。
  • 同一配置可以适用于在不同HDR光照环境下。
  • 接口简单而直观,都是基于世界真实的参数。(如粗糙度,金属度,等等)。
  • 不需要美术去提供经验性的"奇怪"参数和配置。
  • 更容易去解决问题和扩展需求。

基于物理的渲染和和传统区别
  • 有着基于物理规则的光照模式
  • 有着无处不在的fresnel效果
  • 能量守恒“energy conservation”,物体平面的反射光无法超过它所解接受的入射光
  • 基于物体材质,会分辨金属和介电质,微平面的概念
  • 线性空间的光照,支持gamma矫正的,HDR渲染和tonemap

光与物质的交互(light and matter)
光是是一种横向传播的电磁波,电磁波的波长范围非常广,但只有390~760nm之间的一段波谱是人眼可见到的,也就是在图形学里对渲染着色起作用的部分。另外因为光有波粒二象性的缘故,有时候我们在图形学里也会把光做为光子(photon)来处理。

当光投射到传感器(眼睛,照相机等)上时,颜色和亮度就会被吸收并感知,而光与物质交互后被感知的,就是物体的颜色。

物质对光的影响,可以用折射率(refractive index)来描述,当由复数来表示折射率时,它的实部影响速度(相对于真空中的速度),虚部来影响光的衰减(被吸收),折射率会改变光的波长。

我们先根据物质按照内部折射率是否均匀来进行分类:

均匀介质(Homogeneous Media)
内部密度相同的物质,意味着他有唯一的折射率,对应透明的均匀物质来讲(如水,玻璃),光通过时,并不会改版光的颜色或强度,而当物质对某一种可见光谱有吸收率的时候,那么,光就会随着在物质内的传播距离而逐渐被吸收,而光的方向并不发生改变,这就是光被吸收(absorption)。

光穿透玻璃和水时,方向,颜色和强度都不会发生

方向没有变化,光但随着距离会丧失强度(改版颜色),也就是光被吸收了。

非均匀物质(heterogeneous medium)
当非均匀物质内部的折射率非常突然的时候,这时就会发生散射(Scattering)现象,光会被分割为多个方向,但光的总量并不会发生变化。

除了以上两种交互外,  物质还可能因为其他能量发出新的光,称为自发光”emission“。


光与物质交互的三种方式,吸收,散射,发光。
 楼主| 发表于 2014-11-17 00:04:44 | 显示全部楼层
本帖最后由 trace 于 2014-12-9 22:05 编辑

光与平面的交互(light and object surface)
上一个段落讲点,光在密度不同的物质内传递的现象,而渲染中最为典型的,是发生在物体表面时,关于光与空气和物质之间的散射效果。
这个时候平面散射光会分为两部分:进入平面的部分(折射,在物体内部传播中被吸收或散射),从平面出去的部分(反射)。

一个假设完美无限光学平坦的平面(简称光学平面)反射效果,平面两侧的空气和物体有各自的折射率

但实际上,平面大多都不是光学平面(除了镜子或镜头等),而是一种微几何体(Microgeometry),表面都会有一些比可见光波长要大的不规则凹凸,但又小到无法覆盖一个像素或者采样点,所以,我们就把这种非光学平面,理解为一组微小光学平面的集合,而可见光的反射,实际上是在平面各个点上轻微不同方向的反射集合,也就是后面会提到的微平面理论(Microsurface Theory)。

roughness
上面的平面相对平滑时,表面方向的变化也比较轻微,从而反射光的方向变化也较小,有了较清晰的反射。而下面的表面粗糙,表面方向的变化范围也较广泛,反射光的方向变化也比较大,出现了模糊的反射。

两个平面在微观上的粗糙度(roughness)不同导致不同的反射效果

漫反射光与镜面光(diffuse and specular)
这里,我们光和平面交互分为两个项目来描述,从平面直接反射的部分称为镜面反射光(Specular),来源于拉丁语的“Mirror”,另外一部分光,传入到物体内部,而经过折射,被材质吸收(转变为热能),或者内部进行散射,一些散射光最终会重新返回从平面折射出来,并被摄像机或眼睛所捕捉到,称为漫反射光(Diffuse)。漫反射光被物质吸收并散射后,会成为不同波长的光,这也就给予了物体颜色,比如物体吸收了蓝色以外的光,那物体就是蓝色的,而因为散射的混乱比较均匀,从每个方向看起来都是一样,所以这点和镜面光不一样。也可以使用这个名字albedo来描述。


非光学平面反射(Surface Reflectance)和折射散射(Subsurface Reflectance)的宏观视图,形成了Diffuse和Specular。

金属和非金属材质
物体内部的折射光的作用,取决于物体内部的组成,内部组成的不同,可以分为,金属(metal)导体,电介质(Dielectrics)绝缘体和半导体(Semiconductors ),因为半导体在渲染中出现的机会不多,在处理物体时简单的分组为金属和非金属就可以了。金属会吸收所有的折射光,而且通常会比绝缘体的反射率要高,通常的反射率要达到60%~90%,而绝缘体则是0%~20%,反射率高,就防止了入射光被吸或折射,这样,金属就有了”闪亮“的外观。

金属的折射光能量都立刻被自由电子吸收

而非金属(绝缘体),光会在内部进行吸收和散射活动,最后,一些折射光会通过散射,重新从入射平面反方向射出

非金属的折射光会进行散射

导体的反射会跨越光谱,所以反射是有颜色的,虽然颜色反射在导体里比较罕见的,但在一些日常的材质里(金,铜,黄铜)还是可以看到这种效果,而绝缘体的反射通常是他们的本来颜色,因为金属会吸收所有的穿透光,也就没有任何漫反射(diffuse)部分,但金属氧化的部分和一些表面残留物还是会散射少量的光。也是因为这些原因,可以使用“metalness”(金属度)这种参数,虽然不是纯粹的pbr,但更受美术的喜欢。

不同材质的漫反射颜色,金属为0.

 楼主| 发表于 2014-11-17 00:06:05 | 显示全部楼层
本帖最后由 trace 于 2014-11-17 00:24 编辑

次级表面散射(Subsurface Scattering)
从前面的图中,可以看到折射后的散射光从平面不同的点发射出来,和原始的入射点的距离也各不相同,可以统称为次级表面散射光,根据散射出的距离和入射点像素的大小的关系,可以分为两种情况:

如左图所示,当像素的尺寸大于入射到出射点的距离时,这个距离就可以被忽略,可以认为这个平面散射出的光和入射光是在相同点上,也就是右图的样子,也就是我们常说的漫反射。


当像素小于出射到入射距离时,每个点的着色就会收到其他光入射到其他点的影响,也就是常说的“次级表面散射”技术,很重要的一点是,它和普通的漫反射着色是一种物理现象(都是折射光的次级表面散射),唯一不同的就是散射的距离与观察点大小的关系,一个通常被认为是“次级表面散射”的表现,当在较远的距离观察时,就可以被认为是漫反射着色(例如远距离角色的皮肤),而“正规的漫反射着色”在很近距离观察时,也会有次级表面散射的效果。

无处不在的Fresnel反射
Fresnel表现的是材质的反射率和入射角(也就是光源入射向量和平面法线向量的夹角)的对应关系,也就是说,入射光的角度越大,反射率也会越强,Fresnel反射项通常成为F( )

以水面为例,正常入射事只有3%的反射,而水平时则几乎到100%。

PBR的一个改变,就是对fresnel方程的修正上。这个会在下一篇有公式的章节做进一步解释
对于所以的材质来说,当以掠射角观察时,光滑物体接近“边缘”的地方,会形成完美的镜面,也就是说特定的角度上,“任何表面光滑的物质都可以成为完美镜面”。
除了金属外,大部分的材质的反射和角度对应曲线或梯度的变化都不是很大

非金属的反射系数,在边缘处亮度更高


当入射角度为0时,非金属材质(2%~8%),水和液体是2%,砖块8%,其他有机材质和塑料是5%,半导体和晶体是15%~50% 金属60%~90%

如果要达到真实的fresnel,那么美术对fresnel的控制应该越少越好,需要提供一些参数值来使用,通常是光泽度(Gloss,或粗糙度 Roughness)和反射率。提供一个基础反射率,来设置平面最小的反射值,让fresnel曲线从这个最小反射值开始,以满足不同角度的需求。


 楼主| 发表于 2014-11-17 00:07:18 | 显示全部楼层
本帖最后由 trace 于 2014-11-17 00:30 编辑

Surface Reflectance

前文已经提到了微几何体,之所以有微平面的概念,因为从宏观来看,在我们渲染模型网格时,使用法线贴图就可以描述表面小的细节,但这样仍然会有一定的缺失,很多真实世界的平面上,还是有一些微小的凹陷,裂缝或突起,而用肉眼是很难看清楚的,小到连正常大小的法线贴图也无法来表现,虽然肉眼无法看到,但这些微观特征,还是对Diffuse和Specular产生了影响。

微平面的细节,对反射的影响更多,也就是Specular,因为粗糙的微平面会把反射光分散或者内部遮挡,所以有了下面两个项目来描述这个现象

Normal Distribution Function
  因为微几何体的所以平面的方向,并不是均匀分布的,如果是分布比较均匀的光滑平面,那么光就会在几乎相同的方向反射,产生清晰的高光,如果粗糙表面则是模糊的高光. 有多少微平面点的法线更倾向宏观平面的法线方向,我们把这种平面法线方向分布的统计,称之为microgeometry normal distribution function D(),和fresenl方程不同的是,D()并没有一个类似0~1的范围,而是来帮助确定微平面法线在某一个给定方向上的集中度。

  所以,D()决定了高光的镜面反射高光的大小,亮度和形状,一些D()会提供前面提到的类似"Roughness(粗糙度)"的参数(也可以是glossiness),当粗糙度降低时,微几何体平面的法线方向就会更集中在宏观的平面法线方向上,D()的值也会变高。除了指定粗糙度参数外,也可以通过传递一张Glossn map的方式提供更高的细节。

不同Roughness的表现

左侧Specular Map ,右侧 gloss map

Geometry Function  
因为微几何体的构造缘故,一些入射光的平面点被内部遮挡,成为了内部阴影而无法接受光照(也就不能反射光)。

shadowing现象

而有一些反射光被内部遮挡,他们的反射光无法被观察到,虽然有反射光可以多次反弹后再被视点观察到,但在微平面理论里可以忽略不计了。

masking现象

这因为有这种现象,所以需要有一个Geometry Function G(),来代表反射光的可见度,所以G()是在0~1之间的一个范围值,在着色模型里,有时会和其他参数合并称为V()(Visiblity)。和D()一样,因为微平面有凹凸感,当它的粗糙度提高时,shadow和masking的现象也会增加,粗糙度高的平面会光滑平面更阴暗一些,G()也要收到roughness参数的影响。另外G()也是下面要讲的能量守恒的一个基础,它使得反射光不会高于平面的入射光。

Energy Conservation 能量守恒
镜面反射光(Specular)与漫反射光(Diffuse)是相互排斥的,因为离开表面的光总量不能他接受的入射光强,你的漫反射与镜面反射综合不能超过1
C_d + C_s \leq 1
这意味着,如果你的希望材质有较高的镜面反射效果(高反射率),就需要要去降低漫反射,能量守恒是PBR的一个重要的方法,可以让艺术家在设置反射率和反照率时(高光颜色和漫反射颜色)不会违法物理定律

同一个材质,从100%的漫反射到100%的镜面反射转化过程

能量守恒对高光部分的处理,也称为“Energy Preserving Specular”,通常是在渲染方程里添加Normalization Factor来实现的能力守恒

是否使用Normalization Factor的对比,左下面使用Factor的亮度更淡了一些,因为左上非能力守恒的模型反射了更多的光,而下面能力守恒的模型,高光变得更加明亮和集中。

当把微平面理论引入到着色系统后,那么反射多少光,就要受到平面粗糙度的影响,渲染粗糙度较大的表面时,会获得较大范围和模糊的反射光,而光滑表面的则更清晰。虽然材质都反射相同总量的光,但粗糙平面的会把把反射分散到不同的方向,而光滑平面则反射的更为集中。比如你高光半径提高了10倍,那么暗度将提高100倍。

Gloss的变化的反射效果,Normal Distribution Function(D())也必须是能量守恒所的。

实际应用上漫反射较多而且粗糙的材质,会反射模糊和更广阔的高光,比较光滑而反射率高的材质则反射更明亮和紧凑的高光

理论概述就先到这里,本文也是从很多资料中整理而来,不能算是原创吧,资料太多,可能收集和描述的不够全面,随着后面章节的添加,这个部分应该还会做进一步的修改。
 楼主| 发表于 2014-11-17 00:09:36 | 显示全部楼层
备用的一楼
发表于 2014-11-17 15:55:00 | 显示全部楼层
干得漂亮
发表于 2014-11-17 19:12:38 | 显示全部楼层
good job!!!!!
发表于 2014-11-18 14:36:36 | 显示全部楼层
顶上天
发表于 2014-11-21 22:01:17 | 显示全部楼层
我想请问一下。
BRDF那块在不断探索更加精确的模型,是不是也是为了更容易达到好效果呢?
 楼主| 发表于 2014-11-21 23:42:14 | 显示全部楼层
图形学noob 发表于 2014-11-21 22:01
我想请问一下。
BRDF那块在不断探索更加精确的模型,是不是也是为了更容易达到好效果呢? ...

实时渲染的话,就是精确和效率近似之间找一个合适的点。这部分我是想把3A的这几年的PBR PPT翻译好再总结
发表于 2014-11-21 23:56:42 | 显示全部楼层
trace 发表于 2014-11-21 23:42
实时渲染的话,就是精确和效率近似之间找一个合适的点。这部分我是想把3A的这几年的PBR PPT翻译好再总结 ...

我想请问的是,BRDF的精确有什么具体作用意义吗?
发表于 2014-11-22 22:54:02 | 显示全部楼层
真是浅显易懂,没有公式就是好啊·
顶上去
发表于 2014-11-29 22:53:55 | 显示全部楼层
建议楼主加一下参考来源
发表于 2014-12-9 20:42:18 | 显示全部楼层
感谢楼主的总结。Nice work抱歉,有个笔误? “ 被 ” 换成   “比” ??

金属和非金属材质
金属会吸收所有的折射光,而且通常会   被   绝缘体的反射率要高,通常的反射率要达到60%~90%.......
 楼主| 发表于 2014-12-9 22:08:41 | 显示全部楼层
bxf_square 发表于 2014-12-9 20:42
感谢楼主的总结。Nice work抱歉,有个笔误? “ 被 ” 换成   “比” ??

金属和非金属材质

以修改,多谢提醒
发表于 2015-1-17 18:40:35 | 显示全部楼层
顶楼主。
疑似笔误“能量守恒”?
能量守恒对高光部分的处理,也称为“Energy Preserving Specular”,通常是在渲染方程里添加Normalization Factor来实现的能力守恒
发表于 2015-1-17 18:43:01 | 显示全部楼层
还有这个,疑似笔误:“所以平面”
因为微几何体的所以平面的方向,并不是均匀分布的,的所以平面的方向,并不是均匀分布的,
发表于 2015-3-16 08:45:54 | 显示全部楼层
楼主,你好。问一下你是做哪个方向的啊?
发表于 2015-3-30 18:28:23 | 显示全部楼层
太赞了,现在Unity5已经开始用PBR了,学习了,不过楼主话说你有些错别字啊!下一篇在哪里!!
发表于 2015-5-24 00:53:47 | 显示全部楼层
吹酱真厉害,能有耐心来做讲解。不知道国内的TA有几个能愿意去领悟?!
发表于 2015-8-5 16:10:23 | 显示全部楼层
谢谢楼主分享!

这里发现一个小问题:
“导体的反射会跨越光谱,所以反射是有颜色的”

我正好看过这一段的英文原文,楼主翻译掉了vary这个词,也就是说原意应该为“导体的反射在不同的光谱频段有所差异,表现出来的结果就是反射是有颜色的”

最近也在研究PBR,希望能和楼主多多讨论:)
发表于 2015-12-1 09:50:08 | 显示全部楼层
经常登录OpenGPU,竟然才刚发现有这个好帖子,感谢楼主的奉献。
发表于 2015-12-2 20:55:07 | 显示全部楼层
这篇文章非常经典。我记着之前好像已经有中文版翻译,吹酱是自己又精翻了一遍吗?
发表于 2015-12-4 14:19:30 | 显示全部楼层
本帖最后由 DavidLee80 于 2015-12-4 14:21 编辑

:):):):)
发表于 2015-12-6 23:48:48 | 显示全部楼层
文章写的真好。。
发表于 2016-12-6 14:24:47 | 显示全部楼层
trace 发表于 2014-11-17 00:07
Surface Reflectance

前文已经提到了微几何体,之所以有微平面的概念,因为从宏观来看,在我们渲染模型网 ...

导体的反射会跨越光谱 是什么意思呢? 能详解下不,多谢
发表于 2017-3-10 12:35:42 | 显示全部楼层
给楼主点个赞
发表于 2017-10-23 09:24:52 | 显示全部楼层
学习了呀,Trace大神
发表于 2018-3-19 21:30:41 | 显示全部楼层
很棒的帖子
頂!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2019-1-18 08:27 , Processed in 0.088157 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表