国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于PKS 體系的3D 圖形圖像顯示技術探索與研究

2023-12-25 09:01:12黨利軍石歌頌李鎖在
電子技術應用 2023年12期
關鍵詞:圖形圖像著色線程

李 亮,黨利軍,石歌頌,王 江,李鎖在

(1.中電(海南)聯(lián)合創(chuàng)新研究院,海南 澄邁 571924;2.中軟信息系統(tǒng)工程有限公司,北京 102209)

0 引言

視覺是人眼感知外界三維環(huán)境空間信息的重要手段,隨著計算機圖形學的發(fā)展,3D 圖形圖像顯示技術被廣泛應用于生產生活的多個領域,高性能高效率的 3D渲染計算研究對未來 PKS 體系搶占該領域市場高地、拓寬現(xiàn)有生態(tài)、保障國內安全生產有重大意義。本文通過在 PKS 體系上深入研究多種 3D 圖形圖像顯示技術路線,比較 OpenGL 和Vulkan 兩種 3D 圖形應用程序編程接口(Application Programming Interfaces,API)的性能差異,為將來該技術在 PKS 的發(fā)展提供參考。

1 研究現(xiàn)狀

3D 圖形圖像顯示技術路線指的是顯卡和圖形 API的組合,現(xiàn)如今,高性能顯卡主要來自AMD 和 Nvidia這兩個廠商。圖形 API 又稱圖形庫,其主要作用是通過調用顯卡對圖形進行計算,主流的圖形庫有三種,分別為:DirectX、OpenGL[1]和Vulkan[2],其中 DirectX 由微軟公司創(chuàng)建,跨平臺能力差,這三種圖形庫的細節(jié)如表 1所示。本文主要研究 OpenGL 和 Vulkan 這兩種圖形庫。

OpenGL 是 1990 年代開發(fā)的首批圖形框架之一,被認為是行業(yè)標準,同時在很長一段時間內,AMD 顯卡加OpenGL 是PKS 體系唯一的 3D 圖形圖像顯示技術路線。然而,隨著晶體管尺寸的減小,中央處理器(CPU)開始面臨丹納德縮放等問題,CPU 的開發(fā)趨勢偏向于并行和多核[3]。伴隨著芯片設計廠商設計理念的轉變,當時的 OpenGL 正在阻礙顯卡性能的發(fā)揮,即使 OpenGL努力跟上潮流,但當時的 OpenGL 無法有效地使用多線程來渲染,意味著渲染密集型程序受到 CPU 單核性能的限制,未能發(fā)揮多個CPU 核心的計算優(yōu)勢。

表1 三種主流圖形庫細節(jié)一覽表

為了解決 OpenGL 的不足,開放標準組織Khronos Group 于2015 年推出了一款新的圖形框架 Vulkan 接口,這款接口相比 OpenGL 更為輕量化,且更貼近底層[4],可以更加充分利用多核 CPU 的核心計算優(yōu)勢,這與 PKS 體系芯片多 CPU 核心的發(fā)展方向非常契合。

本文主要探索與研究基于 PKS 體系的 3D 圖形圖像顯示技術,主要工作包含以下幾個方面:

(1)深入研究 PKS 體系上 OpenGL 和 Vulkan 的圖形渲染流程和機制;

(2)在 PKS 體系上增加 Vulkan 圖形庫對 AMD 和Nvidia 的適配,拓寬 PKS 體系上 3D 圖形圖像顯示的技術路線;

(3) 在 PKS 終端上通過三種開源基準工具對OpenGL 和 Vulkan 進行實驗,實驗結果為 PKS 未來在3D 顯示技術的發(fā)展提供有意義的參考。

2 PKS 體系3D 圖形圖像顯示技術

本節(jié)對 Linux 圖形棧和圖形底層 API,即 OpenGL和 Vulkan 進行介紹。

Linux 圖形顯示的基本流程如圖1 所示,應用程序根據用戶需求,將一系列渲染指令通過 OpenGL 或 Vulkan 等接口提交給 GPU 硬件。OpenGL 和 Vulkan 等圖形庫在 Linux 的實現(xiàn)可以有很多形式,這里以圖形庫的開源實現(xiàn) Mesa 3D 為例,其實現(xiàn)包含軟件實現(xiàn)和硬件加速。所有的 3D 渲染請求都會經過 Mesa 3D,它根據實際情況,選擇通過軟件或者硬件的方式響應應用程序的渲染請求。當系統(tǒng)存在基于直接渲染基礎架構(Direct Render Infrastructure,DRI)的硬件渲染機制時,Mesa 3D 會通過 OpenGL 的接口實現(xiàn) libGL-meas-DRI 調用DRI 提供的渲染功能。libGL-meas-DRI 會調用 libdrm,libdrm 會通過 ioctl 函數調用內核態(tài)的 DRI 驅動,這里稱作直接渲染模塊(Direct Rendering Module,DRM),內核中的 DRM 最終通過 GPU 完成渲染操作。

圖1 Linux 圖形顯示的基本流程

當 GPU 繪制完成后,結果以圖形緩存的形式返回給應用程序,應用程序將結果提交給 Wayland compositor,Wayland compositor 提供顯示服務,通過內核模式設置(Kernel Mode Setting,KMS)確定顯示的分辨率及深度,最終將結果顯示在屏幕上。

具體到底層圖形接口本身,OpenGL 和 Vulkan 之間的特性又有差異。在使用 OpenGL 時,只需關心應用層,因為 OpenGL 的驅動層設計十分臃腫復雜,對顯卡廠商來說渲染效果是未知的,同時 OpenGL 的錯誤管理機制一直處于激活狀態(tài),造成能耗的增加。Vulkan 對驅動層的設計更為精簡,將顯卡內存的分配、釋放和內存管理等操作交給應用層,把更多的控制權限交給應用層,雖然這種設計理念增加了在程序設計的復雜性,但卻降低了驅動層的負載,從而實現(xiàn)更高性能和更平衡的CPU 計算和 GPU 渲染的使用。OpenGL 和 Vulkan 工作方式如圖2 所示。

圖2 OpenGL 和 Vulkan 工作方式對比

OpenGL 與 Vulkan 在設計理念上的另一差別是對并行運算的友好程度。早期的 OpenGL 不允許從一個以上的線程進行渲染調用[5],不能良好地發(fā)揮多個 CPU核心執(zhí)行渲染指令的優(yōu)勢。在 OpenGL 誕生之初不是問題,因為當時的 CPU 都為單線程居多?,F(xiàn)如今已是多核處理器的時代,如果應用程序受 CPU 限制,這樣的設計會嚴重限制性能[6]。

3D 渲染指令包括綁定頂點緩沖區(qū)、綁定索引緩沖區(qū)、綁定著色器資源和發(fā)布基本體渲染的 API 函數。生成渲染指令是一項 CPU 密集型任務,應該盡可能高效率地完成。在 OpenGL 中,渲染指令是同時生成和執(zhí)行的,不可能將它們分開。OpenGL 做法是使用 gl-DraweElements() 函數將渲染指令送到 GPU,然后立即執(zhí)行。由于開發(fā)工程師經常希望控制渲染對象的順序,因此只能使用一個線程。而在 Vulkan 中,生成渲染指令和執(zhí)行它們之間有著明顯的區(qū)別。指令在指令緩沖區(qū)(Command Buffer)中生成,然后將這些指令緩沖區(qū)提交到指令隊列(Command Queen),僅在此時執(zhí)行,Vulkan 的多線程工作模式如圖3 所示。指令緩沖區(qū)可以由多個線程并行生成,這對于 Vulkan 提高多線程性能的能力很重要。

圖3 Vulkan 多線程工作模式

指令緩沖區(qū)在不同的線程中生成,然后提交到主線程中的指令隊列。主線程是實際執(zhí)行渲染指令的線程。執(zhí)行渲染指令是一種相對簡單的 CPU 操作,因此它可以從單個線程中完成而不會損失過多的性能,這與生成真正占用 CPU 的渲染指令不同。

3 實驗

為了進一步探索 PKS 體系上的3D 圖形圖像顯示技術,本節(jié)在 AMD 和 Nvidia 平臺上對 OpenGL 和 Vulkan 進行基準性能測試。

3.1 基準測試工具

絕大多數比較 OpenGL 和 Vulkan 性能的基準數據工具都是為 Android 和 Windows 平臺設計,且沒有開源代碼,少數能在 ARM 加 Linux 平臺上運行的游戲也不能同時支持 OpenGL 與 Vulkan,盡管如此,本項工作還是找到了 3 個開源跨平臺的基準測工具。

3.1.1 OpenGL vs Vulkan

第一個基準測試工具被稱為GL_vs_VK[7],通過繪制多個移動三角形、使用區(qū)域四叉樹細節(jié)層次 (Level of Detail,LOD) 技術渲染地形圖以及渲染陰影映射三個場景來執(zhí)行測試。該工具源代碼可以在文獻[7]中找到。

(1)測試1:移動三角形。如圖4 (a) 所示,該測試在屏幕上顯示了許多具有隨機顏色和速度的移動三角形,每個三角形都使用頂點緩沖區(qū)。測試1 為 OpenGL 和Vulkan 提供了單線程和多線程版本??梢钥刂圃谶@個場景上繪制的三角形數量來改變 CPU 和 GPU 之間的工作量。本次測試執(zhí)行了二十萬個三角形的場景。

圖4 測試 1 至測試 4 的場景

(2)測試2:細節(jié)層次。一個 1 024×1 024 的高度圖地形被渲染為一個線框,如圖4 (b) 所示。這個實現(xiàn)包括每個頂點的頂點緩沖區(qū)。為了盡量模擬真實游戲場景,靠近玩家的區(qū)域在游戲中具有更多定義的細節(jié),而最遠的對象則減少了定義。因此,靠近玩家的區(qū)域將具有更高的分辨率網格,而最遠的區(qū)域將具有較低的分辨率。相機位于地圖角落上方的固定位置。同時,模擬玩家圍繞地圖中心繞圈移動,顯示網格變化。此外,地形以未填充三角形網格的形式繪制。

(3)測試3:陰影映射。這個測試陰影映射技術。該場景由一個棋盤地板組成,上面有深灰色和淺灰色的正方形,在地板上方繪制的立方體,以及一個位于棋盤中心的大球體,漂浮在圖4 (c) 所示的立方體上方。該場景具有固定光源,而攝像機的位置圍繞棋盤中心旋轉,并且攝像機始終注視棋盤中心。該場景使用深度緩沖區(qū)的簡單動態(tài)陰影映射技術從相機的角度渲染陰影。

3.1.2 Vkmark 和 Glmark2

其他兩個基準測試工具分別為測試 OpenGL 和Vulkan 的Glmark2[8]和 Vkmark[9]。Glmark2 包含著不同著色技術、折射、紋理等場景的測試。Vkmark 和 Glmark2 出自同一位工程師,有部分測試場景相同,因此實驗僅對比相同的場景。下面對兩個測試工具相同的場景進行描述。

(1)測試4:紋理。在該場景中繪制一個旋轉的立方體,并將紋理圖像應用于對象的所有面,如圖4 (d) 所示。該測試將 2D 圖像應用于立方體的每個面,并且使用線性過濾方法。

(2)測試5 至測試8:Gouraud、Phong、Blinn-Phong和 Cel 四種著色場景。這四個測試場景將不同光照模型應用于 3D 圖像。Gouraud 著色涉及計算 3D 模型上每個頂點的法線向量,然后,跨多個多邊形計算表面插值以估計照明強度。在這個場景中,模型只應用了漫反射照明。Phong 著色改進了 Gouraud 著色模型,提供了更好的表面著色近似。這是通過在模型表面上為每個像素插入法線向量來完成,而不是在每個頂點之間插入顏色的 Gouraud 著色。此外,該模型還包含鏡面光照,因此這種方法的計算成本更高。Blinn-Phong 著色方法通過修改鏡面光照改進了 Phong 著色模型。在 Phong照明模型上,計算相機與光源反射之間的角度并將其投影到模型上。Cel 著色是一種屬于非真實感渲染類的方法。本次測試場景呈現(xiàn)四種不同的綠色陰影。測試 5至測試8 的場景分別如圖5 (a)~圖5 (d) 所示。

圖5 測試5 至測試8 四種著色模型場景

3.2 實驗環(huán)境

本次實驗在兩臺 PKS 終端機上進行,單機共4 個CPU 核心,運行內存 32 GB,兩臺終端機分別搭載型號為 AMD Radeon 580 2048sp 和 Nvidia RTX 2080 Super兩塊圖形顯卡。實驗環(huán)境軟硬件平臺的具體信息可參考表2。

表2 實驗軟硬件平臺總結

3.3 實驗結果

實驗首先使用 GL_vs_VK 工具在搭載 Nvidia RTX 2080 Super 和 AMD RX 580 2048sp 的 PKS 終端機上測試 OpenGL 和 Vulkan 的性能,共獲得兩組實驗數據,性能評價指標是顯示幀率(Frames Per Second,F(xiàn)PS)。實現(xiàn)選擇 benchmark 模式,該模式先后運行三個測試場景,每個場景持續(xù)測試15 s,實驗結果輸出每個場景平均幀率。

圖6 和圖7 分別展示了 GL_vs_VK 工具在 Nvidia和 AMD 顯卡上的實驗結果,由于不同場景的實驗結果相差過大,縱坐標采用指數形式展示。在單線程測試中的三個測試場景,Vulkan 顯示性能均優(yōu)于 OpenGL,Vulkan 的幀率是 OpenGL 的1.9 至2.4 倍。

圖6 GL_vs_VK 工具在 Nvidia 顯卡上對比實驗結果

圖7 GL_vs_VK 工具在 AMD 顯卡上對比實驗結果

在多線程測試中,OpenGL 和 Vulkan 均使用4 個線程進行渲染,OpenGL 多線程版本只在移動三角形場景提供,相比單線程,多線程有著1.2 倍左右的提升,于此同時 Vulkan 提升效果更為明顯,性能提升范圍在1.5 至2.6 倍。圖8 為在4 線程模式下Vulkan 和 OpenGL 的使用率,可以看到,Vulkan 四個核心的使用率均在90% 左右,而 OpenGL 壓力都在 CPU 3 上,其他核心只大約占用了 20%。這個現(xiàn)象說明了多線程 Vulkan 相比于單線程更能調動處理器的性能從而提高渲染效率,而多線程OpenGL 提升性能并不明顯。

圖8 多線程模式下 Vulkan 和 OpenGL 的 CPU 使用率差異

圖9 展示了Glmark2 和Vkmark 基準測試工具在AMD 平臺的的實驗結果。實驗結果包括五個場景,主要是測試紋理和著色的渲染能力??偟膩砜矗琕ulkan 在本次實驗結果均高于 OpenGL,Vulkan 的幀率是OpenGL 的1.8 至1.9 倍。

圖9 Glmark2 和 Vkmark 工具在 AMD 顯卡上對比實驗結果

4 結論

本文在 PKS 體系上開展了 3D 圖形圖像顯示的研究,深入研究了 OpenGL 和 Vulkan 兩種圖形庫的結構、工作原理以及兩者的差異。采用了三種基準測試工具和兩種品牌的顯卡在 PKS 終端機上對 OpenGL 和 Vulkan 進行性能比較,為 PKS 體系未來的 3D 圖形圖像顯示技術發(fā)展提供重要參考。實驗結果表明,在單線程模式下,Vulkan 的性能均優(yōu)于 OpenGL,在多線程模式下,Vulkan 的性能提高更加顯著,這是因為 OpenGL 將所有渲染操作集中于一個線程,而Vulkan 引入了 Command Buffer,每個線程可以向其提交渲染指令,充分發(fā)揮了多核處理器的優(yōu)勢,Vulkan 的特性更適合 PKS 體系未來3D 圖形圖像顯示技術的發(fā)展方向。

猜你喜歡
圖形圖像著色線程
Photoshop圖形圖像處理線上線下混合式教學模式探究
蔬菜著色不良 這樣預防最好
蘋果膨大著色期 管理細致別大意
10位畫家為美術片著色
電影(2018年10期)2018-10-26 01:55:48
淺析計算機圖形圖像處理技術偏技術
電子制作(2018年8期)2018-06-26 06:43:26
網頁設計與圖形圖像處理技術探析
電子制作(2017年8期)2017-06-05 09:36:15
淺談linux多線程協(xié)作
面向工藝設計的圖形圖像處理系統(tǒng)研究與實現(xiàn)
Thomassen與曲面嵌入圖的著色
Linux線程實現(xiàn)技術研究
黔江区| 兰州市| 文成县| 郁南县| 东丽区| 富民县| 惠来县| 渝北区| 萍乡市| 环江| 扶余县| 新昌县| 理塘县| 渝北区| 上饶市| 平顶山市| 枝江市| 三穗县| 蒲江县| 百色市| 定日县| 蓬溪县| 华安县| 晋江市| 乌兰察布市| 汉川市| 洛川县| 桐城市| 安顺市| 靖江市| 云浮市| 灵武市| 利辛县| 陕西省| 苏尼特左旗| 沾益县| 乐业县| 敦化市| 宁都县| 襄汾县| 屏东县|