绘制
三要素:光,材料,着色器
反射方程:fr是材质比例 Li为入射光
渲染方程
问题:对光的能见度和光源的复杂度, 如何在硬件上有效地进行积分,任何的物体都可以成为光源。
最简单的渲染
光
1.简化光源
2.用一个平均值来替换环境光
3.使用硬件的模拟
材质
Blinn-Phong 模型
Blinn-Phong光照模型,又称为Blinn-phong反射模型(Blinn–Phong reflection model)或者 phong 修正模型(modified Phong reflection model),是由 Jim Blinn于 1977 年在文章中对传统 phong 光照模型基础上进行修改提出的。它是一个经验模型,并不完全符合真实世界中的光照现象,但由于实现起来简单方便,并且计算速度和得到的效果都还不错,因此在早期被广泛的使用。
它将进入摄像机的光线分为三个部分,每个部分使用一种方法来计算它的贡献度,这三个部分分别是环境光(Ambient)、漫反射(Diffuse)和高光反射(Specular)。
问题:能量不守恒,材质塑料化
shadow
shadow map
由于光栅化的渲染管线相比基于光线追踪的实现方式缺少全局性信息,
每个 fragment 并不清楚全局的光照情况,无法直接判断自己是否处于阴影中,
因此需要额外预渲染阶段。
-
第一次渲染中 以光源位置作为视点,
基于 Z-buffering 算法,将每个像素点的深度值(z-depth)也就是距离光源最近的对象距离记录在 Z-buffer 中,输出到 FBO(Framebuffer Object) 关联的 texture 中,生成 Shadow Map。 -
第二次场景渲染时,以正常摄像机作为视点,
将每个 fragment 到光源的距离和 Shadow Map 中保存的深度值进行比较,如果大于后者则说明被其他物体遮挡处于阴影之中。
以前的3a渲染
光照
Lightmap + Lightprobe
全局光照
局光照(Global Illumination,简称 GI), 作为图形学中比较酷的概念之一,是指既考虑场景中来自光源的直接光照,又考虑经过场景中其他物体反射后的间接光照的一种渲染技术。
即可以理解为:全局光照 = 直接光照(Direct Light) + 间接光照(Indirect Light)
全局光照的问题是,计算量过于庞大
解决方法:
傅里叶变换
可以高效的压缩数据,还可以在卷积时,通过投影的参数来计算出卷积的结果。
Spherical Harmonics 球面谐波
光照贴图
光照贴图过程将预先计算场景中静态物体表面的亮度,并将结果存储在称为“光照贴图”的纹理中供以后使用。光照贴图可以包含直接光照和间接光照,以及阴影效果。但是,烘焙到光照贴图中的数据无法在运行时更改,这就是为什么移动静态物体后,阴影不会跟随移动。
光照贴图:优点是效率高,环境的表现能力好。缺点是时间长,只能处理静态物体,空间换时间会导致封装和GPU上的存储成本增大。
Light Probe
Unity的预计算实时GI或者烘焙照明只对静态的物体起作用,对于可移动的物体,需要用一种新的技术来解决光照问题。
为了让动态物体(如交互式场景元素或角色)能够获得静态物体反弹的光线,需要将这些光照信息记录下来,并且在运行时能快速读取和使用。
通过在场景中放置采样点捕捉各个方向的光线来实现动态物体接收间接光的功能。这些采样点记录的光照信息被编码成可以在游戏过程中快速计算值。在Unity中,我们将这些采样点称为“光照探头”
工业化的方法放置Light Probe
Reflection Probe
密度低精度高,与Light Probe相反不需要放置太多。
Reflection Probe+Light Probe基本上可以解决绝大部分光照问题。
材质
PBR+IBL
微平面理论
微平面理论(Microfacets Theory)顾名思义,就是从微观的角度去分析,其认为任意物体的表面在到达微观的尺度之后,都是由许许多多的更小的镜面所组成的:当这些微小的镜面的法线方向较为集中一致的时候,从宏观角度来看,物体的镜面反射会比较明显,反之,当这些微小镜面的法线方向较为杂乱,分布均匀的时候,物体表面则会相对粗糙。
双向反射分布函数(BRDF:Bidirectional Reflectance Distribution Function),描述的是物体表面对光的反射性质。
diffuse就是一个cos函数在球面上的分布
BRDF的推导
https://blog.csdn.net/qq_38065509/article/details/107042250
DFG的代表
绿色线是GGX模型(相当于音响 好的音响在高音更脆,低音更沉)
迪斯尼原则性BRDF
实施模式时应遵循的原则:
-Intuitive rather than physical parameters should be used-应使用直观参数而不是物理参数。
·There should be as few parameters as possible 应尽可能少使用参数
-Parameters should be zero to one over their plausible range -参数应在其合理范围内为零比一
-Parameters should be allowed to be pushed beyond their plausiblerange where it makes sense -应该允许参数超出合理的范围
-All combinations of parameters should be as robust and plausibleas possible -所有参数组合都应尽可能稳健和合理
PBR即Physically-based rendering,基于物理的渲染。
2种重要PBR形式
1.PBR Specular Glossiness ,SG 模型
几乎没有什么参数,用图表达
Diffuse+Specular(菲涅尔参数)+Glossiness(粗糙光滑)
缺点:SG 模型对图的参数要求比较高,容易出错,可以再封装一层
2.RBR Metallic Roughness, MR 模型
BaseColor+Roughness+Metallic
缺点:非金属和金属过度会产生小小白边
如果metallic(金属度)过低 ,那么颜色就无法某个反射里面去。
mage-Based Lighting,IBL
核心思想:对真实环境光照做预处理,快速把环境光照卷积运算出来
LUT:Look up table
阴影
Cascade shadow + vSSM
Cascade Shadow 叶栅阴影
我们都知道,在实时渲染中,存在这样的一个渲染优化手段,也就是“LOD”,level of details,也就是细节等级的意思,总体来说也就是根据我们观察相机距离被观察物体的距离来决定优化被观察物体的渲染细节,比如说一个物体距离观察相机很远的时候,渲染Shader可以只采用最基本的DiffuseMap,并进行简单的光照计算,毕竟人眼睛会一定程序忽略远处物体的细节。而当该物体距离相机很近时,渲染Shader可以采用DiffuseMap,NormalMap,ParallaxMap等,并计算复杂的光照计算,以显示更多的细节。
CascadeShadowMap其实就是来源于LOD的思想,总体的原理: 将我们观察相机的视截体根据与相机空间的原点的远近距离来划分为多个部分(也就是所谓的层级Cascade),并将这几个部分的物体渲染到相应的ShadowMap。
现在技术 实时光追(Real-Time Ray-Tracing )