可调变式的拼块景深滤除方法
技术领域
本发明涉及的是一种三维计算机绘图***中图形处理的技术,特别涉及的是在一种在立体绘图对象的景深关系维持的***及方法,供应用在数字相机(DSC)、数字摄影机(DV)、个人数字助理器(PDA)、行动电子设备、第三代行动电话、手持式行动电话或智能型手机等可携手持式装置上,但并不限定为上述装置。
背景技术
近年来,市场上对在手持式可随身型电子产品的需求日益增加,与此同时,三维绘图***的省能效果,在特别需要讲究低耗能小体积的手持式可随身型电子产品中的地位也越形重要。在三维绘图***中,运算过程中的海量存储器存取部分是最关键的能量耗散;三维绘图***中包含五种型态的内存存取:材质资料读取(Texture Read)、景深暂存区(Depth Buffer or Z Buffer)资料读取(Z Read)、景深暂存区资料写入(Z Write)、彩度暂存区资料读取(Color Read)、以及彩度暂存区资料写入(Color Write);根据这五种内存存取所需的内存频宽大小来看,其中,景深暂存区资料读取(ZR)占了当中至少40%的频宽;因此针对景深暂存区资料读取(ZR)的动作实施最佳化,对在能量耗散的减少可以有较好的结果。
先前Morein曾提出一种最大景深的滤除法(Zmax),是切割绘图区(DisplayRegion)成若干拼块,并以拼块内的所有像素景深的最大值(Zmax)为滤除分类条件;当目前要画的拼块,其最小的景深大在先前画的拼块景深最大值(Zmax),那么目前拼块内的所有绘点都是属在被遮住的绘点应予以丢弃。Morein的方法节省了三维绘图中,那些被遮住的对象的绘点将来在景深暂存区(Z-Buffer)的存取与景深比对(Z Test)的操作。Mller另外提出一种最小景深的滤除法(Zmin),是切割绘图区(Display Region)成若干拼块,并以拼块内的所有像素景深的最小值(Zmin)为滤除分类条件;当目前要画的拼块,其最大的景深小在先前画的拼块景深最小值(Zmin),那么目前拼块内的所有绘点都视为可见绘点予以保存。Mller的方法节省了三维绘图中,那些未被遮住的对象的绘点在景深暂存区(Z-Buffer)读取所占的频宽。Yuand Kim也提出了他们的滤除法,同样地,绘图区(Display Region)被切割成若干拼块,不同的是,拼块内设的景深滤除条件是固定的,称为景深平面滤除法(Depth PlanFilter),同时对应拼块像素还有一个景深平面标志(DF-flag),其大小为拼块内的像素数目;当目前拼块内像素的景深小在此拼块设定的景深条件时(Depth Plan),其对应的拼块像素的景深平面标志(DF-flag)会被标志为1;而当目前拼块内像素的景深大在此拼块设定的景深条件时(Depth Plan),其对应的拼块像素的原景深平面标志(DF-flag)会被提出,若原景深平面标志为1的话,代表的前绘过一个绘点其景深值小在目前要绘的绘点,所以目前的绘点属在被遮住的绘点应予以丢弃。
很明显地,Morein的最大景深滤除法(Zmax)只滤掉了被遮住的点,而Mller的最小景深的滤除法(Zmin)只滤掉了未被遮住的点,另外Yu and Kim的滤除法的效益跟其定义的景深平面数值有很大的关系,特别是动态的场景更难抓住其景深的变化。
发明内容
本发明的目的在于,克服所述的缺陷,节省内存频宽,有较细分的滤除分类外,还动态的去调变拼块的大小,当场景需要换新的时候,本来是需要清除景深暂存区(Z Buffer)里的所有景深值,并全部换上***中最大的景深值,以免在作新的景深比对时发生错乱。
为实现上述目的,本发明采用的技术方案在于,提供一种可调变式的拼块景深滤除***,其包括:
一个三维贴图几何演算装置,供以处理三维立体对象绘图中三角贴图组的几何运算,并将绘图区(Display Region)切割为若干拼块(Tile),以该拼块组作为该三角贴图组的扫描单位(Scan Unit);
一个可变式拼块景深滤除装置,供以滤除该三角贴图组中被剔除(Rejected)绘点(Point)、不需景深读取(No-z-read)绘点、以及正常(Normal)绘点;
一个拼块暂存内存区(Tile Buffer),供以暂时存放该拼块组的像素(Pixel)掩盖屏蔽(Coverage Mask)、景深范围(Zmax and Zmin)、以及拼块模式(Mode)的资料,该像素景深屏蔽供记录该拼块内像素是否为绘过的点,该景深范围供记录该拼块内已绘过的像素景深的上下限,该拼块模式供记录该拼块的模式;
该可调变式拼块景深滤除装置为一个扫描所有该三角贴图组的回路装置,该三角贴图组回路又内含一个扫描所有该拼块组回路,该拼块组回路又内含一个扫描该拼块所有像素的回路;在该像素回路内,先有一个像素景深计算器供以计算目前所在拼块内该三角贴图对应该像素的景深值(Z Value),接着一像素景深分类比较器,根据拼块暂存内存回传该拼块的像素掩盖屏蔽、景深范围、以及拼块模式的资料,与该像素的景深值作比较与分类,将该像素分为被遮住像素(OccludedPixel)、不被遮住像素(Non-occluded Pixel)、未确定像素(Uncertain Pixel)、或未绘过像素(Uncovered Pixel);接着一个像素绘点(Point)分类比较器,供以将上述四种像素类分为不需景深值读取绘点,正常绘点与被剔除绘点;不被遮住像素与未绘过像素属在不需景深值读取绘点(No-z-read),未确定像素属在正常绘点(Normal),被遮住像素属在被剔除(Reject)绘点;在该像素回路全部做完的后,接着一个拼块资料更新器,供以更新拼块暂存内存区内该拼块的现在像素掩盖屏蔽、以及现在景深范围的资料;接着一个像素掩盖屏蔽分类比较器,处理该更新后的像素掩盖屏蔽的资料并加以分类;若该拼块的全部像素皆为绘过的像素,该拼块切割成两个或多数个副拼块;若该拼块只有部分像素为绘过的像素,该拼块此部分切割成一个或多数个副拼块,而原拼块未被切割的其它部分为一个副拼块;未经切割的该拼块,直接跳到该拼块循环底部,进入下一个拼块;已经切割的拼块,进入一个副拼块回路;此副拼块回路内含一个副拼块像素回路,在该副拼块像素回路内,先有一个副拼块像素景深计算器供以计算目前所在副拼块内该三角贴图对应该像素的景深值(Z Value),接着一个副拼块像素景深分类比较器,根据该拼块暂存内存回传该副拼块的像素掩盖屏蔽、景深范围、以及副拼块模式的资料,与该副拼块像素的景深值作比较与分类,将该副拼块像素分为被遮住像素(Occluded Pixel)、不被遮住像素(Non-occluded Pixel)、未确定像素(Uncertain Pixel)、或未绘过像素(Uncovered Pixel);接着一个副拼块像素绘点(Point)分类比较器,供以将上述四种像素类分为不需景深值读取绘点,正常绘点与被剔除绘点;不被遮住像素与未绘过像素属在不需景深值读取绘点,未确定像素属在正常绘点(Normal),被遮住像素属在被剔除绘点;在该副拼块像素回路全部做完的后,接着一个副拼块资料更新器,供以更新拼块暂存内存区内该副拼块的像素掩盖屏蔽、以及景深范围的资料。
同时提供了一种可调变式的拼块景深滤除方法,其中包括下列步骤:
经由三维贴图几何演算,处理三维立体对象绘图中三角贴图组的几何结构,并将绘图区(Display Region)切割为若干拼块(Tile),并以该拼块组作为该三角贴图组的扫描单位(Scan Unit);
该三角贴图组的几何资料经由一个可变式拼块景深滤除处理,以滤除该三角贴图组中被剔除(Rejected)绘点(Point)、不需景深读取(No-z-read)绘点、以及正常(Normal)绘点;处理过程乃先建立该拼块组的像素掩盖屏蔽(Coverage Mask),负责记录该拼块组内像素是否被绘图过的情形,同样再建立负责记录该拼块内像素景深上下限的景深范围(Zmax and Zmin),还建立负责记录拼块现模式的拼块模式(Tile Mode),再经过三层回路演算;此三层分别为扫描所有该三角贴图组的回路,该三角贴图组回路又内含一个扫描所有该拼块组回路,该拼块组回路又内含一个扫描该拼块所有像素的回路;在该像素回路内,先计算目前所在拼块内该三角贴图对应该像素的景深值(Z Value),接着根据该拼块的前的像素掩盖屏蔽、景深范围、以及拼块模式的资料,与该像素目前的景深值作比较与分类,将该拼块像素分为被遮住像素(Occluded Pixel)、不被遮住像素(Non-occluded Pixel)、未确定像素(Uncertain Pixel)、或未绘过像素(Uncovered Pixel);接着将上述四种像素类分为不需景深值读取绘点、正常绘点与被剔除绘点;不被遮住像素与未绘过像素属在不需景深值读取绘点(No-z-read),未确定像素属在正常绘点(Normal),被遮住像素属在被剔除(Reject)绘点;在该像素回路全部做完的后,接着更新该拼块资料,包含该拼块现在的像素掩盖屏蔽、以及现在景深范围的资料;接着处理更新后的该像素掩盖屏蔽的资料并加以分类;若该拼块的全部像素皆为绘过的像素,该拼块切割成两个或多数个副拼块;若该拼块只有部分像素为绘过的像素,该拼块此部分切割成一个或多数个副拼块,而原拼块未被切割的其它部分为一个副拼块;未经切割的该拼块,直接跳到该拼块循环底部,进入下一个拼块;已经切割的拼块,进入一个副拼块回路;此副拼块回路内含一个副拼块像素回路,在该副拼块像素回路内,先计算目前所在副拼块内该三角贴图对应该像素的景深值(Z Value),接着根据该副拼块的像素掩盖屏蔽、景深范围、以及副拼块模式的资料,与该副拼块像素的景深值作比较与分类,将该副拼块像素分为被遮住像素(Occluded Pixel)、不被遮住像素(Non-occluded Pixel)、未确定像素(Uncertain Pixel)、或未绘过像素(Uncovered Pixel);接着将上述四种像素类分为不需景深值读取绘点、正常绘点与被剔除绘点;不被遮住像素与未绘过像素属在不需景深值读取绘点,未确定像素属在正常绘点(Normal),被遮住像素属在被剔除绘点(Rejected);在该副拼块像素回路全部做完的后,接着更新该副拼块的像素掩盖屏蔽、以及景深范围的资料。
为了让本发明上述以及其它目的、特征、和优点能更明显易懂,以下配合图式以及较佳实施例以说明本发明。
附图说明
图1是为说明本发明三维绘图的几何结构(景深与二维像素);
图2是为说明本发明像素与拼块的示意图;
图3是为本发明三维绘图流程的简单示意图;
图4是说明本发明拼块内像素依拼块景深范围分为三类的示意图;
图5是说明本发明拼块内像素依拼块景深范围与掩盖屏蔽分为四类的示意图;
图6是说明本发明如何利用掩盖屏蔽判断拼块分割情形的示意图;
图7是说明本发明如何储存不同副拼块情形的资料的示意图;
图8是说明本发明副拼块内像素依副拼块景深范围与掩盖屏蔽各自分为四类的示意图。
附图标记说明:A1-对象一;A2-对象二;210、220-三角贴图;230-像素;240-拼块;310-三维贴图几何演算;320-滤除程序;322-拼块暂存内存区;330-景深比对程序;32-景深暂存内存区;340-演算;342-材质内存区;350-景深比对程序;360-演算;362-彩度暂存内存区;410、412-景深范围(值);830、420-未被遮着像素;430、850-未确定像素;440-被遮着像素;510-掩盖屏蔽;860、520-被遮住像素;530-未确定像素;532-未被绘过的像素;540-被遮住像素;610-拼块;620-拼块;810、812、820、822-景深范围;840-未绘出的像素。
具体实施方式
如图1所示,为了绘出三维***中的立体结构,维持各贴图之间的景深关系是很重要的;一般未经滤除法的景深比对程序(Z Test)乃是一个一个像素逐一比对谁的景深在前谁在后,如图2所示,对象二A2的景深较小,所以对象一A1被对象二A2盖住的部分,将不会被绘出;如果该绘图区的像素大小为64×64位(bit)的话,每一个三角贴图210、220都需要经过64×64位的比对还有此64×64位的景深暂存区(Z Buffer)的存取,这样的运算量跟所需的内存频宽是很可观的。而本发明则是在此景深比对程序前先作滤除,先一步剔掉某些被遮住的绘点以减少景深比对程序中的演算与内存频宽;除了被剔掉的绘点,本发明还能滤除出不需要景深暂存区读取的绘点,能更进一步节省了一部分的内存频宽。图3即显示整个三维绘图的流程,绘图对象经由三维贴图几何演算310的后,经由本发明中的滤除程序320,再将滤除的结果送与先遣景深比对程序(Z Test Front)330,然后再进行材质的演算(Texture)340,若材质演算中有开启艾尔法测试(Alpha Test)、透明材质、或者是其它可视度(Visibility)材质的话,就再进行一次后续景深比对程序(Z TestBack)350,最后进入彩度的演算(Color Operation)360即完成三维绘图的流程。
在本实施例中,整个64×64位像素230的绘图区(Display Region)以8×4位的拼块240进行切割(如图2中粗线标出的区块),整个绘图区共有8×16=128个拼块;在作一开始的三维三角贴图210几何演算时便以此拼块结构来扫描(Tile Base),即一个三角贴图的循环包含着一个拼块循环,在作循环的前,先统计目前拼块内的景深范围(CurZmax and CurZmin)与建立掩盖屏蔽(Coverage Mask),并记录在拼块暂存内存区(Tile Buffer)322;拼块的景深范围所占内存大小为128(拼块数)×2×16/32位(16或32端看此***景深的精确度),存着所有拼块的两个景深数值,而拼块掩盖屏蔽所占的内存大小为128(拼块数)×32(拼块内像素)×1位亦等在64×64×1位,存着所有绘图区像素是否为绘过的标志(Flag),未绘过者标为1,绘过者标为0;接着在拼块循环的内,先从拼块内存区读取该拼块的景深范围(DstZmax410 andDstZmin412)与掩盖屏蔽(Coverage Mask)510,并计算目前进行到的三角贴图的绘点在此拼块内的景深值。
接着进行拼块内像素的比对,如图4中的圆圈代表拼块内的像素;若该像素的景深值小在拼块最小景深值(DstZmin412),该像素属在未被遮着像素(Non-occluded Pixel)420;若该像素的景深值大在拼块最大景深值(DstZmax410),该像素属在被遮着像素(Occluded Pixel)440;若该像素的景深值介在拼块最小景深值(DstZmin412)与拼块最大景深值(DstZmax410)之间,该像素属在未确定像素(Uncertain Pixel)430,在图4中标为空心圆圈。另外,提出掩盖屏蔽的比对,上述未确定像素中其掩盖屏蔽标志为1者,可被再滤除出为未绘过的像素532,如图5中的粗线圆圈,剩下的则为最后的未确定像素530。最后的未确定像素(如图5中空心圆圈)530上的三角贴图绘点被归类为正常绘点(Normal Point),为无法滤除的需要经过正常的景深比对程序才能得知那些为可见绘点;被遮住像素540上的三角贴图绘点则直接被剔除,视为不可见绘点不需经过绘图程序;而那些未被遮住像素520以及未绘过像素532上的三角贴图绘点被归类为不需景深读取绘点(No-z-read Point),在经过景深比对程序时不需读取景深暂存内存,这一类的绘点亦可节省一部分内存频宽。当所有的拼块内像素皆被分类完成后,该拼块的目前景深范围(CurMax and CurMin)与从拼块暂存内存区读出的(DstMax and DstMin)比对,得到新的最终景深范围(DstMax and DstMin);目前的掩盖屏蔽也与拼块暂存内存区读出的掩盖屏蔽做与门(AND Gate)的比对,与最终景深范围一并回存在拼块暂存内存区。
本发明另一个重要特点,当第一次景深分类得出的未确定像素430中并无未被绘过的像素530,本发明可以机动的调变我们的拼块大小,又一次切割拼块成为两个左右副拼块620,使得左右副拼块可以再作一次分类,只要拼块暂存内存区读出的掩盖屏蔽其全数为0(即为绘过的标志)或至少左半部全为0或者是至少右半部全为0,该拼块被切割为左右副拼块620(如图6)。切割的后左右副拼块各自有其景深范围(L-ZMax810 and L-ZMin812,and R-ZMax820 and R-ZMin822),左右副拼块中的像素各自以此范围作分类,同时,左右副拼块的掩盖屏蔽(L-CM and R-CM)情形又可分出左右副拼块中未绘出的像素840(如图8),由于机动的分割拼块大小,因为更细分的景深范围使得的前未确定的像素又可以再一次滤除。
在本发明中,即使原拼块610被切割,仍然可以用原拼块的内存暂存区来正确的储存也不会发生错乱;如图6中的11模式(Full Tile with Coverage Mask),全拼块的掩盖屏蔽皆为0,因此不再需要储存其掩盖屏蔽值,只需要记录模式的形式即可,也因为如此,所需要记忆的只有左右副拼块的景深范围,如图7中模式11所标示的,左右景深范围共占4×15位,另外,还有4位储存其模式标志-11;若是图6中的10模式(Sub-tile with Right Coverage Mask),原拼块的左半部的掩盖屏蔽皆为0,不需储存左半部的掩盖屏蔽,只剩下左右半部的景深范围与右半部的掩盖屏蔽(R-CM)需要储存,如图7模式10所示,其左半部的景深范围以2×15位存在原拼块的内存暂存区,而其右半部的景深范围先减去左半部的景深范围得其差值,将差值从16位压缩至8位,得到右半部两个占8位的景深差值,再与占32位的右半部的掩盖屏蔽一起存回原拼块的内存暂存区,剩下的两位用在储存该拼块的模式10;若是图6中的01模式(Sub-tile with Left Coverage Mask),原拼块的右半部的掩盖屏蔽皆为0,不需储存右半部的掩盖屏蔽,只剩下左右半部的景深范围与左半部的掩盖屏蔽(L-CM)需要储存,如图7模式01所示,其右半部的景深范围以2×15位存在原拼块的内存暂存区,而其左半部的景深范围先减去右半部的景深范围得其差值,将差值从16位压缩至8位,得到左半部两个占8位的景深差值,再与占32位的左半部的掩盖屏蔽一起存回原拼块的内存暂存区,剩下的两位用在储存该拼块的模式01;若原拼块没进行分割,如图6所示的模式00,占32位的掩盖屏蔽需全数储存,如图7模式00所示,剩下的2×15位则是存放景深范围与拼块模式00。
分类完成的绘点,被剔除的绘点在下一步景深比对程序的前即被剔除(Reject),不会进行运算,而不需景深读取的绘点在景深比对程序中将可跳过从景深暂存内存区332(如图3所示)读取的部分,剩下的未确定绘点将正常进行景深比对程序,最后得出那些是真正的可见绘点;得出可见绘点的后进行材质演算,若材质演算中有开启艾尔法测试(Alpha Test)、透明材质、或者是其它可视度(Visibility)材质的话,就再进行一次后续景深比对程序(Z Test Back),最后进入彩度的演算即完成三维绘图的流程,其中,如图3所示,本发明又包括一材质内存区(TextureMemory)342,以供储存该三角贴图组中可见绘点的材质资料,以及一彩度暂存内存区362,以供暂存该可见绘点的彩度资料。
依上述所揭示的说明与图式,本发明可以达到发明预期的目的,提供一种可以节省内存频宽的可调变式拼块景深滤除***及方法,并可增加滤除效能与效率。
以上所述仅为本发明的较佳实施例,对本发明而言仅仅是说明性的,而非限制性的。本专业技术人员理解,在本发明权利要求所限定的精神和范围内可对其进行许多改变,修改,甚至等效,但都将落入本发明的保护范围内。