本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,特別涉及一種三維虛擬環(huán)境中的渲染顯示方法及裝置。
背景技術(shù):
Unity3D是Unity Technologies開(kāi)發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫(huà)等類型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開(kāi)發(fā)工具,是一個(gè)全面整合的專業(yè)游戲引擎。Unity類似于Director,Blender game engine,Virtools或Torque Game Builder等利用交互的圖型化開(kāi)發(fā)環(huán)境為首要方式的軟件其編輯器運(yùn)行在Windows和Mac OS X下,可發(fā)布游戲至Windows、Mac、Wii、iPhone和Android平臺(tái)。也可以利用Unity web player插件發(fā)布網(wǎng)頁(yè)游戲,支持Mac和Windows的網(wǎng)頁(yè)瀏覽。它的網(wǎng)頁(yè)播放器也被Mac widgets所支持。
Unreal是UNREAL ENGINE的簡(jiǎn)寫(xiě),中文:虛幻引擎(UNREAL ENGINE)是目前世界最知名授權(quán)最廣的頂尖游戲引擎,占有全球商用游戲引擎80%的市場(chǎng)份額。中國(guó)首家虛幻技術(shù)研究中心在上海成立,該中心由GA國(guó)際游戲教育與虛幻引擎開(kāi)發(fā)商EPIC的中國(guó)子公司EPIC GAMES CHINA聯(lián)合設(shè)立。
為方便說(shuō)明,下面主要以游戲程序以及Unity3D或Unreal為例進(jìn)行說(shuō)明。
在一些含有圖像顯示的程序、視頻中,動(dòng)畫(huà)是使用內(nèi)置的美術(shù)資源和渲染引擎實(shí)時(shí)渲染的,但預(yù)渲染動(dòng)畫(huà)則不同,它們通常是在3D應(yīng)用程序中利用高分辨率美術(shù)資源創(chuàng)建并渲染的。最終制成的視頻片段只是在程序、視頻中回放一遍。
隨著Unreal Engine 3及其高質(zhì)量的渲染系統(tǒng)的誕生,這兩種渲染技術(shù)之間的界線已經(jīng)變得模糊起來(lái)。使用游戲中美術(shù)資源制作的游戲中過(guò)場(chǎng)動(dòng)畫(huà)與使用高分辨率美術(shù)資源制成的現(xiàn)代影片具有同樣高的視覺(jué)逼真度。Matinee系統(tǒng)也已煥然一新,并成為非線性全效特征的編輯器。在過(guò)去,只能通過(guò)預(yù)渲染得到的高質(zhì)量的過(guò)場(chǎng)動(dòng)畫(huà),現(xiàn)在可以在UnrealEd內(nèi)部直接創(chuàng)建,并可以在游戲播放時(shí)更為簡(jiǎn)便地實(shí)時(shí)渲染了。
Unreal并非是一個(gè)全實(shí)時(shí)計(jì)算的引擎,而是實(shí)時(shí)計(jì)算+預(yù)渲染。游戲引擎中為了呈現(xiàn)出以假亂真的效果,很多時(shí)候都會(huì)使用預(yù)渲染的技術(shù),所謂預(yù)渲染的技術(shù),其實(shí)就是把一些復(fù)雜的中間計(jì)算結(jié)果緩存在貼圖之類的存儲(chǔ)結(jié)構(gòu)里。這樣的技術(shù)非常常見(jiàn),大部分的核心思想是算法里面的空間換時(shí)間的策略,或者是簡(jiǎn)化問(wèn)題的模型,減小計(jì)算規(guī)模,所以現(xiàn)在單機(jī)游戲越來(lái)越大,很大一部分資源是被這些東西占用了。下面簡(jiǎn)單舉例說(shuō)明預(yù)渲染:
light map,簡(jiǎn)單的說(shuō)就是把光強(qiáng)度在整個(gè)場(chǎng)景中的分布用貼圖存儲(chǔ)下來(lái),配合第二UV,在真正實(shí)時(shí)計(jì)算光照的時(shí)候就省去了計(jì)算光強(qiáng)這部分的計(jì)算量;對(duì)于一些復(fù)雜形狀的光源,在很難對(duì)它的光強(qiáng)在任一點(diǎn)的積分求數(shù)值解或者計(jì)算量過(guò)大的情況下,一般這類光強(qiáng)分布會(huì)被緩存在一張貼圖上,叫法可能各不相同,或者是environment map,或者是image based lighting,或者是IES light,這類處理本質(zhì)上是一樣的東西,都是光強(qiáng)分布函數(shù)的離散化存儲(chǔ),計(jì)算是離線的。
由此可見(jiàn),在此過(guò)程中,渲染會(huì)用到大量的資源,而現(xiàn)有技術(shù)的不足正在于:現(xiàn)有的渲染技術(shù)對(duì)每一個(gè)模型都進(jìn)行渲染,使得效率低下,占用了大量的資源,進(jìn)一步的,使得這一類的程序運(yùn)行需要的硬件配置過(guò)高,不能在一般的硬件配置下運(yùn)行。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種三維虛擬環(huán)境中的渲染顯示方法及裝置,用以提高三維虛擬環(huán)境中的渲染顯示效率。
本發(fā)明實(shí)施例中提供了一種三維虛擬環(huán)境中的渲染顯示方法,包括:
在三維虛擬環(huán)境中的模型處于相機(jī)視錐體內(nèi)時(shí),確定模型與相機(jī)的距離;
根據(jù)距離與精度級(jí)別的對(duì)應(yīng)關(guān)系,確定該模型所對(duì)應(yīng)的精度級(jí)別;
調(diào)用該精度級(jí)別的模型進(jìn)行渲染后顯示。
較佳地,確定模型與相機(jī)的距離時(shí),是同時(shí)在三維虛擬環(huán)境中的若干模型中確定處于相機(jī)視錐體內(nèi)的各模型后,確定每一個(gè)模型與相機(jī)的距離;
或,是在三維虛擬環(huán)境中的各模型中分別確定處于相機(jī)視錐體內(nèi)的每一個(gè)模型后,確定每一個(gè)模型與相機(jī)的距離。
較佳地,進(jìn)一步包括:
若模型處于相機(jī)視錐體外,不對(duì)該模型進(jìn)行渲染后顯示。
較佳地,在確定模型與相機(jī)的距離前,進(jìn)一步包括:
生成各精度級(jí)別的模型。
較佳地,在確定模型與相機(jī)的距離前,進(jìn)一步包括:
將高精度級(jí)別的模型上的組件和/或物體掛接于相應(yīng)的模型。
較佳地,生成各精度級(jí)別的模型,包括:
確定最高級(jí)別的精度的模型;
依據(jù)所需的各級(jí)別精度的模型數(shù)量,按照簡(jiǎn)化模型依次生成確定各級(jí)別的精度的模型。
較佳地,所述精度級(jí)別和/或所需的各級(jí)別精度的模型數(shù)量是根據(jù)用戶需要設(shè)置的。
本發(fā)明實(shí)施例中提供了一種三維虛擬環(huán)境中的渲染顯示裝置,包括:
距離確定模塊,用于在三維虛擬環(huán)境中的模型處于相機(jī)視錐體內(nèi)時(shí),確定模型與相機(jī)的距離;
精度級(jí)別確定模塊,用于根據(jù)距離與精度級(jí)別的對(duì)應(yīng)關(guān)系,確定該模型所對(duì)應(yīng)的精度級(jí)別;
渲染顯示模塊,用于調(diào)用該精度級(jí)別的模型進(jìn)行渲染后顯示。
較佳地,距離確定模塊進(jìn)一步用于確定模型與相機(jī)的距離時(shí),是同時(shí)在三維虛擬環(huán)境中的若干模型中確定處于相機(jī)視錐體內(nèi)的各模型后,確定每一個(gè)模型與相機(jī)的距離;或,是在三維虛擬環(huán)境中的各模型中分別確定處于相機(jī)視錐體內(nèi)的每一個(gè)模型后,確定每一個(gè)模型與相機(jī)的距離。
較佳地,渲染顯示模塊進(jìn)一步用于若模型處于相機(jī)視錐體外,不對(duì)該模型進(jìn)行渲染后顯示。
較佳地,進(jìn)一步包括:
模型生成模塊,用于在確定模型與相機(jī)的距離前,生成各精度級(jí)別的模型。
較佳地,模型生成模塊進(jìn)一步用于在確定模型與相機(jī)的距離前,將高精度級(jí)別的模型上的組件和/或物體掛接于相應(yīng)的模型。
較佳地,模型生成模塊進(jìn)一步用于在生成各精度級(jí)別的模型時(shí),包括:
確定最高級(jí)別的精度的模型;
依據(jù)所需的各級(jí)別精度的模型數(shù)量,按照簡(jiǎn)化模型依次生成確定各級(jí)別的精度的模型。
較佳地,模型生成模塊進(jìn)一步用于根據(jù)用戶需要設(shè)置所述精度級(jí)別和/或所需的各級(jí)別精度的模型數(shù)量。
本發(fā)明有益效果如下:
在本發(fā)明實(shí)施例提供的技術(shù)方案中,由于每個(gè)模型都預(yù)先設(shè)有各個(gè)精度級(jí)別的待渲染顯示的模型,在模型處于相機(jī)視錐體內(nèi)時(shí),就確定模型與相機(jī)的距離;然后根據(jù)距離與精度級(jí)別的對(duì)應(yīng)關(guān)系,確定每一個(gè)模型所對(duì)應(yīng)的精度級(jí)別;最后再將每一個(gè)模型對(duì)應(yīng)的精度級(jí)別的模型進(jìn)行渲染后顯示。
由于在模型精度級(jí)數(shù)和標(biāo)準(zhǔn)設(shè)置完成后,在模型顯示時(shí)根據(jù)所處的位置和重要程度,自動(dòng)調(diào)整物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,優(yōu)化場(chǎng)景性能,因此能夠提升整個(gè)場(chǎng)景的渲染效率。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1為本發(fā)明實(shí)施例中三維虛擬環(huán)境中的渲染顯示方法實(shí)施流程示意圖;
圖2為本發(fā)明實(shí)施例中不同精度級(jí)別的模型示意圖;
圖3為本發(fā)明實(shí)施例中Mesh示例1示意圖;
圖4為本發(fā)明實(shí)施例中Mesh示例2示意圖;
圖5為本發(fā)明實(shí)施例中邊坍塌法效果示意圖;
圖6為本發(fā)明實(shí)施例中頂點(diǎn)去除法效果示意圖;
圖7為本發(fā)明實(shí)施例中場(chǎng)景渲染顯示實(shí)施流程示意圖;
圖8為本發(fā)明實(shí)施例中三維虛擬環(huán)境中的渲染顯示裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
發(fā)明人在發(fā)明過(guò)程中注意到:
LOD(Levels of Detail,多細(xì)節(jié)層次)是一種全新的模型表示方法,改變了傳統(tǒng)的“圖像質(zhì)量越精細(xì)越好”的片面觀點(diǎn),而是依據(jù)視線的主方向、視線在場(chǎng)景物體表面的停留時(shí)間、物體離視點(diǎn)的遠(yuǎn)近和物體在畫(huà)面上的投影區(qū)域的大小等因素來(lái)決定物體應(yīng)選擇的細(xì)節(jié)層次,以達(dá)到實(shí)時(shí)顯示圖形的目的。另外,通過(guò)對(duì)場(chǎng)景中每個(gè)圖形對(duì)象的重要性進(jìn)行分析,使得最重要的圖形對(duì)象得以進(jìn)行較高質(zhì)量的繪制,而不重要的圖形對(duì)象則采用較低質(zhì)量的繪制,在保證實(shí)時(shí)圖形顯示的前提下,最大程度的提高視覺(jué)效果。
目前業(yè)內(nèi)流行的主流游戲引擎Unreal和Unity3d中,都已經(jīng)實(shí)現(xiàn)了LOD技術(shù)。例如在Unity3d中,用戶需要在要顯示的每個(gè)物體中添加LOD Group組件,LOD Group依據(jù)顯示物體在相機(jī)視圖中所占的比例為層級(jí)和精度標(biāo)準(zhǔn),在LOD Group組件中用戶手動(dòng)添加具體層級(jí)要顯示的精度的子模型,最終將各個(gè)層級(jí)和精度的模型渲染顯示出來(lái)。
目前LOD常由美術(shù)和程序人員聯(lián)合通過(guò)手工方式實(shí)現(xiàn),無(wú)法批量自動(dòng)實(shí)現(xiàn)。美術(shù)人員制作各種層次細(xì)節(jié)的美術(shù)模型,程序人員通過(guò)編寫(xiě)算法來(lái)設(shè)置模型的層次級(jí)數(shù)和顯示精度,用戶設(shè)置完數(shù)據(jù)后,最終在保證用戶體驗(yàn)的情況下,提升場(chǎng)景的渲染效率。
該技術(shù)常用于游戲軟件中,在盡可能保證游戲大場(chǎng)景原汁原味的前提下,保證低配置玩家也能和所有玩家一起體驗(yàn)游戲所帶來(lái)的樂(lè)趣。
目前,對(duì)于場(chǎng)景性能優(yōu)化,提升渲染效率主要有以下幾種主要的技術(shù)路線:
1、美術(shù)工作人員對(duì)每一套原始多面體模型手動(dòng)創(chuàng)建幾套不同模型精度的模型,將這幾套模型全部導(dǎo)入場(chǎng)景中,程序運(yùn)行時(shí)根據(jù)用戶在顯示環(huán)境中所處的位置和重要程度,選擇當(dāng)前渲染哪種精度模型。
2、程序人員在美術(shù)人員導(dǎo)入的模型上,手動(dòng)設(shè)置每個(gè)模型的LOD顯示級(jí)別。
3、當(dāng)前模型簡(jiǎn)化算法的簡(jiǎn)化標(biāo)準(zhǔn)的用戶體驗(yàn)較低,常用于簡(jiǎn)化單個(gè)模型或部分模型。
上述方案中,美術(shù)工作人員對(duì)每一套原始多面體模型手動(dòng)創(chuàng)建幾套不同模型精度的模型,模型級(jí)數(shù)和精度標(biāo)準(zhǔn)一經(jīng)確定如要更改,需要美術(shù)人員依照新標(biāo)準(zhǔn)重新制作模型,工作量大。
美術(shù)人員將模型導(dǎo)入場(chǎng)景后,需要程序人員手工對(duì)每個(gè)模型進(jìn)行LOD級(jí)數(shù)設(shè)置,工作量大。如果模型級(jí)數(shù)和精度需要更改,需要程序人員重新設(shè)置,工作量大。
現(xiàn)有的模型簡(jiǎn)化算法與用戶交互程度較低,用戶無(wú)法可視化自定義模型級(jí)數(shù)和精度。而且簡(jiǎn)化模型常用于單個(gè)模型或部分模型,無(wú)法批量簡(jiǎn)化場(chǎng)景中的所有模型。
基于此,解決在三維虛擬環(huán)境中模型精度高導(dǎo)致渲染效率低的問(wèn)題,并大幅度減少美術(shù)人員和程序人員的工作量。本發(fā)明實(shí)施例提供的技術(shù)方案中,采用LOD技術(shù)和模型精簡(jiǎn)算法,用戶可視化一鍵式操作,自行設(shè)置模型精度級(jí)數(shù)和標(biāo)準(zhǔn),設(shè)置完成后,無(wú)需美術(shù)人員和程序人員進(jìn)行任何其他后續(xù)操作,程序自動(dòng)在現(xiàn)有模型精度的基礎(chǔ)上生成相應(yīng)級(jí)別精度更低的模型,且模型上自動(dòng)掛接物體和組件,模型顯示時(shí)根據(jù)所處的位置和重要程度,自動(dòng)調(diào)整物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,優(yōu)化場(chǎng)景性能,提升整個(gè)場(chǎng)景的渲染效率。下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行說(shuō)明。
圖1為三維虛擬環(huán)境中的渲染顯示方法實(shí)施流程示意圖,如圖所示,可以包括:
步驟101、在三維虛擬環(huán)境中的模型處于相機(jī)視錐體內(nèi)時(shí),確定模型與相機(jī)的距離;
步驟102、根據(jù)距離與精度級(jí)別的對(duì)應(yīng)關(guān)系,確定該模型所對(duì)應(yīng)的精度級(jí)別;
步驟103、調(diào)用該精度級(jí)別的模型進(jìn)行渲染后顯示。
下面將具體以Unity3d等為例的具體實(shí)施進(jìn)行說(shuō)明。
實(shí)施中所指的場(chǎng)景是對(duì)于要渲染的所有三維資源的集合的總稱。例如一個(gè)游戲關(guān)卡就是一個(gè)三維場(chǎng)景,場(chǎng)景中一般包含人物模型、地形模型和花草樹(shù)木等三維資源。
模型具體則是指三維場(chǎng)景中的美術(shù)模型。例如,在一個(gè)動(dòng)物園場(chǎng)景中,要顯示的一只老虎的美術(shù)資源就可以稱為老虎模型。
簡(jiǎn)言之,場(chǎng)景是模型的容器,模型在場(chǎng)景中存放。
模型的精度級(jí)別是定義的,例如可以定義一級(jí)顯示最清楚,此時(shí)場(chǎng)景中的模型的精度級(jí)別為最高精度模型,二級(jí)模型顯示一般,此時(shí)場(chǎng)景中模型的精度級(jí)別為一般精度模型,三級(jí)模型顯示最模糊,此時(shí)場(chǎng)景中模型的精度級(jí)別為低精度模型等。圖2為不同精度級(jí)別的模型示意圖,具體精度的感知差別可以如圖所示。
下面對(duì)實(shí)施實(shí)施中涉及到的相機(jī)以及視錐體等概念進(jìn)行說(shuō)明。
在unity3d中,相機(jī)是一個(gè)場(chǎng)景中必不可少的元素,相機(jī)就像是人的眼睛,三維場(chǎng)景的呈現(xiàn),最后還是要通過(guò)相機(jī)來(lái)實(shí)現(xiàn)的。相機(jī)這個(gè)類在3D游戲中是必不可少的,因?yàn)?D游戲是一個(gè)立體的世界,在3D游戲中的攝像機(jī)就相當(dāng)于是用戶的眼睛,通過(guò)它用戶可以觀察整個(gè)的游戲世界。相機(jī)相當(dāng)于人的眼睛,人在用眼睛看物體的時(shí)候,可以從理論上的任意位置,以任意的角度觀察物體,所以物體的形狀會(huì)受到相機(jī)的位置、旋轉(zhuǎn)角度的影響而影響。
一般來(lái)說(shuō)在3D游戲中相機(jī)有三種使用方式:自由相機(jī)、第一人稱相機(jī)、第三人稱相機(jī)。
自由相機(jī),這種類型的相機(jī)一般都多用在即時(shí)戰(zhàn)略類型的游戲中,比如魔獸爭(zhēng)霸3用的就是自由相機(jī),這類相機(jī)可以隨著鼠標(biāo)的移動(dòng)而移動(dòng),能夠看到游戲場(chǎng)景中的任何位置。
第一人稱的相機(jī),這種相機(jī)相當(dāng)于是眼睛看到的東西,這種相機(jī)多用在FPS類型的游戲中,像《使命的召喚》就是這類相機(jī)。
第三人稱的相機(jī),這類的相機(jī)多應(yīng)用在MMORPG類型游戲中,這種類型的游戲是最最常見(jiàn)的游戲類型,現(xiàn)在大多數(shù)的網(wǎng)游都是這樣的相機(jī),它其實(shí)就是把第一人稱的相機(jī)的位置設(shè)定在用戶控制的角色身后一定距離的位置上,以便用戶能看清自己操控的游戲角色,其實(shí)現(xiàn)和第一人稱相機(jī)類似,就是在得到角色位置賦值給相機(jī)后再把相機(jī)的位置加上個(gè)偏移量就可以了。
視錐體(frustum),是指場(chǎng)景中相機(jī)的可見(jiàn)的一個(gè)錐體范圍。它有上、下、左、右、近、遠(yuǎn),共6個(gè)面組成。在視錐體內(nèi)的景物可見(jiàn),反之則不可見(jiàn)。為提高性能,只對(duì)其中與視錐體有交集的對(duì)象進(jìn)行繪制。
在計(jì)算出視錐體六個(gè)面的空間平面方程后,將點(diǎn)坐標(biāo)分別代入六個(gè)面的平面方程做比較,則可以判斷點(diǎn)是否在視錐體內(nèi)。例如:
空間平面方程可表示為:
Ax+By+Cz=0
對(duì)于點(diǎn)(x1,y1,z1),有:
若Ax1+By1+Cz1=0,則點(diǎn)在平面上;
若Ax1+By1+Cz1<0,則點(diǎn)在平面的一側(cè);
若Ax1+By1+Cz1=0,則點(diǎn)在平面的另一側(cè)。
若需判斷節(jié)點(diǎn)(例如模型)是否在視錐內(nèi),可以通過(guò)各種包圍體方法求出近似包圍體,對(duì)包圍體上的各個(gè)點(diǎn)對(duì)視錐六個(gè)面作判斷,存在以下三種情況:
如果所有頂點(diǎn)都在視錐范圍內(nèi),則待判區(qū)域一定在視錐范圍內(nèi);
如果只有部分頂點(diǎn)在視錐范圍內(nèi),則待判區(qū)域與視錐體相交,同樣可以視為可見(jiàn);
如果所有頂點(diǎn)都不在視錐范圍內(nèi),那么待判區(qū)域很可能不可見(jiàn)了,但有一種情況例外,就是視錐體在長(zhǎng)方體以內(nèi),這種情況需要加以區(qū)分。
在了解了相機(jī)以及視錐體后,容易理解如何判斷模型是否處于相機(jī)視錐體內(nèi),也容易明了模型與相機(jī)的距離的實(shí)施。
如前所述,每個(gè)模型都有若干個(gè)精度級(jí)別的模型,按照與距離的關(guān)系,例如距離越近精度級(jí)別越高等,在確定該模型所對(duì)應(yīng)的精度級(jí)別后,調(diào)用該精度級(jí)別的模型進(jìn)行渲染后顯示即可。
這樣,在三維場(chǎng)景中,對(duì)場(chǎng)景中已有的三維資源進(jìn)行處理。三維場(chǎng)景來(lái)存放三維美術(shù)資源,相機(jī)用來(lái)控制顯示哪部分美術(shù)資源,LOD則用來(lái)控制要顯示的美術(shù)資源的精度,那么,在實(shí)施中,根據(jù)相機(jī)(攝像機(jī))的視錐體即可確定場(chǎng)景中哪部分資源需要渲染到屏幕上給用戶最終看見(jiàn)。
實(shí)施中,還可以進(jìn)一步包括:
若模型處于相機(jī)視錐體外,不對(duì)該模型進(jìn)行渲染后顯示。
也即,根據(jù)相機(jī)的視錐體來(lái)確定場(chǎng)景中哪部分資源要渲染到屏幕上給用戶最終看見(jiàn),在視錐體中的美術(shù)資源才渲染,不在視錐體中的美術(shù)資源不渲染。
實(shí)施中,一個(gè)場(chǎng)景中會(huì)包括若干模型,既可以同時(shí)去確定每一個(gè)模型是否在視錐體內(nèi),也可以一個(gè)一個(gè)模型的去確定是否在視錐體內(nèi),也即,確定模型與相機(jī)的距離時(shí),是同時(shí)在三維虛擬環(huán)境中的若干模型中確定處于相機(jī)視錐體內(nèi)的各模型后,確定每一個(gè)模型與相機(jī)的距離;
或,是在三維虛擬環(huán)境中的各模型中分別確定處于相機(jī)視錐體內(nèi)的每一個(gè)模型后,確定每一個(gè)模型與相機(jī)的距離。
下面對(duì)每一個(gè)模型的各個(gè)精度級(jí)別的模型之間的關(guān)系及實(shí)施進(jìn)行說(shuō)明。
在計(jì)算機(jī)圖形學(xué)中,三維場(chǎng)景中要顯示的三維模型都是由三角形組合而成,模型的組成三角形越多,模型顯示越精細(xì),系統(tǒng)渲染開(kāi)銷越大;三角形越少,模型顯示越簡(jiǎn)單,系統(tǒng)渲染開(kāi)銷越小。
圖3為Mesh示例1示意圖,圖4為Mesh示例2示意圖,如圖所示,Mesh(網(wǎng)格組件)是模型的網(wǎng)格,3D模型是由多邊形拼接而成,一個(gè)復(fù)雜的多邊形,實(shí)際上是由多個(gè)三角面拼接而成。所以一個(gè)3D模型的表面是由多個(gè)彼此相連的三角面構(gòu)成。三維空間中,構(gòu)成這些三角面的點(diǎn)以及三角形的邊的集合就是Mesh。
實(shí)施中,在確定模型與相機(jī)的距離前,還可以進(jìn)一步包括:
生成各精度級(jí)別的模型。
具體的,精度級(jí)別不同的模型也即包含的三角形數(shù)量不同,同樣形狀包含數(shù)量越多則精度越高,畫(huà)面表現(xiàn)為越精細(xì),具體可以參見(jiàn)圖2所示。
實(shí)施中,生成各精度級(jí)別的模型,可以包括:
確定最高級(jí)別的精度的模型;
依據(jù)所需的各級(jí)別精度的模型數(shù)量,按照簡(jiǎn)化模型依次生成確定各級(jí)別的精度的模型。
實(shí)施中,最高精度模型可以是場(chǎng)景中原有的模型。
例如,用戶將模型顯示級(jí)數(shù)設(shè)置為三,在一級(jí)時(shí)精度為100%,此時(shí)顯示100%的原始高精度模型;二級(jí)時(shí)設(shè)置精度為70%,此時(shí)模型的面數(shù)通過(guò)算法簡(jiǎn)化為原始模型的70%;三級(jí)時(shí)設(shè)置精度為50%,此時(shí)模型的面數(shù)通過(guò)算法簡(jiǎn)化為原始模型的50%。模型精度越低,模型顯示越模糊,顯卡等系統(tǒng)渲染開(kāi)銷越小。
具體實(shí)施中,可以采用邊坍塌法或頂點(diǎn)剔除法等生成低精度的模型,如前所述,精度級(jí)別的高低與包含的三角形有關(guān),因此,其它類似的處理也是能夠達(dá)到同樣的效果的。
1、邊坍塌法
邊坍塌法的思想是將相鄰的幾個(gè)三角形通過(guò)刪除共用邊的方式來(lái)合并三角形,將多個(gè)三角形變成一個(gè)三角形,最終達(dá)到精簡(jiǎn)模型的目的。
圖5為邊坍塌法效果示意圖,如圖所示,在將圖5左邊的圖像處理為右邊的圖形時(shí),選擇u和v兩個(gè)頂點(diǎn)(邊uv),使頂點(diǎn)u“移動(dòng)”(“坍塌”)到另一個(gè)頂點(diǎn)是v。實(shí)現(xiàn)的步驟:
1.去除所有既包含頂點(diǎn)u又包含頂點(diǎn)v的三角形(即去除所有以u(píng)v為邊的三角形)。
2.更新所有剩下的三角形,把所有用到頂點(diǎn)u的地方都用頂點(diǎn)v代替。
3.移除頂點(diǎn)u。
重復(fù)以上的過(guò)程,直到多邊形的數(shù)量達(dá)到了預(yù)期數(shù)量。每一次重復(fù)的過(guò)程中,通常會(huì)移除一個(gè)頂點(diǎn)、兩個(gè)面、三條邊。
2、頂點(diǎn)去除法
圖6為頂點(diǎn)去除法效果示意圖,如圖所示,在將圖6左邊的圖像處理為右邊的圖形時(shí),對(duì)每一個(gè)頂點(diǎn)進(jìn)行分析判斷,如果滿足條件,則將其刪除,對(duì)形成的空洞三角化。
實(shí)施中,在確定模型與相機(jī)的距離前,還可以進(jìn)一步包括:
將高精度級(jí)別的模型上的組件和/或物體掛接于相應(yīng)的模型。
具體的,在Unity3d中,場(chǎng)景的組成單元為物體,物體上的功能(例如物理碰撞,自動(dòng)尋路功能等)通過(guò)掛接相應(yīng)組件來(lái)實(shí)現(xiàn)。組件(Component)、物體(GameObject)是Unity3d引擎中的名詞。組件是模型上附帶的實(shí)現(xiàn)其他功能(例如檢測(cè)碰撞、自動(dòng)尋路功能等)的代碼的簡(jiǎn)稱;物體是unity3d場(chǎng)景中的基本單元。
一個(gè)美術(shù)資源模型導(dǎo)入unity3d中后就是一個(gè)物體。物體可以有子物體。將組件和物體掛接于模型上,其目的是在unity3d中,為了保證程序邏輯和美術(shù)資源的完整性,將高精度模型上附有的原有資源(原有的組件和子模型)都原封不動(dòng)的拷貝到新生成的低精度模型上。
掛接是指將組件等依附到場(chǎng)景物體上,其作用是將組件和場(chǎng)景物體關(guān)聯(lián)起來(lái),保證組件的功能運(yùn)行于這個(gè)場(chǎng)景物體上??梢栽赨nity3d中通過(guò)手動(dòng)拖放到場(chǎng)景模型上,也可以通過(guò)代碼運(yùn)行時(shí)給場(chǎng)景物體添加。例如有個(gè)組件代碼其功能是控制物體隱藏,將該組件拖放到場(chǎng)景物體A上,然后運(yùn)行程序,物體A就隱藏了,如果不拖放該組件到物體A上,運(yùn)行程序,物體A就可見(jiàn)。
實(shí)施中,所述精度級(jí)別和/或所需的各級(jí)別精度的模型數(shù)量是根據(jù)用戶需要設(shè)置的。
由上述實(shí)施可見(jiàn),在Unity3d中,目前通過(guò)手動(dòng)的方法來(lái)實(shí)現(xiàn)LOD技術(shù),無(wú)法自動(dòng)實(shí)現(xiàn)LOD技術(shù),而在上面的處理過(guò)程中,可以通過(guò)程序代碼自動(dòng)生成各種精度級(jí)別的模型,用于后續(xù)的渲染顯示,因此可以通過(guò)程序代碼實(shí)現(xiàn)LOD技術(shù),不需要手動(dòng)設(shè)置,從而“自動(dòng)”實(shí)現(xiàn)LOD技術(shù)。
下面通過(guò)實(shí)例來(lái)進(jìn)行說(shuō)明。
圖7為場(chǎng)景渲染顯示實(shí)施流程示意圖,假設(shè)在一個(gè)場(chǎng)景中,包括若干模型(假設(shè)包括:模型A、模型B、模型C;模型精度級(jí)別由低到高依次分別有:精度I、精度II、精度III),則如圖所示,可以如下:
步驟701、用戶選擇模型級(jí)數(shù)和精度。
具體的,假設(shè):用戶選擇自己需要的模型的精度III,其它級(jí)別為:精度I、精度II。
步驟702、遍歷場(chǎng)景中所有模型。
步驟703、批量生成對(duì)應(yīng)精度的模型,并將組件和物體掛接到模型上。
具體的,生成對(duì)應(yīng)精度III的模型A、模型B、模型C,精度III的模型A、模型B、模型C上存在組件和物體;
批量生成對(duì)應(yīng)精度I的模型A、模型B、模型C,并將組件和物體掛接到對(duì)應(yīng)的模型A、模型B、模型C;
批量生成對(duì)應(yīng)精度II的模型A、模型B、模型C,并將組件和物體掛接到對(duì)應(yīng)的模型A、模型B、模型C。
步驟704、程序自動(dòng)將不同精度的模型對(duì)應(yīng)到LOD Group中不同的級(jí)別。
具體的,對(duì)于LOD Group,lod的原理就是利用相機(jī)離模型的遠(yuǎn)近來(lái)計(jì)算顯示多少精度的模型,具體使用可以如下:
1、首先建立一個(gè)空物體;
2、然后將準(zhǔn)備的高模和簡(jiǎn)模(可以多個(gè)簡(jiǎn)模)放到他的子物體里;
3、在空物體上添加一個(gè)LOD Group;
4、圖例滑條100%是高模,有幾個(gè)不同度模型就算幾個(gè)級(jí)別;
5、將對(duì)應(yīng)的模型拖到渲染組。
下面設(shè)定相機(jī),設(shè)定相機(jī)時(shí),相機(jī)的位置可以由用戶根據(jù)需求來(lái)具體設(shè)置,設(shè)置好以后,確定相機(jī)的視錐體,然后繼續(xù)下面流程:
步驟705、判斷是否在視錐體范圍內(nèi),是則轉(zhuǎn)入步驟706,否則結(jié)束。
步驟706、判斷各模型距離相機(jī)的距離。
步驟707、根據(jù)距離調(diào)用對(duì)應(yīng)精度級(jí)別的模型。
例如:
模型B距離為近,調(diào)用對(duì)應(yīng)精度級(jí)別最高的精度III的模型B。
模型A距離為中,調(diào)用對(duì)應(yīng)精度級(jí)別為中的精度II的模型A。
模型C距離為遠(yuǎn),調(diào)用對(duì)應(yīng)精度級(jí)別最低的精度I的模型C。
步驟708、對(duì)模型渲染繪制,顯示。
上述實(shí)施中,用戶選擇場(chǎng)景,根據(jù)需求選擇要顯示的模型級(jí)數(shù),并依據(jù)級(jí)數(shù)設(shè)置模型簡(jiǎn)化的精度范圍(可采用常用的邊坍塌法或頂點(diǎn)剔除法)生成低精度的模型,并將組件和物體掛接于模型上。然后,對(duì)于所有模型,首先判斷是否在攝像機(jī)的視錐體范圍內(nèi),如果不在,不進(jìn)行渲染。對(duì)于在相機(jī)視錐體內(nèi)的模型,應(yīng)用LOD技術(shù),判斷相機(jī)與要顯示模型之間的距離。根據(jù)距離的遠(yuǎn)近,調(diào)用細(xì)節(jié)層次模型,遠(yuǎn)距離調(diào)用精度低的模型,近距離調(diào)用精度高的模型,最終在屏幕上渲染出來(lái)。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例中還提供了一種三維虛擬環(huán)境中的渲染顯示裝置,由于該裝置解決問(wèn)題的原理與一種三維虛擬環(huán)境中的渲染顯示方法相似,因此該裝置的實(shí)施可以參見(jiàn)方法的實(shí)施,重復(fù)之處不再贅述。
圖8為三維虛擬環(huán)境中的渲染顯示裝置結(jié)構(gòu)示意圖,如圖所示,可以包括:
距離確定模塊801,用于在三維虛擬環(huán)境中的模型處于相機(jī)視錐體內(nèi)時(shí),確定模型與相機(jī)的距離;
精度級(jí)別確定模塊802,用于根據(jù)距離與精度級(jí)別的對(duì)應(yīng)關(guān)系,確定該模型所對(duì)應(yīng)的精度級(jí)別;
渲染顯示模塊803,用于調(diào)用該精度級(jí)別的模型進(jìn)行渲染后顯示。
實(shí)施中,距離確定模塊進(jìn)一步用于確定模型與相機(jī)的距離時(shí),是同時(shí)在三維虛擬環(huán)境中的若干模型中確定處于相機(jī)視錐體內(nèi)的各模型后,確定每一個(gè)模型與相機(jī)的距離;或,是在三維虛擬環(huán)境中的各模型中分別確定處于相機(jī)視錐體內(nèi)的每一個(gè)模型后,確定每一個(gè)模型與相機(jī)的距離。
實(shí)施中,渲染顯示模塊進(jìn)一步用于若模型處于相機(jī)視錐體外,不對(duì)該模型進(jìn)行渲染后顯示。
實(shí)施中,進(jìn)一步包括:
模型生成模塊804,用于在確定模型與相機(jī)的距離前,生成各精度級(jí)別的模型。
實(shí)施中,模型生成模塊進(jìn)一步用于在確定模型與相機(jī)的距離前,將高精度級(jí)別的模型上的組件和/或物體掛接于相應(yīng)的模型。
實(shí)施中,模型生成模塊進(jìn)一步用于在生成各精度級(jí)別的模型時(shí),包括:
確定最高級(jí)別的精度的模型;
依據(jù)所需的各級(jí)別精度的模型數(shù)量,按照簡(jiǎn)化模型依次生成確定各級(jí)別的精度的模型。
實(shí)施中,模型生成模塊進(jìn)一步用于根據(jù)用戶需要設(shè)置所述精度級(jí)別和/或所需的各級(jí)別精度的模型數(shù)量。
為了描述的方便,以上所述裝置的各部分以功能分為各種模塊或單元分別描述。當(dāng)然,在實(shí)施本發(fā)明時(shí)可以把各模塊或單元的功能在同一個(gè)或多個(gè)軟件或硬件中實(shí)現(xiàn)。
在實(shí)施本發(fā)明實(shí)施例提供的技術(shù)方案時(shí),可以按如下方式實(shí)施。
一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包括與具有顯示器的便攜電子設(shè)備結(jié)合使用的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序可被處理器執(zhí)行以如下所述的方法:
在三維虛擬環(huán)境中的模型處于相機(jī)視錐體內(nèi)時(shí),確定模型與相機(jī)的距離;
根據(jù)距離與精度級(jí)別的對(duì)應(yīng)關(guān)系,確定該模型所對(duì)應(yīng)的精度級(jí)別;
調(diào)用該精度級(jí)別的模型進(jìn)行渲染后顯示。
實(shí)施中,確定模型與相機(jī)的距離時(shí),是同時(shí)在三維虛擬環(huán)境中的若干模型中確定處于相機(jī)視錐體內(nèi)的各模型后,確定每一個(gè)模型與相機(jī)的距離;
或,是在三維虛擬環(huán)境中的各模型中分別確定處于相機(jī)視錐體內(nèi)的每一個(gè)模型后,確定每一個(gè)模型與相機(jī)的距離。
實(shí)施中,進(jìn)一步包括:
若模型處于相機(jī)視錐體外,不對(duì)該模型進(jìn)行渲染后顯示。
實(shí)施中,在確定模型與相機(jī)的距離前,進(jìn)一步包括:
生成各精度級(jí)別的模型。
實(shí)施中,在確定模型與相機(jī)的距離前,進(jìn)一步包括:
將高精度級(jí)別的模型上的組件和/或物體掛接于相應(yīng)的模型。
實(shí)施中,生成各精度級(jí)別的模型,包括:
確定最高級(jí)別的精度的模型;
依據(jù)所需的各級(jí)別精度的模型數(shù)量,按照簡(jiǎn)化模型依次生成確定各級(jí)別的精度的模型。
實(shí)施中,所述精度級(jí)別和/或所需的各級(jí)別精度的模型數(shù)量是根據(jù)用戶需要設(shè)置的。
綜上所述,在本發(fā)明實(shí)施例提供的技術(shù)方案中,用戶將可以通過(guò)一鍵式操作,自主設(shè)置模型精度標(biāo)準(zhǔn),輸入后程序動(dòng)態(tài)生成場(chǎng)景中所有模型的相應(yīng)精度標(biāo)準(zhǔn)的模型,且模型上自動(dòng)掛接相應(yīng)的物體和組件,極大的節(jié)省美術(shù)人員和程序人員的工作量。在場(chǎng)景渲染時(shí)采用LOD技術(shù),讓系統(tǒng)根據(jù)模型距離相機(jī)的遠(yuǎn)近和重要程度選擇渲染相應(yīng)精度標(biāo)準(zhǔn)的模型,優(yōu)化場(chǎng)景性能,提升整個(gè)場(chǎng)景的渲染效率。方案可以通過(guò)算法批量動(dòng)態(tài)生成各種不同精度的模型,并通過(guò)LOD技術(shù)渲染顯示。相比傳統(tǒng)方式,用戶通過(guò)簡(jiǎn)單的界面操作,自定義精度標(biāo)準(zhǔn),動(dòng)態(tài)生成不同精度的模型,節(jié)省美術(shù)和程序人員工作量,并提升系統(tǒng)的渲染效率。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。