一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及圖像渲染技術(shù)領(lǐng)域,特別涉及一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法和裝置。
【背景技術(shù)】
[0002]隨著近年來VR(虛擬現(xiàn)實(shí))廣為流行,所以國內(nèi)的很多廠商也逐漸進(jìn)入這個(gè)市場,尤其是移動(dòng)端的VR市場。我們戴上國外大廠頭顯的時(shí)候,體驗(yàn)十分出色,感覺非常棒,可戴上國產(chǎn)的VR頭顯,不動(dòng)的時(shí)候還好,一動(dòng)起來圖像就會(huì)模糊,讓人極度眩暈。
[0003]造成眩暈的主要原因是頭部運(yùn)動(dòng)和視覺觀測到的頭部運(yùn)動(dòng)的不匹配。這也是VR頭顯能夠從技術(shù)上加以改善的部分。其中這一點(diǎn)包括兩個(gè)部分:幀間延遲和幀內(nèi)延遲。幀內(nèi)延遲是造成圖像模糊的主要原因。如圖1所示,我們可以看到,左邊這張圖是真實(shí)的世界中,一個(gè)物體從左往右移動(dòng)時(shí)眼睛看到的情況:隨著時(shí)間的推移,物體的軌跡是一條線;而右邊的圖則是任何一種顯示器顯示出來的情況:物體的圖像在每一個(gè)點(diǎn)顯示一段時(shí)間之后,就跳到下一個(gè)點(diǎn);它并非是連續(xù)的運(yùn)動(dòng)。
[0004]想要讓物體的圖像更加連續(xù)的移動(dòng),一個(gè)辦法,就是降低余暉(Persistence)。低余暉顯示對(duì)VR頭顯的意義在于,頭動(dòng)時(shí)物體的軌跡更加接近于物理世界的真實(shí)軌跡。目前的LCD的基本顯示原理:通過讓液晶翻轉(zhuǎn)來選擇性透過光線。這意味著LCD很難使用低余暉顯示。想要解決這個(gè)問題,VR頭顯必須使用主動(dòng)發(fā)光的顯示屏,比方說0LED。由于其每個(gè)像素都是主動(dòng)發(fā)光的,所以O(shè)LED屏幕可以做到低余暉。但是考慮到OLED屏幕的專利及成本等方面,OLED屏幕的應(yīng)用有一定的局限性。
[0005]另一個(gè)辦法是提高刷新率。但是目前移動(dòng)平臺(tái)的屏幕刷新率只能達(dá)到120Hz,而且單純提高刷屏頻率,其他硬件設(shè)備性能匹配不上,使得系統(tǒng)性能迅速下降,應(yīng)用的渲染頻率遠(yuǎn)遠(yuǎn)不能穩(wěn)定在較高頻率上,這樣就會(huì)導(dǎo)致刷頻時(shí)會(huì)重復(fù)刷同一幀的內(nèi)容從而形成和60Hz屏幕一樣的余暉效果。
【發(fā)明內(nèi)容】
[0006]鑒于現(xiàn)有技術(shù)由于幀內(nèi)延遲導(dǎo)致的虛擬現(xiàn)實(shí)場景圖像模糊的問題,提出了本發(fā)明的一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法和裝置,以便克服上述問題或者至少部分地解決上述問題。
[0007]依據(jù)本發(fā)明的一個(gè)方面,提供了一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法,該方法包括:
[0008]渲染線程逐幀渲染待顯示的內(nèi)容,渲染過程中處于渲染狀態(tài),每渲染完一幀內(nèi)容后進(jìn)入等待狀態(tài);
[0009]送屏線程按照與屏幕刷新率相同的頻率,逐幀讀取所述渲染線程最新的渲染結(jié)果;
[0010]所述送屏線程根據(jù)讀取結(jié)果判斷所述渲染線程的狀態(tài),當(dāng)判斷所述渲染線程處于等待狀態(tài)時(shí),則將讀取結(jié)果處理后送到屏幕上進(jìn)行顯示,并喚醒所述渲染線程,當(dāng)判斷所述渲染線程處于渲染狀態(tài)時(shí),則執(zhí)行一次清屏操作;
[0011]處于等待狀態(tài)的所述渲染線程被喚醒后進(jìn)行下一幀內(nèi)容的渲染。
[0012]可選地,所述送屏線程根據(jù)讀取結(jié)果判斷所述渲染線程的狀態(tài)包括:
[0013]在渲染結(jié)果中設(shè)置幀變量,所述渲染線程每渲染完成一幀內(nèi)容后所述幀變量的值加一;
[0014]所述送屏線程獲取所述渲染結(jié)果中的所述幀變量,判斷所述幀變量的值是否與上一次讀取的渲染結(jié)果中的幀變量的值相同,若不同則判斷所述渲染線程處于等待狀態(tài),若相同則判斷所述渲染線程處于渲染狀態(tài)。
[0015]可選地,該方法還包括:
[0016]設(shè)置條件變量;
[0017]所述渲染線程每渲染完一幀內(nèi)容后進(jìn)入等待狀態(tài)包括:利用所述條件變量在渲染完成一幀內(nèi)容后阻塞所述渲染線程;
[0018]所述當(dāng)判斷所述渲染線程處于等待狀態(tài)時(shí),喚醒所述渲染線程包括:當(dāng)判斷所述渲染線程處于等待狀態(tài)時(shí),向所述條件變量發(fā)送喚醒信號(hào),所述條件變量根據(jù)所述喚醒信號(hào)喚醒所述渲染線程。
[0019]可選地,該方法還包括:
[0020]設(shè)置互斥鎖,所述互斥鎖用于保護(hù)所述條件變量的改變。
[0021]依據(jù)本發(fā)明的另一個(gè)方面,提供了一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的裝置,該裝置包括:
[0022]渲染處理單元和送屏顯示單元;
[0023]所述渲染處理單元,適于通過渲染線程逐幀渲染待顯示的內(nèi)容,渲染過程中所述渲染線程處于渲染狀態(tài),每渲染完一幀內(nèi)容后所述渲染線程進(jìn)入等待狀態(tài);
[0024]送屏顯示單元,適于通過送屏線程按照與屏幕刷新率相同的頻率,逐幀讀取所述渲染線程最新的渲染結(jié)果;
[0025]所述送屏顯示單元,進(jìn)一步適于通過所述送屏線程根據(jù)讀取結(jié)果判斷所述渲染線程的狀態(tài),當(dāng)判斷所述渲染線程處于等待狀態(tài)時(shí),則將讀取結(jié)果處理后送到屏幕上進(jìn)行顯示,并喚醒所述渲染線程,當(dāng)判斷所述渲染線程處于渲染狀態(tài)時(shí),則執(zhí)行一次清屏操作;
[0026]所述渲染處理單元,進(jìn)一步適于使處于等待狀態(tài)的所述渲染線程被喚醒后進(jìn)行下一幀內(nèi)容的渲染。
[0027]可選地,所述渲染處理單元,進(jìn)一步適于在渲染結(jié)果中設(shè)置幀變量,所述渲染線程每渲染完成一幀內(nèi)容后所述幀變量的值加一;
[0028]所述送屏顯示單元,進(jìn)一步適于通過所述送屏線程獲取所述渲染結(jié)果中的所述幀變量,判斷所述幀變量的值是否與上一次讀取的渲染結(jié)果中的幀變量的值相同,若不同則判斷所述渲染線程處于等待狀態(tài),若相同則判斷所述渲染線程處于渲染狀態(tài)。
[0029]可選地,該裝置還包括:
[0030]設(shè)置單元,用于設(shè)置條件變量;
[0031 ]所述渲染處理單元,進(jìn)一步適于利用所述條件變量在渲染完成一幀內(nèi)容后阻塞所述渲染線程;
[0032]所述送屏顯示單元,進(jìn)一步適于當(dāng)判斷所述渲染線程處于等待狀態(tài)時(shí),向所述條件變量發(fā)送喚醒信號(hào),所述條件變量根據(jù)所述喚醒信號(hào)喚醒所述渲染線程。
[0033]可選地,所述設(shè)置單元,進(jìn)一步適于設(shè)置互斥鎖,所述互斥鎖用于保護(hù)所述條件變量的改變。
[0034]綜上所述,本發(fā)明的技術(shù)方案通過渲染完成后阻塞渲染線程,并在讀取最新渲染結(jié)果后判斷渲染線程的狀態(tài),當(dāng)渲染線程處于等待狀態(tài)時(shí),將讀取結(jié)果處理后送到屏幕上進(jìn)行顯示,并喚醒渲染線程,當(dāng)判斷渲染線程處于渲染狀態(tài)時(shí),執(zhí)行一次清屏操作,使渲染線程和送屏線程異步刷新,有效地解決了在提高屏幕刷新率時(shí)帶來的系統(tǒng)性能下降和渲染頻率跟不上的問題,從而有效地降低了余暉效果,改善了運(yùn)動(dòng)情況下圖像模糊的問題。
【附圖說明】
[0035]圖1為真實(shí)世界物體運(yùn)動(dòng)軌跡和顯示器顯示的物體運(yùn)動(dòng)軌跡比較示意圖;
[0036]圖2為本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法流程圖;
[0037]圖3為本發(fā)明另一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法流程圖;
[0038]圖4為本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的裝置示意圖;
[0039]圖5為本發(fā)明另一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的裝置示意圖。
【具體實(shí)施方式】
[0040]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
[0041]圖2為本發(fā)明一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法流程圖。如圖2所示,該方法包括:
[0042]步驟SI10,渲染線程逐幀渲染待顯示的內(nèi)容,渲染過程中處于渲染狀態(tài),每渲染完一幀內(nèi)容后進(jìn)入等待狀態(tài)。
[0043]步驟S120,送屏線程按照與屏幕刷新率相同的頻率,逐幀讀取渲染線程最新的渲染結(jié)果。
[0044]步驟S130,送屏線程根據(jù)讀取結(jié)果判斷渲染線程的狀態(tài),當(dāng)判斷渲染線程處于等待狀態(tài)時(shí),則將讀取結(jié)果處理后送到屏幕上進(jìn)行顯示,并喚醒渲染線程,當(dāng)判斷渲染線程處于渲染狀態(tài)時(shí),則執(zhí)行一次清屏操作。
[0045]步驟S140,處于等待狀態(tài)的渲染線程被喚醒后進(jìn)行下一幀內(nèi)容的渲染。
[0046]本發(fā)明的技術(shù)方案通過渲染完成后阻塞渲染線程,并在讀取最新渲染結(jié)果后判斷渲染線程的狀態(tài),當(dāng)渲染線程處于等待狀態(tài)時(shí),將讀取結(jié)果處理后送到屏幕上進(jìn)行顯示,并喚醒渲染線程,當(dāng)判斷渲染線程處于渲染狀態(tài)時(shí),執(zhí)行一次清屏操作,使渲染線程和送屏線程異步刷新,每一次的清屏操作,帶來的效果如同OLED屏中的滅屏,通過這種方式來降低余暉,有效地解決了在提高屏幕刷新率時(shí)帶來的系統(tǒng)性能下降和渲染頻率跟不上的問題,從而有效地降低了余暉效果,改善了運(yùn)動(dòng)情況下圖像模糊的問題。
[0047]圖3為本發(fā)明另一個(gè)實(shí)施例提供的一種虛擬現(xiàn)實(shí)場景中優(yōu)化運(yùn)動(dòng)圖像的方法流程圖,如圖3所示,該方法包括:
[0048]步驟S210,渲染線程逐幀渲染待顯示的內(nèi)容,渲染過程中處于渲染狀態(tài),每渲染完一幀內(nèi)容后進(jìn)入等待狀態(tài),其中,在渲染結(jié)果中設(shè)置幀變量,渲染線程每渲染完成一幀內(nèi)容后幀變量的值加一。
[0049]步驟S220,送屏線程按照與屏幕刷新率相同的頻率,逐幀讀取渲染線程最新的渲染結(jié)果。
[0050]步驟S230,送屏線程獲取渲染結(jié)果中的幀變量,判斷幀變量的值是否與上一次讀取的渲染結(jié)果中的幀變量的值相同。
[0051]步驟S240,當(dāng)幀變量值相同時(shí),送屏線程判斷渲染線程處于渲染狀態(tài),執(zhí)行一次清屏操作。
[0052]步驟S250,當(dāng)幀變量值不同時(shí),送屏線程判斷渲染線程處于等待狀態(tài),將讀取結(jié)果處理后送到屏幕上進(jìn)行顯示,并喚醒渲染線程。
[0053]步驟S260,處于等待狀態(tài)的渲染線程被喚醒后進(jìn)行下一幀內(nèi)容的渲染。
[0054]通過設(shè)置幀變量,在