一种利用灯光索引号对像素进行光照着色的方法

文档序号:6631432阅读:437来源:国知局
一种利用灯光索引号对像素进行光照着色的方法
【专利摘要】本发明公开了一种利用灯光索引号对像素进行光照着色的方法,包括:获取可见灯光的列表,并按照相机从远到近排序为每个灯光定义索引号;绘制获取的灯光索引号和灯光模型,得到一张灯光索引的buffer纹理,并把灯光的属性写入纹理;把基于buffer纹理的灯光材质和获取的灯光索引号打包成纹理,传给像素着色程序,并进行像素光照着色。本发明所述利用灯光索引号对像素进行光照着色的方法,可以克服现有技术中计量量大、渲染效率低和适用范围小等缺陷,以实现计算量小、渲染效率高和适用范围大的优点。
【专利说明】一种利用灯光索引号对像素进行光照着色的方法

【技术领域】
[0001] 本发明涉及图像处理【技术领域】,具体地,涉及一种利用灯光索引号对像素进行光 照着色的方法。

【背景技术】
[0002] 近几年来,GPU可编程技术的发展,图形硬件的编程能力也不断的强大,在GPU编 程程序称为着色(shader)程序,按照着色方式可分为两种,一种是前向着色,一种是延时着 色,目前利用最多的是延时着色技术,这种技术是一种对3D场景进行后期照明的技术,它 的好处是只针对最后显示在屏幕的像素进行着色的过程,而前向着色渲染会对很多被深度 遮挡的像素重复执行着色过程。延时着色第一次渲染过程是将场景中未经着色的几何信息 写到多渲染目标中,这些几何属性包括位置、法线、材质等信息,第二次渲染过程中,将视图 空间中的光源属性和第一次渲染过程得到的数据作为输入,来执行二维屏幕空间的后期处 理。这种方法将光照和几何渲染分开,可以很方便的修改或者增加光照的特性。
[0003] 在游戏引擎中,场景被划分为很多个地形快,而每个地形块中都会有上百盏灯,静 态的光源计算简单,不需要每帧都重新创建,动态的光源是最耗费的,就需要我们提供一些 方法可以提高其性能了。
[0004] 目前游戏中大部分是基于延时着色处理场景中的光照,在后期处理优化光照的方 法有很多中方法,一般处理的方法是:当面临大量动态光照的复杂场景实时渲染的应用程 序中,先绘制光源的灯光模型,然后得到模型的所覆盖的像素,然后对像素进行着色,这种 方法的缺点就是屏幕空间同时看到有多个灯光模型时,那么对该像素受灯光模型影响的计 算会巨大,渲染效率低下从而影响整个游戏性能。
[0005] 在实现本发明的过程中,发明人发现现有技术中至少存在计量量大、渲染效率低 和适用范围小等缺陷。


【发明内容】

[0006] 本发明的目的在于,针对上述问题,提出一种利用灯光索引号对像素进行光照着 色的方法,以实现计算量小、渲染效率高和适用范围大的优点。
[0007] 为实现上述目的,本发明采用的技术方案是:一种利用灯光索引号对像素进行光 照着色的方法,包括: a、 获取可见灯光的列表,并按照相机从远到近排序为每个灯光定义索引号; b、 绘制获取的灯光索引号和灯光模型,得到一张灯光索引的buffer纹理,并把灯光的 属性写入纹理; c、 把基于buffer纹理的灯光材质和获取的灯光索引号打包成纹理,传给像素着色程 序,并进行像素光照着色。
[0008] 进一步地,所述步骤a,具体包括: 在游戏引擎中,根据场景的需求放置大量的灯光,依次遍历绘制整个场景中所有可见 灯光模型,按照相机的从远到近的排序,依次为每个灯光模型定义索引号,并被辐射范围内 的像素进行着色。
[0009] 进一步地,所述步骤b,具体包括: 根据投影到屏幕空间像素着色的信息,得到屏幕空间中每个像素受哪些灯光影响,把 屏幕空间中每个像素的灯光影响的灯光索引号写入纹理。
[0010] 进一步地,所述把屏幕空间中每个像素的灯光影响的灯光索引号写入纹理的操 作,进一步包括: 保存索引号的纹理格式是ARGB32位,有4个通道,每个通道保存一个对应的灯光索引 号,每个通道有8bit位,把bit位的最高位保存灯光索引号;那么,一个通道最多可记录4 个灯光索引号,美术人员在场景中摆放可见模型灯光数量最大值为256,这样把灯光索引号 写入纹理; 对于每个像素可能受多个灯光的影响,那么在绘制该像素时,就要根据受灯光影响的 数量来决定绘制次数。
[0011] 进一步地,所述把灯光索引号写入纹理的操作,更进一步包括: ⑴在第一次对灯光索引号绘制时,此时会把灯光索引保存到对应的ARGB中,并把索引 号保存到每个通道的最高位,每次对同一个像素受不同灯光模型的绘制等同于混合,同时 在计算机中,移位运算符就是在二进制的基础上对数字进行平移,其数学意义为:右移 一位相当于除2,右移n位相当于除以2的n次方,那么本发明是向右移动2位,所以前一次 渲染到屏幕像素除以4,即得到下面的混合像素的公式为:

【权利要求】
1. 一种利用灯光索引号对像素进行光照着色的方法,其特征在于,包括: a、 获取可见灯光的列表,并按照相机从远到近排序为每个灯光定义索引号; b、 绘制获取的灯光索引号和灯光模型,得到一张灯光索引的buffer纹理,并把灯光的 属性写入纹理; c、 把基于buffer纹理的灯光材质和获取的灯光索引号打包成纹理,传给像素着色程 序,并进行像素光照着色。
2. 根据权利要求1所述的利用灯光索引号对像素进行光照着色的方法,其特征在于, 所述步骤a,具体包括: 在游戏引擎中,根据场景的需求放置大量的灯光,依次遍历绘制整个场景中所有可见 灯光模型,按照相机的从远到近的排序,依次为每个灯光模型定义索引号,并被辐射范围内 的像素进行着色。
3. 根据权利要求1或2所述的利用灯光索引号对像素进行光照着色的方法,其特征在 于,所述步骤b,具体包括: 根据投影到屏幕空间像素着色的信息,得到屏幕空间中每个像素受哪些灯光影响,把 屏幕空间中每个像素的灯光影响的灯光索引号写入纹理。
4. 根据权利要求3所述的利用灯光索引号对像素进行光照着色的方法,其特征在于, 所述把屏幕空间中每个像素的灯光影响的灯光索引号写入纹理的操作,进一步包括: 保存索引号的纹理格式是ARGB32位,有4个通道,每个通道保存一个对应的灯光索引 号,每个通道有Sbit位,把bit位的最高位保存灯光索引号;那么,一个通道最多可记录4 个灯光索引号,美术人员在场景中摆放可见模型灯光数量最大值为256,这样把灯光索引号 写入纹理; 对于每个像素可能受多个灯光的影响,那么在绘制该像素时,就要根据受灯光影响的 数量来决定绘制次数。
5. 根据权利要求4所述的利用灯光索引号对像素进行光照着色的方法,其特征在于, 所述把灯光索引号写入纹理的操作,更进一步包括: ⑴在第一次对灯光索引号绘制时,此时会把灯光索引保存到对应的ARGB中,并把索引 号保存到每个通道的最高位,每次对同一个像素受不同灯光模型的绘制等同于混合,同时 在计算机中,移位运算符就是在二进制的基础上对数字进行平移,其数学意义为:右移 一位相当于除2,右移η位相当于除以2的η次方,那么本发明是向右移动2位,所以前一次 渲染到屏幕像素除以4,即得到下面的混合像素的公式为:
其中,Pf;m彳为混合后的像素,为混合前像素,p为即将绘制的像素; 在开始绘制时,也就是把即将渲染到屏幕像素等于混合像素,最后将混合像素绘制到 渲染目标中; ⑵当第二次绘制灯光索引号时,把先前保存高位的灯光索引号,向后移动2位,把第二 次绘制的索引号放到高位; ⑶第三次绘制索引号时,先保存前面两次绘制的索引号,再向后移动2位,把第三次绘 制得到的灯光索引号放入高位; ⑷第四次绘制索引号时,先保存前面三次绘制的索引号,再向后移动2位,把第四次绘 制得到的灯光索引号放入高位; 最终保留最后4个灯光索引号的绘制,也有部分像素受灯光影响小于4个,就按照对应 的索引号绘制。
6. 根据权利要求4所述的利用灯光索引号对像素进行光照着色的方法,其特征在于, 所述对于每个像素可能受多个灯光的影响,那么在绘制该像素时,就要根据受灯光影响的 数量来决定绘制次数的操作,更进一步包括: ⑴当像素受多个灯光模型影响时,距离相机越近,受该灯光材质影响越大,距离相机越 远,受该灯光材质影响就越小,通常把重叠的灯光进行混合就可以的到最终像素的光照颜 色值; 与此同时把灯光的属性写入纹理,方便在像素着色阶段获取灯光的参数数据; ⑵把灯光索引号"打包"到纹理中,得到一张灯光索引的buffer纹理,通过渲染目标返 回每个像素受光照的索引信息。
7. 根据权利要求3所述的利用灯光索引号对像素进行光照着色的方法,其特征在于, 所述步骤c,具体包括: 在GPU编程中,分为顶点着色程序和像素着色程序,把步骤b得到的灯光索引纹理和灯 光材质属性传入像素着色程序里; 经过着色程序后"解压"出与之对应的灯光参数,其中每个像素最多能够得到不少于1 个灯光索引号,而之前每个像素只能得到一个灯光索引号; 然后将这些灯光参数与对应像素关联,进行光照着色。
8. 根据权利要求1或2所述的利用灯光索引号对像素进行光照着色的方法,其特征在 于,在步骤b中,所述灯光模型,是指在游戏中为了模拟真实的不同光源的照射范围,事先 为包含点光源和聚光灯的每个灯光指定的模型。
【文档编号】G06T15/50GK104392479SQ201410573238
【公开日】2015年3月4日 申请日期:2014年10月24日 优先权日:2014年10月24日
【发明者】张翼 申请人:无锡梵天信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1