专利名称:一种实现高动态光照范围的方法及系统的制作方法
技术领域:
本发明涉及图像处理领域,特别是涉及一种实现高动态光照范围的方法及系统。
背景技术:
计算机在表示图像时,以及显示器显示图像时是用8bit(256)级来区分图像的亮度的,但显然以几百为单位的亮度级别是无法再现真实的光照情况的。例如未经过高动态光照范围(HDR)技术处理的普通图形文件中的每个像素限制在0至255的亮度范围内。一张普通的白天风景图片中,白云和太阳可能都呈现同样的亮度(都是纯白色),但实际上白云与太阳的亮度不可能一样。
HDR技术是一种图像处理技术。支持DirectX9.0标准的显卡可以采用HDR技术将源浮点纹理压缩为不低于64位的整数纹理。64位整数纹理(每个像素由64位来保存)有RGBA四个通道,分别占16位,并以整数值保存。通过公式R(16int)=R(float)/16int_max×65535对R通道进行压缩(其他通道相同),在CPU对源浮点纹理压缩前,任一通道在程序中都是0到65535的整数值;在压缩并输出到显卡中后,由显卡表示0到1的亮度值,其中0表示最暗,1表示最亮,精度为1/655535。例如R通道在程序中的值为18,则在显卡中它的值为18/655535。在显卡对压缩纹理解压后,可以在显示器上显示超出0到1的亮度范围。
应用HDR技术的目的是为了联合使用曝光技术,以达到更好的图像效果。曝光是对场景的整个颜色和亮度进行调整,曝光度E>0。对于非HDR进行曝光,则会产生色块或使整个场景变暗,得到的图像与现实不匹配;曝光对于HDR才有意义。
目前HDR广泛应用于游戏领域中。HDR在游戏中特指HDR特效,HDR特效是与Vertex Shader/ShaderModel/Soft shadows/Parallax Mapping等并列的图像渲染特效。若要实现HDR特效,使用的显卡必须支持DirectX9.0标准,例如nVIDIA的显卡必须是GeForce 6系列或更高,ATI显卡至少是Radeon 9500或以上。
但是一些低端显卡只能处理32位纹理,即不支持HDR效果。32位纹理指纹理的每个像素由32位来保存,每个像素有RGBA四个通道,分别占8位,并以整数值保存,即其中任一通道在程序中都是0到255的整数值,而在显卡中表示0到1的颜色值,0表示最暗,1表示最亮,精度为1/255。例如R通道在程序中的值为16,则在显卡中它的值为16/255。
针对上述一些低端显卡不支持HDR效果的问题,业界提供了一种双32位整数纹理实现HDR的方法,使一些不支持DirectX9.0标准的低端显卡也可实现HDR效果。参见图1所示,即以两张32位整数纹理分别保存64位整数纹理的高32位和低32位,在输出时,将两张32位整数纹理拼接,以模拟64位整数纹理,从而实现HDR效果。
该方法的具体内容如下1、两张32位纹理(high和low)分别存储64位纹理的每个通道的高8位和低8位。
2、压缩(以R通道为例) 式1 式2注式1和式2都向下取整。源浮点纹理,参见图2所示;压缩后的高8位纹理,参见图3所示;压缩后的低8位纹理,参见图4所示。
3、解压在显卡中R=(R(H)+R(L)/256)×Scale,Scale=16int_max时,颜色还原到压缩前的正常状态。Scale应该小于256/16int_max。
但是目前还有一些低端显卡只支持固定管线。所述固定管线是与可编程管线相对的,其在渲染图形时,大部分操作已经固化,而只能操作少部分功能的处理流水线。具体来说,固定管线只能以2元运算完成图像处理,即只能以下列操作完成顶点颜色与纹理颜色之间或纹理颜色与纹理颜色之间的运算D3DTOP_MODULATE(相乘),D3DTOP_MODULATE2X(相乘再乘以2),D3DTOP_MODULATE4X(相乘再乘以4),D3DTOP_ADD(相加);并且固定管线中的纹理层最大为2层。
基于固定管线的局限性,只支持固定管线的低端显卡仍然无法适用上述双32位整数纹理实现HDR的方法。即目前在固定管线中无法实现HDR的效果。
发明内容
本发明提供一种实现高动态光照范围的方法及系统,用以解决目前在固定管线中无法实现高动态光照范围效果的问题。
本发明方法用于在固定管线中进行图像处理,包括下列步骤A、将压缩后得到的高位整数纹理等分成低位整数纹理;B、逐一将各个低位整数纹理在固定管线中渲染,并解压缩;C、将解压缩后的整数纹理合并,以实现高动态光照范围的效果。
其中,所述整数纹理包括4个通道;步骤A中,将64位整数纹理等分成2个32位整数纹理后,其任一通道均包括由高至低的2个8位通道片断。
所述任一高8位通道片段的整数纹理为 低8位通道片段的整数纹理为 其中,R(FLOAT)为源浮点纹理的任一通道;16int_max为解压后亮度的最大值。
其中,步骤B中所述对渲染后的高32位整数纹理解压缩是对各个渲染后的高8位通道片段进行整数倍扩大。
进一步,所述固定管线以2元运算完成图像处理,以及所述固定管线中的纹理层最大为2层。对任一渲染后的高8位通道片段进行整数倍扩大,包括以固定管线中的纹理层为1层或2层为前提,通过若干次2元运算扩大到预设的整数倍。
步骤B中所述对渲染后的低32位整数纹理解压缩是以预设的扩大整数倍数除以256,再与各个渲染后的低8位通道片段相乘。
其中,所述步骤C中,将解压缩后的各个整数纹理的颜色相加,以实现合并。
本发明的实现高动态光照范围的系统,包括压缩单元,用于将源浮点纹理压缩为高位整数纹理;分割单元,用于将所述压缩单元输出的高位整数纹理等分成低位整数纹理;固定管线,用于逐一对分割单元输出的低位整数纹理进行渲染和解压缩;合并单元,用于将固定管线各次输出的解压后的整数纹理进行合并。
本发明有益效果如下本发明方法首先利用现有的双32位整数纹理实现HDR技术,将源浮点纹理压缩后得到的64位整数纹理等分成32位整数纹理。
之后,基于固定管线的特性,逐一将各个低位整数纹理在固定管线中渲染,并解压缩。其中,以固定管线中的纹理层为1层或2层为前提,通过若干次2元运算扩大到预设的整数倍,从而实现对高32位整数纹理的解压缩;以预设的扩大整数倍数除以256,再与各个渲染后的低8位通道片段相乘,从而实现对低32位整数纹理的解压缩。
最后,将解压缩后的整数纹理合并,即将解压缩后的各个整数纹理的颜色相加,以实现高动态光照范围的效果。
为了支撑本发明方法,本发明还提供了一种实现高动态光照范围的系统。
综上所述,通过本发明的实施,可以在固定管线中实现HDR的效果,从而使配置了只支持固定管线的低端显卡的用户可以享受更好的光影体验。
图1为现有双32位整数纹理实现HDR的原理图;图2为源浮点纹理效果图;图3为以现有双32位整数纹理实现HDR的方法,压缩后的高8位纹理;图4为以现有双32位整数纹理实现HDR的方法,压缩后的低8位纹理;图5为本发明系统结构示意图;图6为本发明方法步骤流程图;图7-1至图7-32为本发明实施后,Scale=1至32,16int_max=8,曝光度=Scale/16int_max的场景效果图。
具体实施例方式
为了在固定管线中实现HDR的效果,从而使配置了只支持固定管线的低端显卡的用户可以享受更好的光影体验,本发明提供了一种实现高动态光照范围的系统,参见5所示,其包括依次相连的压缩单元、分割单元、固定管线和合并单元。
所述压缩单元,用于将源浮点纹理压缩为高位整数纹理。
所述分割单元,用于将所述压缩单元输出的高位整数纹理等分成低位整数纹理。
所述固定管线,用于逐一对分割单元输出的低位整数纹理进行渲染和解压缩。
所述合并单元,用于将固定管线各次输出的解压后的整数纹理进行合并。
应用上述系统,本发明提供了一种实现高动态光照范围的方法。为了便于描述,本方法以设置了具体的API参数为例(以DX9.0为实现API),由于固定管线的可控操作很少,所以基于其它API参数可类推。参见图6所示,本发明方法包括下列步骤
S1、将源浮点纹理压缩为64位整数纹理。
CPU从程序中获取源浮点纹理,并通过压缩单元将源浮点纹理压缩为64位整数纹理。源浮点纹理和整数纹理均包括RGBA四个通道,每个通道的压缩处理过程均相同,以下以R通道为例。
压缩单元利用公式R(FLOAT)/16int_max将源浮点纹理的R通道纹理R(FLOAT),压缩为64位整数纹理中的R通道整数纹理(16位)。其中16int_max为解压后亮度的最大值。
S2、将64位整数纹理等分成32位整数纹理。
通过分割单元将64位整数纹理等分成两个32位整数纹理,参见图1所示,64位整数纹理的每一个16位通道均被等分成两个8位通道片断。每个通道的分割处理过程均相同,以下以R通道为例。
分割单元利用下述公式等分R通道 S3、将低32位整数纹理输出到固定管线中渲染和解压缩。
固定管线对每个低8位通道的渲染和解压缩过程均相同,以下以R通道为例。
以低32位整数纹理为场景贴图进行场景渲染后,得到低32位场景效果纹理SLOW。之后,再进行解压缩操作。
在固定管线中对于纹理颜色的操作的精度为1/255,即纹理颜色最小可以放缩到原来的1/255。通过设置纹理混合操作为D3DTOP_BLENDFACTORALPHA,并把一个DWORD值设置到D3DRS_TEXTUREFACTOR中,所述DWORD值的最高16位代表颜色需要放缩的分数,例如纹理颜色需要放缩到原来的7/255,则将DWORD值的最高16位设置为0x07由解压公式R=(R(H)+R(L)/256)×Scale可知,R(SLOW)的解压缩因子为Scale/256。由于固定管线中纹理颜色的操作精度为1/255,所以Scale的取值为1至255的整数,所以所述R(SLOW)的解压缩因子Scale/256必然小于1,满足固定管线的操作要求,可直接与R(SLOW)相乘,即可直接完成R(SLOW)的解压缩。
S4、将高32位整数纹理输出到固定管线中渲染和解压缩。
固定管线对每个高8位通道的渲染和解压缩过程均相同,以下以R通道为例。
以高32位整数纹理为场景贴图进行场景渲染后,得到高32位场景效果纹理SHIGH。之后,再进行解压缩操作。
由解压公式R=(R(H)+R(L)/256)×Scale可知,R(SHIGH)的解压缩因子为Scale,即对R(SHIGH)的解压操作都是对其颜色进行Scale倍扩大,所以Scale的取值为1至255的整数。
由于在固定管线中只能对纹理颜色进行2元运算(即顶点颜色与纹理颜色之间或纹理颜色与纹理颜色之间的运算),所以固定管线中只有以下操作D3DTOP_MODULATE(相乘),D3DTOP_MODULATE2X(相乘再乘以2),D3DTOP_MODULATE4X(相乘再乘以4),D3DTOP_ADD(相加)。
为了满足固定管线的要求,并完成R(SHIGH)的解压缩,本发明设置一个矩形框对R(SHIGH)进行解压操作,即通过对R(SHIGH)纹理的多次混合,来完成解压操作。其中,矩形框的顶点颜色为最大即1.0(白色),并加载一个纹理white(纹理颜色为白色)进行辅助混合;固定管线中纹理层最大为2层,即最多可以进行两次纹理操作。
基于上述矩形框,对R(SHIGH)进行最精简的解压列表如下Scale=1时Operating(high,1X);注仅有high这一个纹理层,以high的颜色与矩形框的顶点颜色相乘。
Scale=2时Operating(high,2X)。
Scale=3时Operating(high,2X,high,Add);注有两个纹理层,都是high,以high的颜色与矩形框的顶点颜色相乘再乘以2,再加上high,即得到high的3倍颜色值。
Scale=4时Operating(high,4X)。
Scale=5时Operating(high,4X,high,Add)。
Scale=6时Operating(high,4X,high,Add),Operating(high5,1X,high,Add);注分两次混合,第一次有两个纹理层,都是high,以high的颜色与矩形框的顶点颜色相乘再乘以4,再加上high,即得到high的5倍颜色值;第二次有两个纹理层,一个是第一次得到的high的5倍颜色的纹理high5,另一个是high,以high5的颜色与矩形框的顶点颜色相乘,再加上high,即得到high的6倍颜色值。
Scale=7时Operating(high,4X,high,Add),Operating(high5,1X,high,Add),Operating(high6,1X,high,Add)。
Scale=8时Operating(high,4X,wihte,2x);注有两个纹理层,一个是high,另一个是white,以high的颜色与矩形框的顶点颜色相乘再乘以4,再乘以white再乘以2,即得到high×4×2=high×8的8倍颜色值。
Scale=9时Operating(high,4X,wihte,2x),Operating(high8,1X,high,Add)。
Scale=10时Operating(high,4X,high,Add),Operating(high5,2X)。
Scale=11时Operating(high,4X,high,Add),Operating(high5,2X),Operating(high10,1X,high,add)。
Scale=12时Operating(high,2X,high,Add),Operating(high3,4X)。
Scale=13时Operating(high,2X,high,Add),Operating(high3,4X,high,Add)。
Scale=14时Operating(high,2X,high,Add),Operating(high3,2X,high,Add),Operating(high7,2X)。
Scale=15时Operating(high,2X,high,Add),Operating(high3,2X,high,Add),Operating(high7,2X,high,Add)。
Scale=16时Operating(high,4X,wihte,4X)。
Scale=17时Operating(high,4X,wihte,4X),Operating(high16,1X,high,Add)。
Scale=18时Operating(high,4X,high,2x),Operating(high8,1X,high,Add),Operating(high9,2X)。
Scale=19时Operating(high,4X,high,2x),Operating(high8,1X,high,Add),Operating(high9,2X,high,Add)。
Scale=20时Operating(high,4X,high,add),Operating(high5,4X)。
Scale=21时Operating(high,4X,high,add),Operating(high5,4X,high,Add)。
Scale=22时Operating(high,4X,high,add),Operating(high5,4X,high,Add),Operating(high21,1X,high,Add)。
Scale=23时Operating(high,4X,high,add),Operating(high5,2X,high,Add),Operating(high11,2X,high,Add)。
Scale=24时Operating(high,4X,high,add),Operating(high5,1X,high,Add),Operating(high6,4X)。
Scale=25时Operating(high,4X,high,add),Operating(high5,1X,high,Add),Operating(high6,4X,high,Add)。
Scale=26时Operating(high,2X,high,add),Operating(high3,4X,high,Add),Operating(high13,2X)。
Scale=27时Operating(high,2X,high,add),Operating(high3,4X,high,Add),Operating(high13,2X,high,Add)。
Scale=28时Operating(high,2X,high,add),Operating(high3,2X,high,Add),Operating(high7,4X)。
Scale=29时Operating(high,2X,high,add),Operating(high3,2X,high,Add),Operating(high7,4X,high,Add)。
Scale=30时Operating(high,2X,high,add),Operating(high3,2X,high,Add),Operating(high7,4X,high,Add),Operating(high29,1X,high,Add)。
Scale=31时Operating(high,2X,high,add),Operating(high3,2X,high,Add),Operating(high7,4X,high,Add),Operating(high29,1X,high,Add),Operating(high30,1X,high,Add)。
Scale=32时Operating(high,4X,white,2x),Operating(high8,4X)。
.................................
本例只列举到Scale=32,需要更大的Scale时,可以采用这种混合方法类推。
S5、将解压缩后的整数纹理合并。
最后,通过合并单元将步骤S3和S4得到的解压后的SLOW和SHIGH纹理混合(即颜色相加),以还原原始场景,至此完成本发明方法的流程。
上述步骤S3和S4的顺序可以交换,即本发明不限制各个低位整数纹理进行渲染和解压缩的顺序,只要满足逐一进行渲染和解压缩即可。
之后,再对其加以曝光,即可模拟出HDR效果。参见图7-1至图7-32所示,为Scale=1至32,16int_max=8,曝光度Expose=Scale/16int_max的场景效果图。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种实现高动态光照范围的方法,用于在固定管线中进行图像处理,其特征在于,包括下列步骤A、将压缩后得到的高位整数纹理等分成低位整数纹理;B、逐一将各个低位整数纹理在固定管线中渲染,并解压缩;C、将解压缩后的整数纹理合并,以实现高动态光照范围的效果。
2.如权利要求1所述的方法,其特征在于,所述整数纹理包括4个通道;步骤A中,将64位整数纹理等分成2个32位整数纹理后,其任一通道均包括由高至低的2个8位通道片断。
3.如权利要求2所述的方法,其特征在于,所述任一高8位通道片段的整数纹理为 低8位通道片段的整数纹理为 其中,R(FLOAT)为源浮点纹理的任一通道;16int_max为解压后亮度的最大值。
4.如权利要求2所述的方法,其特征在于,步骤B中所述对渲染后的高32位整数纹理解压缩是对各个渲染后的高8位通道片段进行整数倍扩大。
5.如权利要求4所述的方法,其特征在于,所述固定管线以2元运算完成图像处理。
6.如权利要求5所述的方法,其特征在于,所述固定管线中的纹理层最大为2层。
7.如权利要求6所述的方法,其特征在于,对任一渲染后的高8位通道片段进行整数倍扩大,包括以固定管线中的纹理层为1层或2层为前提,通过若干次2元运算扩大到预设的整数倍。
8.如权利要求2所述的方法,其特征在于,步骤B中所述对渲染后的低32位整数纹理解压缩是以预设的扩大整数倍数除以256,再与各个渲染后的低8位通道片段相乘。
9.如权利要求2所述的方法,其特征在于,所述步骤C中,将解压缩后的各个整数纹理的颜色相加,以实现合并。
10.一种实现高动态光照范围的系统,包括压缩单元,用于将源浮点纹理压缩为高位整数纹理;分割单元,用于将所述压缩单元输出的高位整数纹理等分成低位整数纹理;合并单元,用于将固定管线各次输出的解压后的整数纹理进行合并;其特征在于,所述系统还包括固定管线,用于逐一对分割单元输出的低位整数纹理进行渲染和解压缩。
全文摘要
本发明公开了一种实现高动态光照范围的方法及系统,用以解决目前在固定管线中无法实现高动态光照范围效果的问题。本发明方法包括步骤A.将压缩后得到的高位整数纹理等分成低位整数纹理;B.逐一将各个低位整数纹理在固定管线中渲染,并解压缩;C.将解压缩后的整数纹理合并,以实现高动态光照范围的效果。通过本发明的实施,可以在固定管线中实现用HDR的效果,从而使配置了只支持固定管线的低端显卡的用户可以享受更好的光影体验。
文档编号G06T1/00GK101055641SQ200610072160
公开日2007年10月17日 申请日期2006年4月14日 优先权日2006年4月14日
发明者刘皓 申请人:腾讯科技(深圳)有限公司