17.材质和外观

1.图形学中的材质

在图形学中,材质(Material)是用来描述物体外观和表面特性的属性集合。它包含了控制光的反射、折射、吸收以及其他光学效果的信息,从而决定了物体在渲染过程中的外观。

渲染方程中那一项和材质有关? → BRDF,BRDF决定了光如何被反射

Material == BRDF

2.漫反射材质:光线打到一个点上均匀的朝各个方向去

漫反射材质可以定义任何一个点的漫反射系数,各个点对光的吸收部分和强度不同,因此显示不同的颜色

重新定义漫反射系数

首先根据漫反射定律,入射光都会均匀的被反射到各个方向上去

现在假设各个方向入射的radiance都是均匀且相同的,假设这个单位面积不吸收任何光照,根据能量守恒定律,接收的irradiance和出射的irradiance都应该是一样的,进而各个方向出射的radiance也应该和各个方向入射的radiance是相同的

那么就可以写出下面的反射方程,没有自发光,假设入射的radiance和Brdf都是常数,剩下的就是在半球上对余弦函数进行积分,这部分结果等于Π,因为入射的radiance等于出射的radiance,也就是说要等于,所以Brdf的结果就是.这个时候就是完全不吸收能量的BRDF。

可以定义反射率这个概念。英文名是albedo,可以是单通道的一个数或者三个通道(RGB)的数也可以是光谱。它的值在0-1之间。这样就引入了不同颜色的BRDF,brdf的值在0-之间

3.Gloosy material(BRDF)

类似于镜面反射但是又没那么光滑的反射,不同的材质反射出来的颜色也不相同

4.Ideal reflective / refractive

material (BSDF*)

既有反射又有折射

计算反射光线

计算折射光线

斯内尔定律/折射定律

只有从光疏介质到光密介质才会发生折射,否则会发生全反射现象

下图从水底向外看,只能看到一个锥形区域,范围大概是97.2°,超过这个范围的就会发生全反射

折射用BTDF表示,反射是BRDF,一般用散射也就是BSDF统称这两种

5.Fresnel Reflection / Term(菲涅尔项)

入射光线与物体的法线的夹角决定了反射和折射的能量的分布,通过菲涅尔项就可以解释到底有多少能量发生了反射和折射

例子1:图中的书,平看会反射,垂直看几乎不反射

例子2:坐公交车时,往窗外看可以看得到,看前排的人的窗户,看到的却是反射出的人脸。

入射光与物体的法线的角度与反射能量的关系(绝缘体)

s和p是两个不同方向的极化,与光的波动性有关,极化是指光只沿着某一个方向震动

导体的菲涅尔项

即使垂直看去反射率也很高,例如镜子一般用银质或者铜制的镜子,很少用玻璃的镜子

菲涅尔项计算公式

左边计算的是两个极化,会告诉两个不同的反射率,我们平常考虑不极化的光就将这两个反射率平均起来

因为上面的计算太复杂了,所以后面有人给出了简化的近似计算公式

在零度的时候反射率和二者的介质有关系,当90°的时候反射率等于1,这样不管是对导体还是绝缘体都可以近似的非常好,只要不是对材质的要求非常高。

6.微表面材质

1.微表面模型

只要我们离得足够远,很多微小的东西实际是看不到的,看到的是他们总体对表面的作用。

2.微表面理论

  • 假设物体表面粗糙
  • 远处看(宏观尺度):平面且粗糙的
  • 近处看(微观尺度):可以看到凹凸不平的表面且每一个表面的微元都是完全镜面反射
  • 每个微表面都有法线,也就是自己的朝向
  • 从远处看是材质/外观,近处看是几何

3.Microfacet BRDF

  • 关键:微表面的法线分布
  • Glossy:法线分布集中在宏观法线周围 ; 粗糙/Diffuse:法线分布分散
  • 图2:D=法线分布 F=菲涅尔项 G=几何项(左边面可能会挡住右边的面 →自遮挡/投影现象)

菲涅尔项表示一共有多少能量被反射,shadow masking项用来修正自遮挡自投影的现象,也就是

grazing angel(掠射角度),光方向与物体表面几乎平行的时候这种现象最明显,法线分布函数决定了光线到底是怎么反射的,集中还是发散,进而可以决定材质类型

7.区分材质的方式

1.材质分为两类:各项异性和各向同性

各向同性:微表面不存在一定的方向性(或很小) → 法线分布均匀

各项异性:法线分布有明确的方向性

2.各向异性的BRDF

如果BRDF不满足在相同的方位角旋转得到的还是原来的BRDF,那就是各向异性材质

  • 和方位角(绝对立体角)有关
  • eg :拉丝金属、尼龙、天鹅绒

8.BRDF的性质

1. 非负(能量的分布)
2.线性
3.可逆性
4.能量守恒
5.各项同性/各向异性

如果是各向同性:4维的可以→ 3维

由于可逆性:

//BRDF的测量有用

9.测量BRDF

1.why 测量

理论并不准确 → 要测出来

能测出来就不用算了

2.做法

枚举所有camera和光源的入射出射方向

3.测量出之后呢?

存下来

压缩

4.一个有名的BRDF库

MERL BRDF Database

相关推荐
杨丰玮41812 小时前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(五)
java·python·游戏·游戏引擎·图形渲染·动画·贴图
郝学胜-神的一滴3 天前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl
烧酒同学3 天前
【C++】记录size of std::vector的巧妙坑
开发语言·c++·图形渲染
玖釉-4 天前
nvpro_core2 源码与架构解析:NVIDIA Vulkan 图形开发基础框架
c++·windows·图形渲染
SNAKEpc121388 天前
OpenGL(十六)- 着色器统一值
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
SNAKEpc121389 天前
OpenGL(十三)- Mip贴图
c语言·c++·图形渲染·贴图
SNAKEpc121389 天前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
郝学胜-神的一滴13 天前
中级OpenGL教程 030:gl_FragCoord解锁区域渲染与深度可视化新姿势
c++·unity·游戏引擎·图形渲染·unreal engine·opengl
SNAKEpc1213814 天前
OpenGL(十一)- 变换管线
c语言·c++·算法·矩阵·图形渲染
anxiao_m17 天前
数字孪生3D可视化有哪些?主流实时渲染平台深度测评
图形渲染·3dcoat