OpenGL3.3_C++_Windows(33PBR理论基础)

PBR渲染管线

  • Physically Based Rendering渲染管线 :使用一种更符合物理学规律的算法模型来模拟光线,由于它与物理性质非常接近,可以直接以物理参数为依据来编写表面材质
  • 判断是否基于物理的渲染,有三个数学模型:微平面,能量守恒,BRDF

微平面理论:

  • 在微观尺度下,没有任何平面是完全光滑的。可以看作由不同的微小平面组成,
  • 由于这些微平面已经微小到无法逐像素地继续对其进行区分,因此我们假设一个粗糙度(Roughness)参数a,
  • 半程向量:(入射光线 + 视线 ) /  |(入射光线 + 视线 )|   正规化,计算半程与顶点法线的点乘
  • 当微平面与半程越一致,光线大体上会更趋向于向同一个方向反射,造成更小更锐利的反射
  • 粗糙度a:0--1越大,镜面光范围越大,反之越锐利

能量守恒:

  • 出射光线的能量永远不能超过入射光线的能量。
  • 所以当反射范围越大,亮度越小,反之越亮
  • 为了遵守能量守恒定律,我们需要对光模型,分离成一个折射KD(漫反射)部分和一个反射KS(镜面)部分:能量总和 = KD + KS
  • 漫反射颜色::折射光是不会立即就被吸收的,是通过碰撞的方式来消耗能量。和分子碰撞直至能量完全耗尽或者再次离开这个表面
  • 反射光与折射光它们二者之间是互斥的关系:所反射的能量将无法再被材质吸收。
  • 简化模型中:假设对平面上的每一点所有的折射光都会被完全吸收而不会散开
  • 次表面散射(Subsurface Scattering):描述了光线在穿透透明或半透明物体表面后,在物体内部发生散射,然后从物体表面的其他位置出射的现象。模拟诸如皮肤,大理石或者蜡质这样材质
  • 金属(Metallic):金属表面会吸收所有折射光线而没有漫反射,
  • SSAO:环境光遮蔽(Ambient Occlusion)贴图:为表面和周围潜在的几何图形指定了一个额外的阴影因子

辐射

  • 辐射度量学:图表概括数据的形式
  • 辐射通量Φ:光源所输出的总能量,以瓦特为单位。能量可以被视作这个光源包含的所有各种波长(颜色)的一个函数的总面积,但是,我们通常使用简化的表示RGB
  • 立体角ω:投射到单位球体上的一个截面的大小或者面积,
  • 辐射强度I一个单位面积(立体角)内的能量大小:辐射通量Φ / 单位立体角ω
  • //
  • 辐射率(Radiance)Li:一个区域平面上光线总量,辐射通量Φ的光源在单位面积A,单位立体角ω上的辐射出的总能量:公式:Φ / A(对于一个平面的影响) Wcosx(光线&平面法线)
  • 可以把AW看作无穷小,为一个方向向量wi 的光线,对片段p的影响
  • 辐射照度或者辐照度:辐射率的和,所有投射到点p上的光线的总和,是一个以点p为圆心的半球Ω,也可以说为平面法线n为轴的半球Ω

反射率方程(PBR遵守的方程)

  • PBR渲染方程:就是计算顶点反射到人眼的颜色(也可说亮度)
  • 反射率方程 = 积分 Ω(半球)(BRDFfr(p,ωi,ωo)  * 辐射率Li(p,ωi)  * 转为反射率n⋅ ωi * 对每个离散步长进行缩放dwi) 
  • =号左边总结大意,也可以说:Lo表示了从ωo方向上观察,光线投射到点p上反射出来的辐照度。
  • 为了计算所有方向(积分):离散:黎曼和(Riemann sum) :在半球Ω按照一定步长,离散将公式分散求解,再求和并平均化,这样可以计算结果的近似值
  • fr(p, ωi, ωo) BRDF:点,入射光,观察方向:
  • Li(p, ωi) 点,入射光:从环境光源离散采样,求对点p的辐照度
  • n⋅ωi :法线n与入射光方向ω的点积,负责每个wi方向的权重
  • dωi :微小的立体角

BRDF

  • (Bidirectional Reflective Distribution Function双向反射分布函数) :
  • 基于表面材质属性来对入射辐射率进行缩放或者加权,每束光线对一个给定了材质属性的平面上最终反射出来的光线所作出的贡献程度。
  • 根据:入射光wi,观察方向ωo,半程向量h,平面法线n,粗糙度a,基础反射率FO等作为参数,影响算法结果
  • //
  • 几乎所有实时渲染管线使用的都是Cook-Torrance BRDF模型:
  • Lambertian漫反射模型(相对其他漫反射模型,开销不算昂贵):flambert)漫反射:c(漫反射纹理:表面颜色)/ π(标准化)* kd(被折射部分的比率)
  • 折射部分将使用UE4的3个函数:f(cook−torrance)(  法线分布函数D菲涅尔方程F几何函数G)  /  4(ωo⋅n)(ωi⋅n)   )  ks(被反射部分的比率)
  • 法线分布函数 | DNF
    • GGX函数:遵守微平面理论,和能量守恒,受到法线n,半程h,粗糙度a影响
      • 粗造度越高,朝向一致性越高
    • 函数结果:根据a的值近似计算了法线n与半程h,朝向一致的比率,0---1
    • 效果:影响镜面的范围,即亮度
  • 菲涅尔方程
    • 被反射的光线对比光线被折射的部分所占的比率
    • Fresnel-Schlick函数:受到半程h,视线,F0基础反射率
      • F0基础反射率:通过折射指数计算,当垂直法线观察,只有最基本的反射率,当接近90度观察,反光就会明显
      • 金属度(Metalness):金属度用来描述一个材质表面是金属还是非金属的
    • 对于金属,没有折射指数,使用它们的折射指数计算基础折射率并不能得出正确的结果
    • 所以另一种思路时预计算F0 的值,在用Fresnel Schlick对这个值插值(计算基础反射率),从而就能对金属和非金属材质使用同一个公式了。
    • 反照率(Albedo):对于大多数电解质使用0.4的F0(线性),对于金属导体使用表面纹理颜色F0(RGB)
  • 几何函数
    • 描述了微平面自成阴影的属性。当一个平面相对比较粗糙的时候,平面表面上的微平面有可能挡住其他的微平面从而减少表面所反射的光线。
    • 用Schlick-GGX函数:遵守微平面理论,接受法线n,视线v,粗糙度a的重映射k
      • 当平面越粗糙时,遮蔽比率会高
      • 当视线与法线越相近,遮蔽比率越低
    • 重映射k:
      • 直接光照:(a+1)^2
      • LBL辐照:a^2 / 2
    • 函数结果:返回微平面相互遮蔽的概率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值