延迟着色(2)
2008-12-08 16:52:21 来源:WEB开发网核心提示:全局光源•一些影响整个场景的元素,比如太阳光和雾•需要在整个屏幕上进行计算•顶点坐标,延迟着色(2),法线,颜色以及材质的参数均以纹理的形式输入,将Z比较设置为D3DCMP_LESS,这样就可以将光源体积外的象素给剔除掉了,•光照计算在象素着色器中实现,•计算输出先储存
全局光源
•一些影响整个场景的元素,比如太阳光和雾
•需要在整个屏幕上进行计算
•顶点坐标,法线,颜色以及材质的参数均以纹理的形式输入。
•光照计算在象素着色器中实现。
•计算输出先储存在一个中间的光照缓冲中。
局部光源
•局部光源的光照效果只影响到整个场景的一部分
•我们只计算受相关光源影响的象素。
•这需要将光源体投影到屏幕空间
•利用GPU很容易对象素按光源进行分类。
•在场景构造时,我们建立一个简单的网格来表示光源影响的空间区域,在游戏运行时,在3D空间中对这个网格包围的象素进行光照计算。
以下是延迟光照的关键部分,水平有限,如有错误还请谅解。延迟光照的关键点之一,如何找到光照体积网格中的象素。
首先渲染光源体积网格的背面,将Z比较设置为D3DCMP_GREATER,很显然红色粗线表示的几何体所覆盖的屏幕区域被标志出来,从上图中可以看到,红色区域部分只有位于红色三角形内的部分所覆盖的象素才需要进行光照计算。第二步我们需要进一步将青色部分选出来。这次渲染光源体积网格的正面,将Z比较设置为D3DCMP_LESS,这样就可以将光源体积外的象素给剔除掉了,原理和体积阴影计算一模一样。
更多精彩
赞助商链接