执行透明度向覆盖率转换的方法

文档序号:6612371阅读:232来源:国知局

专利名称::执行透明度向覆盖率转换的方法
技术领域
:本发明相关于一种执行透明度向覆盖率转换的方法,尤其指一种利用一像素着色器(pixelshader)的特定指令以执行透明度向覆盖率转换的方法。
背景技术
:3D立体电脑绘图的技术主要专注于如何产生或表示一个立体物件的平面图像以显示或展示于一显示装置上。该物件可为一种筒单的几何图元(geometryprimitive),例如点、直线片,殳、三角形、或多边形。经由用一系列的连接平面多边形(planarpolygons),可在显示装置上表示较复杂的物件,例如以一系列的连接平面三角形,可展示一个复杂物件。而且所有几何图元最后都可用一个顶点(vertex)或一组顶点描述,例如用定义多边形线段片段终点或中心的座标(x,y,z)来描述。为产生一个可投射在电脑屏幕或其它显示装置上,代表立体图元的平面图像的数据组,该图元的多数个顶点会经一系列运算,或是在图形表示流水线(graphics-renderingpipeline)中经过多级处理。一般的流水线只是一系列串"^妻的处理单元或处理级(stages),其中前一级的输出^^皮当成下一级的输入。在图形处理器的环境中,举例而言,这些处理级包含每个顶点运算(per-vertexoperations)、图元组合运算(primitiveassemblyoperations)、像素运算(pixeloperations)、质地组合运算(textureassemblyoperations)、描画运算(rasterizationoperations)及片段运算(fragmentoperations)等。在典型的图形显示系统中,图像数据库(imagedatabase),如命令列表,可存储在场景(scene)中的各物件的描述。其中,该多个物件是以覆盖该物件表面的多数个小多边形来描述,且其方法与多数个贴砖(tiles)覆盖墙或其它表面的方式相同。每个多边形都是以顶点座标(在"Model"座标系统中的X,Y,Z)列表、材料表面特性规格(如色彩、质地、光泽等),及到每个顶点表面的法向向量(normalvectors)所描述。对具有复杂曲面的立体物件而言,一般而言该多个多边形必须为三角形或四边形,且后者亦可再分解成多数个三角形对。转换引擎(transformationengine)会才艮据使用者所输入的选定观看角度,转换物件座标。此外,使用者亦可指定观景(fieldofview)、产生的图像尺寸及三维视景体(viewingvolume)后端,以藉此包含或消除想要的背景。一旦已选定观看区(viewingarea),修剪逻辑电路(clippinglogic)即会消除落在观看区的外的多边形,及^f'f剪部分在观看区之内且部分在观看区的外的多边形。这些经修剪的多边形以对应于观看边缘的新边缘,对应于落在观看区之内的多边形部分。多边形的顶点会被传送到下一个特定座标的处理级,其中该座标的X、Y座标对于观看屏幕(viewingscreen),且该座标的Z座标对应于每个顶点的深度。在一个典型的系统中,接下来会考虑光源而施加照明模型。具有个别色彩值(colorvalue)的多边形,接下来会被传送至一个点阵转化器(rasterizer)。对每个多边形而言,点阵转化器会决定那些像素位置会被多边形覆盖,并尝试将相关色彩值与深度,写入帧緩冲器(framebuffer)。点阵转化器会将正接受处理的多边形的深度值,与已入帧缓冲器的像素深度值相比较。如果新多边形的像素深度值较低,则代表其位于写入帧緩沖器的多边形之前,因为新多边形会让先前处理过并已写入帧緩冲器的多边形显得更加模糊,所以接下来其值会取代在帧緩冲器中的数值。这种处理会持续进行,直到所有多边形多都,皮会阵转化过为止。此时,-现频控制器(videocontroller)会以一次一个光4册(raster)扫描行(scanningline)的方式,在显示器上显示帧緩冲器的内容。执-f亍实时表示(real-timerendering)的一般方法,是以位于多边形之内或位于多边形的外的像素显示多边形。其所产生的用来定义多形的边缘,会在静态显示屏幕(staticdisplay)上,表现出缺口状(jaggedlook),及在动态显示屏幕(animateddisplay)上,表现出爬4亍状(crawlinglook),上述产生的问题称为锯齿效应(aliasing),而用来降低或消除该问题的方法,称为抗锯齿效应(anti-aliasing)技术。以屏幕为基础的抗锯齿效应方法因其只用到流水线的输出取样,所以不需要得知正在表示的物件知识。抗锯齿效应方法常使用一种称为多取样抗锯齿效应(Multi-SampleAnti-Aliasing,MSAA)的线性抗锯齿效应4支术,该技术在一单一处理中,会对每个像素使用一个以上的取样。每个像素的取样或子像素(sub-pixel)的个数,一皮称为取样率(samplingrate),当取样率增加时,相关的存储器流通量也会相对增加。请参考图3,图3为公知电脑绘图系统中绘图流水线的特定模组的功能方块图。绘图流水线的模组会因系统需求而变,且可以多种方式实现。绘图的顶点数据被传送到一顶点着色器(vertexshader)12。顶点着色器12可在从命令列表中所接收的绘图数据上,执行各种转换。其中,该数据可从世界座标(Worldcoordinates)转换成才莫型7见点座标(ModelViewcoordinates),再转换成投射座标(Projectioncoordinates),最后再转换成屏幕座标(Screencoordinates)。顶点着色器12所执行的功能处理为本领域技术人员所熟知,因此在此不再赘述。接下来,绘图数据会再被传送至一点阵转化器(rasterizer)14。而图元相关的像素信息,会被传送至像素着色器16,像素着色器16会决定已表示且被判定较先前存储像素更接近观看者的图元之内的每个像素的色彩信息。像素表示(pixelrendering)18会在位于图元之内的每个像素上,执行一个深度测试。所存储的深度值可提供一指定像素位置上先前表示图元的深度。如果目前的深度值较存储的深度值接近观看者的眼睛,则目前的深度值会取代所存储的深度值,而且目前的绘图信息(如色彩)会取代在对应帧緩冲器中由像素着色器16所决定的像素位置的色彩信息。如果目前的深度值并非较所存储的深度值更为接近观看者的眼睛,则因为先前表示的像素确实是在目前像素之前,所以帧缓冲器及深度缓冲两者的内容都不会被取代。
发明内容本发明的目的的一提供一种执行透明度向覆盖率转换的方法,以加速透明度向覆盖率转换。本发明提供一种执行透明度向覆盖率转换的方法,包含一像素着色器将一像素的透明度栏的数据与该像素的多个子取样的阈值进行比较以产生多个覆盖率掩模;将该多个覆盖率掩模存储于该像素的透明度栏的多个最低有效位中;及根据存储于该像素的透明度栏的该多个覆盖率掩模,更新该像素的多个子取样的数据。本发明还提供一种执行透明度向覆盖率转换的方法,包含输入一指令以触发一像素着色器将一像素的透明度栏的数据与该像素的多个子取样的多个阈值进行比较以产生多个覆盖率掩模;及根据存储于该像素的透明度栏的多个覆盖率掩模,更新该子取样的数据。图1为公知电脑绘图系统中绘图流水线的特定模组的功能方块图。图2为执行透明度向覆盖率转换的方法的示意图。图3为透明度栏的示意图。图4为执行透明度向覆盖率转换的方法的流程图。图5为本发明执行透明度向覆盖率转换的方法的第一实施例的示意图。图6为使用抖颤表执行透明度向覆盖率转换的方法的示意图。图7为本发明执行透明度向覆盖率转换的方法的第二实施例的示意图。主要元件符号说明12顶点着色器14点阵转化器16像素着色器18像素绘示具体实施例方式请参考图2,图2为执行透明度向覆盖率(alpha-to-coverage)转换的方法的示意图。透明度向覆盖率转换是一种不需要将物件排序而可描绘物件的边缘透明度及物件之外掩蔽(mask)的方法。执行透明度向覆盖率转换时,一像素的透明度栏被转换成对应的覆盖率,以对应n倍的多重取样反锯齿(MSAA)中n个子取样(sub-sample)的n位而形成覆盖率掩才莫(coveragemask),并且将对应比率的数量设定为1。以4倍的多重取样反锯齿为例,透明度栏为0时覆盖率掩模为OOOOb,透明度栏为1时覆盖率掩模为1111b,而0至1之间的值就转换为对应的覆盖率掩冲莫。覆盖率掩模和该像素对应的各子取样的深度测试的结果,产生有效位(validMt),再利用与门运算,以对应的覆盖率掩模将有效的子取样留下。如此,造成以覆盖率对应的递色(dithering)效果,所以在使用多重取样反锯齿处理图形后,图形就和背景产生混色(blend)效果了。请参考图3,图3为透明度栏的示意图。应用程序的透明度栏为oO.w,并且应用程序可通过设定一旗标enA2C来开启透明度向覆盖率转换的功能。透明度栏为32位的浮点数,在启动透明度向覆盖率转换的功能后,透明度栏会被设定为覆盖率的透明度oc,精确度的要求很低。因此,在本发明实施例中,利用透明度栏的n个最低有效位(leastsignificantbit,LSB)来存储覆盖率掩模。此外,会用到透明度栏的图形处理程序还包含透明度测试(alpha-test,AT)及透明度混色(alphablend),当旗标enA2C被设定为0时,透明度oc的数据就是透明度栏中的32位的浮点数。当旗标enA2C被设定为1时,透明度栏的n个最低有效位就被设定为0,而透明度a的数据还是由透明度栏中得到。如此,覆盖率掩模就可以被编码在透明度栏的n个最低有效位上,而不需使用输出寄存器。请参考图4及图5,图4为执行透明度向覆盖率转换的方法的流程图,图5为本发明执行透明度向覆盖率转换的方法的第一实施例的示意图。透明度向覆盖率转换的方法主要是将透明度栏中的透明度和对应多重取样反锯齿的n个子取样的阈值(threshold)分别比4交,以得到n位的覆盖率掩模。透明度向覆盖率转换的方法包含下列四个步骤。步骤110:用像素着色器原有的It(小于),le(小于等于),gt(大于)或ge(大于等于)等比较指令,将一像素输出的最后颜色中的透明度栏(oO.w),和4个子取样阈值进行比较,将比较结果放于4栏中;步骤120:根据4栏中比较结果,用move(有条件地搬移)指令,分别决定覆盖率掩模中的4个位,4个位还是分别被存储于4栏中;步骤130:将透明度栏(oO.w)中最后4个最低有效位更新为G,利用一个"与"(and)指令来掩蔽最低有效位;步骤140:汇集4个位于透明度栏(oO.w)中的覆盖率掩模。步骤110至140并非绝对循序的,如图4所示。步骤IIO、120是因为比较指令只能输出真/假(true/false)的二元结果,若结果为真则结果栏所有的位全为1,若结果为假则结果栏所有的位全为0,所以需要多一个指令将比较结果转为覆盖率掩模中的对应位。步骤130、140是为了将覆盖率掩模编码入透明度栏(oO.w)。以4倍的多重取样反锯齿为例,若以像素着色器原有的指令集来处理上述4个步骤,至少需要7道指令,因此在本发明实施例中,以1道新增的指令a2c处理上述4个步骤,该新增的指令可以完全作用于透明度栏(oO.w),而不必指定来源/结果寄存器,但若加入适当的来源/结果寄存器,就可以增加软件转换像素着色器指令的灵活性,例如当oO.w由一个单独mov(搬移)指令输出时,可直接以a2c取代而不用增加指令。根据本发明实施例,透明度向覆盖率转换的4个步骤被综合为一个a2c指令,豸斤增的a2c指令的才各式为a2cdest[.mask],src0[.swizzle],srcl[.swizzle],用于像素着色器中,a2c指令的作用为分别比较来源寄存器和对应多重取样反锯齿的子取样的4个阈值,并将产生的覆盖率掩模存储于结果寄存器的4个最低有效位(bit3-bit0)。举例来说,scrl的4栏和对应多重取样反锯齿的子取样的4个阈值,例如利用lt指令比较时,4个阈值分别为0.125、0.625、0.875及0.375,小于则将输出寄存器对应的最低有效位设为1,否则设为0,其它位则由src0中对应的位直接搬入。利用a2c指令可和原有的比较指令共用硬件,只需增加指定输出结果的硬件,而来源/结果寄存器的栏位都可使用原有的硬件,不会增加太多硬件成本,却可大大提高处理的效率。请参考图6,图6为使用抖颤表执行透明度向覆盖率转换的方法的示意图。为了达到更好的效果,透明度向覆盖率转换的递色还需要进一步的扰动(disturbing),才能避免产生太一致的图案(pattern)。抖颤的方法可以利用各种乱数或屏幕位置,目前常用屏幕位置抖颤的方法,比较能控制图案的效果。同样以4倍的多重取样反锯齿为例,根据像素的屏幕位置,循环性地查询一8x8的抖颤表(dithertable),找出一介于+/-0.5的乱数,透明度栏加上该乱数后,再和覆盖率掩模中各位的阈值分别比较,就可得到4位的覆盖率掩模。接着,将覆盖率掩模和该像素对应的各子取样的深度测试结果做与门运算,可达到质量较好的透明度向覆盖率转换。请参考图7,图7为本发明执行透明度向覆盖率转换的方法的第二实施例的示意图。图6中产生的抖颤表可存储于一新增的材质(texture)或定值(constant)中,利用读取(Id)指令读取材质,或用索引(index)读取定值以得到乱数,并加入透明度栏中形成抖颤,再用a2c指令得到覆盖率掩模。增加的抖颤的方法包含4个步骤,可用原有的4个像素着色器的指令完成。当抖颤表存储于新增的材质中时,步骤如下步骤210:将屏幕二维位置,由浮点数转为整数,需要一个转换指令ftoir,步骤220:将步骤210得到的二维整数,以一个"与"(and)指令来掩蔽出查抖颤表需要的index,如8x8的抖颤表,就掩蔽3个LSB。此步骤也可用udiv指令的余数(remainder)功能达到;步骤230:以步骤2掩蔽出的座标读取抖颤表。需要一个材质读取(ld)指令;步骤240:将步骤3读出的结果,加入透明度栏形成抖颤,需要一个"加"(add)指令。当抖颤表存储于新增的定值中时,因为定值只能以一维座标索引(index),则步骤230及步骤240分别改为步骤330及步骤340。步骤330:以步骤220掩蔽出的二维座标,以一个乘加(mad)指令得出抖颤表的定值索引;步骤340:以步骤330求出的索引,索引出定值加入透明度栏形成抖颤,需要一个加(add)指令。以上两种方法均可用原有的4个像素着色器的指令完成,最后再用a2c指令得到覆盖率掩模,即可实作画质较好的透明度向覆盖率转换的方法。本发明实施例以4倍的多重取样反锯齿处理透明度向覆盖率转换为例子,然而并非限制本发明的范筹,2倍的多重取样反锯齿及1倍的多重取样反锯齿(即无多重取样反锯齿)也可完全适用。此外,当执行大于4倍的多重取样反锯齿时,因为a2c指令只能平行地比较4个对应多重取样反锯齿的子取样的阈值,也只能将覆盖率掩模编入4个最低有效位中。因此,上述的a2c指令可以一般化为一群a2c-m的指令来处理。例如处理4倍的多重取样反锯齿的a2c指令即a2c—1,处理8倍的多重取样反锯齿即需要由a2c_l及a2c-2,处理16倍的多重取样反锯齿即需要由a2c-l、a2c—2、a2c—3及a2c一4。每个a2c-m指令负责分别比较对应多重取样反锯齿的子取样的4个阈值,将产生的覆盖率掩模存储于结果寄存器的bit(4m-l)-bit(4m-4)的4位。综上所述,本发明利用像素着色器来处理执行透明度向覆盖率转换的方法,可增加效率,此外将该像素的覆盖率掩模存储于透明度栏的最低有效位,可节省成本。像素着色器将该一像素的透明度栏的数据与该像素的多个子取样的阈值进行比较以产生多个覆盖率掩模,并将该多个覆盖率掩模存储于该像素的透明度栏的多个最低有效位中,最后根据存储于该像素的透明度栏的该多个覆盖率掩模,更新该像素的多个子取样的数据。本发明执行透明度向覆盖率转换的方法可使用软件或硬件来实作,用软件操作时,可利用单独的工具程序,或是成为程序载入程序(ProgramLoader)或装置驱动程序(DeviceDriver)的一部份,或附加于编辑器(Compiler)。用硬件操作时,于像素着色器的指令提取(Fetch)或解码(Decode)之前,内含于图形处理器或像素着色器中。以上所述仅为本发明的较佳实施例,凡依本发明权利要求所进行的等效变化与修改,皆应属本发明的涵盖范围。权利要求1.一种执行透明度向覆盖率转换的方法,包含一像素着色器将一像素的透明度栏的数据与该像素的多个子取样的多个阈值进行比较以产生多个覆盖率掩模;将该多个覆盖率掩模存储于该像素的透明度栏的多个最低有效位中;及根据存储于该像素的透明度栏的该多个覆盖率掩模,更新该像素的多个子取样的数据。2.如权利要求l所述的方法,其中该像素着色器将该像素的透明度栏的数据与该像素的多个子取样的多个阈值进行比较以产生多个覆盖率掩模包含比较该像素的透明度栏的数据与该像素的多个子取样的多个阈值,并将一比较结果存储于一寄存器中;及根据该比较结果产生该多个覆盖率掩模,并将该多个覆盖率掩模存储于该寄存器中。3.如权利要求l所述的方法,还包含由该寄存器中存取该多个覆盖率掩模。4.如权利要求l所述的方法,其中该像素着色器将该像素的透明度栏的数据与该像素的多个子取样的多个阈值进行比较,以产生多个覆盖率掩模,该像素着色器将该像素的透明度栏的数据与该像素的四个子取样的四个阈值进行比较以产生四个覆盖率掩模。5.如权利要求1所述的方法,还包含启用一透明度向覆盖率转换的旗标。6.如权利要求1所述的方法,还包含通过一显示面板的座标位置产生一抖颤表;产生该抖颤表的多个索引;根据该多个索引读取该抖颤表;及将由该抖颤表读取的定值加入该像素的透明度栏。7.如权利要求l所述的方法,还包含产生该像素的每一子取样的深度测试的数据;及将该像素的覆盖率掩模及子取样的深度测试的数据进行与门运算。8.如权利要求l所述的方法,还包含执行一比较该阈值及产生该覆盖率掩模的指令。9,一种执行透明度向覆盖率转换的方法,包含输入一指令以触发一像素着色器将一像素的透明度栏的数据与该像素的多个子取样的多个阈值进行比较以产生多个覆盖率掩才莫;及根据存储于该像素的透明度栏的多个覆盖率掩模,更新该子取样的数据。10.如权利要求9所述的方法,其中该像素着色器将一像素的透明度栏的数据与该像素的多个子取样的多个阈值进行比较,以产生多个覆盖率掩模包含比较该像素的透明度栏的数据与该像素的多个子取样的多个阈值,并将一比较结果存储于一寄存器中;及根据该比较结果产生该多个覆盖率掩模,并将该多个覆盖率掩模存储于该寄存器中。11.如权利要求9所述的方法,其中输入该指令进一步触发存取该寄存器中的该多个覆盖率掩^C12.如权利要求9所述的方法,其中该像素着色器将该像素的透明度栏的数据与该像素的多个子取样的多个阈值进行比较,以产生多个覆盖率掩模,该像素着色器将该像素的透明度栏的数据与该像素的四个子取样的四个阈值进行比较以产生四个覆盖率掩模。13.如权利要求9所述的方法,其中输入该指令进一步触发启用一透明度向覆盖率转换的旗标。14.如权利要求9所述的方法,还包含通过一显示面板的座标位置产生一抖颤表;产生该抖颤表的多个索引;根据该多个索引读取该抖颤表;及将由该抖颤表读取的定值加入该像素的透明度栏。15.如权利要求9所述的方法,还包含,产生该像素的每一子取样的深度测试的数据;及将该像素的覆盖率掩模及子取样的深度测试的数据进行与门运算。16.如权利要求9所述的方法,其中输入该指令进一步触发存储该多个覆盖率掩模于该像素的透明度栏的多个最低有效位中。全文摘要利用一像素着色器来处理执行透明度向覆盖率转换,并将该像素的覆盖率掩模存储于透明度栏的最低有效位。该像素着色器将该一像素的透明度栏的数据与该像素的多个子取样的阈值进行比较以产生多个覆盖率掩模,并将该多个覆盖率掩模存储于该像素的透明度栏的多个最低有效位中,最后根据存储于该像素的透明度栏的该多个覆盖率掩模,更新该像素的多个子取样的数据。本发明并提供一新指令a2c来加速阈值的比较及覆盖率掩模的产生。文档编号G06T15/20GK101393650SQ20071015430公开日2009年3月25日申请日期2007年9月17日优先权日2007年9月17日发明者徐日明申请人:矽统科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1