斯图加特大学GPU光线投射体渲染技术介绍
前言:在以往人们的印象中,美国的CG技术是一世界第一流的,而没有注意德国CG技术的发展。事实上,德国大学的CG是相当高的,与美国第一流的大学学术交往非常频繁。与美国人不同的是,德国以往将CG技术主要用于医学诊断设备与机械设备,现在也逐渐涉足于游戏领域,比如赫赫有名的Crytek公司,还有主要在光线跟踪硬件领域实践的Saarland大学计算机图形学系,取得的成果也是相当瞩目的。斯图加特是德国的科研大省,许多跨国公司都在这里设有研究机构。至于斯图加特大学也是实力雄厚的世界级名校,他们在CG的研究上也是建树颇丰,很多技术已经应用到了第一流的医学设备上,这里给大家介绍的就是他们的光线投射体渲染技术,以后还有我自己实现全动态场景的光线投射技术。
体渲染技术的历史已经相当悠久,可是由于硬件性能,迟迟没有在普通PC上得到广泛应用,大部分使用的还是使用古老的扫描线光栅化操作。体渲染技术的普通应用主要有,3D纹理中的几何形体重建(断层扫描数据的几何体重建),自然特效的实现(云雾、火)。普遍的体渲染方法是,在场景中计算从摄像机到Voxel之间的几何切片,显卡可以根据计算出来的纹理坐标自动进行插值。而后随着GPU硬件技术的发展,可编程管线的强大功能大大的激发了人们的创造力。此外还诞生了一些在GPU上进行加速的算法,如[1]所实现的GPU KD树加速。
斯图加特大学的这个实现的特点有:
Single Pass 单通道
Shader Independent 与Shader独立
High Performance 高性能
Platform Cross 跨平台
他们仅仅使用单通道渲染,对比同时期的一些基于深度的技术来说,单通道在现有硬件平台的效率更高,因为没有数据回读。只要以后需要,可以在不更改大部分代码的情况下加入阴影、微平面遮挡等效果,也可以加入全局光照等。目前可以下载的代码是完全基于标准C与glut的,所以说可以自由的在Windows与Unix-like系统上运行。至于性能,虽然说渲染时依旧是在一个Uniform Grid中,但是性能依旧是相当高的,并没有明显的下降,而且实现上简单了许多许多。
在我的P4 1.8G、6200A上运行的结果,光线投射渲染IBL贴图的头盖骨。
方法概述:
Compute ray of sight direction
While in volume
Lookup data value at ray position
Accumulate color and opacity
Advance along ray
首先摄制MV(MV = ModelView,MVP = ModelViewProjection,MVIT = MVInverseTranspose,etc.)矩阵,渲染Proxy Geometry,把需要渲染的3D纹理对齐上去。然后把屏幕坐标系(Eye\Camere\Screen Coordinates,以下简称SC)SC中,屏幕的四角用gluUnporject函数转换会到对象坐标系统中,获得了一个平板似的矩形,也就是屏幕上每个像素的空间位置。把这4个顶点与MVI矩阵中的摄像机位置相减,得到光线矢量,用GPU插值。由此得到了一个Volumn,事实上就是几何变换后的Normalized Device Coordinate。从每个屏幕像素的位置(纹理)开始,沿着计算好的方向开始跟踪(光线投射)。如果碰到了那个Proxy Geometry,那么就可以开始读取颜色和计算光学特性,如果最后光线碰到了Far Plane,那么就判定为这个像素显示背景。
数据:
事实上目前还没有多少实用的3D纹理,这些纹理大多数来自于医学研究领域,通过断层扫描(CT)取得人体骨骼的切片数据。大家在Volvis[3]这个网站可以得到一些相当精确的人体骨骼、神经系统的3D数据。NVIDIA OpenGL SDK 10中已经包含了一个渲染场景到3D纹理的DEMO,使得3D纹理的快速实时生成成为可能。由于3D纹理非常巨大,对GPU-CPU的传输压力明显,所以在一段时间内在桌面游戏淋浴还不太可能得到应用。但是体渲染已经在DirectX10游戏中得到使用,实现了最为逼真的光学特性和立体的自然特效,如云朵,火焰等等。
相关下载:
全套源代码和技术文章可以在这里下载 http://www.vis.uni-stuttgart.de/eng/research/fields/current/spvolren/
[1]Tim Foley and Jeremy Sugerman : KD-Tree Acceleration Structures for a GPU Raytracer
[2]Simon Stegmaier etc. A Simple and Flexible Volume Rendering Framework for Graphics-Hardware based Raycasting
[3] Volvis.org http://www.volvis.org/