Games104笔记---LE5--渲染系统2:光照、材质、Shadow

目录

前记:本节内容非常多,而且我贴了很多每个小点详细的学习链接大伙可以去看。

渲染方程:

辐射度量学知识:

Radiance:

Irradiance:

Radiant flux:

Radiant Intensity:

Solid Angle:

Lambertian surface:

Lambertian reflectance:

渲染的挑战:

Light:

简单的光照模型:

环境贴图反射:

经验模型:

Blinn-Phong:

预计算全局光照:

球谐函数:

Lightmap烘培:

Light Probe:

Refkection Probe:

Light Probe+Refkection Probe的优缺点

Material

PBR:

微平面理论:

BRDF模型:

Dinesy Principled BRDF:

PBR的模型:

PBR高光金属度模型:

PBR金属度粗糙度模型:

MR模型和SG模型的优缺点:

IBL:

基本思想:

Pre-Filtered Environment Map:

Pre-computing the BRDF:

Shadow:

ShadowMap:

问题:

CSM(Cascade Shadow Map):

问题:

软阴影:

PCSS:

VSSM:

总结:

新时代的进步:

硬件的进步:

实时全局光照:

毛发渲染/皮肤渲染:

VSM(Virtual Shadow Maps):

Shader相关:

学习资料:


笔记导航:

LE7--渲染系统4:渲染管线,后处理:https://blog.csdn.net/m0_56399931/article/details/124790469

LE6--渲染系统3:游戏中的地形/天空/云渲染:LE6--渲染系统3:yo地形/天空/云渲染_This is MX的博客-CSDN博客

LE5--渲染系统2:光照、材质、Shadow:Games104笔记---LE5--渲染系统2:光照、材质、Shadow_This is MX的博客-CSDN博客

LE4--渲染系统1:渲染基础:Games104笔记---LE4--渲染系统1:渲染基础_This is MX的博客-CSDN博客_渲染系统

LE3--基础架构2:数据组织与管理:Games104笔记---LE3--基础架构2:数据组织与管理_This is MX的博客-CSDN博客

LE2--基础架构1:引擎架构分层整体Pipeline:Games104笔记---LE2--基础架构1:引擎架构分层整体Pipeline_This is MX的博客-CSDN博客

LE1--现代游戏引擎导论:Games104笔记---LE1--现代游戏引擎导论_This is MX的博客-CSDN博客

前记:本节内容非常多,而且我贴了很多每个小点详细的学习链接大伙可以去看。

渲染方程:

详细的可以看这篇文章:实时高清渲染:全局光照(Global Illumination)[1]_This is MX的博客-CSDN博客_lambertian散射

Le表示的是从物体表面p点从视角方向v发射出去的Radiance,积分部分称为反射方程,其中L0(p,v)表示的是从物体表面位置p输出的Radiance,v为视角方向,Ω为p点法线所在的半球,l是光线方向,n是p点法线,f(l,v)为BRDF,Li(p,l)表示的是从光线方向输入到p点的Radiance,n·l就是法线和光线方向的点乘,并且如果是复数会规范到0

辐射度量学知识:

Radiance:

辐射率/辐亮度,指的是单位投影面积、单位立体角上的辐射亮度

Irradiance:

辐照度,指单位面积接收到的辐射通量

Radiant flux:

辐射通量,又称辐射功率,指单位时间内通过某一截面的辐射能量

Radiant Intensity:

辐射强度,表示的是在单位球面上,一个光源向每单位立体角所投送的辐射通量。

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第1张图片

Solid Angle:

立体角,可以为我们描述投射到单位球体上的一个截面的大小或者面积。投射到这个单位球体上的截面的面积就被称为立体角

Lambertian surface:

一种理想的漫射面,它所有方向的反射能量都相等,是指在一个固定的照明分布下从所有的视场方向上观测都具有相同亮度的表面,朗伯表面不吸收任何入射光.

Lambertian reflectance:

也叫理想散射或朗伯散射,不管照明分布如何,朗伯表面在所有的表面方向上接收并发散所有的入射照明,结果是每一个方向上都能看到相同数量的能量。

渲染的挑战:

1.光的可见性,阴影怎么做的好。

阴影的文章可以看这个:

实时高清渲染:Shadows_This is MX的博客-CSDN博客

https://blog.csdn.net/m0_56399931/article/details/123593345

2.半球的积分怎么做

3.每个点都可以是光源

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第2张图片

Light:

简单的光照模型:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第3张图片

环境贴图反射:

这个部分一般使用CubeMap进行使用,

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第4张图片

经验模型:

可以看一下这个文章

Shader入门-------基础光照_This is MX的博客-CSDN博客

Blinn-Phong:

布林冯模型主要有自发光,漫反射,高光反射,漫反射使用n·l,高光反射部分使用pow(n·h , k),其中h为半角向量 h= normalize(v+l),k为高光反射强度

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第5张图片

Blinn-Phone的问题:

布林冯模型的能量是不守恒的,封闭的黑体也能有光照(

预计算全局光照:

球谐函数:

球谐函数表示的是将函数在球面上的展开

他的二阶导永远是0

SH的作用是减少存储预计算的数据量 : 如果是常规的做法是从cubemap的每个像素从中心计算法向半球的积分当作irradiance,然后存储这些结果到另一张cubemap上。但是我们用sh的话就不用存储这些结果到cubemap上,只需要把它转化为sh的系数(求投影),然后用的时候把系数带进去就能获取到irradiance

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第6张图片
Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第7张图片

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第8张图片

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第9张图片

Lightmap烘培:

优点:

非常高效的运行时,烘烤了很多关于环境的Gl细节。

缺点:

长时间且昂贵的预计算;只能处理静态场景和静态灯光;封装和GPU的存储成本

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第10张图片

Light Probe:

会对光照探针周围的点均匀的放采样点

Refkection Probe:

会对光照探针周围的点均匀的放采样点,但是采样点会比Light Probe少,但是精度会高

probe怎么做呢,在探针位置,放一个相机,然后往世界六个方向生成cubemap

Light Probe+Refkection Probe的优缺点

优点:在运行时非常高效,可以应用于静态和动态对象 处理漫反射和镜面阴影

缺点:一堆SH光探测器需要一些预计算,不能处理gi的精细细节,例如重叠结构上的软阴影

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第11张图片

Material

PBR:

微平面理论:

这项理论认为,达到微观尺度之后任何平面都可以用被称为微平面(Microfacets)的细小镜面来进行描绘。根据平面粗糙程度的不同,这些细小镜面的取向排列可以相当不一致:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第12张图片

产生的效果就是:一个平面越是粗糙,这个平面上的微平面的排列就越混乱。他的法线分布也更加混乱。

这些微小镜面这样无序取向排列的影响就是,当我们特指镜面光/镜面反射时,入射光线更趋向于向完全不同的方向发散(Scatter)开来,进而产生出分布范围更广泛的镜面反射。而与之相反的是,对于一个光滑的平面,光线大体上会更趋向于向同一个方向反射,造成更小更锐利的反射:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第13张图片

BRDF模型:

一般使用Cook-TorranceBRDF模型

Cook-Torrance BRDF的镜面反射部分包含三个函数,此外分母部分还有一个标准化因子 。字母D,F与G分别代表着一种类型的函数,各个函数分别用来近似的计算出表面反射特性的一个特定部分。三个函数分别为法线分布函数(Normal Distribution Function),菲涅尔方程(Fresnel Rquation)和几何函数(Geometry Function):

  • 法线分布函数:估算在受到表面粗糙度的影响下,取向方向与中间向量一致的微平面的数量。这是用来估算微平面的主要函数。
  • 几何函数:描述了微平面自成阴影的属性。当一个平面相对比较粗糙的时候,平面表面上的微平面有可能挡住其他的微平面从而减少表面所反射的光线。
  • 菲涅尔方程:菲涅尔方程描述的是在不同的表面角下表面所反射的光线所占的比率。
Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第14张图片

法向分布函数(D):

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第15张图片

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第16张图片

几何函数(G):

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第17张图片

菲涅尔函数(F):

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第18张图片

Dinesy Principled BRDF:

应遵循的原则

•应该使用直观的而不是物理参数

•参数越少越好

•参数应该在合理范围内为0到1

•应该允许参数超出其合理范围

•所有参数的组合应该尽可能地稳健和合理

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第19张图片

PBR的模型:

PBR高光金属度模型:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第20张图片
Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第21张图片

PBR金属度粗糙度模型:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第22张图片
Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第23张图片

MR模型和SG模型的优缺点:

MR

优点:①更容易编写,并且能够有更少由于提供不正确的介电FO数据而导致的错误

②使用较少的内存,因为金属和粗糙度都是灰度图

缺点:①在Map创建中,没有对FO的控制。然而,大多数实现都有一个镜面控件来覆盖基准4%的值

②边缘走样更明显,特别是在较低的分辨率

SG

优点:①边缘伪影不那么明显

②在镜面贴图中有对FO的控制

缺点:①因为镜面贴图提供了对介电FO的控制,所以更容易使用不正确的值。如果在着色器中处理不当,可能会破坏守恒定律

②使用更多的纹理内存与额外的RGB贴图

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第24张图片

IBL:

这个去看这个很好:

漫反射辐照 - LearnOpenGL CN

基本思想:

是以cubemap做为环境光照,去计算渲染方程

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第25张图片

Pre-Filtered Environment Map:

这一个部分主要是求出irradiance,这个需要我们对不同粗糙度的情况都计算一遍,然后存放到mipmap中,对于中间粗糙度的情况可以进行插值。我们知道,给定一个物体表面,若其表面的粗糙程度越高,则反射的内容越模糊。当我们进行积分采样时,我们没有必要再在半球方向做一个均匀的采样,因为超出反射波瓣的采样是无效的。我们应该偏向反射波瓣采样,这就涉及重要性采样,这个就不在这细讲了。

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第26张图片

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第27张图片

Pre-computing the BRDF:

这里我们需要预计算BRDF,生成一个LUT(查找纹理),其中他的u为余弦值(n·l),v为粗糙度,基本做法就算生成一张和屏幕一样大的纹理,然后进行渲染就行,其中会把这张纹理的Texcoord.x作为余弦值,Texcoord.y作为粗糙度,传给BRDF作为参数进行计算。

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第28张图片

Shadow:

Shadow详细的看这个:

实时高清渲染:Shadows_This is MX的博客-CSDN博客

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第29张图片

ShadowMap:

操作方法,先用一个pass渲染深度,然后另一个pass将观察到的转移到灯光空间下,当前这个点的z值与深度图中的图进行比较,如果深度图的值为遮挡物,遮挡物的值比着色点的深度接近相机则为阴影

问题:

精度不一样,会产生自遮挡,和悬浮的问题

Shadow Acne(阴影自重叠):

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第30张图片

通常通过添加偏移来解决这个问题

Peter Panning (阴影悬浮/漏光):

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第31张图片

可以通过以下两种方法进行解决:

第一种是只渲染物体的背面(即剔除物体的正面可以解决这个问题),但是有个问题,当物体的正面和背面几乎处于同一个位置的时候(例如纸张),这个方法就会出现问题。所以只渲染背面和添加偏移的使用最好视具体情况而定,例如,Sousa等人发现,将正面用于日光阴影,将背面用于室内灯光,可以达到最佳的应用效果。

第二种是渲染两次Shadow map,一次是正面的一次是背面的,然后深度取他们的平均值,但是这个的缺陷也很明显就算两个Shadow map的额外开销

详细的去看这个

实时高清渲染:Shadows_This is MX的博客-CSDN博客

CSM(Cascade Shadow Map):

详细的看这个

https://blog.csdn.net/m0_56399931/article/details/123593345

基本的思想是对视锥体进行分层,远处的精度降低,近处提高。

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第32张图片

问题:

级联层之间,因为分辨率不匹配。在级联重叠的地方可以看到可见的接缝。

我们需要在着色中器根据像素在混合带中的位置在这两个值之间线性插值。

软阴影:

PCSS:

PCSS主要涉及的是计算PCF的fliter大小,这个公式为

示意图

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第33张图片

PCSS的计算主要分为三步:

  1. 计算着色点与平均遮挡物的距离 dr
  2. 利用平均遮挡物距离dr计算PCF用到的采样范围 Wsample
  3. 使用上一步得到的采样范围计算PCF

VSSM:

VSSM可以当作是PCSS的进阶,VSSM针对性解决PCSS的第一步和第三步速度慢的问题,通过切比雪夫不等式可以快速推出可见度:

其中pmax是光照下样本的最大百分比,σ^2是方差,t是receiver深度,M1是阴影图中的平均预期深度。深度平方阴影图的样本M2,称为第二阶矩,用于计算方差:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第34张图片

总结:

渲染的光照/材质/阴影

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第35张图片

新时代的进步:

硬件的进步:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第36张图片

实时全局光照:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第37张图片

毛发渲染/皮肤渲染:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第38张图片

VSM(Virtual Shadow Maps):

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第39张图片

Shader相关:

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第40张图片

Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第41张图片
Games104笔记---LE5--渲染系统2:光照、材质、Shadow_第42张图片

学习资料:

1.Games104

2.实时高清渲染:全局光照(Global Illumination)[1]_This is MX的博客-CSDN博客_lambertian散射

3.Shader入门-------基础光照_This is MX的博客-CSDN博客

4.实时高清渲染:Shadows_This is MX的博客-CSDN博客

5.https://blog.csdn.net/m0_56399931/article/details/123593345

6.漫反射辐照 - LearnOpenGL CN

7.实时渲染Real-time Rendering:Image Based Lighting | YangWC's Blog

你可能感兴趣的:(游戏引擎架构学习,游戏引擎,图形渲染,unity,ue5,Games104)