当前位置: 首页 > news >正文

【GAMES101笔记速查——Lecture 17 Materials and Appearances】

目录

1 材质和外观

1.1 自然界中,外观是光线和材质共同作用的结果

1.2 图形学中,什么是材质?

1.2.1 渲染方程严格正确,其中BRDF项决定了物体的材质

1.2.2 漫反射材质

(1)如何定义漫反射系数?

1.2.3 Glossy材质

1.2.4 发生反射和折射的材质-水/玻璃

(1)反射

(2)折射

折射snell定律

senll window/circle现象

(3)菲涅尔项

绝缘体的菲涅尔项

金属的菲涅尔项(导体)

1.3 微表面材质Microfacet Material

1.3.1 微表面理论

1.3.2 微表面法线的分布情况

1.3.3 微表面模型的强大效果举例

1.4 区分材质的方式:各向同性材质/各向异性材质

1.4.1 生活中很多的各向异性的材质:

1.4.2 BRDF的性质

1.4.3 如何测量BRDF

1.4.4 如何存储BRDF


1 材质和外观

1.1 自然界中,外观是光线材质共同作用的结果

自然界材质的表现形式,一些例子

海浪的通透,深度影响颜色

光投到洞穴中会形成一个光柱

头发透过的颜色

布料为什么看上去就是布,而不是金属?

蝴蝶翅膀鳞片往往没有颜色,堆在一起怎么就有颜色了?

为什么我们能看到彩虹?

寿司的鱼肉质感,次表面散射现象。

自然界中的材质成千上万,最强的渲染器也只支持40种材质。其中精美的效果其中大部分工作归功于美工,用纹理和贴图表现质感。

1.2 图形学中,什么是材质?

陶瓷表面会上釉,这层釉会以镜面反射方式反射一些能量,当光进入内部,又会发生漫反射,所以最终的陶瓷材料是兼具镜面反射和漫反射的。

1.2.1 渲染方程严格正确,其中BRDF项决定了物体的材质

BRDF   决定了   物体反射光的方式   决定了   材质

BRDF = 材质

1.2.2 漫反射材质

(1)如何定义漫反射系数?

假定:空间内任何一个方向进来的光的radiance都一样,也就是uniform的,那反射出来的光也都是uniform的。

由能量守恒:如果一个点不发光,又不吸收光(物体为白色),那么进来的irradiance和出去的irradiance大小相同,那么入射光的radiance和出射光的radience也是一样的,即 Li = Lo。

(irradiance:单位面积上的能量 ,radiance:在单位立体角且在单位投影面积上的能量)

漫反射的BRDF是个常数。

在上述假设成立的情况下,Lo = Li ,推出漫反射系数 fr = 1/pai 

人们定义p(rou)为反射率albedo,它在0-1之间,可以是单通道/多通道。再让他除以pai就可以了。fr取值范围就变成了0~1/pai

这样就定义了一个正确的漫反射的BRDF。

1.2.3 Glossy材质

类似于镜面反射,但比镜面反射更粗糙一些。

不同的金属材质又有不同的性质,铜会更发红一些(左),铝会更发白一些(右)

1.2.4 发生反射和折射的材质-水/玻璃

左图中的玻璃壳既可以看到周围环境色(反射),又可以看到内部的灰色(折射)。

右图的紫色从哪里来的?

答:折射光在玻璃内部传播时有一部分被吸收。

(1)反射

反射公式有2种不同理解方式

1.用几何关系可以推出入射光出射光、法线之间的关系。

2.左边图从上往下看,变成右边图,这样的话,入射光和出射光在方位角\phi上的朝向正好相反,也就是相差\Pi

入射光的\theta \phi两个角度知道了,出射光方向就可以由入射光确定了。

完美的镜面反射结果

镜面反射用BRDF写出来不是很容易,分布函数的书写涉及到德尔塔函数,不过多解释。

(2)折射

铅笔在水中“折断”

激光通过玻璃后折射过程中发生了平移

三棱镜折射出彩虹

海底美丽的光波纹 - 焦散现象caustic - 光线打到海水凹凸不平的表面,被折射到不同的方向,某些地方接受到的光线多,就形成了更亮的条纹(实际上是聚焦的结果)。

折射snell定律

定义入射角和折射角和法线的夹角\theta _{i}\theta _{t}

入射光、折射光的折射率夹角的正弦乘积相等

入射光、折射光的方位角\phi朝向相反。

这样一来,知道入射角\theta _{i}、折射率,就可以计算出来折射角\theta _{t}

钻石的折射率非常高2.42

计算折射角的余弦值

如果余弦值没有意义(根号里的数小于0)\frac{\eta _{i}}{\eta _{t}} > 1,即入射介质折射率 > 折射介质折射率,

此时就不能发生折射,是一个全反射现象

senll window/circle现象

人在水底只能看到一个锥形区域。大约为97.2度?

BRDF中的R指的是反射

那折射的分布函数好像应该叫BTDF?

其实有个统一的叫法:BSDF,这里的S指的是散射,反射和折射都是一种散射。

但一般也不在严格意义上区分。

(3)菲涅尔项

离桌面越近,夹角越小,能看到的反射光更多(桌面就越亮)。

菲涅尔项解释了有多少能量被反射,有多少能量被折射。

绝缘体的菲涅尔项

绝缘体的菲涅尔项可视化图,体现了如下信息

如果入射光方向与物体表面几乎平行,那么几乎所有的光都会被反射。

如果是垂直的话,更多能量会直接传过去而不反射。

光线的极化性质:很少考虑

金属的菲涅尔项(导体)

即使是垂直看过去,光被反射的也挺多的。

这也就是为什么古时候镜子大都用金属(比如银、铜)制成。

菲涅尔项到底怎么算?

准确的公式已经有了。还有个简化公式:Schlick近似。

为什么要介绍菲涅尔项?因为要引入一个真正基于物理的材质:微表面模型

1.3 微表面材质Microfacet Material

微表面模型啥意思?

一片发生在澳大利亚的高光,挺完美的(),大家觉得地球表面不是光滑的,但高光如此光滑,说明实际上我们从远处看不到物体的细节,看到的是总体的效应。

1.3.1 微表面理论

从远处看,看到的是外观:东西是平的、粗糙的。

从近处看,看到的是几何:可以看到组成物体的微元,每个微元镜面反射。

1.3.2 微表面法线的分布情况

glossy材质微表面的法线几本朝一个方向

diffuse材质微表面的法线朝向非常混乱

然后将这种法线分布抽象成一个分布函数,进行一些计算。。。

其中:the normal Distribution function, the Fresnel equation and the Geometry function

这个f函数就是微表面的BRDF

1.3.3 微表面模型的强大效果举例

微表面模型是现在的state-of-art模型

微表面模型是一个统称,有很多种

1.4 区分材质的方式:各向同性材质/各向异性材质

电梯间的内部,电梯是被磨过的金属,这样会形成奇怪的高光。

这就引出了

各向同性材质:微表面方向性很弱

各向异性材质:微表面的方向性很强

各向异性材质反应在BRDF上:在方位角上旋转后,如果BRDF不同了,那就是各向异性材质。

1.4.1 生活中很多的各向异性的材质:

锅的辐射状高光

尼龙面料

天鹅绒面料

1.4.2 BRDF的性质

BRDF的值非负:不会有负能量

BRDF线性性质:BRDF可以拆成很多块,可以把每个块单独计算,然后结果相加。

BRDF可逆性:交换入射方向和出射方向的角色,得到的BRDF值一样

BRDF的存在不可能让能量变多,能量守恒。

各向同性的BRDF可以从四维变三维

所有的BRDF相对的方位角不用考虑正负

模型都是对实际情况的近似,测量出的BRDF才是真实的BRDF

1.4.3 如何测量BRDF

对于某个观测点,改变光源位置和拍照位置,穷尽所有的组合对。

实际的测量工具展示图片

关于BRDF的测量也是现在研究改进的热点

1.4.4 如何存储BRDF

MERL BRDF库

这个项目测量了很多不同的各向同性材质,每个材质做90*90*180次测量,然后进行压缩,讲结果存储到三维数组中。

http://www.lryc.cn/news/463985.html

相关文章:

  • 对于从vscode ssh到virtualBox的timeout记录
  • 鸿蒙原生应用扬帆起航
  • 《计算机视觉》—— 表情识别
  • NVIDIA Aerial Omniverse
  • QT程序报错解决方案:Cannot queue arguments of type ‘QTextCharFormat‘ 或 ‘QTextCursor‘
  • MySQL知识点_03
  • leetcode:744. 寻找比目标字母大的最小字母(python3解法)
  • 2015年-2016年 软件工程程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析
  • 整理一下实际开发和工作中Git工具的使用 (持续更新中)
  • Axios 的基本使用与 Fetch 的比较、在 Vue 项目中使用 Axios 的最佳实践
  • Dockerfile样例
  • MYSQL-多表查询
  • MySQL改密码后不生效问题
  • 15分钟学Go 第1天:Go语言简介与特点
  • UDP/TCP协议
  • gitee建立/取消关联仓库
  • 在 Windows 环境下,Git 默认会自动处理 CRLF 和 LF 之间的转换。
  • Kibana可视化Dashboard如何基于字段是否包含某关键词进行过滤
  • 架构师之路-学渣到学霸历程-23
  • 怎么修改编辑PDF的内容,有这4个工具就行了。
  • 腾讯云宝塔面板前后端项目发版
  • C语言的结构体定义 java赋值关系运算符
  • 重学SpringBoot3-Spring WebFlux简介
  • distinct 和 group by
  • RTThread-Nano学习一-基于MDK移植
  • Vue中v-bind对样式控制的增强—(详解v-bind操作class以及操作style属性,附有案例+代码)
  • 【分布式微服务云原生】《ZooKeeper 深度探秘:分布式协调的强大利器》
  • 打造高性能在线电子表格:WebGL 渲染引擎 Kola2d 自研之路
  • 深入理解WPF中的命令机制
  • 基础算法(6)——模拟