本發明涉及計算機程序和系統領域,并且更具體地涉及用于顯示建模對象的3d組件(3dassembly)的方法、系統和程序。
背景技術:
在計算機輔助設計(cad)、計算機輔助工程(cae)、計算機輔助制造(cam)、虛擬世界、在線視頻游戲,以及更一般地在3d在線應用的背景下,三維(3d)環境(也被稱為3d場景)及其內容的顯示-描述部分或完整的3d虛擬環境的各種資產-仍然是挑戰。3d場景包括3d模型,其中每個3d模型是資產并且具有包括多邊形網格、樣條表面、構造的實體幾何圖形等等的通常表示。材料和紋理也可以是3d場景的資產,以及3d模型的動畫、光、場景圖。托管資產的計算機被稱為內容服務器。可以在第二計算機上顯示從特定視點(也被稱為虛擬相機)觀看的該3d場景的渲染圖像。遠程渲染的該過程典型地用于云游戲、虛擬地球儀、虛擬世界。在其上執行該遠程渲染的第二計算機被稱為客戶端。
通過考慮3d投影和若干照明效果(陰影、反射等),3d在線應用包括被稱為3d渲染引擎的軟件部件以產生從特定視點觀看的3d場景的一個或多個圖片。為了實現其目標,這樣的3d在線應用必須在給定的時間將3d場景的信息從一個或多個服務器傳送到一個或多個客戶端。
基本上存在兩個用于執行3d場景的遠程渲染的場景。第一個在于將3d內容從服務器直接發送到客戶端,并且該客戶端執行渲染步驟。這將被稱為幾何圖形流。該方法通常描述虛擬世界如何工作。第二場景包括執行渲染步驟并將結果(靜態圖像或視頻流)發送到客戶端的服務器。這將被稱為像素流。該方法通常描述遠程渲染和云游戲如何工作。
幾何圖形流可以使用許多策略來傳輸3d場景的內容。策略的示例是細節的級別的概念:對于每個資產,從可見性計算推導不干擾最終渲染的整體質量的最小質量級別。如果客戶端高速緩存中的資產的版本未達到所需的質量級別,服務器發送細化(通常是所需版本和客戶端高速緩存中的版本之間的差異)。在這樣的策略中涉及的技術的示例是漸進網格、地形位移映射、基于體素的點云、細節的分層級別。
在像素流的情況下,傳送的數據是通常用標準壓縮方案(用于圖像的jpeg/jpeg2000,以及用于視頻的h.264)壓縮的圖片或視頻。存在一些變型方案來跨過多臺計算機分布計算。在3d計算機圖形中,它指的是用于將3d場景投影到虛擬相機的位置的2d矩形。視口(viewport)是用于顯示將被示出的總圖像的一部分的屏幕的區域。應用可以剪切視口,并將渲染每個部分(較小的幀)的責任分配給幾臺計算機。在另一個變型中,應用可以切割3d場景,并將渲染每個部分(較小的資產組)的責任分配給幾臺計算機。
幾何圖形流和像素流不同地處理3d在線應用遇到的問題。它們有它們自己的缺點和它們自己的限制,如現在解釋的。
幾何圖形流和像素流隨著客戶端數量的增加而不同規模。像素流受到嚴重妨礙,因為計算(包括渲染)的大部分是在服務器端進行的。從而,所需服務器的數量隨著客戶端數量而快速增長。難以找到可以從一個客戶端到另一個重復使用的計算結果,因為它們很少共享相同的視點。幾何圖形流可以更好地縮放,因為它在服務器端上需要更少的計算。然而,通過計算機網絡發送幾何圖形消耗網絡的帶寬,并且一般涉及在客戶端計算機上渲染的3d場景上的滯后——對應用較少的反應性。
幾何圖形流和像素流涉及客戶端硬件需求。如上所提及的,像素流在客戶端側僅僅具有小計算成本,而幾何圖形流在客戶端側需要一些3d顯示能力。雖然大多數光設備現在受益于用于3d顯示的硬件加速,但是它們的能力可能相對有限,這可能導致不太逼真的圖片或對應用較小的反應性。
幾何圖形流和像素流都具有顯著的帶寬消耗并且需要網絡可靠性。許多有效的速率失真算法可以與像素流一起使用以確保帶寬的公平消耗。但是,與其它應用程序相比,流式傳送的視頻通常非常昂貴。如果可用帶寬突然降低,可以相應地減小傳輸的圖像的質量。在網絡中斷的情況下,客戶端將不能改變其視點或與3d場景交互。如前所述,幾何圖形流更可能經歷帶寬使用的尖峰,導致帶寬飽和以及網絡錯誤。必須對應用的設計(使用細節水平或lod)和3d場景的設計(必須平衡場景圖的不同區域中的信息量)進行額外的努力以減輕這樣的影響。如果可用帶寬突然降低,帶寬飽和將更多地發生,通常導致客戶端視圖中的場景的丟失/惡化的部分。在網絡中斷的情況下,客戶端仍然能夠改變其視點并且與已經發送的場景的元素交互。
在該背景下,仍然存在對用于在連接到服務器的客戶端上執行3d場景的渲染的改進方法的需要。
技術實現要素:
因此提供一種用于顯示建模對象的3d組件(assembly)的計算機實現的方法。該方法包括:從第一計算機向第二計算機流式傳送第一3d建模對象的至少一個光柵圖像,并且通過將第二3d建模對象與所流式傳送的至少一個光柵圖像融合而在第二計算機上渲染建模對象的3d組件。
該方法可以包括以下中的一個或多個:
-從第一計算機向第二計算機流式傳送包括:將第一3d建模對象的至少一個光柵圖像連同所述至少一個光柵圖像的第一深度緩存從第一計算機到第二計算機同時流式傳送;并且其中,將第二3d建模對象與所流式傳送的至少一個光柵圖像融合進一步包括:執行逐個像素比較以確定第二3d建模對象的哪些片段被渲染;
-在進行流式傳送之前:將第一3d建模對象的至少一個光柵圖像和第一深度緩存這兩者編碼在單個流中;
-通過使用視頻壓縮方案,來執行編碼;
-在融合之后:由第二計算機計算對建模對象的3d組件的照明效果;
-計算對建模對象的3d組件的照明效果包括:在第二計算機上接收與第一3d建模對象的至少一個光柵圖像相關聯的第一光源和與第二3d建模對象相關聯的第二光源;將照明效果作為從每個像素的表面法線方向和材料屬性開始的后期處理來計算;
-在接收第一和第二光源之后并且在計算照明效果之前:計算法線貼圖(normalmap),該法線貼圖針對建模對象的3d組件的每個像素存儲表面法線方向;計算識別緩存,該識別緩存針對建模對象的3d組件的每個像素來識別像素是來自所流式傳送的第一3d建模對象的至少一個光柵圖像還是來自與所流式傳送的至少一個光柵圖像融合的第二3d建模對象;
-法線貼圖是根據通過將第二3d建模對象與所述至少一個光柵圖像的第一深度緩存融合而獲得的第二深度緩存計算的;
-根據第二深度緩存計算法線貼圖包括將卷積濾波器應用于第二深度緩存;
-根據與至少一個光柵圖像融合的第二3d建模對象的每個像素的顏色推斷每個像素的材料屬性;
-從第二計算機向第一計算機發送在第二計算機上渲染的建模對象的3d組件上的新視點的坐標;根據新視點計算第一3d建模對象的至少一個新光柵圖像;以及從第一計算機向第二計算機流式傳送第一3d建模對象的至少一個新光柵圖像;
-將與所流式傳送的至少一個光柵圖像融合的第二3d建模對象從第三計算機發送到第二計算機。
進一步提供包括用于執行該方法的指令的計算機程序。
進一步提供一種具有記錄在其上的計算機程序的計算機可讀存儲介質。
進一步提供一種包括與流式傳送通道連接的第一計算機和第二計算機的系統,第一和第二計算機包括耦合到存儲器的處理電路,并且第二計算機進一步包括圖形用戶接口,第一和第二計算機的每個存儲器具有記錄在其上的用于執行該方法的計算機程序。
進一步提供一種系統,包括耦合到存儲器和圖形用戶接口的處理器,該存儲器上具有記錄在其上的計算機程序。
附圖說明
現在將通過非限制性示例的方式并參考附圖來描述本發明的實施例,其中:
-圖1示出方法的示例的流程圖;
-圖2示出用于計算照明效果的示例的流程圖;
-圖3圖示圖1的示例;
-圖4圖示圖2的示例;
-圖5示出通過通信網絡互連的客戶端和服務器的示例;
-圖6示出當客戶端修改3d場景上的視點時在客戶端和服務器之間的交互的示例;
-圖7示出圖5的服務器或客戶端的示例。
具體實施方式
參照圖1的流程圖,提出一種用于顯示建模對象的3d組件的計算機實現的方法,例如建模對象的3d組件的內容被存儲在一個或多個服務器上并被遠程渲染給至少一個計算機客戶端。該方法包括從第一計算機(也被稱為服務器)向第二計算機(也被稱為客戶端)流式傳送第一3d建模對象的至少一個光柵圖像。該方法進一步包括:通過將第二3d建模對象與所流式傳送的至少一個光柵圖像融合,在第二計算機上渲染建模對象的3d組件。
這樣的方法改善了3d場景的客戶端上的遠程顯示,其中若干資產形成存儲在遠離客戶端的服務器上的場景,例如,服務器和客戶端通過計算機網絡互連,計算機網絡可以是但不限于局域網(lan)、城域網(man)、廣域網(wan)、諸如互聯網之類的一組互連網絡……
值得注意的是,本發明的方法依賴于將3d場景劃分成兩部分:一部分將用像素流(pixelstreaming)來傳輸,并且另一部分用幾何圖形流(geometrystreaming)。如何進行該劃分(在將作為視頻被流式傳送的和將作為幾何圖形被流式傳送的之間)是由該應用自主裁量的,以便根據每種方法的需要來充分利用每種方法的最佳處。從而,本方法在客戶端和服務器之間帶來均衡的有效負載。因為幾何圖形流更多地依賴于客戶端而像素流更多地依賴于服務器,本方法在中間找到它的位置,這是更有效率的。如果該應用的設計中的約束允許將一些資產(例如3d建模對象、材料、紋理、3d模型的動畫、光、場景圖形……)從作為像素被流式傳送的部分移動到作為幾何圖形被流式傳送的部分,反之亦然,那么該應用將能夠動態地平衡客戶端和服務器之間的有效負載,以使得該應用適應情況(適應于各種客戶端硬件能力或變化的網絡條件)。此外,本發明給出有選擇性地保護場景的部分的能力,這是通過用像素流發送它們。這在協作工作的背景下是有利的。例如,用于協作創作的應用,其中一方面客戶接收該場景的作為幾何圖形接收的一些部分的完整知識:他可以對這些資產進行交互、編輯以及將其發送回服務器。另一方面,客戶將不具有借助于像素流接收的部分的完整知識。這允許確保對通過像素流傳輸的原始資產的保護,因為它們從不被直接傳輸。例如,用戶只能看到3d建模產品的像素視圖,并且不知道形成所述產品的部件;從而形成由部分(part)組成的組件(assembly)的部分被保留以免于用戶的任何修改,而且對組件的知識限于形成視圖的給定的像素集。這有利地提供知識產權保護。
該方法是計算機實現的。這意味著該方法的步驟(或者基本上所有步驟)由至少一個計算機或任何相似的系統執行。從而,該方法的步驟可能全自動地或半自動地由計算機執行。在示例中,可通過用戶-計算機交互來執行該方法的步驟中的至少一些的觸發。所需的用戶-計算機交互的級別可取決于預見的自動化的水平,并且使得與實現用戶的愿望的需要平衡。在示例中,該級別可以是用戶定義的和/或預定義的。
例如,用戶可在渲染的3d場景上選擇新視點,并且作為結果,計算第一3d建模對象的至少一個新光柵圖像是根據新視點來觸發的,并且將第一3d建模對象的至少一個新光柵圖像從第一計算機流式傳送到第二計算機。
該方法的計算機實現方式的典型示例是用適于該目的的系統來執行該方法。該系統可包括耦合到存儲器和圖形用戶接口(gui)的處理器,該存儲器具有記錄在其上的計算機程序,該計算機程序包括用于執行該方法的指令。存儲器還可存儲數據庫。存儲器是適于這樣的存儲的任何硬件,可能包括若干個物理不同的部件(例如,一個用于程序,并且可能一個用于數據庫)。
“數據庫”意味著為了搜索和取回而組織的任何數據(即信息)集合(例如,關系數據庫,例如基于預定的結構化語言,例如sql)。數據庫當被存儲在存儲器上時允許由計算機快速地搜索和取回。數據庫確實地被結構化,以便于與各種數據處理操作相結合地進行數據的存儲、取回、修改和刪除。數據庫可由可以被分解成記錄(record)的一個文件或一組文件組成,記錄中的每一個由一個或多個字段組成。字段是數據存儲的基本單位。用戶可主要通過查詢取回數據。使用關鍵字和排序命令,用戶可以對許多記錄中的字段進行快速地搜索、重新排列、分組和選擇,以根據正在使用的數據庫管理系統的規則來取回或創建關于數據的特定聚合的報告。在該方法的情況下,第一計算機包括數據庫,該數據庫用于存儲將在第二計算機上渲染的3d場景的資產的至少一部分。
該方法一般操縱資產。這里,術語“資產”意味著3d建模對象、材料、紋理、3d模型的動畫、光,場景圖形……,并且更一般地,術語“資產”包括所有可以被渲染的或者對3d場景的渲染有影響的元素。為了簡單起見,現在將參考建模對象描述本發明,基于如下理解:本發明的方法不限于像這樣的建模對象,并且其可以使用3d場景的任何資產。建模對象是由例如存儲在數據庫中的數據定義的任何對象。引申開來,措辭“建模對象”指定數據本身。根據系統的類型,“建模對象”可由不同種類的數據定義。系統實際上可以是cad系統、cae系統、cam系統、pdm系統、plm系統、虛擬世界應用、視頻游戲;更一般地,系統可以是執行3d場景及其內容(描述部分或完整的3d虛擬環境的各種資產)的顯示的任何3d應用。在那些不同的系統中,建模對象由對應的數據定義。然而,這些系統不是彼此排斥的,因為建模對象可由對應于這些系統的任何組合的數據來定義。系統從而完全可以既是cad系統又是plm系統,如將從下面提供的對這樣的系統的定義中顯而易見。
定義建模對象的數據包括允許對建模對象的表示的數據。以上列出的系統例如可使用邊緣或線(在某些情況下借助于面或表面)來提供建模對象的表示。線、邊緣或表面可以各種方式表示,例如非均勻有理b樣條(nurbs)。具體地,文件包含規范,從該規范中可生成幾何圖形,幾何圖形轉而允許生成表示。建模對象的規范可被存儲在單個文件或多個文件中。例如在cad系統中表示建模對象的文件的典型大小在每個部分一兆字節的范圍內。并且建模對象典型地可以是由成千上萬個部件組成的組件。
在實踐中,建模對象可以是3d建模對象,其例如表示諸如部件或由部件組成的組件之類的產品,或者可能是由產品組成的組件。“3d建模對象”意味著由允許其3d表示的數據建模的任何對象。“3d表示”允許從所有角度查看部件。例如,3d建模對象當被3d表示時可被處理和圍繞其任何軸或圍繞在其上顯示該表示的屏幕中的任何軸轉向。這顯然排除了不是3d建模的2d圖標。對3d表示的顯示便于設計(即,增加設計者在統計上完成他們的任務的速度)。這加速工業中的制造過程,因為產品的設計是制造過程的部分。
3d建模對象可表示將在產品的虛擬設計的完成之后在真實世界中制造的產品的幾何圖形,其虛擬設計例如具有cad軟件解決方案或cad系統,諸如(例如機械)部件或由部件組成的組件,或者更一般地,任何剛體組件(例如移動機構)。cad軟件解決方案允許在各種不同的和無限的工業領域中的產品的設計,包括:航空航天、建筑、結構、消費品、高科技設備、工業裝置、運輸、海運和/或海上油/氣生產或運輸。由該方法設計的3d建模對象從而可表示工業產品,該工業產品可以是任何機械部件,諸如陸地交通工具(例如包括:轎車和輕型卡車裝置、賽車、摩托車、卡車和發動機裝置、卡車和公共汽車、火車)的一部分,空中交通工具(例如包括:機身裝置、航空航天裝置、推進裝置、國防產品、航班裝置、空間裝置)的一部分,海洋交通工具(例如包括:海軍裝置、商業船只、海上裝置、游艇和工作船、船舶裝置)的一部分,一般機械部件(例如包括:工業制造機械、重型移動機械或裝置、安裝裝置、工業裝置產品、制造的金屬制品、輪胎制造產品),機電或電子部件(例如包括:消費電子產品、安全和/或控制和/或儀器產品、計算和通信裝置、半導體、醫療設備和裝置),消費品(例如包括:家具、家用和花園產品、休閑用品、時尚產品、耐用商品零售商的產品、非耐用商品零售商的產品),包裝(例如包括:食品和飲料及煙草、美容和個人護理、家務產品包裝)。
plm系統另外意味著對適于表示物理制造產品(或待制造的產品)的建模對象進行管理的任何系統。在plm系統中,建模對象從而由適合于物理對象的制造的數據來定義。這些典型地可以是尺寸值和/或公差值。為了對象的正確制造,確實最好具有這樣的值。
cam解決方案另外意味著適于管理產品的制造數據的任何硬件的或軟件的解決方案。制造數據一般包括與要制造的產品、制造過程和所需的資源相關的數據。cam解決方案用于計劃和優化產品的整個制造過程。例如,其可以給cam用戶提供可在制造過程的具體步驟中使用的關于可行性、制造過程的持續時間或諸如專用的機器人之類的資源的數量的信息;并且從而允許關于管理或所需投資的決策。cam是在cad過程和潛在的cae過程之后的后續過程。這樣的cam解決方案由dassaultsystèmes以商標
cae解決方案另外意味著適于建模對象的物理行為的分析的任何硬件的或軟件的解決方案。一種公知且廣泛使用的cae技術是有限元方法(fem),其典型地涉及將建模對象劃分成可以通過方程式來計算和模擬其物理行為的元素。這樣的cae解決方案由dassaultsystèmes以商標
pdm代表產品數據管理。pdm解決方案意味著適于對與特定產品相關的所有類型的數據進行管理的任何軟件的或硬件的解決方案。pdm解決方案可由參與產品的生命周期的所有行動者使用:主要是工程師,但也包括項目經理、財務人員、銷售人員和購買者。pdm解決方案一般基于面向產品的數據庫。它允許行動者共享關于其產品的一致數據,并且因此防止行動者使用有分歧的數據(divergentdata)。這樣的pdm解決方案由dassaultsystèmes以商標
圖7示出作為客戶端的計算機的示例。該示例也可以應用于服務器。該示例的客戶端計算機包括:連接到內部通信總線1000的中央處理單元(cpu)1010,也連接到總線的隨機存取存儲器(ram)1070。客戶計算機進一步提供有與連接到總線的視頻隨機存取存儲器1100相關聯的圖形處理單元(gpu)1110。視頻ram1100在本領域中也被稱為幀緩存(framebuffer)。大容量存儲設備控制器1020管理對諸如硬盤驅動器1030之類的大容量存儲設備的訪問。適合于有形地體現計算機程序指令和數據的大容量存儲器設備包括所有形式的非易失性存儲器,例如包括半導體存儲器設備,諸如eprom、eeprom和閃存設備;磁盤,諸如內部硬盤和可移動盤;磁光盤;以及cd-rom盤1040。任何前述內容可由專門設計的asic(專用集成電路)補充,或被納入其中。網絡適配器1050管理對網絡1060的訪問。客戶端計算機還可包括觸覺設備1090,諸如光標控制設備、鍵盤等等。光標控制設備用在客戶端計算機中以允許用戶在顯示器1080上任何期望的位置處選擇性地定位光標。另外,光標控制設備允許用戶選擇各種命令并輸入控制信號。光標控制設備包括多個信號生成設備,用于向系統輸入控制信號。典型地,光標控制設備可以是鼠標,鼠標的按鈕用于生成信號。替代地或另外地,客戶端計算機系統可包括敏感墊和/或敏感屏幕。
計算機程序可包括由計算機可執行的指令,該指令包括用于使以上系統執行方法的裝置。程序可以是在包括系統的存儲器的任何數據存儲介質上可記錄的。程序例如可在數字電子電路中、或者在計算機硬件、固件、軟件中或者在它們的組合中來實現。程序可被實現為裝置,例如在用于由可編程處理器執行的機器可讀存儲器設備中有形地體現的產品。方法步驟可由可編程處理器執行,該可編程處理器執行指令的程序以通過在輸入數據上操作并生成輸出來執行方法的功能。處理器從而可以是可編程的并且經耦合以從數據存儲系統、至少一個輸入設備和至少一個輸出設備接收數據和指令,并且向其發送數據和指令。應用程序可以用高級過程或面向對象的編程語言,或者如果期望的話用匯編或機器語言來實現。在任何情況下,語言可以是編譯或解釋語言。程序可以是完整的安裝程序或是更新程序。程序在系統上的應用在任何情況下導致用于執行方法的指令。
該方法可被包括在制造過程中,該制造過程可包括:在執行該方法之后產生對應于顯示的建模對象的物理產品。
返回參見圖1,現在討論用于顯示建模對象的3d組件的方法的示例。
在步驟s10處,在用戶的計算機上運行的應用請求3d組件的顯示,例如在對待顯示的組件進行選擇的用戶動作時。與存儲待顯示的3d組件的建模對象中的至少一些的服務器(也被稱為第一計算機)相比,用戶的計算機也被稱為客戶端或第二計算機。
現在參見圖5,示出例如通過計算機網絡連接在一起的服務器1和客戶端2的示例。計算機網絡是允許計算機交換數據的電信網絡。它可以是但不限于局域網、城域網、廣域網、互聯網……。可以為任何種類的計算機網絡執行本發明的方法。仍然參見圖5,第二客戶端4被表示為:第二客戶端4可請求存儲在服務器1上的同一個3d組件的顯示,或請求可能存儲在服務器1上或在第二服務器3上的另一個3d組件的顯示。有趣的是,3d組件的未存儲在服務器1上的(一個或多個)建模對象可以被存儲在其它服務器3上,或者在執行請求的客戶端2上,或者甚至在第二客戶端4上。因此,可以在客戶端/服務器模型或對等模型中執行本發明;事實上,由請求3d組件的顯示的客戶端2可到達的任何計算機1、2、3可以存儲要顯示的組件的建模對象。
返回到圖1,在步驟s12處,由服務器計算第一3d建模對象的至少一個光柵圖像。術語“光柵圖像”指定表示經由計算機可視的由像素或顏色點組成的大致矩形的網格(grid)的點陣數據結構。光柵圖像在技術上通過以下來表征:圖像的以像素為單位的寬度和高度,以及每個像素的比特數。術語“第一3d建模對象”意味著形成3d組件的存儲在服務器上的一個或多個建模對象。服務器如本領域中已知的那樣執行計算。例如,服務器接收應用的請求(s10),從其數據庫取回形成組件的3d對象,從取回的3d對象計算3d空間中的這些3d對象的像素,然后選擇視點(例如通過默認,或者所述組件的用戶的上一個視點),并且根據選擇的視點獲得光柵圖像。在實踐中,3d渲染引擎產生從特定視點觀看的3d場景的一個或多個光柵圖像,如本領域中已知的;例如3d渲染引擎使用服務器的計算處理單元(cpu)以用于計算3d空間中的這些3d對象的像素,并且使用服務器的圖形處理單元以用于根據3d空間上的視點獲得圖像(一組像素)。實際上,最常見的流水線是如下的。cpu向gpu發送三角形的列表。然后,gpu將參照系中的三角形的頂點的坐標變換成當前視點的參照系中的新坐標。然后將三角形的新坐標投影在2d空間中,并且將投影的三角形變換為形成待顯示的圖像的一組像素。
在步驟s14處,為在步驟s12處獲得的第一個3d建模對象的每個光柵圖像計算深度緩存。術語“深度緩存(depthbuffer)”意味著深度緩存(也被稱為z緩存)過程的結果。深度緩存或z緩存在本領域中是公知的。用于每個圖像的深度緩存為該圖像的每個像素存儲像素的深度(z坐標)。深度緩存是具有與光柵圖像相同維度的2d陣列(x-y),該深度緩存為光柵圖像中的每個像素存儲與從該像素到相機的距離相關的值。有趣的是,深度緩存中存儲的值可能并不總是點-相機距離的線性函數,然而,如本領域中已知的,它始終是單調函數(大多數時間是嚴格遞增函數)。可以使用深度緩存的任何粒度,例如16位或24位或32位深度緩存。實際上,選擇較高的可用粒度;一般為32位深度緩存。
步驟s12和s14由第一計算機執行。這暗示在第一計算機上的圖形渲染能力。步驟s12和s14為計算的每個新光柵圖像連續執行。這意味著如果連續計算若干光柵圖像,在已經計算一個光柵圖像之后立即計算該光柵圖像的深度緩存。替代地,可以在計算光柵圖像(例如,預定數量的光柵圖像)之后計算一組深度緩存。
然后,在步驟s20處,從服務器向客戶端流式傳送在步驟s12處計算的一個或多個光柵圖像;因此,客戶端接收像素圖像的流。“流”意味著光柵圖像在由服務器遞送時由客戶端接收并呈現給客戶端。在客戶端和服務器之間創建開放的通道,例如在客戶端的請求時創建通道。并且服務器通過該通道向客戶端發送一個或多個光柵圖像。
可將光柵圖像和深度緩存在一起流式傳送。這意味著客戶端“同時”接收光柵圖像和與其相關聯的深度緩存。在那里,措辭“同時”意味著在給定時隙中,其可以取決于計算機網絡參數(帶寬,協議,……)和狀態(擁塞,滯后,……)而變化。例如,在五秒時隙中,客戶端接收光柵圖像,并且然后接收深度緩存。如已經討論的,步驟s12和s14為計算的每個新光柵圖像連續執行,因此這使得更容易用光柵圖像流式傳送深度緩存。
可在單個流中流式傳送光柵圖像和深度緩存,即,用一個流。替代地,在第一單個流中流式傳送光柵圖像,并且在第二單個流中流式傳送深度緩存。
實際上,包括光柵圖像的單個流和/或包括深度緩存的單個流或者既包括光柵圖像又包括深度緩存的單個流被編碼。編碼可以是壓縮方案。例如,可能使用諸如h.264之類的標準視頻壓縮方案,當作為渲染圖像的序列或者深度緩存的序列制作視頻時。有趣的是,h.264壓縮方案可以用諸如在由l.cheng等人的“real-time3dgraphicsusingstreamingmpeg-4”或由p.fechteler和p.eisert的“acceleratedvideoencodingusingcontextinformationrender”的文獻中描述的方法之類的方法來增強,該文獻提供一種方式來計算直接從在場景的渲染(深度、相機移動或3d部件移動)期間使用的3d場景信息的運動向量,代替使用在標準視頻編解碼器中找到的計算昂貴的運動估計搜索算法。由d.pajak、r.herzog等人的文獻“scalableremoterenderingwithdepthandmotion-flowaugmentedstreaming”提供解決方案,以通過考慮它們被高度相關來編碼單個視頻流中的渲染圖像和深度緩存兩者。有利地,最后這個解決方案允許產生包括渲染圖像和深度緩存兩者的單個流,并且其可以比單獨在h.264流中編碼的渲染圖像更亮,這取決于3d場景。
將理解的是:需要從服務器發送到客戶端(甚至從客戶端到服務器)的任何數據(光柵圖像,深度緩存……)優選地用流式傳送通道來發送。例如,當在服務器上修改3d場景(例如,3d場景中的新對象,執行3d場景上的模擬)時,修改被流式傳送到客戶端。實際上,客戶端上的用戶與3d場景交互,使得數據不斷地由客戶端接收并被呈現給客戶端。并且當用戶不與3d場景交互時(或者當3d場景中沒有處于運動中的事物時),被流式傳送的數據量非常低;應理解的是:通道被維持打開。
然后,在步驟s30處,第二3d建模對象與所流式傳送的至少一個光柵圖像融合。第二3d建模對象是幾何圖形3d建模對象,并且客戶端計算機執行融合。“融合”意味著定義第二3d建模對象的數據被渲染“到”通過像素流發送的渲染視圖“中”。如上文中先前所討論的,這些數據包括允許建模對象的表示的數據,例如使用邊緣或線的表示,在某些情況下用面或表面。因此,步驟s30暗示此時在第二計算機上的圖形渲染能力:第二3d建模對象的圖像由客戶端計算,并且該圖像與一個或多個光柵圖像組合。因此,第二3d建模對象的新計算的圖像和所流式傳送的光柵圖像被聯合,用于形成將在第二(客戶端)計算機上渲染的圖像。第二3d建模對象可被存儲在客戶端計算機上,或者其可以被從第三計算機發送到客戶端計算機。例如,并且參見圖5,第二3d建模對象可以被存儲在另一個服務器3上,或者在執行請求的客戶端2上,或者甚至在第二客戶端4上。
融合的結果是待渲染的新圖像。融合從而包括將第二3d建模對象的幾何圖形“渲染”到通過像素流發送的渲染視圖中。由第二計算機將第二3d建模對象的圖像與從光柵圖像的流接收的當前光柵圖像組合。在實踐中,第二3d建模對象的圖像具有與光柵圖像相同的大小(相同的像素長度、像素寬度和像素數量)。
當將第二3d建模對象與光柵圖像融合時,選擇第二3d建模對象上的視點來計算第二建模對象的圖像。視點的選擇可通過默認(例如,第二對象的用戶的上一個視點)、通過隨機過程、用與為光柵圖像選擇的視點相同的視點來執行(例如,在由第一和第二建模對象共享的參照系中提供相機的位置)。
第二3d建模對象的光柵圖像和計算圖像的組合可通過以下來執行:執行逐個像素比較以確定第二3d建模對象的哪些片段被渲染。術語“片段(fragment)”意指可能在渲染圖像上產生像素(已繪制(drawn)或未繪制)的3d對象的一部分。該術語在本領域中廣泛使用并且是公知的。每當應當在建模對象的3d組件的渲染圖像的像素上繪制第二3d建模對象的片段時,在從第一計算機流式傳送的深度緩存中的對應值和與f到相機的距離相關的值之間進行比較。如先前所述,存儲在所流式傳送的深度緩存中的值與從相機到所流式傳送的渲染圖像中的對應像素的距離相關。所以進行這種逐個像素比較以確定:應當繪制的第二3d建模對象的片段比所流式傳送的來自第一3d建模對象的至少一個光柵圖像的已經繪制的像素離相機更遠還是更近。該方法被稱為z-剔除(z-culling),并且允許通過將第二3d建模對象的幾何圖形渲染“到”通過像素流發送的渲染視圖“中”來在第二計算機上顯示3d組件的視圖。從而,將在“像素流”中發送的深度緩存(或深度貼圖(depthmap))用于求解遮擋,即確定每個流中的哪些元素在3d組件的視圖中是可見的還是不可見的。
接下來,在步驟s40處,計算對3d組件(s30)的視圖的照明效果,以進一步改進3d組件的渲染圖像的質量。術語“照明效果(lightingeffect)”尤其包括在第二3d建模對象的視覺方面上的第一3d建模對象的光和陰影,并且反之亦然。從而,計算在像素流的第一3d建模對象和幾何圖形流的第二3d建模對象之間的照明相互作用(投射光和陰影)。
然后,在步驟s50處,建模對象的3d組件被渲染并顯示在第二計算機上。這如本領域中已知的那樣來執行。
現在參見圖3,討論如參見圖1的流程圖所述的本發明的示例。用戶已經請求(s10)將3d組件在計算機客戶端上顯示,該3d組件包括存儲在第一服務器上的第一組s1的兩個3d建模對象(立方體和錐體)和存儲在第二服務器上的第二組s2的兩個3d建模對象(圓柱體和圓環體)。作為請求的結果,s1的光柵圖像r1和深度貼圖d1(或深度緩存)由第一服務器計算(s12,s14),并且然后包括r1和d1的單個像素流由第一服務器發送到客戶端,并且第二組s2的幾何圖形流由第二服務器發送到客戶端。可能設想其它配置;例如,第一服務器可能發送兩個像素流(一個用于r1,并且一個用于d1),和/或組s2可能被存儲在客戶端計算機上。客戶端然后融合兩個流,計算照明效果,并且遠程渲染3d組件r2。
本發明在客戶端數量增加的情形下改進遠程渲染的可伸縮性。例如,可能增加3d場景中的3d對象數量,所述3d對象是將作為像素而被流式傳送的部分加到作為幾何圖形而被流式傳送的部分(thepartstreamedaspixeltothepartstreamedasgeometries),當客戶端數量增加時這樣做是有益的。因此,本發明允許執行像素流和幾何圖形流之間的負載平衡,這取決于客戶端的數量及其配置。作為另一個示例,如果兩個或更多個客戶端視點足夠近,可行的策略是用幾何圖形流發送接近于它們的資產(如果可能的話,經由多播,在相互流(mutualstream)中),并且用像素流發送遠的對象;事實上,由于視差,流式傳送的圖像具有與一些資產的位置足夠接近的機會(僅僅具有小移位),這意味著這些圖像也可經由多播在相互流中發送。另一個“負載平衡”策略是對于客戶端更可能與之交互的對象使用幾何圖形流,并且用像素流發送遠的對象。有利地,在網絡中斷的情況下,客戶端仍將能夠與他更可能與之交互的對象進行交互。客戶端還將能夠改變其視點,因為用像素流發送的部分的失真保持為可接受的(關于由于視差的變形)。
現在參見圖2,現在討論對建模對象的3d組件的照明效果的計算(s40)的示例。在3d計算機圖形的領域中已經開發了許多技術來計算這些照明效果作為后期處理。這里,后期處理意味著在轉換到像素的rgb空間之后計算照明效果,例如3d組件的圖像被存儲在幀緩存中并從那里進行后期處理。這包括被稱為延遲著色、屏幕空間環境遮擋、屏幕空間直接遮擋、屏幕空間局部反射、屏幕空間陰影射線跟蹤等等的技術。這些技術共享它們需要用于每個像素的至少以下各條信息:表面法線方向和材料屬性。它們還可能需要關于光源的信息(位置,顏色,范圍……)。
在步驟s400處,服務器接收與第一3d建模對象的至少一個光柵圖像相關聯的一個或多個第一光源信息和與第二3d建模對象相關聯的一個或多個第二光源信息。實際上,在與輸送光柵圖像的流相同的流內傳輸(一個或多個)第一光源信息。替代地,它可以與深度緩存的流一起被發送,或者它可以在其自己的單個流中被發送。(一個或多個)第二光源信息在幾何圖形流內傳輸;可以理解的是:它也可以在其自己的單個流中被發送。用于每個光源的信息至少包括光源的位置(例如,在由第一和第二建模對象共享的參照系中)。它可進一步包括但不限于:光源的顏色、光譜分布、發光強度的空間分布。
接下來,在步驟s410處,通過將第二3d建模對象與所述至少一個光柵圖像的第一深度緩存融合,來計算第二深度緩存。以與用于第二3d建模對象與光柵圖像的融合相同的方式執行該融合。
然后,在步驟s420處,根據第二深度緩存計算法線貼圖(s410)。法線貼圖(normalmap)為建模對象的3d組件的每個像素存儲表面法線方向。可以通過將卷積濾波器應用到第二深度緩存,來計算法線貼圖。可如本領域中已知的那樣執行法線貼圖的計算。計算深度的梯度(使用sobelmask作為濾波器的卷積);該梯度是屏幕空間中的法線的粗略近似。然后,該梯度可以是從2d空間(屏幕空間)到參考空間“未投影”的。
然后,在步驟s430處,推斷與至少一個光柵圖像融合的第二3d建模對象的每個像素的材料屬性。這可通過例如根據像素顏色或流來執行。替代地,可以從托管第一和第二3d建模對象的服務器直接獲得材料屬性,例如,它與相同流中的光源信息一起被發送。
接下來,在步驟s440處,計算識別緩存。從第一組3d建模對象中,只有渲染圖像和深度緩存是對于客戶端為已知的。如上所述,照明技術對于每個像素可能需要深度、表面法線方向、些許材料屬性。所以需要額外的步驟來恢復缺失的信息。該附加緩存(識別緩存)用于為每個像素存儲一個二進制值,該二進制值識別繪制的像素是來自第一場景的所流式傳送的圖像還是來自第二組的3d部分的渲染。從現在開始,每個像素的原點(它們來自哪組3d對象——第一3d建模對象還是第二3d建模對象),使得像素的照明僅僅考慮來自另一組的像素和與另一組相關聯的光源。
將理解的是:圖2的流程圖僅僅是示例,并且可修改步驟的順序而不改變照明效果的計算。與圖4相關地提供另一個示例。
客戶端計算機現在具有用于計算照明效果作為后處理的所有信息,從每個像素的表面法線方向和材料屬性開始。參見圖4,討論了如參見圖1和2的流程圖所述的本發明的示例。圖4是圖3中的流水線的修改的流水線,以包括用后處理技術的照明校正;先前討論的圖3的步驟仍然有效。用戶已經請求(s10)3d組件在計算機客戶端上的顯示,該3d組件包括存儲在第一服務器上的第一組s1的兩個3d建模對象(立方體和錐體)和存儲在第二服務器上的第二組s2的兩個3d建模對象(圓柱體和圓環體)。作為請求的結果,s1的光柵圖像r1和第一深度貼圖d1(或深度緩存)由服務器計算(s12,s14),在3d場景(已經從其計算r1)中識別第一光源l1(由燈泡代表)的信息,并且從第一服務器向服務器流式傳送r1、d1和l1。伴隨地,將第二組s2的幾何圖形流連同與s2相關聯的第二光源l2(由燈泡代表)的信息由第二服務器發送到客戶端。客戶端然后融合兩個流,即,客戶端將光柵圖像r1與幾何圖形組s2融合。作為融合的結果,獲得3d組件r2。然后,推斷r2的對象的材料屬性(s430)。執行r2的像素的材料屬性m的推斷,例如在識別在像素流和幾何圖形流內發送的材料屬性時,或在分析r2的像素的顏色時。在計算材料屬性的同時,通過將第二組s2與d1融合來計算第二深度緩存d2(s410),并且然后計算識別緩存i(s430)。從d2產生法線貼圖n(s420)。現在,客戶端包括用于用后處理技術執行照明校正的數據,該后處理技術需要作為輸入的r2、d2、i、n,m以及來自s1和s2的光源信息。新圖像r3是pror2,其中考慮來自s1的對象和光源對s2的對象的照明影響(反之亦然)。建模對象r3的3d組件被渲染并顯示給用戶。
現在參見圖6,討論當客戶端上的用戶改變渲染的3d組件(例如,圖3中的r2或圖4中的r3)上的視點時,在服務器和客戶端之間的交互(或通信交換)。客戶端和服務器可以是如在圖5上表示的客戶端2和服務器1。客戶端和服務器至少用流式傳送通道連接。客戶端和服務器第二計算機包括耦合到存儲器的處理電路。客戶端進一步包括允許用戶在3d場景上作出行動的圖形用戶接口。第一和第二計算機的每個存儲器具有記錄在其上的用于執行在圖6上表示的交換s600至s660的計算機程序。這意味著:在服務器的存儲器上的計算機程序和在客戶端的存儲器上的計算機程序允許執行本發明的方法。客戶端和服務器兩者的存儲器上的計算機程序可以相同。
替代地,服務器的存儲器上的計算機程序允許創建和/或維持用于流式傳送數據的通道,并且其進一步允許執行步驟s620至s640;客戶端的存儲器上的計算機程序允許創建和/或維持用于流式傳送數據的通道,并且其進一步允許執行步驟s600至s610以及650至660。在該替代方案中,客戶端上和服務器上的計算機程序不相同,但是合作以用于執行本發明的方法。
在步驟s600處,在顯示的3d組件上的新視點由用戶在客戶端計算機上選擇。這如本領域中已知的那樣執行。用在3d組件上新選擇的視點的坐標來將消息發送到服務器(s610)。服務器接收消息(s620)和包含在其中的新坐標。應用新坐標對于服務器是簡單明了的操作,因為服務器上包括第一3d建模對象的3d場景和與第二3d建模對象融合的光柵圖像共享相同的參照系;例如,服務器的圖形處理單元可以通過直接在3d場景上應用新視點來獲得待顯示的新的一組像素。服務器根據新視點(s630)計算第一3d建模對象的新光柵圖像,其被從服務器流式傳送(s640)到客戶端;并且最終由客戶端接收(s650)。客戶端將第二3d建模對象與所流式傳送的新光柵圖像融合,并且渲染(s660)3d組件的新視圖。步驟s630-s660如參見圖1-4所討論的那樣執行。
有趣的是,圖6的步驟僅僅在用戶改變第一組的3d建模對象的視點時才適用。實際上,當用戶操縱(例如移動,旋轉,……)第二組的建模對象時,沒有必須要在服務器(一個或多個第二建模對象從服務器流式傳送)上執行的請求,因為客戶端計算機具有用于計算第二建模對象的新圖像的所有數據——例如根據新視點。
雖然已經參照本發明的示例性實施例具體示出和描述了本發明,但是本領域技術人員將會理解,在不脫離所附權利要求書所涵蓋的本發明的范圍的情況下,可以在形式和細節上進行各種改變。