阴影介绍 the introduction of shadow

来源:互联网 发布:淘宝宠物狗怎么快递 编辑:程序博客网 时间:2024/05/18 02:02

1.1阴影的定性定义

当谈到什么是阴影时,人们会给出各式各样的答案,对大多数人来说,你会发现阴影现象的的反例是未被抓获的。甚至字典也很难定义出一个合适的简洁陈述。如果通过数学的方式在计算机图形学中来定义一个影子,需要在空间中假想一个点p。如果来自光源L的光线可以到达点p,而且在途中不碰到任何场景中的对象(阴影投射物),那么点p就是被照亮的。反之,点p就是在阴影中。

换句话说,如果点p是处于阴影之中的,那么来自光源L的光线至少也有部分被阻挡住了,才会产生了阴影。光源可以完全被遮挡的地方叫做本影(umbra),除了本影之外,剩余的阴影(非完全被遮挡的空间部分)被叫做半影(penumbra)。具体各个区域的表现形式,请看图1。

图1 空间中三种不同定义的区域

1.2 阴影的定量定义

之前对于阴影的定义可让我们知道如何去找到阴影,但它并不能让我们了解到某点成为影子之后,在表现上产生的影响。为了阐明这一点,我们将把自己置入一个简单的情境中。首先,接下来提出的定义将足够满足对阴影的学习,稍后也会给出一些扩展性的内容。基于对渲染方程的修改,我们可以得到软阴影方程,它可以较好的描述物理交互作用(在这里,我们只考虑来自光源的直接光照)。

Lo(p , ω) = ∫L fr(p , ω, p q) G(p , q) Le(q , q p)V(p,q)dq (1.1)


where Lo(p , ω) is theoutgoing radiance in direction ω from point p, f is the BRDF (bidirectional reflectancefunction) encoding the material surface properties, G is a geometric termtaking the configuration of source and receiver into account, Le(q ,q → p) is the emitted energy from the sourcepoint q towards p, and finally V(p , q) encodes the visibility and is zero ifthere is a blocker between the two points q and p, and otherwise one. (怕下面翻译的不好,所以公式的英文定义单独附上)

Lo(p , ω)是点p沿ω方向的射出光亮度,f是双向反射函数(BRDF,bidirectional reflectance function)材料表面属性编码。G是几何术语考虑到光源和接收器的配置。Le(q,q p)是从点q到p射出的能量。最后,V(p,q)是可见性的编码形式,如果是0说明q与p之间有遮挡物,如果没有的话值就为1。

如果我们假设所有的表面都是完美漫反射,BRDF将与方向无关。因此,射出光亮度L0也与射出的方向无关。这个公式就会被简化成为:


在很多情况下,可通过分离的形式得到另一种简化:


Shading和shadow是互不影响的。大多现有的阴影算法旨在上边公式中的影子部分,甚至假设同质光源的发射Le(实际上是上划线),导致可见度积分调节阴影和代表方程中的实际阴影部分。

(1.2)

很多实时性的应用,在实现逼真阴影时会旨在解决这个方程。


1.3 阴影类型与计算

在许多情况下,方程(1.2)通过光源逐点采样来解决。这会有一个有趣的结果,当光源为点光源时,整个积分编程一个单一可见查询,阴影是二进制性的(空间中的点为阴影或非阴影)。这也反映出一个结果,就是缺乏半影区。阴影也都是硬阴影,因为从亮的部分到暗的部分的变化是直接的,没有中间过渡。对于面光源,这个过渡就是平滑的,因此,被称为软阴影。图1.2显示了一个结果,当我们通过模拟更多光源时,会得到越来越接近真实的软阴影。

虽然公式(1.2)显得并不是那么复杂,但是有一点需要注意,这意味着需要将场景中每个点到光源的光线都测试一遍。这个结果将不再仅仅由点决定,场景中的所有三角形也都将被包括进来。这使得很难实现高效解决方案。

在接下来的章节介绍中,我们会看到不同等级的解决方案。到时候我们会知道,最好的算法,都是依据场景参数的大小、光源类型、预计的精确度、场景的表现形式、视点综合考虑得出的。根据特定的需求做出最好的选择的可能性是巨大的,一个好的、全面的、高质量的分析,需要结合全面的概述。我们的目标也是在接下来的过程中提供此信息。

0 0