一种改良的模版阴影锥操作的方法与装置的制作方法

文档序号:6637188阅读:118来源:国知局
专利名称:一种改良的模版阴影锥操作的方法与装置的制作方法
技术领域
本发明涉及一种计算机绘图系统,特别涉及一种利用阴影锥产生阴影效果的方法和装置。
背景技术
所谓三维计算机绘图就是在平面的屏幕上把三维物体生成并显示为二维图像。三维对象可以是很单纯的点、线、三角形或多边形。而更复杂的对象则以相连的平面多边形表示,举例来说,以一系列的平面三角形集合成一立体对象。而所有的几何元素最终可以用一个或一组顶点来描述。举例来说,坐标(X,Y,Z)定义一个顶点或一条线的终点或一多边形的边角。
为了在二维的屏幕上投射出三维图像,该顶点值需经过一系列运算或绘图管线中的数道程序。一般绘图管线仅是一串相连的处理单元或程序,其中上一道程序的输出即为下一道程序的输入。在一绘图处理器中,这些程序包含各别顶点运算、基本组合运算、像素运算、材质组合运算、点阵转换运算以及片段运算。
在一典型绘图显示系统中,一图像数据库(例如一命令列表)可储存一场景中的对象描述。这些对象以数个小多边形描述,同样的,对象表面可以用数个小瓦片(tile)描述。每一多边形以一系列的顶点坐标(模块坐标X,Y,Z)以及部份材料表面属性(例如颜色、材质、光泽等),甚或是每一顶点表面的法向量。对于具有复杂曲面的三维物体而言,多边形一般而言必须是三角形或四角形,其中后者可以拆成一对三角形。
一转换引擎根据使用者输入的视角切换对象的坐标。此外,使用者可以指定视野、图像大小或视锥背端,藉以决定要包含或去除背景。
一旦选定视线区域,一剪辑逻辑电路消除该视线区域以外的多边形(三角形),并修剪那些部份在外、部份在内的多边形。被修剪的多边形的新边缘即为视线区域的边缘。这些多边形顶点接着被传送至下一阶段,对应屏幕的坐标(X,Y),每一顶点具有对应的深度值(Z坐标)。在典型系统中,接着以光源模块计算光源,将这些多边形的颜色值传送到一点阵转换器。
对每一多边形而言,该点阵转换器决定在哪一像素放置该多边形,并尝试将对应的颜色值与深度(Z-value)写入画面缓冲器。该点阵转换器比较该多边形的深度值和像素的深度值,其中该像素可能已经写入画面缓冲器。如果新的多边形的深度值较小,表示其位于先前写入的像素的前面,所以将画面缓冲器中该位置的值替换掉。此程序持续进行直到所有的多边形皆通过点阵转换器。至此,绘图控制器显示该画面缓冲器的内容于显示器上,依扫描线逐行显示。
图1是为现有绘图管线的运算流程图。绘图管线中的组件可能因系统而异,也可以各种方式表达。一计算机主机10(或计算机上执行的一绘图应用程序界面)产生一命令串行12,包含一系列绘图指令和数据,用以产生一「环境」于一绘图显示器上。该绘图管线中的组件对该命令串行12中的数据和指令做运算,以在显示器上产生画面。
一解码器14从该命令串行12截取数据以解译命令和沿绘图管线传送原始绘图数据。原始绘图数据包含位置(X,Y,Z和W坐标),及光源和材质信息。这些原始绘图数据被解码器14从命令串行12中读取后,传送到一顶点转换器16(vertex shader)。该顶点转换器16则对该原始绘图数据执行各种转换程序。这些数据必须从世界坐标转换成模块视野坐标,投射坐标,最后转成屏幕坐标。该顶点转换器16中的功能为现有技术。接着绘图数据被传送到点阵转换器18,进行点阵转换。
一深度测试器20接着对该原始数据中的每一像素进行处理,比较一像素所对应的已储存的和新输入的深度值。该深度值是用以表示像素位置的深度值。如果新输入的深度值代表的深度较靠近视者,则取代已储存的深度值,而在绘图缓冲器24中相关的颜色信息亦被取代(由像素转换器22处理)。反之如果新的深度值深度较远,则无任何处理。颜色信息包含该像素是否位于阴影中,其判断的方法使用了现有的阴影锥算法。
图2是为阴影锥算法示意图。该阴影锥34(shadow volume)定义了一障碍物32(occluder)在一光源30下的阴影空间。如果一像素38落在于该阴影锥34的范围内,所产生的图像便显示出在阴影下的效果。该阴影锥算法判断一像素38、39是否位于阴影锥34之中,计算光线35,以及观察者36进入点33和离开点37的次数。如果进入点33和离开点37的次数相等则不在阴影中。举例来说,从观察者36到像素38的光线35具有一次进入点33而没有离开点37。因此,像素38就是位在阴影中。同样的,从观察者36出发的光线31到达像素39前进入点33一次并离开点37一次,所以像素39不位在阴影中。
光迹追踪相当耗时,尤其是在多阻隔与多光源时。模板阴影锥算法简化了计算程序,仅利用一模板缓冲器(stencil buffer)执行简单的输入输出运算,又称为第二级模板缓冲器或SL2。该模板缓冲器,SL2,储存并执行每一像素数据以产生各种功能包含模板阴影锥算法。一像素是否位于阴影中,可藉由在一阴影锥多边形上的前平面和后平面(相对于视者或最深平面)上进行深度测试(Z-test)来判断。举例来说,如果前平面通过Z-test则该模板缓冲值累加,如果后平面通过Z-test则该模板缓冲值累减(decrement)。因此如果最后的模板值(stencil value)为零,该像素就不在阴影中。
图3是为模板阴影锥算法的流程图。步骤40,初始化清除模板缓冲器,步骤42,以漫射颜色(diffuse color)产生场景。在步骤43中,提供数据给颜色缓冲器和深度缓冲器(又称为Z-buffer)。在步骤44中,该深度缓冲器和颜色缓冲器更新关闭除了模板值留在深度缓冲器中之外。在步骤46中,对每一道光而言,每一阻碍物皆产生一模板值,并描绘出每一模板值的多边形前平面(front facing polygon)。步骤47,对于每一被描绘了多边形前平面的像素累加模板缓冲值。步骤48,对每一多边形后平面亦执行同样步骤,步骤49,对每一被描绘了多边形后平面的像素,累减其模板缓冲值。这些累加和累减的步骤称为模板阴影锥程序。步骤50,具有非零模板值的物体即位在阴影中,并据以描绘。步骤52,具有模板值为零的物体即不在阴影中,故以镜面颜色(specular color)描绘。此步骤又称为镜面着色程序。如图1所示,像素转换器22计算出颜色信息之后,储存在显示缓冲器24(framebuffer)中。
如图2所示,该像素38的模板缓冲值被累加了一次,因进入点33阴影锥多边形前平面的次数为一,且没有通过任何阴影锥多边形后平面所以模板缓冲值未被累减。于是像素38的模板缓冲值不为零。同样的,像素39进入点33,模板缓冲值加一,并离开点37,模板缓冲值减一。因此描绘时以镜面颜色描绘。本例仅包含单一障碍物和单一光源,但本模板阴影锥算法可适用于多障碍物与多光源的场合。
图4是为现有的压缩深度数据(Z-data)处理单元,又称为ZL1。利用ZL1处理一区块或一瓦片的深度数据,可以增进系统效能。瓦片中有些像素的深度数据超过ZL1的压缩格式范围,需由另一像素深度数据处理单元(又称为ZL2)处理。
ZL1和ZL2通常代表第一阶深度缓冲器和第二阶深度缓冲器。这类算法又有各种名称,例如Hyper Z和Heirarchy Z Buffer。这两阶深度缓冲器可以为更大处理单元和最小颗粒储存更高阶深度信息,例如一瓦片(tile),或屏幕上的一像素。ZL1的其中一项好处是在描绘管线(rendering pipeline)中可以减低计算深度数据的复杂度。
一瓦片产生器60为多个像素组成的一瓦片产生瓦片数据(tile data),例如八乘以八,并传送一要求至一ZL1高速缓存64。该瓦片数据被送至一压缩深度数据处理单元(ZL1)62。该ZL1 62亦与该ZL1高速缓存64沟通。对于深度数据不能被ZL1 62处理的像素,则由像素深度数据处理单元(ZL2)66搭配ZL2高速缓存68处理。在本例中该ZL1 62一周期可以拒绝多达64像素,而未被拒绝的像素则标上「接受」或「重试」以减轻ZL2 66的流量。
虽然ZL1 62降低了ZL2 66的内存读取流量,对解决模板运算并不算是很有效率。当进行模板运算时,ZL1 62将所有像素标上「重试」以确保每一模板运算不会遗漏。被拒绝的像素亦会对ZL2 66发出模板运算要求。因此在模板运算期间,ZL1 62必须耗费大量流量以滤除该结果。
当一ZL1瓦片(子瓦片)在深度比较(Z-compare)功能之后被接受或拒绝,这个现象尤其明显。因为即使该子瓦片通过Z-test,模板运算依然进行,ZL1 62必须将该子瓦片从接受状态切换成重试状态,并传送至ZL2 66。这时ZL2 66和该模板缓冲器SL2结合,使ZL2/SL2处理单元为32位,包含24位深度值和8位模板值。在接受和拒绝状态下,为了那8位的模板值,整个32位的深度值/模板值必须全部被读取。导致内存流量效率极差。其中一种解决方法是使用个别的模板缓冲器和深度缓冲器,使内存要求量降至极小。举例来说,对八个像素而言,对一8位模板值的像素的内存要求只需要64位,造成很大的内存流量浪费。

发明内容
本发明的一实施例提供一计算机绘图装置,以增进模板阴影锥运算(stencil shadow volume operation)的效能。该计算机绘图装置包含一压缩模板缓冲器以及一压缩模板缓冲器高速缓存。其中该模板缓冲器包含一压缩模板阴影锥纪录,对应一组像素。该压缩模板阴影锥纪录包含一瓦片参考模板值(tile reference stencil value)。该组像素包含一瓦片,该瓦片包含多个子瓦片,每一子瓦片包含多个区块(block)。该压缩模板阴影锥纪录更进一步包含多个区块参考值,对应于每一区块。该压缩模板阴影锥纪录更进一步包含多个像素级差值(pixel delta value),每一像素级差值对应该瓦片中的一像素。该压缩模板阴影锥纪录更进一步包含多个子瓦片修改标记位(subtile dirty bit),每一子瓦片修改标记位对应该瓦片中的一子瓦片。一像素模板值包含这些子瓦片修改标记位其中之一,该瓦片参考模板值,这些区块参考值其中之一,以及这些像素级差值其中之一。
本发明的另一实施例提供一绘图系统,包含一第一模板缓冲器,用于一组像素的一模板阴影锥运算,其中该组像素包含一瓦片。该第一模板缓冲器更进一步用于运算该组像素中一像素的一模板。该绘图系统亦包含一绘图处理器,用以产生一阴影效果,其中该阴影效果是通过该模板阴影锥运算产生,该绘图处理器储存一瓦片模板纪录于该第一模板范冲器中。该绘图系统更包含一第一模板缓冲器高速缓存,耦接该第一模板缓冲器。该绘图系统更进一步包含一第一深度缓冲器(depth buffer),用以储存一瓦片深度纪录。该绘图系统更进一步包含一第二深度缓冲器,用以储存一像素深度纪录,以及一第二模板缓冲器,用以储存一像素模板纪录。其中该第二深度缓冲器和该第二模板缓冲器结合,该像素模板纪录和该像素深度纪录结合。该绘图系统,更进一步包含多个子瓦片,包含该瓦片,以及多个区块,包含这些子瓦片其中之一。其中该瓦片模板纪录更进一步包含一瓦片参考模板值,多个区块模板值,各对应这些区块其中之一,多个像素级差值,各对应该瓦片中的一像素,以及多个子瓦片值,各对应该瓦片中多个子瓦片其中之一。
本发明的另一实施例提供一种绘图方法,用于运算模板阴影锥,包含下列步骤。首先,产生一瓦片模板阴影纪录,一像素模板阴影纪录,以及一瓦片三角值。最后利用该瓦片模板阴影纪录和该像素模板阴影纪录进行一模板阴影锥运算。其中多个像素包含一区块,多个区块包含一子瓦片,多个子瓦片包含一瓦片,以及该瓦片模板阴影纪录包含每一区块的模板数据。
本发明的另一实施例提供一阴影产生方法,用于一计算机绘图系统,包含下列步骤。首先,求得一子瓦片,用于压缩,该子瓦片关联于一压缩深度数据缓冲器。接着选择性地将该子瓦片清扫至一像素深度数据/模板缓冲器,该子瓦片在一压缩模板缓冲器中并无压缩。最后在一压缩模板缓冲器中进行模板阴影锥运算。其中该求得子瓦片的步骤更进一步检测一子瓦片状态。其中该子瓦片状态包含「重试」、「拒绝」和「接受」。
本发明的另一实施例提供一绘图方法,使计算机绘图系统在模板阴影锥运算时合并压缩模板数据至一像素模板缓冲器,包含下列步骤。首先判断一子瓦片满足一第一条件或一第二条件,其中该第一条件包含子瓦片过低(underflow),该第二条件包含子瓦片满溢(overflow)。当该第一条件或第二条件其中之一符合时,将一子瓦片状态从「接受」改变为「重试」。接着设定一子瓦片合并屏蔽,用以确认在一压缩模板缓冲器中的压缩模板数据,以清扫(flush)至一像素模板缓冲器。接着合并该压缩模板数据至该像素模板缓冲器,藉此产生一结果,为该压缩模板数据和该像素模板缓冲器的模板数据总和。最后重置该压缩模板缓冲器中的一子瓦片修改标记位,使其值为零,以及清除该压缩模板缓冲器中的压缩模板值。


图1为现有绘图管线方块图;图2为现有阴影锥的二维表示图;图3为现有模板阴影锥运算的方块图;图4为现有压缩z缓冲器的方块图;图5为本发明实施例的一的绘图系统;图6为本发明实施例所使用的瓦片格式;图7为本发明实施例的一的压缩模板缓冲数据格式;图8为本发明实施例的一的ZL1子瓦片状态检测逻辑电路;图9为本发明压缩模板缓冲器运算的实施例;图10为本发明实施例的SL1预处理步骤;图11为本发明实施例的SL1累加运算;
图12为本发明实施例的SL1累减运算;图13为本发明实施例的模板阴影锥程序合并运算;图14为本发明实施例的球面色彩合并运算;图15为本发明实施例的压缩模板缓冲器合并运算;以及图16为本发明实施例的模板阴影锥运算中的压缩模板缓冲器。
附图符号说明10~计算机主机 12~命令串行14~解码器 16~顶点转换器18~点阵转换器 20~深度测试器22~像素转换器 24~绘图缓冲器30~光源35~光线31~光线32~障碍物34~阴影锥 38~像素39~像素33~进入点37~离开点 60~瓦片产生器62~压缩深度数据处理单元ZL164~ZL1高速缓存66~像素深度数据处理单元ZL268~ZL2高速缓存500~计算机绘图装置 510~绘图处理器511~高速缓存 512~高速缓存514~高速缓存 516~逻辑电路520~内存 530~深度缓冲器540~模板缓冲器 550~单一缓冲器560~压缩深度缓冲器ZL1 562~深度数据570~压缩模板缓冲器SL1 572~模板值610~瓦片 620~子瓦片630~区块 640~像素700~数据纪录格式 710~8位参考值720~3位参考值 730~1位三角值740~1位的修改标记位
具体实施例方式
图5是为本发明实施例的基本架构图。一计算机绘图装置500中包含一绘图处理器510和内存520。该内存520也可以是系统或主存储器,与该绘图处理器510搭配使用。该内存520中特定的地址用做为深度缓冲器530,以及模板缓冲器540。该深度缓冲器530和模板缓冲器540数据结构亦可结合成一单一缓冲器550。举例来说,该数据纪录是32位,其中的24位是深度值,而8位是模板值。该单一缓冲器550储存每一像素的纪录。
内存520中另有特定地址做为压缩深度缓冲器ZL1 560,用以储存一组像素的深度数据(Z-data)562。该组像素可以是一瓦片,一子瓦片或多个瓦片。此外该内存520包含压缩模板缓冲器SL1 570,用以储存一瓦片的像素中的模板值572。一瓦片的像素可以是8乘以8,8乘以16或其它比例,视所需要的效能而定。
绘图处理器510中包含一高速缓存512做为压缩模板缓冲器SL1 570,和一高速缓存511用于压缩深度缓冲器ZL1 560,各用以储存压缩深度缓冲器ZL1 560和压缩模板缓冲器SL1 570纪录。绘图处理器510亦包含一高速缓存514,用以储存单一缓冲器550纪录。这些高速缓存512,高速缓存511和高速缓存514又称为SL1,Z11和ZL2/SL2。绘图处理器510更进一步包含逻辑电路电路516,用以在模板阴影锥运算中控制压缩深度缓冲器ZL1 560,压缩模板缓冲器SL1 570,深度缓冲器530和模板缓冲器540。该逻辑电路电路516亦可进行深度和模板阴影数据的压缩。该逻辑电路电路516可更进一步产生未压缩模板阴影数据542。此外,该逻辑电路电路516可选择性的合并关联于压缩模板缓冲器SL1 570和模板缓冲器540的模板值572和未压缩模板阴影数据542。
图6是为一瓦片格式的实施例。该瓦片610包含64个像素640,以8乘以8方式排列。该瓦片610亦分为四个子瓦片620,各包含8乘以2个像素。该瓦片610可以更进一步分割成16个区块630,各包含2乘以2个像素。
图7是为压缩模板缓冲器SL1 570数据纪录格式的实施例。在压缩模板缓冲器SL1 570中的模板值572包含每一瓦片610的纪录,对应压缩深度缓冲器ZL1 560中每一瓦片。该数据纪录格式700代表一个8乘以8的瓦片610,其中分为四个8乘以2的子瓦片620。该瓦片610更进一步分成16个2乘以2的区块630。该数据纪录格式700包含一8位参考值710用于该瓦片,一3位参考值720用于该16个区块630,以及1位三角值730用于每64个像素,和1位修改标记位740用于每个子瓦片。
该区块数据以4位的半字节(nibble)以及3位的进位位(carry)表示。该4位各代表该区块中每一像素的像素级差值(pixel delta value)。该3位进位位代表该区块的参考值。该数据格式是基于对于统计上某个比例像素而言,相邻两像素的模板值差异通常不大一。虽然相邻两像素的模板值差异在SL1中不能大于1,使用下列编码方式的像素却能达到动态范围-4到+4。
表1

图8是为在ZL1中检测子瓦片状态的逻辑电路的实施例。在步骤800中检查该子瓦片的D_Mask位值。该D_Mask是为该ZL1纪录中的一个位,用以表示该子瓦片是否需要描绘。在步骤810中,如果该D_Mask的值是零,则跳至步骤860,将该子瓦片的状态设为拒绝。反之跳至步骤820,检查该子瓦片的T_Mask值。在步骤830中,如果该T_Mask的值为0,则跳至步骤850,将该子瓦片的状态设为接受。反之如果该T_Mask的值为1,则跳至步骤840,将该子瓦片的状态设为重试。这些状态是用来判断该子瓦片是否适合SL1运算。
图9是为本发明其中一实施例。其中在模板阴影锥运算中的压缩模板缓冲器,SL1可以有许多不同的实作手法,本发明的精神并不限定于此。在步骤912中,在判断子瓦片深度数据的状态为「重试」、「接受」和「拒绝」之后,则判断该子瓦片是否需要经过SL1处理。在步骤914中,如果该子瓦片为重试,则表示该子瓦片不适合SL1处理,步骤跳至930,由SL2进行像素或区块等级的处理。反之,如果状态为「拒绝」或「接受」,则判定为适合SL1处理,跳至步骤916,判断该子瓦片信息是否可以压缩。判断原则是检查SL1是否足够容纳该子瓦片数据。如果不能压缩,跳至步骤918,将该子瓦片模板数据清扫至SL2。如果该子瓦片数据可以根据SL1数据纪录格式压缩至SL1,在步骤941中,在SL1中对该子瓦片进行模板运算。
在步骤940中,在SL1中对该子瓦片进行模板运算时,一SL1处理器920,发出一SL1要求至SL1高速缓存922,并将该子瓦片模板纪录的快取信息放入SL1 FIFO堆栈中924中。该SL1运算器926进行模板阴影锥算法的累加和累减运算,并合并压缩数据至SL2 930。此外,该SL1运算器926检查模板数据纪录的满溢或过少状态,以避免数据错误。
图10是为SL1预处理程序的实施例。在步骤1010中,ZL1中的子瓦片已知皆具有接受或拒绝状态,并需要SL1纪录。在步骤1020中,对SL1高速缓存执行快取命中测试,而SL1进入点则存入一FIFO堆栈以补偿内存存取的延迟。在步骤1030中,如果快取命中测试的结果是失误,则在步骤1040中产生一SL1内存要求。步骤1050,SL1进入堆栈。
图11是为在SL1中累加运算的实施例。步骤1110中,根据模板数据纪录的格式判断该瓦片参考值是否位于最大值。如果是,在步骤1120中,该SL1将整个瓦片的模板数据清扫至SL2使模板运算得以进行于一像素等级。如果否,在步骤1140中,判断是否每一瓦片具有「接受」状态。如果每一瓦片皆为接受状态,则在步骤1130中,累加瓦片参考值,完成累加运算程序。如果并非全部为接受状态,则在步骤1150中,检查每一区块的满溢状态。如果有任何一区块中的像素为满溢状态,则该区块为满溢状态。在步骤1160中,如果区块中没有任何像素满溢,则累加该子瓦片。在步骤1170中,任一子瓦片的该模板数据若具有满溢状态,则被清扫至SL2供模板运算。例如,在像素等级上的运算可在一区块或其它逻辑电路像素组上进行。
考虑一子瓦片在压缩模板缓冲纪录中的累加运算,瓦片参考值界于最小和最大值之间,而瓦片被切割为四个子瓦片,A,B,C和D。假设子瓦片C因为其中16个区块中至少一个过少而不具有接受状态,而该瓦片中其它区块没有过少状态。再假设子瓦片D因为其中16个区块中至少一个满溢而不具有接受状态,而该瓦片中没有其它区块满溢。因子瓦片A,B和C不具有满溢区块,对应这些区块的区块参考值被累加。因子瓦片D没有累加,则子瓦片D中所有像素的模板值被清扫至像素模板缓冲器。
图12是为本发明实施例之一的SL1累减运算。在步骤1210中,根据该模板数据纪录的格式判断瓦片参考值是否位于最小值。如果瓦片参考值是最小值,则在步骤1220中,SL1将整个瓦片的模板数据清扫至SL2。如果瓦片参考值不是最小值,则在步骤1240中,检查瓦片中每个子瓦片是否具有接受状态。如果瓦片完全是接受状态,在步骤1230中,该瓦片参考值被累减,完成累减运算。如果瓦片不完全是接受状态,则跳至步骤1250,检查过少状态。如果有任何区块中的像素为过少状态,则该区块为过少状态。如果没有任何区块为过少状态,则跳至步骤1260,累减该子瓦片。在步骤1270中,任何具有过少状态区块的子瓦片,被清扫至SL2。
以上述实施例中的压缩模板缓冲器纪录考虑累减运算。因子瓦片A,B和D不具有任何满溢区块,在子瓦片中所有区块中的区块参考值被累减。子瓦片C因为一个区块参考值过少而不能被累减,该子瓦片C中所有像素的模板值被清扫至该像素模板缓冲器。如果上述瓦片中所有子瓦片皆具有接受状态,则该瓦片参考值根据对应的累加和累减运算而改变。
如上所述,当SL1中一子瓦片修改标记位被设定,该SL1数据被合并至SL2。该合并运算求出SL1和SL2中该模板值的最终分布状况。合并运算可以在模板阴影锥程序或镜面着色程序进行。在模板阴影锥程序中,如图13所示,步骤1310,判断该子瓦片是否满溢或过少。在步骤1320中,如果判断结果为真,则该子瓦片状态转换为重试。此外,在步骤1330中,产生一SM_Mask,用以从SL1和SL2中合并数据。该SM_Mask是为一额外屏蔽,由SL1所输出,用以指出该SL1和SL2是否要合并。最后的值,即SL1+SL2,在步骤1340中写入SL2。在步骤1350中,如果数据已合并至SL2,则该SL1子瓦片修改标记位重置为零,以代表该子瓦片已清干净,在步骤1360中,藉此将该子瓦片模板值清除。动态合并法降低了每一子瓦片满溢和过少的机率。
图14是镜面着色程序的实施例,一ZL1中的位控制SL1和SL2合并运算的触发机制。步骤1410,开始。步骤1420,检查ZL1中的SL1瓦片修改标记位是否设定,步骤1430,检查SL1子瓦片修改标记位是否设定。如果上述步骤皆肯定答案,则在步骤1440中设定SM_Mask以通知ZL2进行SL1和SL2的合并。接着在步骤1450中,在模板比较之前进行SL1和SL2的合并,最后在步骤1460中将SL1和SL2的总和写入SL2。
SL1和S12的合并,由SM_Mask位的设置而表示。图15是为一般合并程序的实施例。在步骤1510中,从SL1中读取该SM_Mask的值。在步骤1530中,如果该SM_Mask的值是零,则跳至步骤1520,没有任何事情发生。反之,如果SM_Mask的值是一,则在步骤1540中,产生该SL1和SL2的总和,开在步骤1550中将最后值写入SL2。
图16代表本发明模板阴影锥运算时压缩模板缓冲器的实施例。在步骤1610中,产生一瓦片模板阴影纪录,对应一瓦片,其中该瓦片又分割为多个子瓦片,其中子瓦片再分割为多个区块,包含数个像素。此外,在步骤1620中,搭配瓦片模板阴影纪录,产生一像素模板阴影纪录以容纳每一像素的模板阴影值。在子瓦片模板数据超过该瓦片模板阴影纪录容量的情况下,该像素模板阴影纪录是必要的。此外,在步骤1630中,产生一瓦片深度纪录,对应该瓦片模板阴影纪录中像素的深度数据。在步骤1640中,尽可能利用瓦片模板阴影纪录执行模板阴影锥运算。若该瓦片模板阴影纪录不能容纳该模板阴影运算,则该运算在像素等级利用像素模板阴影纪录而进行。
以上提供的实施例已突显本发明的诸多特色。本发明虽以较佳实施例揭露如上,然其并非用以限定本发明的范围,任何熟习此项技艺者,在不脱离本发明的精神和范围内,当可做各种的更动与润饰。
权利要求
1.一计算机绘图装置,包含一压缩模板缓冲器;以及一压缩模板缓冲器高速缓存;其中,该压缩模板缓冲器包含一组像素的一压缩模板阴影锥纪录。
2.如权利要求1所述的装置,其中该压缩模板阴影锥纪录包含一瓦片参考模板值;该组像素包含一瓦片;该瓦片包含多个子瓦片;以及每一子瓦片包含多个区块。
3.如权利要求2所述的装置,其中该压缩模板阴影锥纪录更进一步包含多个区块参考值,其分别对应于每一区块;以及该压缩模板阴影锥纪录更进一步包含多个像素三角值,在此一像素级差值对应该瓦片中的一像素。
4.如权利要求3所述的装置,其中该压缩模板阴影锥纪录更进一步包含多个子瓦片修改标记位,在此每一子瓦片修改标记位对应该瓦片中的一子瓦片;一像素模板值包含这些子瓦片修改标记位其中之一;该瓦片参考模板值;这些区块参考值其中之一;以及这些像素级差值其中之一。
5.一绘图系统,包含一第一模板缓冲器,用于一组像素的一模板阴影锥运算,其中该组像素包含一瓦片,并且该第一模板缓冲器更进一步用于一像素的一种模板运算,该像素是该组像素中之一;一绘图处理器,用以产生一阴影效果,其中,该阴影效果是通过该模板阴影锥运算产生;一绘图处理器的逻辑电路,用以储存一瓦片模板纪录在该第一模板缓冲器中;以及一第一模板缓冲器高速缓存,其用以与第一模板缓冲器通信。
6.如权利要求5所述的系统,更进一步包含一第一深度缓冲器,用以储存一瓦片深度纪录。一第二深度缓冲器,用以储存一像素深度纪录;以及一第二模板缓冲器,用以储存一像素模板纪录,其中该第二深度缓冲器和该第二模板缓冲器结合,该像素模板纪录和该像素深度纪录结合。
7.如权利要求6所述的系统,更包含多个子瓦片,对应于该瓦片;以及多个区块,对应于这些子瓦片其中之一;其中该瓦片模板纪录更进一步包含一瓦片参考模板值;多个区块模板值,分别对应这些区块其中之一;多个像素级差值,分别对应该瓦片中的一像素;以及多个子瓦片值,各对应该瓦片中多个子瓦片其中之一。
8.如权利要求7所述的系统,更进一步包含动态清除逻辑电路,用以将一瓦片模板纪录选择性地清扫至该第二模板缓冲器,其中,该瓦片模板纪录在该第一模板缓冲器中并无压缩。
9.一模板阴影锥运算的方法,用于计算器绘图系统中,包含产生一瓦片模板阴影纪录;产生一像素模板阴影纪录;产生一瓦片深度值记录;以及执行模板阴影锥运算,其中该模板阴影锥运算利用该瓦片模板阴影记录,该模板阴影锥运算还利用该像素模板阴影记录。
10.如权利要求9所述的方法,其中多个像素对应于一区块;多个区块对应于一子瓦片;多个子瓦片对应于一瓦片;以及该瓦片模板阴影纪录包含每一区块的模板数据。
11.如权利要求10所述的方法,更进一步包含将一瓦片模板阴影纪录选择性地清扫至一像素模板缓冲器;所述瓦片中每一子瓦片的模板数据;该瓦片中每一像素的模板数据;以及一瓦片参考值。
12.一绘图系统,包含一模板阴影锥运算器,用以计算多个像素组的模板阴影锥,其中这些像素组包含一第一组像素,该第一组像素包含一第一数量的多个像素,这些像素组亦包含一第二组像素,该第二组像素包含一第二数量的多个像素,并且该第一数量大于该第二数量。
13.如权利要求12所述的系统,更进一步包含一单一模板阴影锥运算器,用以对单一像素做模板阴影锥运算;其中该单一像素是选自于该第一组像素或该第二组像素。
14.一阴影产生方法,用于一计算机绘图系统,包含求得一子瓦片,用于压缩,该子瓦片关联于一压缩深度数据缓冲器;选择性地将该子瓦片清扫至一像素深度数据/模板缓冲器,该子瓦片在一压缩模板缓冲器中并无压缩;以及在一压缩模板缓冲器中进行模板阴影锥运算。
15.如权利要求14所述的方法,其中,该求得子瓦片的步骤更进一步包括检测一子瓦片状态;其中该子瓦片状态包含「重试」、「拒绝」和「接受」。
16.如权利要求15所述的方法,其中清扫步骤更进一步包含如果该子瓦片状态为「拒绝」,则将该子瓦片清扫至该像素深度数据/模板缓冲器;检测该子瓦片状态的步骤更进一步包含读取一第一屏蔽值,其中,如果该第一屏蔽值为一,则该子瓦片状态为「拒绝」;以及读取一第二屏蔽值,其中,如果该第二屏蔽值为一,则该子瓦片状态为「重试」;以及如果该第二屏蔽值为零,则该子瓦片状态为「接受」。
17.如权利要求16所述的方法,其中,该求得步骤更进一步包含判断该子瓦片模板数据是否为一可压缩格式的步骤。
18.如权利要求17所述的方法,其中,该清扫子瓦片的步骤包含当该子瓦片状态为「拒绝」时清扫该子瓦片;以及当该子瓦片模板数据不可压缩时清扫该子瓦片。
19.如权利要求18所述的方法,其中,该进行模板阴影锥运算的步骤包含预处理该子瓦片模板数据;在此,并发送一要求至一压缩模板缓冲器高速缓存;以及将该压缩模板缓冲器高速缓存的数据储存于一先进先出压缩模板缓冲器中。
20.如权利要求19所述的方法,其中,该进行模板阴影锥运算的步骤更进一步包含选择性地累加一压缩模板纪录;其中如果一瓦片参考值为最大值,则该压缩模板纪录不累加。
21.如权利要求20所述的方法,更进一步包含如果一瓦片中每一子瓦片状态为「接受」,则累加该瓦片参考值;如果该瓦片中任何一子瓦片状态为「拒绝」,则检查该子瓦片中的每一区块是否满溢;以及如果该子瓦片中无任何区块满溢,则累加子瓦片参考值。
22.如权利要求21所述的方法,其中,该进行模板阴影锥运算的步骤更进一步包含选择性地累减一压缩模板纪录;其中,如果一瓦片参考值为最小值,则该压缩模板纪录不累减。
23.如权利要求22所述的方法,更进一步包含如果一瓦片中每一子瓦片状态为「接受」,则累减该瓦片参考值;如果该瓦片中任一子瓦片状态为「拒绝」,则检查该子瓦片中每一区块是否过低;以及如果该子瓦片中无任何区块过低,则累减子瓦片参考值。
24.一种在模板阴影锥运算时合并压缩模板数据至一像素模板缓冲器的方法,用于计算机绘图系统,该方法包含判断一子瓦片是否满足一第一条件或一第二条件,其中该第一条件包含子瓦片过低,该第二条件包含子瓦片满溢;当该第一条件或第二条件其中之一符合时,将一子瓦片状态从「接受」改变为「重试」;设定一子瓦片合并屏蔽,用以确认在一压缩模板缓冲器中的压缩模板数据,以清扫至一像素模板缓冲器;合并该压缩模板数据至该像素模板缓冲器,藉此产生一结果,为该压缩模板数据和该像素模板缓冲器的模板数据总和;重置该压缩模板缓冲器中的一子瓦片修改标记位,使其值为零;以及清除该压缩模板缓冲器中的压缩模板值。
25.如权利要求24所述的方法,其中,该合并步骤包含从该压缩模板数据中读取该子瓦片合并屏蔽;如果该子瓦片合并屏蔽为零,则忽略该压缩模板数据;以及如果该子瓦片合并屏蔽为一,则合并该压缩模板数据至该像素模板缓冲器。
26.一种在镜面色彩运算时合并压缩模板数据至一像素模板缓冲器的方法,用于计算机绘图系统中,包含读取一瓦片修改标记位,若该瓦片修改标记位为零,则不执行合并运算;读取一子瓦片修改标记位,如果该子瓦片修改标记位为零,则不执行合并运算;设定一子瓦片合并屏蔽,用以确认压缩模板数据,以及予以清扫;合并该压缩模板数据和像素模板数据;以及将该压缩模板数据和像素模板数据的总和写入该像素模板缓冲器。
全文摘要
本发明提供一阴影锥算法以增进阴影产生的效能,用于计算机绘图系统。在一实施例中提供了一方法和装置,利用了已压缩和未压缩的模板缓冲器的组合,并搭配已压缩和未压缩的深度数据缓冲器。一未压缩模板缓冲器可用于储存每一像素的模板阴影锥数据,而压缩模板缓冲器可用于储存一组像素的模板阴影锥数据。该压缩模板缓冲器利用了高速缓存以增进运算效率。
文档编号G06T15/00GK1722175SQ20051009213
公开日2006年1月18日 申请日期2005年8月19日 优先权日2004年8月23日
发明者徐建明, 陈文中, 王渊峰, 李亮, 约翰·柏拉勒斯, 博里斯·普罗科彭科 申请人:威盛电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1