论文部分内容阅读
全局光照是指除了考虑从光源直接发出的光照外还考虑场景中的所有面片反射的光照,即包括直接光照和间接光照。计算机生成的图像中全局光照的要比只有直接光照的看起来更加真实更加自然。全局光照虽然效果好,但是传统的技术渲染一帧通常需要几个小时,而实时渲染帧率应该达到毫秒级的速度,因此在大部分实时应用程序中通常只用直接光照加一个简单的漫反射常量的方法,并且大部分关于全局光照的研究都集中在复杂材质上,很少关注有大量光源的场景的全局光照问题,一般来说渲染代价会随着光源数量的增加而线性增长。全局光照尤其是多光源的全局光照的复杂性使其一直局限于离线应用中。本文分析了当前的几种全局光照算法,针对室内渲染的具体情况即封闭场景、室内光源数量多、室内家具以及光源可以自由移动等,采取了光照图和立即辐射度相结合的方法来计算全局光照。对室内能量大的主光源用GPU计算一次反射的间接光照,其他光源用预计算光照图的方式计算其直接光照,由此使得室内场景中能量大的主光源能自由移动,室内物体也可以自由移动并且能接受和产生间接光照,动态主光源的直接光照及其间接光照与预计算的光照图结合,在牺牲一些渲染质量的前提下,使动态主光源、动态摄像机的多光源场景的全局光照实现了交互级的绘制。本文的主要工作如下:1、选取场景中能量大的一个主光源,对其进行抛物面映射以实现对整个室内场景的均匀采样。先期立即辐射度在GPU上实现主要采用传统的阴影映射来产生RSMs,这种方法用透视投影受视景体的限制,只适用于聚光灯的情况,而不能用于视域更大的光源。后来有用立方体映射的方法来生成180°聚光灯和360°点光源的阴影图,但是这种方法需要绘制六次场景来作为立方体六个面的阴影图,很难达到实时帧率。本文采用抛物面映射的方法既可以实现对广角视域的均匀采样,又实现了交互级的绘制。2、用CPU计算其他非主光源的直接光照并存储到光照图中,算法为了实现交互级的绘制,只计算主光源的阴影,忽略了非主光源的阴影计算,避免了计算光照图中费时的遮挡查询,使得光照图的更新可以在毫秒级的时间内完成。3、将GPU计算的间接光照的值与CPU计算的直接光照的值用多光源的Phong光照模型进行求和,生成最后的图像,实现了动态主光源、动态摄像机的多光源场景的全局光照绘制。