專利名稱:用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)構(gòu)建方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通過用GPU等流處理器(Streaming processer)完全執(zhí)行粒子法模擬,來實現(xiàn)將鄰近粒子搜索高速化的方法,例如使實時地進行許多剛體的撞擊計算等成為可能的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法、其程序以及存儲該程序的存儲介質(zhì)。
背景技術(shù):
所謂“粒子法模擬”,是將對象物體作為許多粒子的集團(集合)來獲取,關(guān)注許多粒子中各個粒子的行為來進行計算的模擬方法。在計算機的計算方面,在上述粒子中通常使用直徑固定的“球”。當(dāng)通過球的集合體來表現(xiàn)物體的形狀時,根據(jù)該球的大小(直徑)的決定方法,物體的形狀的近似度或空間析像度發(fā)生變化。另外,通過使球的直徑變化、使空間析像度變化,可以控制基于計算機的模擬計算中的計算精度和計算速度。
近年來,利用上述粒子法模擬進行許多剛體的撞擊計算、流體或粉體等的行為計算,在計算機的顯示裝置的畫面上進行了撞擊或流動等的模擬的研究。該研究結(jié)果被記載在例如田中正幸等,“使用了粒子法的剛體計算方法的開發(fā)和向計算機圖形學(xué)的應(yīng)用”,日本機械學(xué)會,第19次計算力學(xué)講演會講演論文集,701-702頁,2006。這些模擬技術(shù)的研究作為計算機圖形學(xué)(CG)的基礎(chǔ)技術(shù)是重要的。
在上述粒子法模擬的研究中,以往大多進行利用CPU(Central ProcessingUnit)生成計算算法的方法。但是,不太進行積極利用GPU(Graphics ProcessingUnit)等流處理器(Streaming processor)的粒子法模擬的研究。例如,根據(jù)利用GPU的現(xiàn)有的某個研究,通過CPU執(zhí)行鄰近粒子搜索,將通過CPU得到的搜索數(shù)據(jù)轉(zhuǎn)發(fā)給GPU來進行圖像處理。根據(jù)這種技術(shù)以如下方式構(gòu)成將CPU用作主要計算機執(zhí)行部,通過該CPU執(zhí)行鄰近粒子搜索的計算算法,GPU作為輔助計算機執(zhí)行部僅執(zhí)行圖像顯示處理的計算算法。因此,根據(jù)現(xiàn)有的計算技術(shù),無法構(gòu)成僅在GPU的內(nèi)部完全執(zhí)行粒子法模擬中的鄰近粒子搜索以及圖像處理的計算算法。
由于在現(xiàn)有的粒子法模擬的計算中,無法僅通過GPU來完全執(zhí)行全部的計算(用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建、圖像處理等),因此計算效率不高,GPU無法充分發(fā)揮其本來具有的圖像處理能力,無法進行許多剛體的撞擊計算等實時的剛體模擬、流體模擬等。所以,要求開發(fā)出完全利用GPU或其它流處理器,在GPU等上執(zhí)行用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,最大限度地發(fā)揮其圖像處理能力的方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于,鑒于上述問題,提供用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法、其程序以及存儲了該程序的存儲介質(zhì)。所述方法可以在GPU等流處理器上完成粒子法模擬的鄰近粒子搜索中所使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,高效地利用GPU等,使其發(fā)揮最大限度的(圖像)處理能力,使高速計算成為可能,例如實現(xiàn)實時的剛體模擬或流體模擬等的計算處理/顯示處理。
為了實現(xiàn)上述目的,本發(fā)明的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法、其程序以及存儲了該程序的存儲介質(zhì),如下構(gòu)成。
數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,通過GPU等圖形運算處理器來執(zhí)行,被用于通過將3維數(shù)字圖像數(shù)據(jù)變換為2維數(shù)字圖像數(shù)據(jù)來對物理對象物的模擬進行運算的方法中,所述3維數(shù)字圖像數(shù)據(jù)是根據(jù)在視頻存儲器的內(nèi)部生成的圖像數(shù)據(jù)而構(gòu)建的,在該數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法中,使用了以許多粒子表現(xiàn)物理對象物,根據(jù)視頻存儲器內(nèi)的3維圖像數(shù)據(jù)結(jié)構(gòu)中的許多的粒子的相互的容納位置關(guān)系來決定物理對象物的存在狀態(tài)的方法。3維圖像數(shù)據(jù)結(jié)構(gòu)中包含的桶紋理(bucket texture),由將對應(yīng)于出現(xiàn)物理對象物的空間而生成的存儲器空間進行分割的桶(bucket)構(gòu)成,將分配給許多粒子的粒子號碼存儲在許多桶的每一個中。所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法具有通過圖形運算處理器使用頂點著色器,讀出在桶中存儲的粒子的所述粒子號碼和粒子坐標(biāo),寫入2維圖像空間的寫入步驟。在該寫入步驟中,其特征在于,當(dāng)桶中存在多個粒子時,在模擬的一個時步(time step)中分為多次寫入(用于多次處理的渲染),一個一個地寫入所述多個粒子的各個的粒子號碼和粒子坐標(biāo)。
上述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法中,在作為圖形運算處理器而使用GPU的情況下,使用由GPU準(zhǔn)備的深度測試、顏色蒙板、模板測試的各個功能,來進行用于在多次處理的渲染的各個渲染中寫入的粒子的粒子號碼和粒子坐標(biāo)的選擇、以及寫入的像素中的通道的選擇。
另外,在使用桶含GPU等在內(nèi)的流處理器的情況下,也可以使用由流處理器準(zhǔn)備的多個計數(shù)器的各功能,來進行在多次處理周期的各步驟中寫入的粒子的粒子號碼和存儲器位置(Memory location)的選擇、以及為了體素(Voxel)而分配的存儲器中的存儲器位置的選擇。
即,用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其由流處理器執(zhí)行,用于通過將3維數(shù)字圖像數(shù)據(jù)變換為2維數(shù)字圖像數(shù)據(jù)來對物理對象物的模擬進行運算的方法,所述3維數(shù)字圖像數(shù)據(jù)是根據(jù)在存儲器內(nèi)部生成的數(shù)據(jù)陣列而構(gòu)建的。在所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法中,使用了下述方法,即通過許多粒子來表現(xiàn)物理對象物,根據(jù)存儲器內(nèi)的3維圖像數(shù)據(jù)結(jié)構(gòu)中的許多粒子的相互的容納位置關(guān)系,決定物理對象物的存在狀態(tài),3維圖像數(shù)據(jù)結(jié)構(gòu)中包含的桶陣列,由將對應(yīng)于出現(xiàn)物理對象物的空間而生成的存儲器空間進行分割的桶構(gòu)成,將分配給許多粒子的粒子號碼存儲在許多所述桶的每一個中。具有寫入步驟其通過流處理器,讀出在桶中存儲的粒子的所述粒子號碼和粒子坐標(biāo),使用流處理器的分散操作(scattering operation)來寫入存儲器中的陣列中。在寫入步驟中,當(dāng)桶中存在多個粒子時,在模擬的一個時步中劃分為用于多次處理的內(nèi)核(kernel),一個一個地寫入多個粒子的各個粒子的粒子號碼和粒子坐標(biāo)。
數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,在上述方法中,當(dāng)桶中存在最多4個粒子時,在由寫入粒子號碼的像素等的RGBA組成的4個通道的每一個通道中,獨立地從按照升序或者降序的粒子號碼的粒子中順次存儲該粒子的號碼。
在上述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法中,在作為圖形運算處理器使用GPU的情況下,更具體的說,具有以下步驟當(dāng)假定4個粒子的粒子號碼為ib0、ib1、ib2、ib3(升序的情況下ib0<ib1<ib2<ib3,降序的情況下ib0>ib1>ib2>ib3)時,在向第一通路的像素的寫入中,以最大值對深度緩沖區(qū)進行初始化,使用深度測試使具有較小值的深度緩沖區(qū)合格,由此,在所述R通道中寫入粒子號碼ib0,進行用于第一次處理的渲染的步驟;在向第二通路的像素的寫入中,使用顏色蒙板來禁止向所述R通道的寫入并且使用了模板測試,由此,在所述G通道中寫入粒子號碼ib1,進行用于第二次處理的渲染的步驟;在向第三通路的像素的寫入中,使用顏色蒙板來禁止向所述R和G的各通道的寫入并且使用了模板測試,由此,在所述B通道中寫入粒子號碼ib2,進行用于第三次處理的渲染的步驟;在向第四通路的像素的寫入中,使用顏色蒙板來禁止向所述R、G和B的各通道的寫入并且使用了模板測試,由此,在所述A通道中寫入粒子號碼ib3,進行用于第四次處理的渲染的步驟。
一般,在使用流處理器的情況下,代替上述像素(written pixel)而使用分配給體素的存儲器,代替上述通道而使用為了體素而分配的存儲器中的存儲器位置(Memory Location),而且,代替由GPU準(zhǔn)備的上述深度測試、顏色蒙板、模板測試的各功能而使用與其分別對應(yīng)的計數(shù)器的功能。
即,具有以下步驟當(dāng)假定4個粒子的粒子號碼為ib0、ib1、ib2、ib3(升序的情況下ib0<ib1<ib2<ib3,降序的情況下ib0>ib1>ib2>ib3)時,在向第一通路中的為了體素而分配的存儲器進行的寫入中,通過將計數(shù)器初始化為0并且接受向第一存儲器位置的最初的寫入,在第一存儲器位置中寫入粒子號碼ib0,執(zhí)行用于第一次的例程(routine)的內(nèi)核的步驟;在向第二通路中的為了體素而分配的存儲器進行的寫入中,通過使用計數(shù)器來禁止向第一存儲器位置的寫入并且向第二存儲器位置寫入下一值,由此,在第二存儲器位置中寫入粒子號碼ib1,執(zhí)行用于第二次的例程的內(nèi)核的步驟;在向第三通路中的為了體素而分配的存儲器進行的寫入中,通過使用計數(shù)器來禁止向第一和第二存儲器位置的寫入并且向第三存儲器位置寫入下一值,由此,在第三存儲器位置中寫入粒子號碼ib2,執(zhí)行用于第三次的例程的內(nèi)核的步驟;以及在向第四通路中的為了體素而分配的存儲器進行的寫入中,通過使用計數(shù)器來禁止向第一、第二和第三存儲器位置的寫入并且向第四存儲器位置寫入下一值,由此,在第四存儲器位置中寫入粒子號碼ib3,執(zhí)行用于第四次的例程的內(nèi)核的步驟。
數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,在上述方法中,理想的是上述物理對象物是許多剛體,物理對象物的模擬圖像是基于許多剛體的撞擊計算的模擬圖像。
關(guān)于數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,作為流處理器的一例的GPU是圖形運算處理器。
另外,本發(fā)明的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,是用于通過包含GPU等在內(nèi)的流處理器執(zhí)行構(gòu)成上述鄰近粒子搜索方法的各步驟等的程序。
根據(jù)本發(fā)明,收到到如下效果。
應(yīng)用粒子法模擬來近似剛體、流體、粉體等,通過實施用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,在計算機上對物理現(xiàn)象進行模擬的方法中,在GPU等流處理器上完成用于執(zhí)行用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建計算的各步驟,高效地利用GPU等,可以發(fā)揮其最大限度的圖像運算處理能力,可以進行高速計算,由此可以實現(xiàn)例如實時的剛體模擬或流體模擬等。
另外,通過將剛體模擬或流體模擬等作為模擬CG而用于圖像顯示,作為最佳的游戲等的重要要素技術(shù),可以用于水的流動等自然物的表現(xiàn)。
圖1是表示實施本發(fā)明的鄰近粒子搜索中所使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法的計算機系統(tǒng)的基本結(jié)構(gòu)的系統(tǒng)結(jié)構(gòu)圖。
圖2是表示在計算機系統(tǒng)中安裝的GPU的內(nèi)部基本結(jié)構(gòu)的框圖。
圖3是基于與10922個圓環(huán)落下·撞擊的物理現(xiàn)象相關(guān)的剛體模擬的結(jié)果圖像(CG)的圖。
圖4是基于與16384個國際象棋中的棋子落下·撞擊的物理現(xiàn)象相關(guān)的剛體模擬的結(jié)果圖像(CG)的圖。
圖5是表示使用了GPU的剛體模擬的高速化的計算算法的流程圖。
圖6是表示桶構(gòu)建的處理步驟的詳細(xì)內(nèi)容的流程圖。
圖7是表示使用了GPU的剛體模擬的高速化的計算算法的變形例的流程圖。
圖8是基于與多個球體形狀的流體落入流體時的物理現(xiàn)象相關(guān)的流體模擬的結(jié)果圖像(CG)的圖。
圖9是基于漏斗狀容器中容納的粉體向下方流動,從容器的下端開口部落到外側(cè),被配置在下側(cè)的容器容納時的粉體模擬的結(jié)果圖像(CG)的圖。
具體實施例方式 以下,根據(jù)
本發(fā)明的優(yōu)選實施例。圖1表示在粒子法模擬中,實施了在鄰近粒子搜索中使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法的計算機系統(tǒng)的基本結(jié)構(gòu)。
在該實施例的說明中,作為主要實施例,說明作為圖形運算處理器而使用例如GPU的例子。
計算機系統(tǒng)10例如利用PC(Personal Computer)而構(gòu)成,具備作為運算處理部的CPU11和GPU12。另外,計算機系統(tǒng)10作為存儲裝置而具有主存儲器13A和視頻存儲器(VRAM)13B,作為外圍裝置而至少具有輸入裝置14以及顯示裝置15。CPU11、GPU12、主存儲器13A、輸入裝置14和顯示裝置15經(jīng)由總線16相互連接。輸入裝置14經(jīng)由輸入接口17與總線16連接,顯示裝置15經(jīng)由輸出接口18與總線16連接。另外,視頻存儲器13B與GPU12直接相連。對于視頻存儲器13B,通過GPU12進行數(shù)據(jù)交換。
CPU(中央運算處理裝置)11例如是PC等所配備的通常的運算處理部。另外,GPU12是“Graphics Processing Unit(圖形運算處理器)”,執(zhí)行圖像運算處理。該GPU12內(nèi)置多個處理器而形成,被用作并行計算機。作為GPU12,例如使用NVIDIA公司生產(chǎn)的“GeForce 7900GTX”。此外,在GPU12中所使用的產(chǎn)品不限于此,可以使用具有類似的結(jié)構(gòu)·功能的圖像處理用處理器或其它流處理器。該GPU12執(zhí)行存儲在主存儲器13A中的鄰近粒子搜索程序13A-1,實施粒子法模擬中的鄰近粒子搜索運算。鄰近粒子搜索程序13A-1執(zhí)行在鄰近粒子搜索中使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建。另外,GPU12執(zhí)行存儲在主存儲器13A中的通常的圖像處理程序13A-2,使用在鄰近粒子搜索的計算中獲得、并且存儲在像素中的圖像數(shù)據(jù)來實施圖像處理,使用所生成的圖像數(shù)據(jù)在顯示裝置15的畫面上進行描繪(用于顯示的渲染(Rendering))。在顯示裝置15的畫面上,根據(jù)粒子法模擬的計算來顯示CG圖像。
在本實施例的以下說明中,對實時的剛體模擬的運算進行說明,所述運算基于執(zhí)行依據(jù)粒子法模擬的許多剛體的撞擊計算。在該模擬的運算中,僅通過GPU12執(zhí)行用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法。
接下來,圖2表示所述GPU12內(nèi)的重要部分的基本結(jié)構(gòu)。GPU12具有并行配置的多個處理器21,基于這些處理器進行的并行計算處理,來執(zhí)行用于顯示(描繪)的渲染。特別是根據(jù)本實施例的鄰近粒子搜索中使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建(桶構(gòu)建)的方法,如后所述,當(dāng)1個桶中存在4個粒子時,將用于處理的渲染重復(fù)4次,將4個粒子的粒子號碼和粒子坐標(biāo)寫入1個像素的RGBA通道的每一個通道中。通過GPU12中的該桶構(gòu)建的處理,實現(xiàn)圖像運算處理的高速化。更具體而言,當(dāng)GPU12是“GeForce 7900GTX”時,其具有在前級并行配置的8個頂點著色器(VS)22和在后級并行配置的24個片元著色器(FS)23。通過頂點(Vertex)處理器(21)執(zhí)行的程序是頂點著色器(VertexShader)22,通過片元處理器(21)執(zhí)行的程序是片元著色器(Fragment Shader)23。
如上所述,頂點處理器是并行配置的處理器,是專門用于一齊處理許多頂點的坐標(biāo)變換(將輸入的頂點坐標(biāo)變換為被渲染的圖像的空間中的坐標(biāo))的處理器。GPU12與CPU相比,可以高速地計算頂點的坐標(biāo)變換。由頂點著色器指定頂點處理器的動作。
而且,在GPU12中具有深度測試功能部24、顏色蒙板(color mask)功能部25、模板(stencil)測試功能部26。另外,方框27是著色器指令分配部。
用于實現(xiàn)本發(fā)明的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法的鄰近粒子搜索程序13A-1,利用上述GPU12的內(nèi)部構(gòu)造,僅通過GPU12可完全執(zhí)行。
接著說明許多剛體撞擊的剛體模擬的實施例。通過該剛體模擬的說明,可以明白基于鄰近粒子搜索程序13A-1的執(zhí)行而實施的、用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法的內(nèi)容。
作為許多剛體的例子,例如是許多圓環(huán)(torus)材料、或者是許多國際象棋中的棋子。圖3和圖4表示作為本實施例的剛體模擬結(jié)果而得到的CG的例子。圖3表示例如基于與10922個圓環(huán)落下·撞擊的物理現(xiàn)象相關(guān)的剛體模擬的撞擊計算的結(jié)果圖像(CG),圖4表示例如基于與16384個國際象棋中的棋子落下·撞擊的物理現(xiàn)象相關(guān)的剛體模擬的撞擊計算的結(jié)果圖像(CG)。
在上述的許多剛體的撞擊計算中,通過應(yīng)用粒子方法(粒子法模擬),將許多剛體的各自的形狀全部作為相同大小的球(粒子)的集合體來近似表現(xiàn)地進行處理?;谇虻膭傮w的形狀近似,根據(jù)該剛體的多邊形模型(polygonmodel)來進行,例如使用由本發(fā)明人等提出的應(yīng)用了GPU的體素(voxel)化方法(“Fast solid voxelization using hardware”,Transactions of JSCES,page No.20060023,2006)而生成。此外,考慮計算精度和計算速度而適當(dāng)?shù)貨Q定所使用的球的大小(空間析像度)。
在各個剛體作為球的集合體來近似表現(xiàn)而形成的許多剛體的撞擊計算中,執(zhí)行(1)各個剛體的計算、(2)剛體間的撞擊的檢測處理(構(gòu)成剛體的球之間的距離的計算)、以及(3)基于撞擊的響應(yīng)處理(施加于球的力和轉(zhuǎn)矩的計算)。以下,分別說明這些計算的思路。
(1)剛體的計算 剛體的計算所需要的物理量如(數(shù)學(xué)式1)所示,桶括重心的坐標(biāo)、平移速度、表示旋轉(zhuǎn)量的四元數(shù)(quaternion)、角速度、慣性張量。
(數(shù)學(xué)式1) X重心的坐標(biāo) V平移速度 q表示旋轉(zhuǎn)量的四元數(shù) w角速度 I慣性張量 剛體的運動的計算,分為平移運動和旋轉(zhuǎn)運動來計算。平移運動的計算內(nèi)容由(數(shù)學(xué)式2)表示,旋轉(zhuǎn)運動的計算內(nèi)容由(數(shù)學(xué)式3)表示。
(數(shù)學(xué)式2) 施加于剛體的力F如(1)式所示,可分解為由于撞擊而產(chǎn)生的Fc和除此以外的外力Fe。
F=Fc+Fe(1) 使用施加于剛體的力F,如(2)式所示那樣計算剛體的平移運動量P的時間微分。
使用平移運動量P,由P=Mv(M剛體的質(zhì)量)計算重心的速度v。當(dāng)使用重心的速度v時,剛體的重心位置x的時間微分如(3)式所示。
(數(shù)學(xué)式3) 施加于剛體的F引起剛體的旋轉(zhuǎn)運動,使角運動量L變化。角運動量L的時間微分以(4)式表現(xiàn)。r是從剛體的重心到力的作用點的矢量。
使用上述角運動量L,通過(5)式計算角速度w。
w=I(t)-1L (5) 在(5)式中,I(t)-1是在時刻t的慣性張量的逆矩陣。
使用初始狀態(tài)下的剛體的慣性張量I(0)的逆矩陣I(0)-1,通過(6)式計算I(t)-1。
I(t)-1=R(t)I(0)-1R(t)T (6) 在(6)式中,R(t)和R(t)T是在時刻t的旋轉(zhuǎn)矩陣及其轉(zhuǎn)置矩陣。使用(5)式中計算出的角速度w來更新四元數(shù)q。根據(jù)角速度w,通過(7)式計算四元數(shù)的變化量dq。
在此,旋轉(zhuǎn)軸a和旋轉(zhuǎn)角θ通過(8)式和(9)式來計算。
θ=|wdt|(9) 使用(7)式的dq和在時刻t的q(t),通過(10)式計算dt后的四元數(shù)q(t+dt)。
q(t+dt)=dq×q(t)(10) (2)撞擊的檢測處理 為了檢測剛體的撞擊,計算構(gòu)成剛體的球間的距離。若球間的距離小于球的直徑則視為兩球已撞擊。在許多剛體的撞擊檢測中,需要針對構(gòu)成各個剛體的全部球來進行上述距離計算。計算量與球數(shù)的平方成比例,剛體的數(shù)量增多時,球的數(shù)量也增多,計算量也增大。因此,在本實施例的撞擊檢測處理的結(jié)構(gòu)中,為了減少計算量,將許多剛體所存在的虛擬空間(存儲器中的3維數(shù)據(jù)存儲空間)分割成被稱為“桶(或者也稱為格柵(Grid))”的格子(3維空間格子),將表現(xiàn)許多剛體中的每一個剛體的許多球容納在桶中。1個桶構(gòu)成1個立方體,假定在使用了使桶的一邊的長度與球直徑相同的3維數(shù)據(jù)結(jié)構(gòu)時,可能與某個球i撞擊的球被限定為在與容納球i的桶相鄰的33個各桶的內(nèi)部所容納的球。根據(jù)如上所述地構(gòu)建桶來進行撞擊檢測,由此可以減少計算量,并且可以大幅度地降低計算成本。在后面描述本實施例的桶構(gòu)建的詳細(xì)情況。
(3)基于撞擊的響應(yīng) 在撞擊響應(yīng)中計算施加在構(gòu)成1個剛體的球上的力。在撞擊力的計算中,關(guān)于接觸的兩個球,使用了在離散單元法(distinct element method)中使用的線性彈性常數(shù)和阻尼常數(shù)。在(數(shù)學(xué)式4)中表示該撞擊力的計算的內(nèi)容。
(數(shù)學(xué)式4) 設(shè)彈性常數(shù)為κ、阻尼常數(shù)為η,對于正在撞擊的球施加與陷入量成比例的回彈力以及與相對速度成比例的阻尼力。有球i和球j兩個球,若設(shè)它們的直徑為d,則當(dāng)兩球距離|rij|小于d時發(fā)生撞擊,施加了(11)式的基于彈性的力fs和(12)式的基于阻尼(damper)的阻尼力fd。
fd=-η(vj-vi)(12) 在(11)式和(12)式中,rij=rj-ri,ri、rj是球i、j的位置矢量。另外,剪切方向的摩擦力ft作為與剪切方向的速度vt成比例的力,通過(13)式進行計算。
ft=κtvt(13) 通過(14)式計算施加于球i的力fi。
fi=fs+fd+ft(14) 使用施加于球i的力fi,分別通過(15)式和(16)式計算由于撞擊而施加于剛體的力Fc和轉(zhuǎn)矩Tc。
(16)式中,r’i是球相對于剛體重心的相對位置矢量。
接下來,對于僅使用GPU12的情況下的鄰近粒子搜索所使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法的高速化進行說明。根據(jù)本實施方式,與許多剛體的撞擊相關(guān)的上述各計算全部在GPU12上執(zhí)行。由此可以實現(xiàn)上述計算的高速化。下面,說明GPU12中基于鄰近粒子搜索程序13A-1的計算算法。
最初,說明為了上述計算算法而準(zhǔn)備的數(shù)據(jù)結(jié)構(gòu)。
當(dāng)通過GPU12進行所述各計算時,將所述各物理量作為視頻存儲器13B中桶含的多塊紋理13B-1(圖1所示)而進行存儲、保持。
具體而言,為了進行剛體計算,關(guān)于各剛體的重心坐標(biāo)、四元數(shù)、平移運動量、角運動量,分別使用了存儲在視頻存儲器13B中的兩塊紋理13B-1。為了進行撞擊計算,關(guān)于各球的中心坐標(biāo)、速度、桶、施加于各球的力、施加于各球的轉(zhuǎn)矩,分別使用存儲在存儲器13B中的一塊紋理13B-1。
在本實施例的情況下,在基于粒子法模擬的許多剛體的撞擊計算中設(shè)想3維空間,而且準(zhǔn)備如前所述那樣分割該3維空間的3維空間格子、即桶。但是,通過當(dāng)前可以使用的GPU12無法向3維紋理進行寫入。因此,在本實施例中,利用嵌入(D×D)個所需個數(shù)的2維格子而組成的1塊2維紋理來表現(xiàn)由(L×L×L)個格子數(shù)組成的3維桶。在這種情況下,當(dāng)設(shè)3維桶上的下標(biāo)為(i,j,k),并且設(shè)2維紋理上的下標(biāo)為(s,t)時,在所述兩個下標(biāo)之間,通過下面的(17)式和(18)式來建立關(guān)聯(lián)。
s=i+L(k-D[k/D])(17) t=j(luò)+Lf[k/D](18) 此外,i、j、k和s、t分別取桶含在
和
的范圍中的值。
接下來,參照圖5所示的流程圖,說明使用了GPU12的高速化的計算算法。
當(dāng)將進行用于在顯示裝置15的顯示畫面中進行描繪的1次計算(模擬)的單位時間設(shè)為1個時步時,該1個時步中的計算通過以下8個階段來進行計算。
階段1球的物理量的計算...(步驟S11) 階段2桶構(gòu)建 ...(步驟S12) 階段3撞擊檢測...(步驟S13) 階段4撞擊響應(yīng)(施加于球的力和轉(zhuǎn)矩的計算)...(步驟S14) 階段5剛體平移運動量的計算...(步驟S15) 階段6剛體角運動量的計算 ...(步驟S16) 階段7剛體重心坐標(biāo)的計算 ...(步驟S17) 階段8剛體四元數(shù)的計算...(步驟S18) 使用在上述計算(模擬)中最終得到的剛體的重心坐標(biāo)和四元數(shù)進行用于顯示的渲染處理,進行模擬結(jié)果圖像的描繪(步驟S19)。在接下來的判斷步驟S20中判斷是否繼續(xù)模擬,在判斷結(jié)果為“是”的情況下,返回上述的步驟S11,重復(fù)步驟S11~S19;在判斷結(jié)果為“否”的情況下,結(jié)束模擬。如上所述,針對用于一次顯示的渲染處理(步驟S19),在一個時步的時間內(nèi)執(zhí)行上述8階段的計算步驟S11~S18。
如上所述,在步驟S12中執(zhí)行的“桶構(gòu)建”的計算中,進行鄰近搜索的處理計算。該計算僅通過GPU12完全進行,由此實現(xiàn)計算的高速化。以下說明桶構(gòu)建的計算的詳細(xì)內(nèi)容。
以下,說明上述步驟S11~S19的計算內(nèi)容。
步驟S11球的物理量的計算 為了通過粒子法計算許多剛體的撞擊計算,計算構(gòu)成各剛體的球的中心坐標(biāo)和速度。與球的中心坐標(biāo)和速度相關(guān)的計算內(nèi)容如(數(shù)學(xué)式5)所示。
(數(shù)學(xué)式5) 設(shè)剛體j的重心坐標(biāo)、四元數(shù)、速度、角速度分別為Xj、Qj、Vj、Wj。
當(dāng)設(shè)未旋轉(zhuǎn)狀態(tài)下,球i的中心對于剛體重心的相對位置矢量為ri時,通過(19)式計算以四元數(shù)Qj旋轉(zhuǎn)狀態(tài)下的相對位置矢量r’i。
r′i=QjriQjT(19) 當(dāng)設(shè)構(gòu)成剛體j的球i的中心坐標(biāo)和速度分別為xi、vi時,以(20)式和(21)式進行計算。
xi=Xj+r′i(20) vi=Vj+Wj×r′i(21) 步驟S12桶構(gòu)建 所謂“桶構(gòu)建”,是將為了表現(xiàn)許多剛體中的各個剛體而準(zhǔn)備的許多球(粒子)的全部的號碼,如前所述作為視頻存儲器13B的內(nèi)部的數(shù)據(jù)結(jié)構(gòu),存儲在作為分割空間的要素而準(zhǔn)備的3維空間格子、即桶中的處理。具體而言,是將分配給許多球中的各個球的號碼存儲在許多桶的各個的內(nèi)部的處理,是使與許多球中的各個球相關(guān)的數(shù)據(jù)分散(scattering)的處理。
在與桶的構(gòu)建相關(guān)的上述處理中,使用了頂點(Vertex)著色器的寫入功能(用于處理的渲染)。該寫入功能,是可以將頂點寫入作為輸入的坐標(biāo)中的功能。換言之,在頂點著色器中具有用于訪問視頻存儲器13B的紋理的頂點紋理獲取(VTE)功能,通過使用頂點著色器的該功能可以參照球的坐標(biāo)。通過將頂點配置在與該球的坐標(biāo)相對應(yīng)的桶的坐標(biāo)中,在GPU12中可以進行上述數(shù)據(jù)分散處理。
當(dāng)將球的數(shù)量設(shè)為n(i0,i1,...,in-1)時,僅準(zhǔn)備與球的數(shù)量相同的數(shù)量n(p0,p1,...,pn-1)的上述頂點。這些頂點的各個對應(yīng)于1個球。將頂點p0,p1,...,pn-1各自對應(yīng)的球的號碼設(shè)為i0,i1,...,in-1。假設(shè)球的號碼例如按照i0<i1<...<in-1的順序(升序)排列。此外,球的排列方法也可以是降序。
以上述對應(yīng)關(guān)系為前提,頂點著色器使用上述頂點紋理獲取(VTF),參照前一次的時步中的全部球的坐標(biāo),根據(jù)該坐標(biāo)計算桶紋理上的坐標(biāo),向該坐標(biāo)輸出球的號碼,由此可以向桶紋理寫入球的號碼。
然而,在上述處理的情況下,僅在桶的內(nèi)部存在1個球時可以正確地進行桶構(gòu)建,反之,在1個桶的內(nèi)部存在多個球時無法正確地構(gòu)建。當(dāng)有可能在1個桶內(nèi)部存在多個球時,為了實現(xiàn)正確的桶構(gòu)建,必須在參照該桶中容納的球的數(shù)量的號碼的同時,順次將球逐個容納在桶中。通過GPU12中所使用的并列處理,在用于一次處理的渲染中,無法參照已寫入的球的號碼,因此在該并行處理后,僅在各桶中寫入1個號碼。例如,當(dāng)1個桶中存在4個球時,將4個頂點寫入同一像素,因此最終在該像素中寫入關(guān)于1個球的號碼。
因此,在本實施例的桶構(gòu)建中,構(gòu)成為可以在1個桶b1的內(nèi)部容納多個球。參照圖6的流程圖說明該方法。
在此,考慮在桶bj中放入最多4個球的情況。將這4個球的號碼作為ib0、ib1、ib2、ib3,寫入1個像素的RGBA通道的各個的值。假設(shè)這4個球的號碼按照ib0<ib1<ib2<ib3的順序(升序)排列。此外,4個球的號碼的排列方法也可以是降序。并且,在桶構(gòu)建中,通過將針對1個像素的寫入劃分為4次球號碼的寫入,即使在1個桶的內(nèi)部存在最多4個球的情況下,也可以使用GPU12來進行桶構(gòu)建。換言之,在桶b1中存在4個球的情況下,通過在1時步中劃分為4次寫入(用于處理的渲染),基于GPU12進行桶構(gòu)建。
在所述頂點著色器(VS)22中,使用與頂點對應(yīng)的球的坐標(biāo)來計算該坐標(biāo)的桶內(nèi)的坐標(biāo),將球的號碼傳送到片元著色器(FS)23。在片元著色器(FS)23中將球的號碼作為“顏色”和“深度”而寫出。
參照圖6,具體描述桶構(gòu)建S12的處理內(nèi)容。桶構(gòu)建S12的工序由順次進行的4條通路(pass)的步驟S101~S104組成。
向第一通路中的1個像素進行的最初的寫入(步驟S101),是在R通道中寫入球號碼ib0的步驟。球號碼ib0是4個球中最小的號碼。即,作為具有最小深度的像素而被寫入,進行用于最初的處理的渲染。在該球號碼ib0的寫入的情況下,首先設(shè)定用于選擇R通道的顏色蒙板(步驟S31),設(shè)定深度測試(步驟S32),接著以最大值對深度緩沖區(qū)進行初始化(步驟S33),使用所設(shè)定的上述深度測試,使具有較小值的深度緩沖區(qū)為合格,使該寫入(頂點的渲染S34)成為可能。
向第二通路中的上述同一像素進行的寫入(步驟S102),是為了不覆蓋已寫入R通道的值,而在G通道中寫入球號碼ib1的步驟。在該寫入中,通過使用用于選擇G通道的顏色蒙板(步驟S41),禁止對RBA的各通道的寫入。深度緩沖區(qū)仍然使用在第一通路中所使用的深度緩沖區(qū),并且對深度測試進行設(shè)定,以便使具有較大值的深度緩沖區(qū)為合格(步驟S42)。但是,這樣一來,在上述像素的G通道中寫入最大的球號碼ib3,因此為了禁止該寫入而使用模板測試(步驟S43)。在模板測試中以0對模板緩沖區(qū)進行初始化(步驟S44),在模板測試中進行設(shè)定以使值增加。而且,在模板測試中進行設(shè)定,以便當(dāng)值在1以上時使寫入失敗(步驟S43)。由此,在像素中進行了一次寫入處理后,可以不對寫入失敗的球號碼進行寫入。于是,在向同一像素的第二通路的寫入中,在G通道中寫入球號碼ib1(步驟S45)。
此后,在向同一像素中的第三通路的B通道的球號碼ib2的寫入(步驟S103)、第四通路的球號碼ib3的寫入(步驟S104)的情況下,也進行與上述相同的處理,將球號碼ib2和球號碼ib3分別寫入B通道和A通道。第三通路的步驟S103具有用于選擇B通道的顏色蒙板的設(shè)定、模板緩沖區(qū)的清除、頂點的渲染(寫入)的步驟S51~S53,第四通路的步驟S104具有用于選擇A通道的顏色蒙板的設(shè)定、模板緩沖區(qū)的清除、頂點的渲染(寫入)的步驟S61~S63。
如上所述,在使用GPU12的鄰近粒子搜索中所使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建、即桶構(gòu)建中,在桶中存在多個(例如4個)球的情況下,當(dāng)將這些球的號碼存儲在1個桶中并且與像素對應(yīng)起來時,將向桶的存儲處理(向像素的RGBA通道寫入球號碼的處理)分為用于多次(例如4次)處理的渲染來進行。在用于1次處理的渲染中,按照前文所述的規(guī)則,將1個球的號碼寫入像素的1個通道中。利用GPU12具有的深度測試、顏色蒙板、模板測試的功能,來決定與各渲染中的球號碼的寫入順序以及寫入通道的選擇相關(guān)的所述規(guī)則。
步驟S13撞擊計算 在該撞擊計算中,進行可能與某球i撞擊的、存在于附近的球的搜索。在該搜索中,以作為球的坐標(biāo)紋理而生成的桶紋理為輸入,使用片元著色器進行處理。根據(jù)該處理,通過參照桶而得到桶圍容納了某球i的桶的33個桶中容納的球的號碼,通過使用該球的號碼來參照存儲了球的坐標(biāo)的紋理,得到該球坐標(biāo)(球的中心坐標(biāo))。使用各球的球坐標(biāo)來進行這些球和球i的距離計算,進行撞擊計算。
步驟S14撞擊響應(yīng)(施加于球的力和力矩的計算) 關(guān)于判斷為已撞擊的兩個球,可以使用兩個球的坐標(biāo)(位置矢量)、它們的速度(速度矢量)和對于剛體重心的相對位置矢量,根據(jù)所述(12)式計算施加于球的力、和由于該力而在剛體上產(chǎn)生的轉(zhuǎn)矩。
步驟S15、S16剛體的平移運動量和角運動量的計算 在步驟S14中計算了施加于球的力和由于該力在剛體上產(chǎn)生的轉(zhuǎn)矩,因此,使用所述(15)式和(16)式將它們相加,計算施加于許多剛體中的各個剛體的力。接著,使用所述(2)式和(4)式,更新剛體的平移運動量和角運動量。
步驟S17、S18剛體的重心坐標(biāo)和四元數(shù)的計算 使用所述(3)式來計算剛體的重心坐標(biāo)。在本實施例中,以剛體的重心坐標(biāo)和重心速度紋理作為輸入,對另1塊剛體重心坐標(biāo)紋理進行輸出。另外,使用所述(10)式進行剛體的四元數(shù)的更新。在本實施例中,進一步以剛體的四元數(shù)和角速度紋理作為輸入,對另1塊剛體四元數(shù)紋理寫出更新后的值。
步驟S19渲染處理(用于顯示的渲染) 使用如上所述計算出的剛體的重心坐標(biāo)和四元數(shù),根據(jù)下述的(數(shù)學(xué)式6)所述的計算內(nèi)容,進行用于在顯示裝置15的畫面上進行描繪的顯示的渲染。
(數(shù)學(xué)式6) 若最初使用四元數(shù)Q,使頂點i的距離未旋轉(zhuǎn)時的剛體的中心的相對位置矢量ri旋轉(zhuǎn)當(dāng)前的剛體旋轉(zhuǎn)量,然后使其移動剛體的重心坐標(biāo)X的量,則通過(22)式計算頂點i的當(dāng)前的相對位置矢量r’。
r′i=X+QriQT(22) 接著,使用模型視圖投影矩陣M,根據(jù)(23)式,變換為當(dāng)前正在渲染的坐標(biāo)系中的坐標(biāo)r”。
r″i=Mr′i(23) 在通過GPU12進行的計算中,基本上通過重復(fù)以上8個階段的算法,可以在顯示裝置15的顯示畫面上實時地顯示許多剛體的撞擊模擬的圖像。
此外,圖7表示圖5所示的剛體模擬的高速化的計算算法的變形例。在圖7的處理的流程中,對于與圖5中說明的步驟實質(zhì)上相同的步驟賦予相同符號。根據(jù)圖7所示的計算算法,可以構(gòu)成為通過并行的處理,同時執(zhí)行剛體平移運動量的計算S15和剛體重心坐標(biāo)的計算S16、剛體角運動量的計算S17和剛體四元數(shù)的計算S18。這利用了GPU12中的并行處理。其它處理的流程與圖5中說明的內(nèi)容相同。由此,可以進一步縮短剛體模擬的計算算法中的1個時步的時間,可以實現(xiàn)進一步高速化。
在圖3所示的10922個圓環(huán)的落下·撞擊的剛體模擬圖像中,1個時步所需要的時間是16.6毫秒,渲染時的幀頻是23FPS。另外,在圖4所示的16384個國際象棋的棋子的落下·撞擊的剛體模擬圖像中,1個時步所需要的計算時間是12.8毫秒,渲染時的幀頻是21.2FPS。
在上述的實施例的說明中,關(guān)于剛體的方向,使用了“四元數(shù)”這樣的物理量,但在計算上也可以代替它而使用“旋轉(zhuǎn)矩陣”?!八脑獢?shù)”和“旋轉(zhuǎn)矩陣”都是表示“物體姿勢”的物理量。
所述實施例中的粒子法模擬的鄰近粒子搜索中所使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,被應(yīng)用于與許多剛體的撞擊相關(guān)的剛體模擬,但本發(fā)明的該數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法不限于此,例如也可以如圖8和圖9所示,應(yīng)用于流體或粉體的流動行動等自然物表現(xiàn)。
圖8是表示多個球體形狀的流體(液滴)落入到水等流體中時的流體的變化狀態(tài)的模擬的結(jié)果圖像。圖9是表示漏斗狀容器中容納的粉體向下方流動,從容器的下端開口部落到外側(cè),被配置于下側(cè)的容器容納的變化狀態(tài)的模擬的結(jié)果圖像。
通過GPU12執(zhí)行圖1所示的鄰近粒子搜索程序13A-1,由此實現(xiàn)所述鄰近粒子搜索中所使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法。鄰近粒子搜索中所使用的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法涉及到的鄰近粒子搜索程序13A-1,其自身可以被存儲在CDROM等存儲介質(zhì)上,可以構(gòu)成獨立的程序產(chǎn)品。
在所述的實施例的說明中,說明了在通過GPU的程序?qū)崿F(xiàn)中使用著色器(Shader)的情況。這是使用了專門用于GPU的圖形功能的程序模型的例子。但本發(fā)明不限于此。作為圖形運算處理器,可以使用包含上述GPU在內(nèi)的一般的流處理器,而且,作為編程模型,可以使用一般的編程模型來實現(xiàn)。
在包含上述GPU12在內(nèi)的流處理器(Streaming Processor)中,一般除了上述著色器(Shader)以外,還可以使用統(tǒng)一計算設(shè)備架構(gòu)(CUDA)、CTM、Brook等編程模型來實現(xiàn)。在所述實施例的GPU中的著色器(Shader)的實現(xiàn)中,將用于GPU12上的計算的計算空間中的切片(slice)、體素(voxel)以及與粒子相關(guān)的數(shù)據(jù)作為紋理13B-1而存儲在視頻存儲器13B中。在作為程序?qū)崿F(xiàn)而使用了統(tǒng)一計算設(shè)備架構(gòu)(CUDA)等的情況下,代替紋理而使用一般的“陣列(Array)”。
如前所述,在數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法中作為圖形運算處理器而使用GPU的情況下,使用由GPU準(zhǔn)備的深度測試、顏色蒙板、模板測試的各功能,來進行用于多次的處理器的渲染的每個渲染中寫入的粒子號碼和粒子坐標(biāo)的選擇、以及被寫入的像素中的通道的選擇。
另一方面,在作為圖形運算處理器而使用流處理器的情況下,一般代替上述像素(written pixel)而使用存儲器位置(Memory location),代替上述通道而使用用于體素(Voxel)的存儲器中的存儲器位置,而且,代替由GPU準(zhǔn)備的上述深度測試、顏色蒙板、模板測試的各功能而使用由流處理器準(zhǔn)備的計數(shù)器的功能。該計數(shù)器代替上述深度測試、顏色蒙板、模板測試而工作。
因此,在作為圖形運算處理器而使用了流處理器的情況下,使用由流處理器準(zhǔn)備的計數(shù)器的功能,進行多次處理器周期的各步驟中寫入的粒子的粒子號碼和存儲器位置(Memory Location)的選擇、以及用于體素(Voxel)的存儲器中的存儲器位置的選擇。
如前所述,數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法、即圖6所示的桶構(gòu)建S12的工序,在作為圖形運算處理器而使用GPU12進行程序?qū)崿F(xiàn)的情況下,具有如下步驟當(dāng)假定4個粒子的粒子號碼是ib0、ib1、ib2、ib3(ib0<ib1<ib2<ib3)時,在向第一通路的像素進行的寫入中,以最大值對深度緩沖區(qū)進行初始化,使用深度測試使具有較小值的深度緩沖區(qū)合格,由此,在R通道中寫入粒子號碼ib0,進行用于第一次處理的渲染的步驟(S101);在向第二通路的像素進行的寫入中,使用顏色蒙板來禁止向R通道的寫入并且使用了模板測試,由此,在G通道中寫入粒子號碼ib1,進行用于第二次處理的渲染的步驟(S102);在向第三通路的像素進行的寫入中,使用顏色蒙板來禁止向R和G的各通道的寫入并且使用了模板測試,由此,在B通道中寫入粒子號碼ib2,進行用于第三次處理的渲染的步驟(S103);以及在向第四通路的像素進行的寫入中,使用顏色蒙板來禁止向R、G和B的各通道的寫入并且使用了模板測試,由此,在A通道中寫入粒子號碼ib3,進行用于第四次處理的渲染的步驟(S104)。
與上述桶構(gòu)建S12的工序相關(guān)的處理的意思,一般而言,是這樣的意思,亦即,在通過流處理器寫入最大4個值時分為4次的步驟(S101~S104)來進行寫入。在4次的步驟的每一個步驟中,寫入1個此前未寫入的值。
在安裝了使用上述GPU12的程序的情況下,使用了GPU12的圖形特有功能“深度測試”、“顏色蒙板”、“模板測試”。
稱之為“深度測試”的功能,進行“排除此前寫入的值”這樣的處理。稱之為“顏色蒙板”的功能,進行“選擇寫入目的地”這樣的處理。稱之為“模板測試”的功能,進行“一個步驟中僅許可寫入一個值”這樣的處理。
此外,除了“在一個步驟中,在數(shù)據(jù)的寫入目的地的存儲器中寫入粒子號碼”這樣的處理以外,還更新“深度緩沖區(qū)”和“模板緩沖區(qū)”。
在使用包含上述GPU12在內(nèi)的流處理器的情況下,一般在程序?qū)崿F(xiàn)中可以使用統(tǒng)一計算設(shè)備架構(gòu)(CUDA)這種程序模型。在使用統(tǒng)一計算設(shè)備架構(gòu)(CUDA)的情況下,無法使用GPU12的圖形功能、即“深度測試”、“顏色蒙板”、“模板測試”。因此,在使用統(tǒng)一計算設(shè)備架構(gòu)(CUDA)的情況下,為了作成與這些圖形功能等同的功能,要準(zhǔn)備寫入目的地存儲器和計數(shù)器。
根據(jù)上述計數(shù)器,構(gòu)成為通過計數(shù)器進行“排除此前所寫入的值”的處理(“深度測試”的功能),而且進行“選擇寫入目的地”的處理(“顏色蒙板”的功能)和“一個步驟中僅許可寫入一個值”的處理(“模板測試”的功能)。
而且,除了“在一個步驟中,在數(shù)據(jù)的寫入目的地的存儲器中寫入粒子號碼”的處理以外,還更新上述“計數(shù)器”。在此,“計數(shù)器的更新”意味著將計數(shù)器增加1。
如上所述,當(dāng)使用GPU等流處理器且作為編程模型而實現(xiàn)統(tǒng)一計算設(shè)備架構(gòu)時,代替紋理而使用了在視頻存儲器中生成的陣列。此外,紋理是被包含在“在視頻存儲器中生成的陣列”的概念?!霸谝曨l存儲器中生成的陣列”一般可以解釋為“在專用存儲器中生成的陣列”。
在GPU等流處理器中,在作為編程模型代替著色器使用統(tǒng)一計算設(shè)備架構(gòu)來實現(xiàn)的情況下,代替像素(written pixel)而使用存儲器位置(MemoryLocation),代替通道而使用用于體素(Voxel)的存儲器中的存儲器位置,而且代替深度測試、顏色蒙板、模板測試的各功能而使用與之分別對應(yīng)的計數(shù)器的功能。
權(quán)利要求
1.一種用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其由GPU執(zhí)行,被用于通過將3維數(shù)字圖像數(shù)據(jù)變換為2維數(shù)字圖像數(shù)據(jù)來對物理對象物的模擬進行運算的方法,所述3維數(shù)字圖像數(shù)據(jù)是根據(jù)在視頻存儲器內(nèi)部生成的圖像數(shù)據(jù)而構(gòu)建的,所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法的特征在于,
使用了下述方法,即通過許多粒子來表現(xiàn)所述物理對象物,根據(jù)所述視頻存儲器內(nèi)的3維圖像數(shù)據(jù)結(jié)構(gòu)中的所述許多粒子的相互的容納位置關(guān)系,決定所述物理對象物的存在狀態(tài),
所述3維圖像數(shù)據(jù)結(jié)構(gòu)中包含的桶紋理,由將對應(yīng)于出現(xiàn)所述物理對象物的空間而生成的存儲器空間進行分割的桶構(gòu)成,將分配給所述許多粒子的粒子號碼存儲在許多所述桶的每一個中,
具有寫入步驟其通過所述GPU使用頂點著色器,讀出在所述桶中存儲的所述粒子的所述粒子號碼和粒子坐標(biāo),寫入2維圖像空間,
在所述寫入步驟中,當(dāng)所述桶中存在多個所述粒子時,在模擬的一個時步中劃分為用于多次處理的渲染,一個一個地寫入所述多個粒子的各個粒子的粒子號碼和粒子坐標(biāo)。
2.根據(jù)權(quán)利要求1所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
使用由所述GPU準(zhǔn)備的深度測試、顏色蒙板、模板測試的各功能,來進行在用于所述多次處理的渲染的各個渲染中寫入的所述粒子的粒子號碼和寫入的像素的選擇、以及被寫入的像素中的通道的選擇。
3.根據(jù)權(quán)利要求2所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
當(dāng)所述桶中存在4個所述粒子時,在由寫入粒子號碼的像素的RGBA組成的4個通道的每一個中,獨立地從按照升序或降序的粒子號碼的粒子中順次存儲該粒子號碼。
4.根據(jù)權(quán)利要求3所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
具有如下步驟
當(dāng)假定4個所述粒子的粒子號碼是ib0、ib1、ib2、ib3時,
在向第一通路的所述像素進行的寫入中,以最大值對深度緩沖區(qū)進行初始化,使用深度測試使具有較小值的深度緩沖區(qū)合格,由此,在所述R通道中寫入粒子號碼ib0,進行用于第一次處理的渲染;
在向第二通路的所述像素進行的寫入中,使用顏色蒙板來禁止向所述R通道的寫入并且使用模板測試,由此,在所述G通道中寫入粒子號碼ib1,進行用于第二次處理的渲染;
在向第三通路的所述像素進行的寫入中,使用顏色蒙板來禁止向所述R和G的各通道的寫入并且使用模板測試,由此,在所述B通道中寫入粒子號碼ib2,進行用于第三次處理的渲染;以及
在向第四通路的所述像素進行的寫入中,使用顏色蒙板來禁止向所述R、G和B的各通道的寫入并且使用模板測試,由此,在所述A通道中寫入粒子號碼ib3,進行用于第四次處理的渲染。
5.根據(jù)權(quán)利要求1所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
所述物理對象物是許多剛體,
所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,執(zhí)行基于所述許多剛體的撞擊計算的模擬的運算。
6.一種用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其由GPU執(zhí)行,被用于通過將3維數(shù)字圖像數(shù)據(jù)變換為2維數(shù)字圖像數(shù)據(jù)來對物理對象物的模擬進行運算的程序,所述3維數(shù)字圖像數(shù)據(jù)是根據(jù)在視頻存儲器內(nèi)部生成的圖像數(shù)據(jù)而構(gòu)建的,該數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序的特征在于,
使所述GPU執(zhí)行以下步驟
通過許多粒子來表現(xiàn)所述物理對象物,根據(jù)所述視頻存儲器內(nèi)的3維圖像數(shù)據(jù)結(jié)構(gòu)中的所述許多粒子的相互的容納位置關(guān)系,決定所述物理對象物的存在狀態(tài)的步驟;
所述3維圖像數(shù)據(jù)結(jié)構(gòu)中包含的桶紋理,由將對應(yīng)于出現(xiàn)所述物理對象物的空間而生成的存儲器空間進行分割的桶構(gòu)成,將分配給所述許多粒子的粒子號碼存儲在許多所述桶的每一個中的步驟;以及
使用頂點著色器,讀出在所述桶中存儲的所述粒子的所述粒子號碼和粒子坐標(biāo),寫入2維圖像空間的寫入步驟,
在所述寫入步驟中,執(zhí)行以下步驟當(dāng)所述桶中存在多個所述粒子時,在模擬的一個時步中劃分為用于多次處理的渲染,一個一個地寫入所述多個粒子的各個的粒子號碼和粒子坐標(biāo)。
7.根據(jù)權(quán)利要求6所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
使用由所述圖形運算處理器準(zhǔn)備的深度測試、顏色蒙板、模板測試的各功能,來進行在用于所述多次處理的渲染的各個渲染中寫入的所述粒子的粒子號碼和寫入像素的選擇、以及被寫入的像素中的通道的選擇。
8.根據(jù)權(quán)利要求7所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
使所述GPU執(zhí)行以下步驟
當(dāng)所述桶中存在4個所述粒子時,在由寫入粒子號碼的像素的RGBA組成的4個通道的每一個中,獨立地從按照升序或降序的粒子號碼的粒子中順次存儲該粒子號碼。
9.根據(jù)權(quán)利要求8所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
使所述圖形運算處理器執(zhí)行以下步驟
當(dāng)假定4個所述粒子的粒子號碼是ib0、ib1、ib2、ib3時,
在向第一通路的所述像素進行的寫入中,以最大值對深度緩沖區(qū)進行初始化,使用深度測試使具有較小值的深度緩沖區(qū)合格,由此,在所述R通道中寫入粒子號碼ib0,進行用于第一次處理的渲染;
在向第二通路的所述像素進行的寫入中,使用顏色蒙板來禁止向所述R通道的寫入并且使用模板測試,由此,在所述G通道中寫入粒子號碼ib1,進行用于第二次處理的渲染;
在向第三通路的所述像素進行的寫入中,使用顏色蒙板來禁止向所述R和G的各通道的寫入并且使用模板測試,由此,在所述B通道中寫入粒子號碼ib2,進行用于第三次處理的渲染;以及
在向第四通路的所述像素進行的寫入中,使用顏色蒙板來禁止向所述R、G和B的各通道的寫入并且使用模板測試,由此,在所述A通道中寫入粒子號碼ib3,進行用于第四次處理的渲染。
10.根據(jù)權(quán)利要求6所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
所述物理對象物是許多剛體,
所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,使所述GPU執(zhí)行以下步驟
進行基于所述許多剛體的撞擊計算的模擬的運算。
11.一種計算機可讀取的記錄介質(zhì),其特征在于,
記錄了權(quán)利要求6~10中任意一項所述的用于構(gòu)建在鄰近粒子搜索中使用的數(shù)據(jù)結(jié)構(gòu)的程序。
12.一種用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其由流處理器執(zhí)行,被用于通過將3維數(shù)字圖像數(shù)據(jù)變換為2維數(shù)字圖像數(shù)據(jù)來對物理對象物的模擬進行運算的方法,所述3維數(shù)字圖像數(shù)據(jù)是根據(jù)在存儲器內(nèi)部生成的數(shù)據(jù)陣列而構(gòu)建的,所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法的特征在于,
使用了下述方法,即通過許多粒子來表現(xiàn)所述物理對象物,根據(jù)所述存儲器內(nèi)的3維圖像數(shù)據(jù)結(jié)構(gòu)中的所述許多粒子的相互的容納位置關(guān)系,決定所述物理對象物的存在狀態(tài),
所述3維圖像數(shù)據(jù)結(jié)構(gòu)中包含的桶陣列,由將對應(yīng)于出現(xiàn)所述物理對象物的空間而生成的存儲器空間進行分割的桶構(gòu)成,將分配給所述許多粒子的粒子號碼存儲在許多所述桶的每一個中,
具有寫入步驟其通過所述流處理器,使用該流處理器的分散操作,讀出在所述桶中存儲的所述粒子的所述粒子號碼和粒子坐標(biāo),并寫入所述存儲器中的陣列中,
在所述寫入步驟中,當(dāng)所述桶中存在多個所述粒子時,在模擬的一個時步中劃分為用于多次處理的內(nèi)核,一個一個地寫入所述多個粒子的各個粒子的粒子號碼和粒子坐標(biāo)。
13.根據(jù)權(quán)利要求12所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
使用由所述流處理器準(zhǔn)備的計數(shù)器的功能,來進行在用于所述多次處理的各步驟中寫入的所述粒子的粒子號碼和寫入數(shù)據(jù)的選擇、以及為了體素而分配的存儲器中的多個存儲器位置的選擇。
14.根據(jù)權(quán)利要求13所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
當(dāng)所述桶中存在4個所述粒子時,在寫入粒子號碼的第1至第4所述存儲器位置的每一個中,獨立地從按照升序或降序的粒子號碼的粒子中順次存儲該粒子號碼。
15.根據(jù)權(quán)利要求13所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
具有如下步驟
當(dāng)假定4個所述粒子的粒子號碼是ib0、ib1、ib2、ib3時,
在向第一通路中的為了所述體素而分配的所述存儲器的寫入中,通過初始化成所述計數(shù)器為0并且接受向第一所述存儲器位置的寫入,在所述第一存儲器位置中寫入粒子號碼ib0,執(zhí)行用于第一次的例程的內(nèi)核;
在向第二通路中的為了所述體素而分配的所述存儲器的寫入中,通過使用所述計數(shù)器來禁止向所述第一存儲器位置的寫入并且向第二所述存儲器位置寫入下一值,由此,在所述第二存儲器位置中寫入粒子號碼ib1,執(zhí)行用于第二次的例程的內(nèi)核;
在向第三通路中的為了所述體素而分配的所述存儲器的寫入中,通過使用所述計數(shù)器來禁止向所述第一和第二存儲器位置的寫入并且向第三所述存儲器位置寫入下一值,由此,在所述第三存儲器位置中寫入粒子號碼ib2,執(zhí)行用于第三次的例程的內(nèi)核;以及
在向第四通路中的為了所述體素而分配的所述存儲器的寫入中,通過使用所述計數(shù)器來禁止向所述第一、第二和第三存儲器位置的寫入并且向第四所述存儲器位置寫入下一值,由此,在所述第四存儲器位置中寫入粒子號碼ib3,執(zhí)行用于第四次的例程的內(nèi)核。
16.根據(jù)權(quán)利要求12所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,其中,
所述物理對象物是許多剛體,
所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,執(zhí)行基于所述許多剛體的撞擊計算的模擬的運算。
17.一種用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其由流處理器執(zhí)行,被用于通過將3維數(shù)字圖像數(shù)據(jù)變換為2維數(shù)字圖像數(shù)據(jù)來對物理對象物的模擬進行運算的程序,所述3維數(shù)字圖像數(shù)據(jù)是根據(jù)在存儲器內(nèi)部生成的數(shù)據(jù)陣列而構(gòu)建的,該數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序的特征在于,
使所述流處理器執(zhí)行以下步驟
通過許多粒子來表現(xiàn)所述物理對象物,根據(jù)所述存儲器內(nèi)的3維圖像數(shù)據(jù)結(jié)構(gòu)中的所述許多粒子的相互的容納位置關(guān)系,決定所述物理對象物的存在狀態(tài)的步驟;
所述3維圖像數(shù)據(jù)結(jié)構(gòu)中包含的桶陣列,由將對應(yīng)于出現(xiàn)所述物理對象物的空間而生成的存儲器空間進行分割的桶構(gòu)成,將分配給所述許多粒子的粒子號碼存儲在許多所述桶的每一個中的步驟;以及
通過所述流處理器,使用該流處理器的分散操作,讀出在所述桶中存儲的所述粒子的所述粒子號碼和粒子坐標(biāo),并寫入所述存儲器中的陣列中的寫入步驟,
在所述寫入步驟中具有以下步驟當(dāng)所述桶中存在多個所述粒子時,在模擬的一個時步中劃分為用于多次處理的內(nèi)核,一個一個地寫入所述多個粒子的各個的粒子號碼和粒子坐標(biāo)。
18.根據(jù)權(quán)利要求17所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
使用由所述流處理器準(zhǔn)備的計數(shù)器的功能,來進行在用于所述多次處理的各步驟中寫入的所述粒子的粒子號碼和寫入數(shù)據(jù)的選擇、以及為了體素而分配的存儲器中的多個存儲器位置的選擇。
19.根據(jù)權(quán)利要求18所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
當(dāng)所述桶中存在4個所述粒子時,在寫入粒子號碼的第1至第4所述存儲器位置的每一個中,獨立地從按照升序或降序的粒子號碼的粒子中順次存儲該粒子號碼。
20.根據(jù)權(quán)利要求19所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
使所述流處理器執(zhí)行如下步驟
當(dāng)假定4個所述粒子的粒子號碼是ib0、ib1、ib2、ib3時,
在向第一通路中的為了所述體素而分配的所述存儲器的寫入中,通過初始化成所述計數(shù)器為0并且接受向第一所述存儲器位置的寫入,在所述第一存儲器位置中寫入粒子號碼ib0,執(zhí)行用于第一次的例程的內(nèi)核的步驟;
在向第二通路中的為了所述體素而分配的所述存儲器的寫入中,通過使用所述計數(shù)器來禁止向所述第一存儲器位置的寫入并且向第二所述存儲器位置寫入下一值,由此,在所述第二存儲器位置中寫入粒子號碼ib1,執(zhí)行用于第二次的例程的內(nèi)核的步驟;
在向第三通路中的為了所述體素而分配的所述存儲器的寫入中,通過使用所述計數(shù)器來禁止向所述第一和第二存儲器位置的寫入并且向第三所述存儲器位置寫入下一值,由此,在所述第三存儲器位置中寫入粒子號碼ib2,執(zhí)行用于第三次的例程的內(nèi)核的步驟;以及
在向第四通路中的為了所述體素而分配的所述存儲器的寫入中,通過使用所述計數(shù)器來禁止向所述第一、第二和第三存儲器位置的寫入并且向第四所述存儲器位置寫入下一值,由此,在所述第四存儲器位置中寫入粒子號碼ib3,執(zhí)行用于第四次的例程的內(nèi)核的步驟。
21.根據(jù)權(quán)利要求20所述的用于鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,其中,
所述物理對象物是許多剛體,
所述數(shù)據(jù)結(jié)構(gòu)的構(gòu)建程序,使所述流處理器執(zhí)行以下步驟
進行基于所述許多剛體的撞擊計算的模擬的運算。
22.一種計算機可讀取的記錄介質(zhì),其特征在于,
記錄了權(quán)利要求17~21中任意一項所述的用于構(gòu)建在鄰近粒子搜索中使用的數(shù)據(jù)結(jié)構(gòu)的程序。
全文摘要
提供一種鄰近粒子搜索的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法。該數(shù)據(jù)結(jié)構(gòu)的構(gòu)建方法,通過GPU等流處理器執(zhí)行,將3維數(shù)字圖像數(shù)據(jù)變換為2維數(shù)字圖像數(shù)據(jù),由此來對物理對象物的模擬進行運算。在使用GPU的情況下使用桶紋理,該桶紋理由將對應(yīng)于出現(xiàn)物理對象物的空間而生成的存儲器空間進行分割的桶構(gòu)成。在GPU的情況下,具有使用頂點著色器,讀出在桶中容納的粒子的所述粒子號碼和粒子坐標(biāo),并寫入2維圖像空間的步驟。
文檔編號G06T13/20GK101350106SQ200810130398
公開日2009年1月21日 申請日期2008年7月16日 優(yōu)先權(quán)日2007年7月17日
發(fā)明者原田隆宏 申請人:普羅姆泰克軟件公司