本發(fā)明涉及人機交互領域,尤其涉及一種三維場景渲染方法和系統以及相關設備。
背景技術:
隨著終端及4G(第四代移動通信技術)等網絡能力的不斷提升,立體導航、虛擬會展、增強虛擬現實、移動大型多人在線(MMO,Massive Multiplayer Online)游戲等移動3D(3Dimensions,三維)交互式應用日益豐富,不斷帶來全新的交互式沉浸體驗。
然而現代移動交互應用中的3D場景設計日趨龐大、復雜,針對復雜的3D場景進行實時、高效的空間裁剪(Spatial Culling),進而避免繪制那些不在屏幕范圍內的3D物體,逐漸成為提升移動終端3D交互式渲染效率的關鍵手段之一。但是,當這一手段被應用于移動終端時,仍有一系列難題亟待解決。
移動終端的CPU(Central Processing Unit,中央處理器)的內存容量、處理能力有限,當對大規(guī)模復雜3D場景進行實時的、細粒度的空間裁剪時,容易導致虛擬內存頻繁地讀入讀出,在極大消耗有限內存資源的同時降低了終端處理性能,使得移動端CPU不堪重負、響應遲鈍,難以達到實時交互響應要求。此外,移動終端的GPU一般計算性能有限,無法針對大面積屏幕像素進行實時的高級光照、著色及后處理計算,進而導致無法實時計算渲染,大大影響了三維交互式應用在移動終端的交互體驗。
技術實現要素:
本發(fā)明實施例所要解決的一個技術問題是:如何提高三維場景的渲 染效率,以滿足移動終端的三維交互式應用的使用體驗。
根據本發(fā)明實施例的第一個方面,提供了一種三維場景渲染方法,包括:云端接收終端發(fā)送的交互控制信息;云端根據交互控制信息裁剪云端對應的三維場景;云端生成裁剪后的三維場景的層次深度圖;云端將三維場景的裁剪結果和層次深度圖發(fā)送給終端,以便終端根據三維場景的裁剪結果和層次深度圖進行場景的合成。
在一個實施例中,交互控制信息包括鏡頭信息和場景設定信息;云端根據交互控制信息裁剪云端對應的三維場景包括:云端根據場景設定信息確定所要裁剪的三維場景,根據鏡頭信息和預先建立的三維場景空間索引結構裁剪三維場景。
在一個實施例中,云端生成裁剪后的三維場景的層次深度圖包括:云端采用層級式Z深度的方式,生成裁剪后的三維場景的紋理映射層次深度圖。
在一個實施例中,云端的三維場景為靜態(tài)三維場景;終端根據三維場景的裁剪結果和層次深度圖進行場景的合成包括:終端根據交互控制信息和建立的動態(tài)三維近景的空間索引結構對動態(tài)三維近景進行裁剪;終端根據層次深度圖將動態(tài)三維近景的裁剪結果插入到靜態(tài)三維場景的裁剪結果中對應的層次和深度,以進行場景合成。
在一個實施例中,還包括:云端根據交互控制信息渲染云端對應的平面遠景畫面;云端將渲染后的平面遠景畫面信息發(fā)送給終端,以便終端根據渲染后的平面遠景畫面進行場景的合成。
在一個實施例中,云端根據交互控制信息渲染云端對應的平面遠景畫面包括:云端檢索緩沖中是否已有相應的平面遠景畫面,如果有,則從緩沖中獲取已經渲染的平面遠景畫面,如果沒有,則根據交互控制信息渲染云端對應的平面遠景畫面,將渲染后的平面遠景畫面保存到緩沖中。
在一個實施例中,云端檢索緩沖中是否已有相應的平面遠景畫面包括:云端對交互控制信息進行編碼,以獲得平面遠景畫面的編碼;云端根據平面遠景畫面的編碼檢索緩沖中是否已有相應的平面遠景畫 面。
在一個實施例中,云端對交互控制信息進行編碼包括:云端采用希爾伯特空間填充曲線編碼的方式對鏡頭的位置信息進行編碼,采用立體角有序劃分的方式對鏡頭的方向信息進行編碼,將編碼后的鏡頭位置信息和鏡頭方向信息進行哈希操作,獲得場景設定信息對應場景中的平面遠景畫面的編碼;其中,交互控制信息包括鏡頭的位置信息、鏡頭的方向信息和場景設定信息。
在一個實施例中,其中,云端將三維場景的裁剪結果、層次深度圖、渲染后的平面遠景畫面信息分別編碼為獨立的碼流,并封裝為具有時間軸的復用碼流,并將復用碼流發(fā)送給終端。
根據本發(fā)明實施例的第二個方面,提供一種用于三維場景渲染的云端服務器,包括:交互控制信息接收模塊,用于接收終端發(fā)送的交互控制信息;三維場景裁剪模塊,用于根據交互控制信息裁剪云端對應的三維場景;層次深度圖生成模塊,用于生成裁剪后的三維場景的層次深度圖;發(fā)送模塊,用于將三維場景的裁剪結果和層次深度圖發(fā)送給終端,以便終端根據三維場景的裁剪結果和層次深度圖進行場景的合成。
在一個實施例中,交互控制信息包括鏡頭信息和場景設定信息;三維場景裁剪模塊用于根據場景設定信息確定所要裁剪的三維場景,根據鏡頭信息和預先建立的三維場景空間索引結構裁剪三維場景。
在一個實施例中,層次深度圖生成模塊用于采用層級式Z深度的方式,生成裁剪后的三維場景的紋理映射層次深度圖。
在一個實施例中,還包括:平面遠景渲染模塊,用于根據交互控制信息渲染云端對應的平面遠景畫面;發(fā)送模塊用于將渲染后的平面遠景畫面信息發(fā)送給終端,以便終端根據渲染后的平面遠景畫面進行場景的合成。
在一個實施例中,平面遠景渲染模塊包括緩沖檢索單元、渲染單元和緩存單元;緩沖檢索單元用于檢索緩沖中是否已有相應的平面遠景畫面;渲染單元用于當緩沖中已有相應的平面遠景畫面時,從緩沖 中獲取已經渲染的平面遠景畫面,當緩沖中沒有相應的平面遠景畫面時,根據交互控制信息渲染云端對應的平面遠景畫面;緩存單元用于將渲染后的平面遠景畫面保存到緩沖中。
在一個實施例中,緩沖檢索單元包括編碼子單元和檢索子單元;編碼子單元用于對交互控制信息進行編碼,以獲得平面遠景畫面的編碼;檢索子單元用于根據平面遠景畫面的編碼檢索緩沖中是否已有相應的平面遠景畫面。
在一個實施例中,編碼子單元用于采用希爾伯特空間填充曲線編碼的方式對鏡頭的位置信息進行編碼,采用立體角有序劃分的方式對鏡頭的方向信息進行編碼,將編碼后的鏡頭位置信息和鏡頭方向信息進行哈希操作,獲得場景設定信息對應場景中的平面遠景畫面的編碼;其中,交互控制信息包括鏡頭的位置信息、鏡頭的方向信息和場景設定信息。
在一個實施例中,發(fā)送模塊用于將三維場景的裁剪結果、層次深度圖、渲染后的平面遠景畫面信息分別編碼為獨立的碼流,并封裝為具有時間軸的復用碼流,并將復用碼流發(fā)送給終端。
根據本發(fā)明實施例的第三個方面,提供一種用于三維場景渲染的終端,包括:接收模塊,用于接收云端發(fā)送的靜態(tài)三維場景的裁剪結果和靜態(tài)三維場景的層次深度圖;三維近景裁剪模塊,用于根據交互控制信息和建立的動態(tài)三維近景的空間索引結構對動態(tài)三維近景進行裁剪;場景合成模塊,用于根據靜態(tài)三維場景的層次深度圖將動態(tài)三維近景的裁剪結果插入到靜態(tài)三維場景的裁剪結果中對應的層次和深度,以進行場景合成。
根據本發(fā)明實施例的第四個方面,提供一種三維場景渲染系統,包括前述任意一種云端服務器和前述終端。
本發(fā)明通過采用性能較強的云端完成三維場景的裁剪、采用終端合成云端發(fā)送的裁剪結果的方式,能夠提高三維場景渲染的效率,降低了對終端性能的要求。
通過以下參照附圖對本發(fā)明的示例性實施例的詳細描述,本發(fā)明 的其它特征及其優(yōu)點將會變得清楚。
附圖說明
為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1示出本發(fā)明三維場景渲染方法的一個實施例的流程示意圖。
圖2示出本發(fā)明三維場景渲染方法的另一個實施例的流程示意圖。
圖3示出本發(fā)明三維場景渲染系統的一個實施例的結構示意圖。
圖4示出本發(fā)明用于三維場景渲染的云端服務器的一個實施例的結構示意圖。
圖5示出本發(fā)明用于三維場景渲染的終端的一個實施例的結構示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。以下對至少一個示例性實施例的描述實際上僅僅是說明性的,決不作為對本發(fā)明及其應用或使用的任何限制?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
下面參考圖1描述本發(fā)明一個實施例的三維場景渲染方法。
圖1為本發(fā)明三維場景渲染方法的一個實施例的流程圖。如圖1所示,該實施例的方法包括:
步驟S102,云端接收終端發(fā)送的交互控制信息。
步驟S104,云端根據交互控制信息裁剪云端對應的三維場景。
其中,交互控制信息可以包括鏡頭信息和場景設定信息。當應用中的三維場景有多個時,云端根據場景設定信息可以確定所要裁剪的三維場景,并根據鏡頭信息和預先建立的三維場景空間索引結構裁剪三維場景,以便生成只呈現在屏幕中的部分的裁剪結果。三維場景的空間索引結構可以為八叉樹、K-d樹(k-dimensional樹的簡稱,是一種分割k維數據空間的數據結構)、BSP樹(二叉空間分割樹)等。
步驟S106,云端生成裁剪后的三維場景的層次深度圖。
其中,云端可以采用層級式Z深度(Hierarchy Z)的方式,生成裁剪后的三維場景的紋理映射層次深度圖。Hierarchy Z采用最大值(Maximum)方法來生成層級式深度圖。該方式具體為:對于一個層級,每個像素中存儲該像素所對應的深度值,取相鄰的4個像素中的深度值最大的像素,作為下一個層級中所對應的像素的深度值的取值。根據需要,本領域技術人員還可以采用其他的方式生成層次深度圖,這里不再贅述。
步驟S108,云端將三維場景的裁剪結果和層次深度圖發(fā)送給終端,以便終端根據三維場景的裁剪結果和層次深度圖進行場景的合成。
通過采用性能較強的云端完成三維場景的裁剪、采用終端合成云端發(fā)送的裁剪結果的方式,能夠提高三維場景渲染的效率,降低了對終端性能的要求,尤其適用于于大規(guī)模的、實時的三維交互系統或應用。
在大型的三維交互式應用中,三維場景通常又包括靜態(tài)三維場景和動態(tài)三維場景。其中,三維靜態(tài)場景的規(guī)模通常較大,例如場景中的固定建筑物、固定自然景觀等等;三維動態(tài)場景的規(guī)模則相對較小,通常為近景中交互控制的對象或者NPC(Non-Player Character,非玩家控制角色)等等。因此,可以將規(guī)模較大的靜態(tài)三維場景在云端進行渲染,將在終端渲染能力范圍內的動態(tài)三維近景在終端進行渲染。因此,在步驟S108中,終端根據三維場景的裁剪結果和層次深度圖進行場景的合成可以包括:終端根據交互控制信息和建立的動態(tài)三維近景的空間索引結構對動態(tài)三維近景進行裁剪;終端根據層次深度圖將 動態(tài)三維近景的裁剪結果插入到靜態(tài)三維場景的裁剪結果中對應的層次和深度,以進行場景合成。通過結合云端生成的層次深度圖將終端渲染的動態(tài)三維近景與云端渲染的靜態(tài)三維場景進行合成,能夠使合成后的場景符合正確的遮擋關系。通過采用這種方法,能夠使終端在能力范圍內進行動態(tài)三維近景的渲染,提高了渲染效率。根據需要,也可以將動態(tài)三維近景以和渲染靜態(tài)三維場景同樣的方式在云端進行渲染,此處不再贅述。
除了三維對象以外,三維場景中還可能包括平面遠景。平面遠景通常為二維平面圖像,其變化較小,內容也相對固定,用于增加三維場景的層次感,豐富畫面內容。在本發(fā)明中,對于三維場景中的平面遠景可以采用如下方式進行渲染:云端根據交互控制信息渲染云端對應的平面遠景畫面;云端將渲染后的平面遠景畫面信息發(fā)送給終端,以便終端根據渲染后的平面遠景畫面進行場景的合成。通過采用這種方法,只需渲染平面遠景畫面呈現在屏幕中的部分,能夠高效地滿足對畫面豐富度的要求。
由于平面遠景畫面的變化相對較小,渲染內容可能產生重復,因此,云端具體可以采用以下方法渲染云端對應的平面遠景畫面:云端檢索緩沖中是否已有相應的平面遠景畫面,如果有,則從緩沖中獲取已經渲染的平面遠景畫面,如果沒有,則根據交互控制信息渲染云端對應的平面遠景畫面,將渲染后的平面遠景畫面保存到緩沖中。通過采用上述方法,可以只渲染緩沖中未進行緩存的平面遠景畫面而不必每次都進行重新渲染,提高了渲染效率。
當云端檢索緩沖中是否已有相應的平面遠景畫面時,具體可以根據交互控制信息進行搜索,即:云端對交互控制信息進行編碼,以獲得平面遠景畫面的編碼;云端根據平面遠景畫面的編碼檢索緩沖中是否已有相應的平面遠景畫面。利用編碼進行檢索的方式效率較高,并且便于存儲。
云端對交互控制信息進行編碼的方式可以為:云端采用希爾伯特空間填充曲線編碼的方式對鏡頭的位置信息進行編碼,采用立體角有 序劃分的方式對鏡頭的方向信息進行編碼,將編碼后的鏡頭位置信息和鏡頭方向信息進行哈希操作,獲得場景設定信息對應場景中的平面遠景畫面的編碼;其中,交互控制信息包括鏡頭的位置信息、鏡頭的方向信息和場景設定信息。希爾伯特曲線編碼是一種可壓縮的空間位置編碼,通過采用希爾伯特空間填充曲線編碼的方式對鏡頭的位置信息進行編碼,能夠以盡可能短的字符串來表示空間中的某個特定位置,便于在云端生成相應的哈希索引值,提高索引效率;通過采用立體角有序劃分的方式對鏡頭的方向信息進行編碼,能夠將鏡頭的方向定義為若干個角度,每個方向對應一定的球面度,再將每個方向進行編號。根據鏡頭的位置信息、鏡頭的方向信息和場景設定信息,能夠準確定位到三維場景中需要渲染的部分。
在云端將云端的三維場景裁剪、渲染的結果發(fā)送到終端這一傳輸過程中,具體可以采用以下方法:云端將三維場景的裁剪結果、層次深度圖、渲染后的平面遠景畫面信息分別編碼為獨立的碼流,并封裝為具有時間軸的復用碼流,并將復用碼流發(fā)送給終端。終端通過獲取時間軸信息,能夠將解碼后的云端發(fā)送的復用碼流解碼還原為三維場景的裁剪結果、層次深度圖和渲染后的平面遠景畫面信息。在解碼后,終端可以將云端發(fā)送的平面遠景畫面信息作為光柵化畫面的最底層,再將三維場景的渲染結果與平面遠景畫合成為最終的輸出畫面,進行屏幕輸出,完成終端中三維場景畫面的更新。
下面參考圖2描述本發(fā)明另一個實施例的三維場景渲染方法。
圖2為本發(fā)明三維場景渲染方法的另一個實施例的流程圖。如圖2所示,該實施例的方法包括:
步驟S202,終端向位于云端的前端接入服務器發(fā)送交互控制信息,其中,交互控制信息包括鏡頭信息和場景設定信息。
步驟S204,位于云端的前端接入服務器向云端渲染集群發(fā)送交互控制信息。
步驟S206,云端渲染集群根據交互控制信息裁剪云端對應的大規(guī)模靜態(tài)三維場景,并生成裁剪后的靜態(tài)三維場景的層次深度圖,再根 據交互控制信息裁剪并以較小的分辨率渲染云端對應的平面遠景畫面。
步驟S208,云端渲染集群向前端碼流封裝服務器發(fā)送裁剪后的靜態(tài)三維場景以及層次深度圖。
步驟S210,云端渲染集群向實時視頻編碼集群發(fā)送渲染后的平面遠景畫面信息。
步驟S212,實時視頻編碼集群對平面遠景畫面信息進行視頻編碼,并生成平面遠景視頻流。
步驟S214,實時視頻編碼集群向前端碼流封裝服務器發(fā)送平面遠景視頻流。
步驟S216,前端碼流封裝服務器將裁剪后的靜態(tài)三維場景、層次深度圖和平面遠景視頻流分別編碼為獨立的碼流,添加相應的時間軸標記,并將這些獨立的碼流封裝為可以實時傳輸的復用碼流。
步驟S218,前端碼流封裝服務器通過前端接入服務器向終端發(fā)送復用碼流。
步驟S220,終端對云端發(fā)送的復用碼流進行解碼。
步驟S222,終端根據交互控制信息建立相應的小規(guī)模的動態(tài)三維近景的空間索引結構,并對動態(tài)三維近景進行裁剪。
步驟S224,終端根據層次深度圖合并動態(tài)三維進行和靜態(tài)三維場景,將動態(tài)三維近景的裁剪結果插入到靜態(tài)三維場景的裁剪結果中對應的層次和深度。
步驟S226,終端渲染用于呈現在屏幕中的合并后的三維場景,并將平面遠景畫面作為光柵化畫面的最底層,生成最終的輸出畫面,并進行屏幕輸出,完成畫面的更新。
通過采用上述方法,終端和云端能夠利用自身性能和特點,高效地完成混合渲染的過程。
下面參考圖3描述本發(fā)明一個實施例的用于三維場景渲染的系統。
圖3為本發(fā)明三維場景渲染系統的一個實施例的結構圖。如圖3所示,該實施例的系統包括:云端服務器32和終端34。其中,云端服務器32用于根據終端34發(fā)送的交互控制信息裁剪云端對應的三維場 景并生成層次深度圖,終端34用于根據云端服務器32發(fā)送的三維場景的裁剪結果和層次深度圖進行場景的合成。
下面參考圖4描述本發(fā)明一個實施例的用于三維場景渲染的云端服務器。
圖4為本發(fā)明用于三維場景渲染的云端服務器的一個實施例的結構圖。如圖4所示,該實施例的服務器32包括:交互控制信息接收模塊422,用于接收終端發(fā)送的交互控制信息;三維場景裁剪模塊424,用于根據交互控制信息裁剪云端對應的三維場景;層次深度圖生成模塊426,用于生成裁剪后的三維場景的層次深度圖;發(fā)送模塊428,用于將三維場景的裁剪結果和層次深度圖發(fā)送給終端,以便終端根據三維場景的裁剪結果和層次深度圖進行場景的合成。
其中,交互控制信息可以包括鏡頭信息和場景設定信息;三維場景裁剪模塊424用于根據場景設定信息確定所要裁剪的三維場景,根據鏡頭信息和預先建立的三維場景空間索引結構裁剪三維場景。
其中,層次深度圖生成模塊426可以用于采用層級式Z深度的方式,生成裁剪后的三維場景的紋理映射層次深度圖。
其中,云端服務器32還可以包括:平面遠景渲染模塊,用于根據交互控制信息渲染云端對應的平面遠景畫面;發(fā)送模塊428用于將渲染后的平面遠景畫面信息發(fā)送給終端34,以便終端根據渲染后的平面遠景畫面進行場景的合成。
其中,平面遠景渲染模塊可以包括緩沖檢索單元、渲染單元和緩存單元;緩沖檢索單元用于檢索緩沖中是否已有相應的平面遠景畫面;渲染單元用于當緩沖中已有相應的平面遠景畫面時,從緩沖中獲取已經渲染的平面遠景畫面,當緩沖中沒有相應的平面遠景畫面時,根據交互控制信息渲染云端對應的平面遠景畫面;緩存單元用于將渲染后的平面遠景畫面保存到緩沖中。
其中,緩沖檢索單元可以包括編碼子單元和檢索子單元;編碼子單元用于對交互控制信息進行編碼,以獲得平面遠景畫面的編碼;檢索子單元用于根據平面遠景畫面的編碼檢索緩沖中是否已有相應的平 面遠景畫面。
其中,編碼子單元可以用于采用希爾伯特空間填充曲線編碼的方式對鏡頭的位置信息進行編碼,采用立體角有序劃分的方式對鏡頭的方向信息進行編碼,將編碼后的鏡頭位置信息和鏡頭方向信息進行哈希操作,獲得場景設定信息對應場景中的平面遠景畫面的編碼;其中,交互控制信息包括鏡頭的位置信息、鏡頭的方向信息和場景設定信息。
其中,發(fā)送模塊428可以用于將三維場景的裁剪結果、層次深度圖、渲染后的平面遠景畫面信息分別編碼為獨立的碼流,并封裝為具有時間軸的復用碼流,并將復用碼流發(fā)送給終端。
下面參考圖5描述本發(fā)明一個實施例的用于三維場景渲染的終端。
圖5為本發(fā)明用于三維場景渲染的終端的一個實施例的結構圖。如圖5所示,該實施例的終端34包括:接收模塊542,用于接收云端發(fā)送的靜態(tài)三維場景的裁剪結果和靜態(tài)三維場景的層次深度圖;三維近景裁剪模塊544,用于根據交互控制信息和建立的動態(tài)三維近景的空間索引結構對動態(tài)三維近景進行裁剪;場景合成模塊546,用于根據靜態(tài)三維場景的層次深度圖將動態(tài)三維近景的裁剪結果插入到靜態(tài)三維場景的裁剪結果中對應的層次和深度,以進行場景合成。
此外,根據本發(fā)明的方法還可以實現為一種計算機程序產品,該計算機程序產品包括計算機可讀介質,在該計算機可讀介質上存儲有用于執(zhí)行本發(fā)明的方法中限定的上述功能的計算機程序。本領域技術人員還將明白的是,結合這里的公開所描述的各種示例性邏輯塊、模塊、電路和算法步驟可以被實現為電子硬件、計算機軟件或兩者的組合。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。