介绍
对真实感的追求正在推动渲染技术向详细模拟光线如何工作和与物体交互的方向发展。基于物理的渲染是一个捕捉所有技术,试图通过物理模拟光实现的现实主义。
目前,模拟光线的最佳模型是由一个称为渲染方程的方程所捕获的。渲染方程试图描述一个“单位”的光是如何获得的所有入射光,与一个特定的点,一个给定的场景。稍后我们将看到细节并介绍正确的术语。值得注意的是,我们不会尝试去解决完整的渲染方程,相反,我们将使用以下的简化版本:
image.png
为了理解这个等式,我们首先需要理解光是如何工作的,然后,我们需要在一些共同的条件上达成一致。为了让你大致了解这个公式的意思,简单来说,我们可以说这个公式描述了一个像素的颜色,给出了所有进入的“有色光”和一个告诉我们如何混合它们的函数。
一些物理量含义
如果我们想要正确地理解渲染方程,我们需要捕捉一些物理量的意义;
其中最重要的量称为辐射率(用公式中的L表示)。
辐射是一件很难理解的事情,因为它是其他物理量的组合,因此,在正式定义它之前,我们将引入一些其他的物理量。
辐射通量: Φ
辐射通量是光源发出的总能量的量度,以瓦特表示。我们将表示与希腊字母Φ通量。
任何光源都会发出能量,而发出的能量是波长的函数。
image.png
在图1中,我们可以看到昼光的光谱分布;辐射通量是函数的面积(确切地说,面积是光通量,因为图中限制了人类可见光谱的波长)。为了达到我们的目的,我们将使用RGB颜色来简化辐射通量,即使这意味着丢失很多信息。
立体角: ω
它是一种测量一个物体在观察者从一个点上看有多大的方法。为了做到这一点,我们把物体的轮廓投射到一个以我们所观察的点为中心的单位球面上。我们得到的形状的面积是立体角。
在图2中您可以看到立体角ω的投影单位球上的浅蓝色多边形。
image.png
辐射强度: I
为每单位立体角的辐射通量。
如果你有一个向各个方向发射的光源,有多少光(通量)是朝着一个特定的方向?
辐射强度 是这个问题的答案,它是在一个方向上通过一个确定的立体角的辐射通量的量。
辐射率:
image.pngimage.png
这个方程表示的是,一个拥有辐射强度Φ的光源在单位面积A,单位立体角ω上的辐射出的总能量:
Φ 是辐射通量
A 是受光影响的面积,
ω 是立体角
θ 光线与平面法线间的夹角
cosθ 就直接对应于光线的方向向量和平面法向量的点积
辐射率方程很有用,因为它把大部分我们感兴趣的物理量都包含了进去。如果我们把立体角ω和面积A看作是无穷小的,那么我们就能用辐射率来表示单束光线穿过空间中的一个点的通量。这就使我们可以计算得出作用于单个(片段)点上的单束光线的辐射率,我们实际上把立体角ω转变为方向向量ω然后把面A转换为点p。这样我们就能直接在我们的着色器中使用辐射率来计算单束光线对每个片段的作用了。
事实上,当涉及到辐射率时,我们通常关心的是所有投射到点p上的光线的总和,而这个和就称为辐射照度或者辐照度。
反射率方程(The Reflectance Equation)
我们现在可以回到渲染方程,并尝试完全理解它。
image.png
我们知道在渲染方程中L代表通过某个无限小的立体角ωi在某个点上的辐射率,而立体角可以视作是入射方向向量ωi。
点积n⋅ωi有考虑到光线的入射角的角度。如果光线垂直于表面,它将更局限于被照亮的区域,而如果角度较浅,它将扩散到更大的区域,最终扩散得太多,实际上是看不见的。
用ωo表示观察方向,也就是出射方向,反射率公式计算了点p在ωo方向上被反射出来的辐射率Lo(p,ωo)的总和。或者换句话说:Lo表示了从ωo方向上观察,光线投射到点p上反射出来的辐照度。
基于反射率公式是围绕所有入射辐射率的总和,也就是辐照度来计算的,所以我们需要计算的就不只是是单一的一个方向上的入射光,而是一个以点p为球心的半球领域Ω内所有方向上的入射光。一个半球领域(Hemisphere)可以描述为以平面法线n为轴所环绕的半个球体:
来源:
http://www.codinglabs.net/article_physically_based_rendering.aspx
https://learnopengl-cn.github.io/07%20PBR/01%20Theory/
网友评论