本發(fā)明涉及虛擬現(xiàn)實(shí)技術(shù)領(lǐng)域,具體涉及一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制方法和裝置及一種虛擬現(xiàn)實(shí)設(shè)備。
背景技術(shù):
目前主流的虛擬現(xiàn)實(shí)場(chǎng)景的繪制流程都是采用Timewarp異步刷新的方式,繪制模式如圖1所示,一般有渲染線程(render)和繪制線程(timewarp)兩個(gè)線程,渲染線程的結(jié)果由繪制線程獲取并送到屏幕上,由繪制線程根據(jù)垂直同步信號(hào)(VSYNC)來(lái)控制兩個(gè)線程的運(yùn)行。
渲染線程線程完成一次繪制后,不是直接進(jìn)行下次繪制,而是等待繪制線程的喚醒。繪制線程每次接收到垂直同步信號(hào)后,進(jìn)行繪制,并喚醒渲染線程進(jìn)行下一幀圖像的渲染。以60hz的屏幕為例,二者每一次的繪制周期是16.67ms。
該模式的缺點(diǎn)為:渲染線程每次繪制完以后都要處于等待狀態(tài),等待繪制線程的喚醒,若是渲染線程的繪制任務(wù)比較輕,就會(huì)在短時(shí)間內(nèi)繪制完成,那么渲染好的圖像就需要等待更長(zhǎng)的時(shí)間才會(huì)被屏幕顯示出來(lái),一幀圖像從渲染到屏幕顯示出來(lái)的時(shí)間間隔越長(zhǎng),用戶感受到的延遲就會(huì)越大,會(huì)帶來(lái)眩暈等不良體驗(yàn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制方法和裝置及一種虛擬現(xiàn)實(shí)設(shè)備,以降低渲染線程在繪制過(guò)程中的無(wú)效等待時(shí)間,降低延遲,提高用戶體驗(yàn)。
根據(jù)本發(fā)明的一個(gè)方面,本發(fā)明提供了一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制方法,包括:
設(shè)置特定頻率的垂直同步信號(hào)控制繪制線程和渲染線程;
估算渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間;
設(shè)置喚醒時(shí)刻,在所述喚醒時(shí)刻喚醒渲染線程開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,使渲染線程在垂直同步信號(hào)到達(dá)之前剛好完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染;渲染完成后渲染線程進(jìn)入等待被喚醒狀態(tài);
在垂直同步信號(hào)到達(dá)時(shí),繪制線程將渲染線程已經(jīng)渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕。
根據(jù)本發(fā)明的另一個(gè)方面,本發(fā)明提供了一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置,包括垂直同步單元、渲染單元和繪制單元;
所述垂直同步單元,用于向所述渲染單元和所述繪制單元發(fā)送特定頻率的垂直同步信號(hào);
所述渲染單元,用于估算渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間,設(shè)置喚醒時(shí)刻,在所述喚醒時(shí)刻喚醒渲染線程開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,使渲染線程在垂直同步信號(hào)到達(dá)之前剛好完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染;控制渲染線程在渲染完成后進(jìn)入等待被喚醒狀態(tài);
所述繪制單元,用于在垂直同步信號(hào)到達(dá)時(shí),將渲染線程已經(jīng)渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕。
根據(jù)本發(fā)明的又一個(gè)方面,本發(fā)明提供了一種虛擬現(xiàn)實(shí)設(shè)備,包括上述的虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置。
本發(fā)明的有益效果是:本發(fā)明實(shí)施例在渲染虛擬現(xiàn)實(shí)場(chǎng)景的過(guò)程中,根據(jù)垂直同步信號(hào)控制繪制線程和渲染線程,通過(guò)估算渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間,并根據(jù)該時(shí)間設(shè)置渲染時(shí)刻,在該時(shí)刻喚醒渲染線程開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,使渲染線程在垂直同步信號(hào)到達(dá)之前剛好完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,在垂直同步信號(hào)到達(dá)時(shí)繪制線程將渲染線程已經(jīng)渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕,由此減小了渲染線程渲染完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的時(shí)刻與繪制線程將該場(chǎng)景發(fā)送給屏幕的時(shí)刻的間隔,有效的降低了渲染線程的無(wú)效等待時(shí)間,降低了延遲,提高了用戶體驗(yàn)。
附圖說(shuō)明
圖1是現(xiàn)有的主流虛擬現(xiàn)實(shí)場(chǎng)景的繪制方案的原理示意圖;
圖2是本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制方法的流程圖;
圖3是本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制方法的原理圖;
圖4是本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置的功能框圖;
圖5是本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)設(shè)備的功能框圖。
具體實(shí)施方式
本發(fā)明的設(shè)計(jì)構(gòu)思是:現(xiàn)有的虛擬現(xiàn)實(shí)場(chǎng)景的繪制流程中,渲染線程每次繪制完以后都要處于等待狀態(tài),等待繪制線程的喚醒,若是渲染線程的繪制任務(wù)比較輕,就會(huì)在短時(shí)間內(nèi)繪制完成,那么渲染好的圖像就需要等待更長(zhǎng)的時(shí)間才會(huì)被屏幕顯示出來(lái),一幀圖像從渲染到屏幕顯示出來(lái)的時(shí)間間隔越長(zhǎng),用戶感受到的延遲就會(huì)越大,會(huì)帶來(lái)眩暈等不良體驗(yàn)。針對(duì)這種情況,本發(fā)明在渲染虛擬現(xiàn)實(shí)場(chǎng)景的過(guò)程中,根據(jù)垂直同步信號(hào)控制繪制線程和渲染線程,通過(guò)估算渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間,并根據(jù)該時(shí)間設(shè)置渲染時(shí)刻,在該時(shí)刻喚醒渲染線程開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,使渲染線程在垂直同步信號(hào)到達(dá)之前剛好完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,在垂直同步信號(hào)到達(dá)時(shí)繪制線程將渲染線程已經(jīng)渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕,由此減小了渲染線程渲染完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的時(shí)刻與繪制線程將該場(chǎng)景發(fā)送給屏幕的時(shí)刻的間隔,有效的降低了渲染線程的無(wú)效等待時(shí)間,降低了延遲,提高了用戶體驗(yàn)。
實(shí)施例一
圖2是本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制方法的流程圖,如圖2所示,本實(shí)施例提供的虛擬現(xiàn)實(shí)場(chǎng)景的繪制方法包括:
步驟S210:設(shè)置特定頻率的垂直同步信號(hào)(VSYNC)控制繪制線程(timewarp)和渲染線程(render)。
步驟S220:估算渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間。
渲染一幀虛擬現(xiàn)實(shí)場(chǎng)景所用的時(shí)間與設(shè)備的硬件配置有關(guān),例如繪制相同的場(chǎng)景,高端的顯卡所需的渲染時(shí)間較短。另一方面,渲染一幀虛擬現(xiàn)實(shí)場(chǎng)景所用的時(shí)間還與渲染的場(chǎng)景有關(guān),當(dāng)場(chǎng)景比較復(fù)雜時(shí),渲染所用的時(shí)間較長(zhǎng)。
為了能夠估算出比較準(zhǔn)確的渲染用時(shí),優(yōu)選實(shí)施例在程序運(yùn)行期間動(dòng)態(tài)獲取并更新渲染用時(shí)的估計(jì)值:首先,在渲染線程的渲染指令中插入fence同步信號(hào),利用fence同步信號(hào)查詢渲染線程渲染每一幀虛擬現(xiàn)實(shí)場(chǎng)景所用的時(shí)間。然后每隔一段時(shí)間,統(tǒng)計(jì)該時(shí)間段內(nèi)渲染線程渲染一幀虛擬現(xiàn)實(shí)場(chǎng)景所用的最長(zhǎng)時(shí)間,作為估算出的渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間。例如每隔一秒的時(shí)間統(tǒng)計(jì)一次過(guò)去一秒鐘時(shí)間內(nèi)渲染線程渲染一幀虛擬現(xiàn)實(shí)場(chǎng)景的最長(zhǎng)時(shí)間T,以此來(lái)更新渲染用時(shí)的估計(jì)值,保證在該時(shí)間內(nèi),渲染線程可以完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染。由于本實(shí)施例中,渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間是動(dòng)態(tài)調(diào)整的,即使場(chǎng)景的復(fù)雜度發(fā)生變化使渲染的任務(wù)量增加或減少,估計(jì)值也可以根據(jù)渲染線程最近的工作情況動(dòng)態(tài)調(diào)整,從而獲取比較準(zhǔn)確的渲染用時(shí)的估計(jì)值。
步驟S230:設(shè)置喚醒時(shí)刻,在該時(shí)刻喚醒渲染線程開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,使渲染線程在垂直同步信號(hào)到達(dá)之前剛好完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染;渲染完成后渲染線程進(jìn)入等待被喚醒狀態(tài)。
優(yōu)選地,可以以垂直同步信號(hào)到達(dá)的時(shí)間點(diǎn)為基準(zhǔn),提前估算出的渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間T,所得到的時(shí)刻,作為喚醒時(shí)刻。如圖3所示,根據(jù)下一次垂直同步信號(hào)到達(dá)時(shí)間點(diǎn)和當(dāng)前估算出的渲染所用的時(shí)間T,可以算出一個(gè)時(shí)間點(diǎn)t,將時(shí)間點(diǎn)t作為渲染線程被喚醒的時(shí)間,因?yàn)榇藭r(shí)喚醒渲染線程可以保證在下個(gè)垂直同步信號(hào)到來(lái)之前完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,并在下個(gè)垂直同步信號(hào)到達(dá)時(shí),繪制線程就會(huì)將該幀場(chǎng)景發(fā)送至屏幕,場(chǎng)景渲染完成的時(shí)刻與場(chǎng)景發(fā)送到屏幕的時(shí)刻之間的間隔最短,有效的降低了渲染線程的無(wú)效等待時(shí)間,一定程度的降低了由此帶來(lái)的延遲。
步驟S240:在垂直同步信號(hào)到達(dá)時(shí),繪制線程將渲染線程已經(jīng)渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕,完成一幀虛擬現(xiàn)實(shí)圖像的顯示。
與圖1中現(xiàn)有的繪制方案相比,本實(shí)施例的繪制線程在垂直同步信號(hào)到達(dá)時(shí)將渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕之后,并不是立即喚醒渲染線程開(kāi)始下一幀場(chǎng)景的渲染,而是等待一段時(shí)間,直到圖3中的時(shí)刻t才喚醒渲染線程開(kāi)始渲染下一幀場(chǎng)景。如果在喚醒時(shí)刻t之前的時(shí)刻t1,渲染線程確實(shí)已經(jīng)被喚醒,若在時(shí)刻t1立即開(kāi)始一幀場(chǎng)景的渲染,則會(huì)在下一個(gè)垂直同步信號(hào)到來(lái)之前提前一段時(shí)間完成渲染任務(wù),由此產(chǎn)生多余的一段延遲,因此在這種情況下選擇則繼續(xù)等待一段時(shí)間,直到時(shí)刻t1再進(jìn)行渲染。如果在喚醒時(shí)刻t之后的時(shí)刻t2渲染線程被喚醒,則直接進(jìn)行渲染,無(wú)需等待。
本實(shí)施例在虛擬現(xiàn)實(shí)場(chǎng)景的繪制流程中通過(guò)控制渲染線程開(kāi)始渲染的時(shí)間,有效的降低了渲染線程的無(wú)效等待時(shí)間,降低了延遲,提高了用戶體驗(yàn)。
實(shí)施例二
圖4是本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置的功能框圖,如圖4所示,本實(shí)施例提供的虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置包括垂直同步單元410、渲染單元420和繪制單元430。
垂直同步單元410向渲染單元420和繪制單元430發(fā)送特定頻率的垂直同步信號(hào)。渲染單元420估算渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間,并設(shè)置喚醒時(shí)刻,在該時(shí)刻喚醒渲染線程開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,使渲染線程在垂直同步信號(hào)到達(dá)之前剛好完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染;以及控制渲染線程在渲染完成后進(jìn)入等待被喚醒狀態(tài)。繪制單元430在垂直同步信號(hào)到達(dá)時(shí),將渲染線程已經(jīng)渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕,完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的繪制。
優(yōu)選實(shí)施例中,渲染單元420包括渲染用時(shí)估算模塊421。渲染用時(shí)估算模塊421在渲染線程的渲染指令中插入fence同步信號(hào),利用fence同步信號(hào)查詢渲染線程渲染每一幀虛擬現(xiàn)實(shí)場(chǎng)景所用的時(shí)間,并且每隔預(yù)設(shè)的時(shí)間,統(tǒng)計(jì)該時(shí)間段內(nèi)渲染線程渲染一幀虛擬現(xiàn)實(shí)場(chǎng)景所用的最長(zhǎng)時(shí)間,例如每隔一秒的時(shí)間統(tǒng)計(jì)一次過(guò)去一秒鐘時(shí)間內(nèi)渲染線程渲染一幀虛擬現(xiàn)實(shí)場(chǎng)景的最長(zhǎng)時(shí)間T,作為估算出的渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間。
在另一個(gè)優(yōu)選實(shí)施例中,420渲染單元還包括喚醒時(shí)刻設(shè)置模塊422。用喚醒時(shí)刻設(shè)置模塊422以垂直同步信號(hào)到達(dá)的時(shí)間點(diǎn)為基準(zhǔn),提前渲染用時(shí)估算模塊421估算出的渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間T,所得到的時(shí)刻,作為喚醒時(shí)刻,即如圖3所示的時(shí)刻t。
若在喚醒時(shí)刻t之前,例如時(shí)刻t1,渲染線程已經(jīng)被喚醒,那么渲染單元420控制渲染線程等待直到喚醒時(shí)刻t,才開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,防止在下一個(gè)垂直同步信號(hào)到來(lái)之前提前一段時(shí)間完成渲染任務(wù),產(chǎn)生多余的一段延遲。如果在喚醒時(shí)刻t之后,例如時(shí)刻t2,渲染線程被喚醒,則直接進(jìn)行渲染,無(wú)需等待。本實(shí)施例提供的虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置可以有效的降低渲染線程的無(wú)效等待時(shí)間,降低延遲,提高用戶體驗(yàn)。
實(shí)施例三
圖5是本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)設(shè)備的功能框圖,如圖5所示,本實(shí)施例提供的虛擬現(xiàn)實(shí)設(shè)備500包括上述實(shí)施例二中的虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置510。
虛擬現(xiàn)實(shí)場(chǎng)景的繪制裝置510在虛擬現(xiàn)實(shí)設(shè)備500渲染虛擬現(xiàn)實(shí)場(chǎng)景的過(guò)程中,根據(jù)垂直同步信號(hào)控制繪制線程和渲染線程,通過(guò)估算渲染線程完成一幀虛擬現(xiàn)實(shí)場(chǎng)景渲染所用的時(shí)間,并根據(jù)該時(shí)間設(shè)置渲染時(shí)刻,在該時(shí)刻喚醒渲染線程開(kāi)始一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,使渲染線程在垂直同步信號(hào)到達(dá)之前剛好完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的渲染,在垂直同步信號(hào)到達(dá)時(shí)繪制線程將渲染線程已經(jīng)渲染完成的虛擬現(xiàn)實(shí)場(chǎng)景發(fā)送到屏幕,由此減小了渲染線程渲染完成一幀虛擬現(xiàn)實(shí)場(chǎng)景的時(shí)刻與繪制線程將該場(chǎng)景發(fā)送給屏幕的時(shí)刻的間隔,有效的降低了渲染線程的無(wú)效等待時(shí)間,降低了虛擬現(xiàn)實(shí)設(shè)備500的延遲,提高了產(chǎn)品的用戶體驗(yàn)。
以上所述,僅為本發(fā)明的具體實(shí)施方式,在本發(fā)明的上述教導(dǎo)下,本領(lǐng)域技術(shù)人員可以在上述實(shí)施例的基礎(chǔ)上進(jìn)行其他的改進(jìn)或變形。本領(lǐng)域技術(shù)人員應(yīng)該明白,上述的具體描述只是更好的解釋本發(fā)明的目的,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。