当前位置:首页 期刊杂志

基于全景图像的阴影算法研究与实现

时间:2024-05-04

王振

(四川大学计算机学院,成都 610065)

0 引言

增强现实技术是一种在屏幕上把虚拟世界与现实世界融合在一起的技术,在电子游戏,电影动画,教育娱乐等领域都有广泛的应用前景。因此研究者投入了大量的研究,目前增强现实技术中的光照渲染模块的常见解决方案是基于图像渲染技术(IBL)[1],此外研究光照渲染则无法避开阴影模拟,因此阴影生成算法也是研究者主要研究方向之一。

我们常见的生成阴影的算法有Shadow Map[2]和Shadow Volume[3]。Shadow Map的原理是假设你从光源处向外看,所看到的物体都会出现在光线下,物体背后这些无法看到的区域即为阴影区域。Shadow Volume的基本原理是根据光源和三维模型的位置关系计算出三维模型的阴影体,然后对所有三维模型进行模板测试和深度测试,以确定三维模型会不会受阴影影响[4]。Shadow Map和Shadow Volume都可以得到逼真的阴影效果,但是Shadow Map处理动态光源时开销过大,因此常用于静态场景中的阴影计算。而因为需要计算模型的轮廓作为初步步骤,Shadow Volume计算量较大。同时,这两种算法需要一个必不可少的条件,即必须知晓光源的位置以及光源强度。但是在基于图像渲染技术的应用场景中,无法直接获得光源相关信息,因此如果需要渲染模型阴影的话,则必须首先通过其他手段获取光源信息,然后使用Shadow Map或Shadow Volume技术生成模型阴影。例如,Yufei Zhang[5]等人通过选择几个特征点来计算光源的方向与强度;Sato[6]等人在已知辅助物几何模型的情况下,采用自适应采样框架用于估计光源方向。Lalonde[7]等人利用单幅图像中天空、地面、垂直表面单个光照线索估计太阳光位置的概率分布图,从而得到光源的位置。计算出光源位置以及光源强度之后,使用Shadow Map或者Shadow Volume技术渲染模型阴影。

本文由于考虑到运用基于图像渲染技术生成阴影时的缺陷——无法直接获取光源位置以及光源强度,除非事先估计出场景的光源位置与光源强度,因此本文提出了一种应用于增强现实场景的阴影生成算法,该阴影生成算法无须分析出光源位置以及光源强度,仅仅使用HDR全景图模拟三维物体周围环境光照以及分析三维模型顶点可见性,最后再使用屏幕空间环境光遮蔽技术丰富阴影细节,从而实现逼真的阴影模拟效果。下面章节将详细介绍该阴影生成算法。

1 算法相关概述

1.1 HDR全景图

高动态范围图像(High-Dynamic Range,HDR)[8],相比普通图像,可以提供更大的亮度范围以及更丰富的图像细节,并且可以反映出真实环境中的光照效果,这是因为HDR使用新型编码方式,可以表达的亮度范围为0~216。相对而言,普通图像则针对人类视觉系统进行编码,亮度范围仅为0~255。但是真实世界的亮度范围为0~108,普通图像由于编码原因显然无法表达广阔的亮度范围。因此,模拟三维模型周围的环境光照,选用HDR图像更为合适。

此外,HDR图像相比普通图像具有更好丰富环境细节,亮度层次更加明显。如图1所示,图像中已经被红色线圈圈住的两块白色区域太阳以及白色石块,同属于颜色相近的白色,在普通图片上根据像素亮度值并不能分辨,如图2所示,但是由于HDR图像具有更大的亮度范围,像素相近的白色太阳与白色石块在亮度维度上差别很大。因此这就消除了使用HDR全景图模拟真实环境时,颜色与光源相近的物体对模拟实验的影响。

图1 HDR图像

图2 不同类型图片的亮度表示范围

由于HDR图像拥有更接近自然光亮度范围的特性,以及可以表达更丰富的环境细节,因此,本文选用HDR全景图模拟真实场景中的光照。具体用法将在2.1小节中说明。

1.2 顶点可见性

Imari Sato[9]等人说明了物体阴影产生的原因是由于光线被其他物体所遮挡。真实世界的光线包括自光源例如太阳、电灯的光线,以及来自其他物体的反射的光线,而阴影的形成与三维模型顶点对于不同种类光线的可见性程度有直接关系,因此研究三维模型顶点的可见性对于阴影的研究是至关重要的。

图3 三维模型顶点可见性分析示意图

假设三维模型处于半球体内,接收来自太阳的直接光线和来自周围环境的反射光线,如图3所示。半球表示三维模型周围的真实环境,红点表示三维模型的某个顶点,红色射线表示来自光源的直接光线,红色圆圈表示光源区域,蓝色线条表示来自环境的环境光线。在图3(a)中,顶点p对于部分环境光线是不可见的,而对于直接光线是可见的,根据阴影遮挡原理可得出p点处于非阴影区域的结论。而在图3(b)中,直接光线被遮挡,顶点p无法接收到来自光源的光线,因此可以判断p点是处于阴影区域内的。

2 算法研究

在传统IBL阴影实现方案中,首先通过设置阈值或者使用Banterle等人[10]研究的Median cut算法确定HDR图像中的光源位置,该光源位置即HDR全景图中高亮区域方位,然后使用传统的Shadow Mapping技术来渲染模型阴影。本文考虑到HDR图像的特点,即可用HDR全景图模拟周围环境光照,提出了一种适用于IBL渲染方案的阴影实现算法。

本文提出的阴影生成算法的设计思路简述如下,首先将HDR全景图每个像素视为光源,HDR全景图像素的不同亮度值可视为每个像素光源的光强度。其次,研究三维模型周围地板上顶点对于HDR全景图上密布像素光源的可见性,并且计算未遮挡光线对顶点的光照影响。最后,使用屏幕空间环境光遮蔽技术计算三维模型褶皱处的阴影,提升模型阴影细节效果。

2.1 HDR全景图渲染

本算法选用HDR全景图模拟真实场景中的光照,首先,将HDR全景图映射到一个球体上面,其次,将三维模型放入球体中间,如图4所示。最后,将HDR全景图中每个像素看作光线发射器,可以称之为像素光源,如图5所示。此时,像素光源既包括真实世界光源,又包括真实世界的环境光。通过这种方式,我们可以有效地捕捉真实环境中的光照信息,进而模拟真实环境的光照。

图4 全景图与模型关系

图5 像素光源

本算法将HDR每个像素看作一个像素光源。我们首先确定像素光源的位置,由于HDR全景图是映射在一个球体上面,因此我们可以使用球体极坐标系来表示光源的位置,如公式(1)所示。

此外还需要计算每个像素光源的光源强度,根据人眼对于RGB三个分量不同的感知权重,提出了将像素值 p(r,g,b)转化亮度的公式(2)。

其中,L(p)表示像素 p 的亮度,p.r、p.g、p.b 分别表示像素p对应的RGB值。Factor.r、Factor.g、Factor.b分别表示人眼对于RGB颜色的感知权重。

然后当我们使用HDR全景图渲染三维模型顶点时,我们需要识别出该点的所有入射光线。入射光线范围是以该顶点为球心,以该顶点所在面片的法向量为方向向量的半球面,如图6所示。

图6 模型顶点半球光照模拟

其中ω0为模型顶点所在面片的法向量,ωi为所有的入射光线。为了将HDR全景图像素光源对三维模型以及其周围地板顶点的光照影响数据化,本文采用黎曼积分来计算半球面像素光源对三维模型顶点的光照影响,公式见(3)。

该公式表示在三维模型物体,或者在三维模型周围地板上顶点p处,出射光线方向的半球领域内采样入射光线的方向向量,并计算其积分值。其中,L0'(p,ω0)表示点p在出射光线方向ω0上的出射辐射率,Li'(p,ωi)(n*ωi)表示点p在入射光线方向ωi上的入射辐射率,即发出入射光线的像素光源的亮度,(n*ωi)表示在p点的法向量与入射光线方向向量夹角的余弦值。

本文使用HDR全景图模拟真实世界的环境光照,同时我们使用黎曼积分计算三维模型顶点所有入射光线——以法线向量为方向的半球面区域,用于衡量真实环境对三维模型的光照影响。而阴影的产生与三维模型顶点是否处于阴影区域与该顶点接收多少入射光线,以及接收何种类型的入射光线有直接关系。

2.2 阴影生成

正如1.2小节所述,在真实世界中,存在两种光线,一种是光源发射的光线,另一种是其他物体的反射光,映射到HDR全景图中,则分别对应HDR全景图中高亮区域像素光源发射的光线与非高亮区域像素光源发射的光线。本文阴影生成的基本思路是判断三维模型的顶点是否在阴影处,以及该顶点的阴影的深浅程度,这与该顶点接收多少入射光线,以及接收何种类型的入射光线有直接关系。

首先研究三维模型投射到地面的阴影。为了计算三维模型投射到地面的阴影,需要在三维模型下面放置一个板子。为了方便展示,我们将半球模型降维到二维半圆模型,如图7(a)所示。

图 7(a)(c)中,半圆红色弧线表示 HDR 全景图的高亮区域,反映到真实环境中则表示太阳等光源,蓝色弧线表示HDR全景图的非高亮区域,反映到真实环境中表示天空以及周围环境颜色,方块表示一个三维模型,在该三维模型放置到下面一个板子上。由图7(a)可看出,OA段接收的来自光源的光线被三维模型遮挡,因此判断属于阴影区域。相对而言,AB段接收到部分来自光源的光线,并且在从A趋向B的过程中,接收来自光源的光线越来越多,因此阴影的强度也再越来越小,从而形成软阴影。这是一个线性的变化,因此软阴影的强度也是一个线性变化的效果,进而可以呈现一个逼真的软阴影视觉效果。图7(b)渲染的效果图可以展现这些特性,得到一个逼真的阴影效果。此外,本文的光照模型还可以处理多光源的情况,如图7(c)(d)所示。相比单个光源模型,由于图7(c)中AB段可以接收到来自Light Source 1的光线,但是来自Light Source 2的光线被遮挡,无法被接收,因此AB段的阴影强度要小。然而图7(c)中的BC段,由于来自两个光源的光线都被遮挡,因此BC段的阴影强度强。实验效果如图 7(d)所示。

其次研究三维模型的自阴影。三维模型自阴影即三维模型背光部分阴影。如图8(a)所示,HDR全景图的高亮区域对三维模型直接照射,三维模型向阳区域同时受到了直接光线和间接光线的影响,而三维模型的背光区域仅仅受到了间接光线的影响,因此,背光区域相对偏暗,呈现自阴影的阴影效果。如图8(b)所示箱子的背光区域相对于向光区域亮度要小很多。

图8 自阴影光照模型和效果图

图7 光源模拟与效果图

综上所述,本文模拟了三维模型投影到地面上的阴影,以及三维模型本身的自阴影。该阴影算法的核心是通过研究三维模型顶点的对于光线的可见性来判断三维模型的顶点是否在阴影处,以及该顶点的阴影的深浅程度。在本算法中,如果该顶点的入射光线被遮挡,则该条光线无需参加光照积分计算。

2.3 碰撞检测

光线与物体空间的碰撞检测算法一般是计算光线与三维模型是否相交。碰撞检测算法中常见的划分物体空间的方法为空间剖分法。空间剖分法是将三维模型按照某种空间剖分技术划分成若干小的单元,使三维模型的一个或者多个面片属于同一个单元。我们综合考虑划分层次,以及遍历层次树的开销等因素,本算法采用八叉树空间剖分算法。

八叉树空间划分是将立方体分割成八个小立方体,然后递归地分割小立方体。在本算法中,对场景的AABB包围盒按照模型的三维维度进行递归划分,将三维模型分割为八份,然后再对每个分割后的小包围盒进行分割,直到每个小包围盒中的三角面片个数达到一定的阈值。我们使用线性存储的方式将八叉树结构以及三角面片数据存放到TBO中,并传递到GPU与光线进行相交测试。

光线与三维模型的相交测试即判断光线与三维模型的面片是否相交,最简单的方法是,将三维模型的所有三角面片数据传递到GPU,然后让光线与三角面片一一求交,但是这种方法效率底下。为了简化相交测试计算量,本文采用八叉树组织数据。由于八叉树节点是保存分割后的AABB包围盒的数据,因此,本文首先使用Slam算法计算光线与AABB包围盒是否相交,并递归计算到叶子节点AABB包围盒,最后再与叶子节点AABB包围盒中的三角面片进行相交测试。

2.4 阴影优化

阴影渲染是个复杂的工作,渲染出一个逼真的阴影效果需要考虑很多细节因素,例如软阴影,例如三维模型本身褶皱处的自阴影,这些细节严重影响阴影的效果。软阴影在2.2小节中已经做了相关论述,本算法生成的阴影本身就具有逼真的软阴影效果。因此在优化模块,本算法仅仅对三维模型褶皱处的自阴影进行优化。

在提升三维模型褶皱处阴影效果方面,本文采用屏幕空间环境光遮蔽技术。屏幕空间环境光遮蔽技术的原理简述如下,对于铺屏四边形上的每个片段,根据周围深度值计算一个遮蔽因子。该遮蔽因子会被用来减少或者抵消片段的环境光照分量,从而改善物体表面渲染效果。公式(4)给出了在当前像素i处,遮蔽因子的表达式。

其中Pi表示临近区域内采样像素集,n表示当前像素i在观察空间中的法向量。函数d(ωi,j,n)用于判断临近区域内采样像素点j对当前像素点的遮挡情况。遮挡情况由公式(5)表达。

其中(ωij∙n)>0表示法向量在切平面正方向半球领域内采样,而不等式Dep thj≥Dep th Viewj表示比较采样像素点j屏幕空间下的深度值与观察空间下的深度值,从而判断是否被遮挡。经过实验证明,使用屏幕空间环境光遮蔽技术渲染模型褶皱处阴影可以得到一个更为逼真的阴影效果,渲染效果对比图如图9所示。

图9 效果对比图

本文使用屏幕空间环境光遮蔽技术对阴影算法进行优化,处理了三维模型褶皱处的阴影,阴影的整体视觉效果得到了很大的提升。

3 实验结果

本实验设备为联想拯救者Y7000笔记本(CPUIntel Core i7-8750H 2.20GHz,GPU NVIDIA GeForce GTX 1050 Ti),Visual Studio 2015 作为软件开发平台,以及OpenGL作为三维图形开发工具。

为了验证本文提出的基于可见性的阴影生成算法是否生成一个合理并且逼真的阴影效果。本文做两个对比实验,第一个对比实验是本文算法与成熟的阴影生成算法Shadow Map在同一场景下,使用同一三维模型分别渲染三维模型的阴影。如图10所示。由该对比实验可以看出,本文算法生成的阴影效果逼真,并且具有逼真的软阴影视觉效果,再加上屏幕空间环境光遮蔽技术的处理,在阴影细节有很大的提升,因此在该方面本算法要优于Shadow Map。

图10 Shadow Map阴影算法与本文阴影算法阴影区域对比图

第二个对比实验是使用本文算法,同时渲染不同场景下,同一三维模型的阴影。如图11所示,由阴影效果对比图可以看出,场景的环境光照有较大变化时,

本文算法同样可以逼真的模拟三维模型的阴影。

图11 不同场景下使用本文算法生成的效果对比图

4 结语

本文提出了一种针对基于图像渲染技术中的阴影生成算法,我们复用IBL技术中的输入条件——HDR全景图,并利用三维模型顶点的可见性原理,分析每个三维模型顶点对周围环境的感知程度,设计出一种阴影生成算法,并且使用屏幕空间环境光遮蔽技术来提升阴影细节效果,从而得到一个效果逼真的阴影。

虽然我们的算法取得了不错的实验结果,但是仍有些限制与不足需要我们继续研究。一方面,我们必须使用HDR全景图,普通的全景图无法反映真实的环境信息。另一方面,由于硬件运算性能的限制,无法处理复杂的三维模型。在后续的研究中,我们将着重解决这两个方面的问题。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!