近似软影下的三维增强绘制

2013-11-30 05:01陈思明王山东
计算机工程与设计 2013年1期
关键词:曲率阴影亮度

陈思明,王山东

(1.中国科学院软件研究所 计算机科学国家重点实验室,北京100190;2.中国科学院研究生院,北京100049)

0 引 言

三维增强绘制是一种侧重于提高视觉沟通效率的非真实的绘制方式,强调对物体的颜色亮度、表面细节等的增强,其目的是使得含义表达和信息传递更清晰有效。目前的三维增强绘制算法多是着眼于如何在更加复杂、更加真实的光照场景下绘制出增强的效果,能否广泛适用于各种材质、各种绘制风格,是否实时,以及交互性、可控性等等,但很少有涉及到阴影效果。例如,Vergne等[1]提出的方法非常有效地实现了适用于多种光照场景、材质和绘制风格的三维增强,相对于以往的方法有很大改进,但尚未涉及阴影效果。阴影是一种真实存在的自然现象,能够为我们理解三维场景提供诸多视觉线索,对于三维增强绘制来说,阴影也是极其重要的。

本文在传统三维增强绘制中增加了近似软阴影效果。针对简单光照场景,改进了Vergne等[1]提出的尺度函数以及计算曲率的方法,首先计算每个像素的光亮度值,然后根据相应的曲率信息,应用尺度函数修改其光亮度值,从而使得物体的表面细节看上去更加凸显,有效地实现了对模型本身的增强。在此基础上引入近似软阴影效果,利用GPU几何着色器提取物体的轮廓边,并在扩展轮廓边生成半影区的时候通过调节半影区的衰减参数实现了对阴影的增强,从而使得整个三维场景具有一致的增强效果。

1 相关工作

1.1 三维增强绘制

三维增强绘制经历了基于线条[2-4]的绘制和基于渲染的绘制。基于渲染的绘制方法不仅增强效果更好,而且广泛适用于各种场景。下面介绍几种典型的基于渲染的增强绘制方法。

Cignoni等[5]首先提出对 Mesh(网格模型)面片法向量作Laplace平滑得到低频成分,然后将高频成分增强后叠加到原来的法向量上。Lee等[6]设计一个与物体几何信息有关的光源系统,将物体表面分成不同片段,并根据每个片段的表面特征设定光源系统的各参数,然后计算在整个光源系统照射下的增强效果。Rusinkiewicz等[7]对每个顶点的法向量做不同尺度的高斯平滑滤波,并依据下一个尺度的法向量确定当前尺度下的光源方向,然后在各个尺度下分别计算光照,最后将所有的光照结果加权求和。Ritschel等[8]利用Cornsweet Illusion视觉效应,在CIELAB色彩空间对L通道应用公式U(S)=S+λ(S-Sσ)提高了对比度。Vergne等[9]对物体表面每个点提取视点相关的shape descriptor,然后以该描述器矢量为坐标从指定的Apparent Relief Map中查找relief值,利用relief值直接或间接影响最终像素的值。Vergne等[10]利用人的视觉特点,即人眼感知到的反射光的分布反映了物体表面的弯曲程度,通过改变入射光的方向来增大反射光对应的分布范围,使得人眼感知到物体表面弯曲得更厉害了。Vergne等[1]在普通的绘制方程中增加一个与物体的表面几何信息、材质以及光照模型有关的尺度函数,针对不同场景适当定义和调整尺度函数的各个部分可以达到各种增强效果。Yongwei等[11]提出一种新的扰动法向量的方法,可以引导观察者的注意力,让用户感知到物体表面细节的增强。Xin Zhang等[12]提出交互式的局部增强,用户可以控制增强的方式和增强的程度。

1.2 近似软影的实时绘制和阴影的风格化绘制

传统的阴影算法包括阴影图和阴影体两大类,通常只能模拟点光源形成的硬影效果。理上完全正确的软影效果往往需要耗费太多的计算,近年来出现了很多模拟近似物理正确的软影效果的方法,例如Chan等[13]提出使用半影图生成近似软影效果,但该方法需要用CPU提取物体的轮廓边。吕伟伟[14]改进Chan等[13]的方法,实现了完全基于GPU的近似软影实时绘制算法。

阴影的风格化绘制可以画出具有特殊效果但并非物理正确的阴影。DeCoro等[15]对每个光源,将二值的可见性函数V(x)经过L-p距离变换、高斯模糊处理以及阈值变换后,得到一个shadow matte;用户通过调节4个参数:膨胀度、亮度、柔和度、抽象度,综合控制最终绘制出的阴影的效果。Obert等[16]提出将 “可见性信息”从光照环境中分离出来,并映射到haar小波空间,通过编辑“可见性信息”实现对阴影的编辑。Mohan等[17]提出在图像空间将阴影从其它部分分离出来,然后对阴影建模和编辑,调整阴影的位置、亮度和柔和度。Petrovic等[18]提出一种用于卡通动画场景的半自动的阴影抽象化绘制方法,该方法先对手绘作品作膨胀处理,然后根据用户指定的物体深度值和相对位置重构三维场景,最后设置光源、绘制抽象阴影。这些方法大多强调对阴影的风格化和抽象化,或者是针对特殊应用,很少有做三维增强绘制中阴影的增强绘制。

2 近似软影下的三维增强绘制

2.1 三维模型的增强

本文针对简单光照场景,改进了Vergne等[1]提出的尺度函数以及计算曲率的方法,有效地实现了对三维模型本身的增强。

2.1.1 曲率的计算

曲面曲率就是法向量的变化率,其几何意义是某点领域所围的曲面与平面相比的弯曲程度,法向的变化能直观地表现出物体表面的凹凸特征。本文计算曲率时,直接对法向量作横向和纵向的差分,而不是像Romain等[1]那样通过第二基本形式定义Hessian矩阵,然后计算主曲率、平均曲率等。

在实际中,采用deferred shading(即多遍绘制)的方法,第一遍将顶点法向量渲染到一张纹理图中,第二遍从纹理图中读取每个像素及其上下左右4个位置的法向量。

如图1所示,当前位置x的曲率为:(e-d+b-g)*scale,其中e,d表示位于x上下两个位置的纹理值的第一分量,b,g表示位于x左右两个位置的纹理值的第二分量;scale是一个可控参数,范围在[0,1]之间。

图1 曲率的计算

这种计算曲率的方法相比Romain等[1]简化了很多,并且在我们的实验中能够得到很好的效果。

2.1.2 改进的尺度函数

在传统的光照方程中增加一个尺度函数是一种很直观的方法,对每个像素计算其光亮度值,然后根据对应的曲率信息,应用尺度函数增强或减弱其光亮度值,可以使物体的表面细节看上去更加凸显。本文的尺度函数定义如下

固定c,函数σ随l变化的曲线见图2,参数α控制σ函数不动点的位置,即曲线交点的位置。该尺度函数同样满足:①σ相对于l的单调性,即当c>0时,σ随l递增(红色曲线);当c<0时,σ随l递减(绿色曲线),因此不会产生新的极值,造成亮度不一致的感觉;②在平面区域,即曲率为0时,σ为1,亮度值不变,不会增强曲率为0的点;③参数易于控制。

在本文算法中,c为前面用法向差分方法计算出的曲率,l是Phong光照模型下每个像素的光亮度值。直接对c和l应用尺度函数,可以更好地反映曲率如何影响最终光亮度值。这种方法是针对简单光照场景的,在我们的实验中取得了非常好的效果。而在Romain[1]中需要将曲率用双曲正切函数映射到[-1,1]区间,并且σ的第二个参数与BRDF和光照场景有关。

图2 σ随l变化的曲线

2.2 阴影区域的增强

本文采用吕伟伟等[14]提出的一种完全基于GPU的近似软影实时绘制算法来绘制阴影,并在此基础上提出一种巧妙的方法实现对阴影的增强。

具体来说,首先按照阴影图算法计算从光源中心得到的深度图,用以确定本影区范围;然后通过GPU的几何着色器提取物体轮廓边,并将轮廓边向外扩展绘制线性近似半影图;最后将半影图中的亮度值与片元颜色混合得到最终像素值。

在现实生活中,半影区域的亮度值不是严格按照与本影区的距离线性分布的,如图3,而是随着光源与接收物之间的距离和光源与遮挡物之间距离的比值的减少而减少的。可以用下面的公式近似模拟这一现象:其中α是片元的亮度值,d是该片元与光源之间的距离,r是该片元对应的深度图中的深度值。λ可以看作是半影区的衰减因子,是控制半影区大小的一个重要因素。增大λ,会减弱片元的亮度值,使得阴影边界更模糊,半影区更大;反之,会使半影区变小。因此,通过调整参数λ,可以改变半影区的亮度和大小,从而使得阴影区域可以跟三维场景中的模型保持一致的增强。

图3 半影区亮度变化

2.3 算法流程

本文算法是一种四遍绘制算法,所有这四遍都是在GPU中进行,各遍主要功能如下:

第一遍:将顶点的法向量写入片段颜色,生成法向图。

第二遍:与传统的阴影图算法一样,从光源绘制场景,得到场景的深度图。

第三遍:利用GPU的几何着色器提取场景中物体的轮廓边,并将轮廓边沿顶点法线方向向外扩展绘制近似半影图。通过调节半影区的衰减参数,控制半影区的亮度和大小。

第四遍:从眼睛视点绘制场景,按Phong光照模型计算每个像素的光亮度值。从法向图中读取每个像素及其4邻域的法向信息,计算其曲率,并应用尺度函数调整光亮度值。将可见片元的坐标转换到光源坐标系,如果该点的深度大于深度图中的深度,那么认为该点完全处于硬阴影区域中;否则,查询半影图中的亮度值,并将该亮度与增强后的片元颜色混合得到最终颜色值。

3 实验结果及分析

本文算法使用OpenGL和CG编程实现,实验所使用的系统是 Windows XP,硬件平台是:CPU为Intel Core2 E7400 2.80GHz;物理内存2.00GB;GPU为NVIDIA Ge-Force 9800GTX。所有中间生成的纹理图及最终结果图的分辨率都是800x800。

程序中共定义了4张纹理图:法向图,深度图,轮廓图(即半影图),以及一张辅助深度图;3个Frame Buffer Object,分别用于生成法向图、轮廓图和深度图。部分模型的绘制帧率见表1,这里选取的都是较复杂的模型。

表1 本文算法的绘制帧率

实验测试了10个模型,部分模型的运行结果见图4—图7。在Phong光照模型下,模型本身和软阴影得到了一致有效的增强。例如图4,dragon模型头部的表面细节,牙齿、嘴里的阴影、眼睛,头上的棱角,身上的鳞片,尾巴上的尖角等特征都更加凸显,阴影也变得更黑更集中。图5buddha模型的眼睛、鼻子、嘴巴、耳朵,手脚指头以及衣服和底座上的图案都明显增强了,阴影也更黑更集中了。图6lion模型的脖子、身体,头部的阴影,以及图7 armdillo模型腹部及大腿的表面细节,耳朵、手掌处的阴影,都得到了明显的增强。

由于几何着色器接受的图元格式是具有邻接信息的三角形图元,在对模型作预处理时,计算顶点法向和面片邻接信息会耗费较多时间,成为算法的瓶颈,而增强算法本身耗费的时间非常少。表2显示了对模型预处理消耗的时间和绘制一帧的平均时间,第一行的时间单位是s,第二行单位为ms。

表2 各阶段所用时间(单位:预处理s,绘制ms)

4 结束语

本文的主要贡献在于首次在三维增强中引入软阴影效果,并实现了整个场景的一致增强。与Romain[1]相比,本文算法对模型的增强是针对简单光照环境的,对法向量作差分得到曲率,应用Phong光照模型计算每个像素的初始光亮度值,然后直接对曲率和光亮度值应用尺度函数,逐像素作光亮度调整,这种方法在简单光照环境下可以取得非常好的效果;为了实现对阴影的增强,在扩展轮廓边形成半影图时,通过调整半影区的衰减参数来控制半影区的亮度和大小,使得整个场景具有一致的增强效果。

未来工作可以从两方面着手:在不降低绘制效率的前提下,模拟尽量物理正确的软影效果,同时改进增强阴影的方法;改进模型增强算法,使其可以在更多的场景下实现较好的增强效果,同时保持整个三维场景的一致性。

[1]Romain Vergne,Romain Pacanowski,Pascal Barla,et al.Radiance scaling for versatile surface enhancement[C]//New York,USA:Symposium on Interactive 3DGraphics and Games,2010:143-150.

[2]Yunjin Lee,Lee Markosian,Seungyong Lee,et al.Line drawings via abstracted shading[J].ACM Transactions on Graphics,2007,26(3):18.

[3]Michael Kolomenkin,Ilan Shimshoni,Ayellet Tal.Demarcating curves for shape illustration[J].ACM Trans Graph,2008,27(5):1-9.

[4]Long Zhang,Ying He,Xuexiang Xie,et al.Laplacian lines for real-time shape illustration[C]//New York,USA:Symposium on Interactive 3DGraphics and Games,2009:129-136.

[5]Paolo Cignoni,Roberto Scopigno,Marco Tarini.A simple normal enhancement technique for interactive non-photorealistic renderings[J].Computers & Graphics,2005,29(1):125-133.

[6]Chang Ha Lee,Xuejun Hao,Amitabh Varshney.Geometrydependent lighting[J].IEEE Transactions on Visualization and Computer Graphics,2006,12(2):197-207.

[7]Szymon Rusinkiewicz,Michael Burns,Doug DeCarlo.Exaggerated shading for depicting shape and detail[J].ACM Transactions on Graphics,2006,25(3):1199-1205.

[8]Tobias Ritschel,Kaleigh Smith.3Dunsharp masking for scene coherent enhancement[J].ACM Transactions on Graphics-TOG,2008,27(3):1-8.

[9]Romain Vergne,Pascal Barla,Xavier Granier,et al.Apparent relief:A shape descriptor for stylized shading[C]//France:Symposium on Non-photorealistic Animation and Rendering,2008:23-29.

[10]Romain Vergne,Romain Pacanowski,Pascal Barla,et al.Light warping for enhanced surface depiction[J].ACM Transactions on Graphics-TOG,2009,28(3):1-8.

[11] Miao Yongwei,Feng Jieqing,Pajarola Renato.Visual sa-liency guided normal enhancement technique for 3Dshape depiction[J].Computers & Graphics,2011,35(3):706-712.

[12]Xin Zhang,Wei Chen,Jing Fang,et al.Perceptually-motivated shape exaggeration[J].The Visual Computer,2010,26(6-8):985-995.

[13]Chan Eric,Durand Frédo.Rendering fake soft shadows with smoothies[C]//Switzerland:Eurographics Symposium on Rendering,2003:208-218.

[15]Christopher DeCoro,Forrester Cole,Adam Finkelstein,et al.Stylized Shadows[C]//New York,USA:International Symposium on Non-Photorealistic Animation and Rendering,2007:77-83.

[16]Juraj Obert,Fabio Pellacini,Sumanta N Pattanaik.Visibility editing for all-frequency shadow design[J].Comput Graph Forum,2010,29(4):1441-1449.

[17]Ankit Mohan,Jack Tumblin,Prasun Choudhury.Editing soft shadows in a digital photograph[J].IEEE Computer Graphics and Applications,2007,27(2):23-31.

[18]Lena Petrovic,Brian T Fujito,Lance Williams,et al.Shadows for cel animation[C]//New York,USA:Proceeding SIGGRAPH,2000:511-516.

猜你喜欢
曲率阴影亮度
一类双曲平均曲率流的对称与整体解
带平均曲率算子的离散混合边值问题凸解的存在性
远不止DCI色域,轻量级机身中更蕴含强悍的亮度表现 光峰(Appptronics)C800
面向复杂曲率变化的智能车路径跟踪控制
你来了,草就没有了阴影
亮度调色多面手
亮度一样吗?
让光“驱走”阴影
阴影魔怪