• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于虛擬現(xiàn)實的渲染優(yōu)化算法①

    2019-07-23 02:36:02李媛媛
    計算機系統(tǒng)應用 2019年6期
    關鍵詞:線程雙層視野

    李媛媛,羅 訓

    (天津理工大學 計算機科學與技術學院,天津 300384)

    隨著虛擬現(xiàn)實的不斷發(fā)展,人們在使用虛擬現(xiàn)實系統(tǒng)的過程中,對虛擬場景的真實性及實時渲染性的要求也逐步增高,而隨之虛擬場景也變得越來越復雜,這就意味著所需要渲染的數(shù)據(jù)會大得驚人.現(xiàn)如今隨著游戲產(chǎn)業(yè)的蓬勃發(fā)展,虛幻引擎的免費開放吸引了無數(shù)游戲開發(fā)人士以及學生的使用,在虛幻引擎中創(chuàng)建一個具有真實感的場景勢必包含地形、植被、建筑、氛圍、特效等,為了使場景的真實感更強,不會出現(xiàn)場景卡頓的現(xiàn)象,最重要的是需要在龐大復雜的虛擬場景中提高渲染效率.

    隨著計算機顯卡處理能力的不斷提高,在游戲場景中,越來越多的開發(fā)人員傾向于使用三維場景的光影、動畫、粒子特效等,使場景畫面渲染的真實度越來越高,讓用戶有身臨其境的感覺[1].引擎中的優(yōu)化占據(jù)著尤為重要的地位,其可優(yōu)化的覆蓋范圍非常廣泛,涉及到內(nèi)存的分配、多線程加載、層次細節(jié)算法(LOD)[2]等,要想高效率解決引擎優(yōu)化問題,必須要找出實際瓶頸所在,然后對癥下藥,提高工程渲染運行效率.

    本文在虛幻引擎中進行三維重建天津理工大學,對整個工程進行渲染加速,提出了將游戲線程與渲染線程并行計算和雙層裁剪算法,主要貢獻可以概括為:

    (1)將虛幻引擎中游戲線程與渲染線程同步并行執(zhí)行,節(jié)省渲染時間;

    (2)提出了淡入淡出層次細節(jié)算法,使用高度補償?shù)姆椒?使每個層級之間過渡平滑,從而解決傳統(tǒng)的層次細節(jié)算法所出現(xiàn)的“突越”現(xiàn)象;

    (3)提出了緩慢剔除算法,使用兩個剔除距離,利用不透明度來實現(xiàn)緩慢剔除,從而解決傳統(tǒng)的剔除算法所出現(xiàn)的“突越”現(xiàn)象;

    (4)提出了雙層裁剪算法,使用淡入淡出層次細節(jié)算法進行第一層裁剪,再使用緩慢剔除算法進行第二層裁剪,從而加快了渲染速度.

    1 相關技術介紹

    近年來在復雜的三維虛擬場景中最常用的優(yōu)化算法主要有:層次細節(jié)算法[3]和剔除算法[4],這兩種算法都是單層裁剪算法,本文主要對這兩種算法進行了改進,并提出了雙層裁剪算法.

    1.1 層次細節(jié)算法

    層次細節(jié)算法,簡稱LOD(Levels of Detail)[2],是根據(jù)模型的節(jié)點在顯示環(huán)境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數(shù)和細節(jié)度,它的目的是通過保留重要視覺特征來生成簡化的模型,以降低場景復雜度,實現(xiàn)場景實時繪制,從而獲得高效率的渲染運算[5].

    在現(xiàn)實世界中,人眼視角是有一定盲區(qū)的,并不能看到360 度的場景,并且隨著視線向遠處延長,看到的東西會越來越模糊.因此在虛幻引擎中也會選擇視野范圍內(nèi)的物體進行繪制,將場景中的目標模型按照一定的區(qū)域劃分法進行快速分割,并將模型對象組織到樹結(jié)構(gòu)中,然后從根節(jié)點開始進行視域剪裁測試,當某些節(jié)點測試失敗,表示其位于視域體制外,可在渲染之前將其剔除,其子孫節(jié)點無需再進行測試,可直接剔除[6].

    傳統(tǒng)的LOD 算法將每個層級的三角面片數(shù)進行了大量的裁剪,該方法雖然能提高渲染效率,但在視覺上會出現(xiàn)“突越”現(xiàn)象,即在層級之間切換不平滑.故本文針對該問題提出了淡入淡出層次細節(jié)算法.

    1.2 剔除算法

    傳統(tǒng)的剔除算法[7],簡稱CULL,保證在遠距離的時候?qū)χ脖徊贿M行渲染,以及被遮擋的植被不進行渲染,從而提高渲染效率.傳統(tǒng)剔除算法需要對每個單元進行兩次可見性剔除判斷,從而避免了遮擋部分也進行渲染,提高了渲染效率[8].

    目前的遮擋剔除研究算法主要可以分為動態(tài)遮擋剔除算法和靜態(tài)遮擋剔除算法[9].由于本文的實驗場景是虛擬校園,不考慮動態(tài)物體,故采用了靜態(tài)遮擋剔除算法.靜態(tài)遮擋剔除算法需要對場景進行預處理,Zaugg[10]等人提出了將基于區(qū)域的室內(nèi)靜態(tài)場景的方法擴展到了地形場景等.將場景進行等單元劃分,依據(jù)視野向量與三角面片的平面法向量的夾角 θ來判斷是否剔除,若 0 ?θ ?90 時,可見;若9 0 ?θ ?180時,不可見,進行剔除.

    雖然傳統(tǒng)的剔除算法能提高渲染效率,但其在計算過程中將考慮到的向量為三維向量,其計算量比二維向量增加很多;且其只設置一個剔除距離,若視野從一個可見去區(qū)域移動到一個不可見區(qū)域,就會出現(xiàn)“突越”現(xiàn)象,這樣顯得就很突兀,故本文提出了緩慢剔除算法.

    2 線程優(yōu)化

    在虛幻引擎中,Frame 時間是一幀所花費的總時間,Game 是游戲線程,它不與渲染直接關聯(lián),如若游戲線程很慢,則通常是工程內(nèi)程序不夠優(yōu)化,占據(jù)內(nèi)存過多;Draw 是渲染線程,包括圖形應用程序編寫接口API (Application Programming Interface)以及繪圖調(diào)用的設置,若渲染線程很慢,則說明工程中需渲染的三角面片過多.在虛幻引擎中使用的是單線程,游戲線程和渲染是串行的,由于渲染中的數(shù)據(jù)通常依賴于游戲邏輯線程,所以通常會先進行游戲邏輯的任務,然后再進行渲染,如圖1(a)所示,此時一幀所占的時間是Game 和Draw 兩個線程執(zhí)行幀數(shù)的總和,所以場景的渲染效率相對較慢.

    本文在虛幻引擎中將游戲線程和渲染分離成兩個單線程,如圖1(b)所示,并行起來執(zhí)行,此時一幀的時間就是Game 和Draw 各自執(zhí)行時兩個中耗時最長的幀數(shù),這樣整個工程的運行效率就會得到顯著的提升.

    圖1 線程分布

    將游戲線程與渲染線程并行之后還需要將其進行同步處理,C++中常用鎖或臨界區(qū)的方式來解決同步問題.本文采用的是柵欄的技術即Render Command Fence 機制.所謂的柵欄技術就是指在下一次進行讀取操作前,所有的寫操作都被寫入了內(nèi)存,因而每次的讀操作都是更新后的內(nèi)存,從而用來防止游戲線程和渲染線程運行相差過大,導致整個工程運行錯亂.

    3 雙層裁剪算法

    3.1 第一層裁剪—淡入淡出層次細節(jié)算法

    傳統(tǒng)的層次細節(jié)算法在隨著不同LOD 等級之間進行切換時,會出現(xiàn)頂點高度值的突然變化,從而導致視覺上出現(xiàn)“突越”現(xiàn)象,本文提出了淡入淡出層次細節(jié)算法,對頂點的高度值進行緩慢變化處理即高度補償來解決該現(xiàn)象.

    現(xiàn)假設由一層切換到另一層時,某一頂點由A 切換為A′,其高度差為 ?h,總過渡時間為t,在切換過程中,本文先對高度進行補償,然后再進行等級之間的切換.如式(1)所示,其中 ?t為當前已過渡的時間.

    在大規(guī)模的虛擬場景中使用層次細節(jié)算法可以有效地裁剪掉所設置的視野范圍外的模型,同時根據(jù)模型在視野范圍內(nèi)的比例可以選擇精裁剪或是粗裁剪,故本文采用淡入淡出層次細節(jié)算法進行第一層裁剪.

    3.2 第二層裁剪—緩慢剔除算法

    傳統(tǒng)的剔除算法主要是進行三維向量的計算,且在剔除不可見面時會出現(xiàn)“突越”現(xiàn)象,本文提出了緩慢剔除算法,將傳統(tǒng)的剔除算法中三維向量的計算優(yōu)化為二維向量的計算,同時設置了兩個剔除距離,利用不透明度來解決“突越”現(xiàn)象.

    由式(3)可以看出此時的點乘結(jié)果與Z 軸坐標無關,將其轉(zhuǎn)換成了二維向量坐標的計算,此時由公式(4)計算角度θ:

    根據(jù) θ來進行判斷哪些面可見,哪些面需要剔除,在剔除時,為了避免視覺上產(chǎn)生“突越”現(xiàn)象,同時緩慢剔除算法將剔除算法設置兩個剔除距離:起始剔除距離S和終止剔除距離E,在材質(zhì)中將植被蒙版和Vertex Color 的alpha 通道進行相乘,賦值給不透明度或蒙版值.當模型在視野范圍內(nèi)后,會對模型距離攝像機的距離進行計算,設模型距離攝像機的距離為d,然后與起始距離和終止距離進行比較,若d≤S,則模型不進行剔除,即進行細渲染;若S≤d≤E,則模型會根據(jù)距離值的增大而之間調(diào)節(jié)不透明度;若d≥E,則此時的模型完全在視野范圍外,只需要將其及之后的所有模型完全剔除即可.使用改進的剔除算法會實現(xiàn)一種隨著距離淡入淡出的效果,使效果更佳真實.

    由于在虛擬場景中會出現(xiàn)大量的遮擋現(xiàn)象,而剔除算法會根據(jù)每個三角面片進行可見性判斷再進行剔除,故本文采用緩慢剔除算法進行第二層裁剪,對遮擋部分及模型背面進行二次裁剪,從而提高渲染效率.

    3.3 總結(jié)

    假設淡入淡出層次細節(jié)算法的層級為3 層,其對應模型所需占屏幕尺寸(Screen Size)分別為M1、M2、M3,根據(jù)模型所占屏幕尺寸進行相應比例裁剪,且在每個層級之間切換時使用高度補償?shù)姆椒ń鉀Q“突越”現(xiàn)象,緩慢剔除剔除算法的視野向量與三角面片的平面法向量的夾角θ,剔除的起始距離為S,終止距離為E,整個雙層裁剪算法的總流程圖如圖2所示.

    圖2 雙層裁剪算法總流程圖

    現(xiàn)將淡入淡出層次細節(jié)算法、緩慢剔除算法以及雙層裁剪算法進行簡稱、特點的總結(jié),方便實驗時進行簡單表述,總結(jié)如表1所示.

    4 實驗結(jié)果與分析

    4.1 線程串行、并行對比實驗

    本文將大量的場景組件的位置計算放到異步線程中,利用動態(tài)組件處理將其轉(zhuǎn)移到異步紋理流任務,使它們能夠與其他游戲線程任務得到并行的處理,從而提高渲染效率,本文對游戲線程與渲染線程的串行、并行做了多組實驗,用Frame 數(shù)據(jù)來表示對比結(jié)果,對比實驗結(jié)果如圖3所示.

    表1 算法總結(jié)

    圖3 串行、并行實驗Frame 對比

    由圖3可以看出游戲線程與渲染線程串行時的Frame 在15 上下浮動,而游戲線程與渲染線程并行時的Frame 在9 上下浮動,一幀所花費的時間減少了40%左右.但是僅依靠線程并行,大規(guī)模的虛擬場景的渲染并不能有很大的改善.

    4.2 LOD 和FLOD 實驗對比

    本文以天津理工大學為整個實驗場景,設置三個LOD 等級,為了對比明顯,將分別對建筑物和植被的Screen Size 參數(shù)設置一樣,如表2所示.

    表2 LOD 等級及Screen Size 設置

    在每個層級之間進行切換,看是否會出現(xiàn)“突越”現(xiàn)象,實驗結(jié)果如表3所示.

    表3 LOD 算法與FLOD 算法實驗對比表

    由表3可以看出在進行相鄰等級之間切換時,本文提出的淡入淡出層次細節(jié)算法很好的解決了“突越”現(xiàn)象.

    4.3 CULL 和FCULL 對比實驗

    由于本文是利用緩慢剔除算法進行第二層剔除,故同樣需要保證其不會發(fā)生“突越”現(xiàn)象,本文將傳統(tǒng)的剔除算法的剔除距離設置為400 cm,將緩慢剔除算法的剔除的起始距離S設置為400 cm,剔除終止距離E設置為600 cm,來進行實驗對比,實驗結(jié)果如表4.

    表4 CULL 算法與FCULL 算法實驗對比表

    由表4可看出,采用緩慢剔除算法設置兩個剔除距離,利用不透明度可以實現(xiàn)模型的緩慢剔除,避免了“突越”現(xiàn)象.

    4.4 雙層裁剪算法與單層裁剪算法對比實驗

    本文提出的雙層裁剪算法,首先對整個場景進行淡入淡出層次細節(jié)算法裁剪,對不在設置視野范圍內(nèi)的遠處物體進行剔除,僅僅加載渲染視野范圍內(nèi)的物體;然后對視野范圍內(nèi)的物體進行單元分割進行第二次可見性判斷,將在視野盲區(qū)進行二次裁剪,如建筑物的背面等.

    在游戲引擎中最能體現(xiàn)渲染效率的就是幀率(Frame Per Second,FPS)了,FPS 越大表示其渲染效率越高,反之亦然,故本文將僅使用FLOD 進行單層裁剪、僅使用FCULL 進行單層裁剪和本文提出的雙層裁剪進行FPS 的實驗對比.現(xiàn)設置三層LOD 等級,Screen Size 的參數(shù)設置如表3,緩慢剔除算法的起始距離為S 設置為400 cm,剔除終止距離E 設置為600 cm.由于每個LOD 等級的FPS 不同,故本文對三個等級的FPS 做了均值處理.實驗結(jié)果如圖4所示.

    圖4 單層裁剪和雙層裁剪FPS 對比

    由圖4可以看出僅進行FLOD 單層裁剪的FPS在30 左右,僅進行FCULL 單層裁剪的FPS 也在30 左右,但本文提出的雙層裁剪FPS 達到了55 左右,很大程度上提高了渲染效率.

    5 總結(jié)

    本文對虛幻引擎中單線程的游戲線程和渲染線程進行了同步并行化處理,加快了一幀所需要的時間;針對傳統(tǒng)的層次細節(jié)算法提出了淡入淡出層次細節(jié)算法,實驗證明解決了層級切換所出現(xiàn)的“突越”現(xiàn)象;針對傳統(tǒng)的剔除算法提出了緩慢剔除算法,實驗證明解決了在超過剔除距離后出現(xiàn)的“突越”現(xiàn)象;針對單層裁剪提出了雙層裁剪,首先使用淡入淡出層次細節(jié)算法進行第一層的裁剪,裁剪掉在視野范圍外的模型,再使用緩慢剔除算法進行第二層裁剪,裁剪掉被遮擋的模型部分,從而很大程度上減少了所需渲染的三角面片數(shù),提高了渲染效率.

    猜你喜歡
    線程雙層視野
    居· 視野
    中華民居(2020年3期)2020-07-24 01:48:04
    墨爾本Fitzroy雙層住宅
    淺談linux多線程協(xié)作
    次級通道在線辨識的雙層隔振系統(tǒng)振動主動控制
    視野
    科學家(2015年2期)2015-04-09 02:46:46
    傳統(tǒng)Halbach列和雙層Halbach列的比較
    真相
    讀者(2014年18期)2014-05-14 11:40:56
    一種雙層寬頻微帶天線的設計
    電視技術(2014年19期)2014-03-11 15:38:15
    Linux線程實現(xiàn)技術研究
    么移動中間件線程池并發(fā)機制優(yōu)化改進
    准格尔旗| 阿拉尔市| 新闻| 宜昌市| 姚安县| 额敏县| 文昌市| 新余市| 浪卡子县| 应用必备| 酒泉市| 安陆市| 晋江市| 东乡族自治县| 洪江市| 广水市| 宁德市| 航空| 临澧县| 阳城县| 谷城县| 永嘉县| 金昌市| 饶河县| 伊金霍洛旗| 简阳市| 平顺县| 胶南市| 娱乐| 阳曲县| 姜堰市| 布尔津县| 武隆县| 攀枝花市| 海城市| 霍山县| 铜鼓县| 桃江县| 嫩江县| 沈阳市| 岳普湖县|