延迟贴花技术

2016-09-23 01:26李京娓
现代计算机 2016年2期
关键词:贴花立方体纹理

李京娓

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

延迟贴花技术

李京娓

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

1 研究背景

贴花渲染是一种用来向3D场景中添加额外的细节并且保持原场景不变的常用方法[1]。该技术目前主要应用在3D游戏中以实现一些视觉特效。如射击类游戏中的子弹痕迹、场景中的爆炸痕迹等。贴花一般并非原始场景的一部分,而是在游戏过程中动态产生的。通常情况下,这些效果都是通过创造一个新的贴花对象来实现的。

传统的贴花渲染方法中存在一些缺陷,难以满足对图像真实感日益增高的要求。延迟贴花技术基于延迟渲染管线对现有的纹理投影技术进行扩展。该技术实现更加简便,并且可以较好地提高贴花渲染的效果,使其在多数情况下看起来更加真实。同时,延迟贴花技术允许更加灵活的使用贴花,不必像基于前向渲染的传统贴花方法那样局限于使用漫反射纹理贴花。

2 传统贴花渲染方法

传统贴花渲染方法基于前向渲染管线实现,其通常采用的方案是:紧贴着现有的几何体表面渲染贴花多边形,再通过使用某种方法,将被贴花覆盖的场景表面的像素颜色与贴花的颜色进行融合。虽然,在通常情况下,传统方法一般具有不错的渲染效果。但是,不可否认,它仍存在如光照不一致、深度冲突、贴花纹理变形等诸多缺陷[2]。在游戏引擎中,对使用传统方法的贴花系统的实现与支持是非常昂贵的,同时也是十分困难的。

就基本原理而言,传统贴花渲染方法可以分为两类:使用纹理投影实现和使用网格投影实现。

纹理投影技术出现较早,其基本思路非常简单:对场景进行两遍渲染。使用纹理投影技术渲染贴花的基本实现过程如下:首先,渲染场景并获取场景信息;然后,使用投影的纹理进行渲染;最后,使用某种方法将两遍渲染的结果进行融合。

当场景较为简单且贴花数量较少时,纹理投影具有较好的性能。但是,当场景比较复杂且需要渲染大量的贴花时,这种方法性能很差[3-4]。

网格投影技术的基本思路主要是:首先将贴花处理为能够附着到场景几何体表面的几何网格,然后把得到的几何网格当做多边形列表进行渲染[5-6]。

就目前的资料来说,对网格投影这一方法的使用要比纹理投影更普遍些。例如,在早期的Source Engine中,应该就是使用的这一方法渲染贴花;Wolfire开发的Overgrowth中也使用到这一技术。

在网格投影中所得到的几何网格,实际就是一些三角形。这些三角形就是一些普通的几何图形,因而即使在场景中大量使用这种贴花,也不会影响其渲染性能。使用网格投影技术的关键在于三角形分割,因此该方法对生成三角形这一过程的算法要求较高,但这一过程的计算代价,通常都是非常昂贵的。

3 延迟贴花技术

延迟贴花技术是基于延迟渲染管线实现的,并使用贴花几何体代替传统方法中渲染的贴花多边形[7-8]。其具体实现主要分为三步:渲染 G-buffer(Geometry Buffer,几何缓冲区),渲染贴花几何体,后处理过程。

这一步主要是将场景的几何信息存储在中间缓冲区G-buffer中,为之后的逐像素渲染做准备。由于在deferred阶段只渲染离屏幕最近的那个像素,因而在延迟渲染管线中无法处理透明或半透明物体。因此延迟贴花在建立G-buffer时,需要使用额外的通道存储透明度。具体操作如下:在建立G-Buffer时将透明物体与背景逐像素交织,并将透明度存放在一个单独的通道中,然后与通常情况一样地进行光照计算,然后再根据透明度将透明物体与背景逐像素混合。

成功地建立G-buffer后,可以得到之后计算时所需的一些信息:场景的法线与深度。本文在这里使用了一个名为normal_depth buffer的中间缓冲区存储这些信息。

本文使用特殊的着色器对贴花的包围几何体进行渲染,以此取代传统方法中紧贴着场景几何体表面渲染贴花多边形的过程。

(1)贴花包围几何体

这里所说的贴花包围几何体,可以看作一种近似碰撞检测物体。使用贴花包围几何体的目的是为了标记被贴花影响到的场景表面。

在传统方法中通常选择紧贴着场景表面绘制一个与贴花尺寸相同、位置一致的四边形。但是,在延迟贴花技术中,为了得到更好的渲染效果,一般选择渲染贴花的一个包围几何体。使用贴花的包围几何体,允许从任意方向观察到贴花的效果,并且能够实现贴花角落环绕。

如果不计开销的话,贴花的包围几何体何以使用任意形状,一般选择球或者立方体。使用贴花包围球与使用贴花立方体时最主要的不同之处在于:如何将片段的屏幕坐标变换为贴花空间坐标。其实,使用贴花包围球要更容易些。因为,使用包围球时可以直接将片段的世界坐标变换到局部球体坐标,再根据对应的体积贴花或二维纹理进行一次映射,然后访问纹理即可,并不需要用到贴花变换矩阵。本文选择立方体作为贴花的包围几何体,如图1所示。

图1 贴花的包围立方体

(2)贴花变换矩阵

渲染贴花时,自然就需要在贴花空间中工作。为了达到这一目的,便需要得到贴花局部坐标系的一个变换矩阵。本文使用贴花的位置及朝向信息重建贴花局部坐标系,从而计算出一个贴花变换矩阵。

算法1展示了贴花局部坐标系的具体构造方法,这与构造切线空间时使用的方法是一致的。其中DTM (Decal Transformation Matrix,贴花变换矩阵)为所求变换矩阵的最终形式。

算法1:重建贴花局部坐标系及贴花变换矩阵

(3)顶点着色器

在顶点着色器中通过使用贴花的尺寸与之前得到的贴花变换矩将渲染的单位贴花立方体缩放至贴花的大小,并在世界空间定位缩放后的贴花立方体。

算法2对这一过程进行了描述:首先使用贴花的尺寸对单位立方体进行缩放,使其与实际渲染的贴花大小一致,然后将缩放后的贴花立方体变换到世界坐标系中。

算法2:缩放单位立方体并在世界空间定位

(4)片段着色器

在片段着色器中,主要进行了一些坐标系间的变换:首先,从之前渲染G-buffer得到的normal_depth buffer中,获取所渲染的片段的深度信息,并利用其构造当前片段的三维坐标;随后,将屏幕坐标转换为世界坐标,使用贴花变换矩阵的逆矩阵将世界坐标转换为贴花空间坐标;最后对贴花坐标进行变换从而得到纹理坐标,并将其用于之后的纹理查找。算法3描述了这一过程。

算法3:片段着色器中的坐标变换

在后处理过程中的进行的基本操作是:将贴花沿着贴花空间的高度轴(即通常情况下的Z轴)投影到其下方的场景几何体的表面。由于该基本操作仅使用了贴花坐标中的横、纵坐标 (即通常情况下坐标中的x、y),所以贴花沿贴花空间高度轴的投影是无限的,这便导致延迟贴花渲染在某些场景下会出现拖尾效应。因此需要在后处理过程中添加其他操作以解决这一问题,获得更好的渲染效果。可以通过设置淡出参数或者贴花角落环绕解决这一问题。

使用淡出方法解决拖尾效应的基本思路是:用贴花的尺寸来缩放片段与贴花平面间的距离,并将缩放结果作为淡出参数,对纹理采样的结果进行修正。只有在贴花是平面的并且场景表面较为平坦时,淡出才有较好的效果。并且求取淡出参数没有固定的公式,因为求取该参数的式子可能会因贴花的改变而改变。

通过使贴花角落环绕,可以使其适应较为复杂的场景表面曲率。算法4展示了使贴花角落环绕解决拖尾效应的具体过程:首先,由normal_depth buffer中获取当前渲染片段对应的表面法线;然后,将表面法线变换至贴花空间,这时其x、y的值便构成了表面相对于贴花平面的梯度;最后,计算纹理坐标,并使用获得的梯度对纹理坐标进行修正,用修正后的坐标进行纹理查找。

算法4:使贴花角落环绕

图2中展示了通过设置淡出参数和使贴花角落环绕修正拖尾效应前后的效果,通过对比可以得出以下结论:在具有较大斜率的表面上渲染贴花时,使贴花角落环绕与淡出相比,能够更加可靠地解决拖尾效应。

图2 使用淡出参数与使贴花角落环绕的修正效果

4 实验结果

图3分别展示了传统贴花渲染与延迟贴花渲染的效果。实验可知,使用传统方法进行贴花渲染时,由于光照不一致、深度冲突等原因,会造成贴花闪烁。而延迟贴花技术相对于传统贴花渲染具有更好的渲染效果。这是因为,延迟贴花技术是基于延迟渲染管线实现的,因此能够很好地解决光照一致性问题。同时延迟贴花也是纹理投影技术的一种扩展,具有纹理投影的特点,完美地消除了深度冲突问题。此外由于使用立方体作为贴花几何,我们能够从任意角度观察到贴花。

图3 传统贴花渲染(上)与延迟贴花渲染(下)的渲染效果

图4展示了向凹凸的场景表面渲染含有法线纹理的贴花,并通过改变贴花的透明度模拟随时间变化的侵蚀效果。场景的漫反射颜色纹理与法线纹理以及贴花的漫反射颜色纹理与法线纹理如图5所示。

该实验结果能够较好的体现出延迟贴花技术的一些优点。使用延迟贴花技术,允许更加灵活地使用贴花。因为在进行渲染计算之前贴花就已经被添加到G-buffer中了,所以我们可以对贴花的法线、反射系数等任意属性进行更改,而不必像传统方法那样局限于对漫反射颜色进行处理,并且这些更改也不会增加系统开销。由于贴花纹理带有alpha通道,延迟贴花还能够对透明或半透明的贴花进行处理。因此,可以通过改变贴花的透明度来模拟随时间变化的侵蚀等效果。

图4 改变贴花的alpha值模拟侵蚀效果

图5 场景与贴花的颜色及法线纹理

5 结语

延迟贴花技术基于延迟渲染管线对现有的纹理投影技术进行扩展。该技术完全基于GPU实现,继承了延迟渲染在光照处理方面的所有优势,无需进行额外的光照计算,开销较低。另外,由于延迟贴花技术渲染了贴花的包围几何体,因此能够从任意角度观察到贴花的作用效果。实验证明,该技术实现较简单,并且相对于传统贴花渲染技术可以更加灵活地使用贴花,同时能够较好地提高贴花渲染的效果,使其在多数情况下看起来更加真实。

[1]Krassnigg J.A Deferred Decal Rendering Technique[J].Game Engine Gems,Volume One,2010,1:271.

[2]Kim P.Screen Space Decals in Warhammer 40,000:Space Marine[C].ACM SIGGRAPH 2012 Posters.ACM,2012:6.

[3]Everitt C.Projective texture mapping[J].White paper,NVidia Corporation,2001,4.

[4]1 Kamburelis M.Shadow Maps and Projective Texturing in X3D[C].Proceedings of the 15th International Conference on Web 3D Technology.ACM,2010:17-26.

[5]Ohlarik D,Cozzi I P.A Screen-Space Approach to Rendering Polylines on Terrain[C].ACM SIGGRAPH 2011 Posters.ACM,2011:68.

[6]Qian G,Wang Y U E.Mesh Geometric Editing Approach Based on Gpu Texture[J].2012.

[7]Persson E.Volume Decals[J].GPU Pro,2011,2:115-120.

[8]Mans J,Andreev D.An Advanced Decal System[J].Game Programming Gems,2008,7:423-434.

Decal;Deferred Rendering;OpenGL;Texture Projection;Deferred Decal

Deferred Decal Rendering Technique

LI Jing-wei
(College of Computer Science,Sichuan University,Chengdu 610065)

1007-1423(2016)02-0076-05

10.3969/j.issn.1007-1423.2016.02.018

李京娓(1990-),女,山东,硕士研究生,研究方向为信息处理技术、计算机图形学

2015-11-24

2015-12-24

随着延迟渲染技术的广泛应用,基于延迟渲染管线实现的贴花渲染方法也在近几年流行开来。延迟贴花技术对现有的纹理投影技术进行扩展,完全基于GPU实现。延迟贴花技术因实现较简单并且性能良好,而成为目前极为流行的一种贴花渲染技术,被广泛应用于游戏中实现一些视觉特效。结合OpenGL基于GPU实现延迟贴花,并展示部分实验结果。

贴花;延迟渲染;OpenGL;纹理投影;延迟贴花

With the development of deferred rendering technique,decal rendering techniques based on deferred rendering pipeline become popular. Deferred decal rendering technique is based on deferred rendering pipeline and extends existing texture projection technique.This technique is entirely GPU based.As deferred decal rendering technique is easy to realize and can improve the rendering effects,it's widely used in 3D games to realize visual effects.Realizes deferred decal rendering technique with OpenGL,demonstrates some results of experiments.

猜你喜欢
贴花立方体纹理
“贴花黄”是怎么回事
基于BM3D的复杂纹理区域图像去噪
“贴花黄”是怎么回事
使用纹理叠加添加艺术画特效
“贴花黄”是怎么回事
内克尔立方体里的瓢虫
过年啦
TEXTURE ON TEXTURE质地上的纹理
图形前线
立方体星交会对接和空间飞行演示