本發(fā)明涉及3D渲染技術(shù)和大規(guī)模場(chǎng)景領(lǐng)域,特別涉及一種3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景的方法及系統(tǒng)。
背景技術(shù):
近年來(lái),實(shí)時(shí)的游戲畫(huà)面渲染有了很大的改進(jìn)。最新的光影技術(shù)——?jiǎng)討B(tài)光源和實(shí)時(shí)輻射的出現(xiàn)大大改觀了游戲畫(huà)面的光影效果;沖擊測(cè)繪和三維模型的LOD技術(shù)提高了游戲畫(huà)面的精細(xì)度,在Doom 3的引擎中,利用高精度角色模型(100,000+多邊形)得到其驚喜的紋理貼圖和法向貼圖,在游戲渲染時(shí)把得到的紋理貼圖放到低精度的角色模型(<5000多邊形)渲染,這樣在保持實(shí)時(shí)渲染的基礎(chǔ)上大大改進(jìn)了畫(huà)面的渲染效果。
三維場(chǎng)景的實(shí)時(shí)渲染技術(shù)主要有兩大類:基于幾何的渲染技術(shù)和基于圖像的渲染技術(shù)。其中基于幾何的渲染技術(shù)的三維場(chǎng)景,由被定義了多重屬性的空間多邊形集合體構(gòu)成,這些多邊形幾何體上都定義了顏色值、反射度、透明度和相關(guān)的光照參數(shù)等等。基于圖像的渲染技術(shù),其渲染場(chǎng)景是用一組光線映射函數(shù)(Plenoptic Function)來(lái)描述的。在現(xiàn)在的3D游戲引擎和商業(yè)3D圖像軟件中,一般都采用基于幾何的渲染技術(shù)。游戲中常用的技術(shù)包括以下三個(gè):
1)光影技術(shù)。目前,計(jì)算機(jī)圖形學(xué)中的光照模型很多,根據(jù)光照模型的特點(diǎn),大致可分為局部光照模型和全局光照模型兩類。在三維圖形渲染中,多邊形頂點(diǎn)上的點(diǎn)的光照顏色值是通過(guò)光照模型計(jì)算得到,多邊形內(nèi)部點(diǎn)的光照顏色值是通過(guò)多邊形各定點(diǎn)上的光照顏色值插值生成,即:我們所說(shuō)的著色技術(shù),各種著色算法不同得到的渲染效果的真實(shí)感差異很大。通過(guò)多邊形頂點(diǎn)和多邊形內(nèi)部采用不同的算法計(jì)算光照顏色值,能在大大加速多邊形幾何體場(chǎng)景的渲染工作。
2)場(chǎng)景篩選。在做圖形渲染之前,整個(gè)游戲場(chǎng)景中的模型一般都需要做必要的篩選,提出場(chǎng)景中看不到的多邊形,避免不必要的額外渲染工作,這樣能很大程度的提高整個(gè)游戲場(chǎng)景的實(shí)時(shí)渲染數(shù)度,提高游戲引擎的渲染幀率。
3)紋理貼圖技術(shù)。在幾何體的多邊形上面附加圖像信息(即:圖像紋理)能讓虛擬三維場(chǎng)景的視覺(jué)效果更加逼真。通常一張紋理圖像要映射到多個(gè)多邊形網(wǎng)絡(luò)上,多層紋理技術(shù)能提高實(shí)時(shí)渲染速度和渲染畫(huà)面的質(zhì)量,但會(huì)占用更多的內(nèi)存空間。紋理壓縮技術(shù)能大幅度減小紋理空間的同時(shí)有能保留原有的圖像信息,在現(xiàn)代3D渲染技術(shù)中,紋理壓縮技術(shù)應(yīng)用的非常多。壓縮后的紋理占用更少的游戲CD空間,更重要的是,他占用更少的內(nèi)存和3D顯卡的內(nèi)存空間。
隨著3D大規(guī)模場(chǎng)景游戲技術(shù)的不斷發(fā)展,對(duì)場(chǎng)景的大規(guī)模性、真實(shí)性等不斷提出更新更高的要求。然而,對(duì)大規(guī)模的場(chǎng)景進(jìn)行真實(shí)、實(shí)時(shí)渲染一直以來(lái)都是圖形學(xué)界所面對(duì)的一個(gè)熱點(diǎn)和難點(diǎn)問(wèn)題。
目前,由于Linux操作系統(tǒng)平臺(tái)的大力推廣,基于Linux的各種應(yīng)用軟件也不斷壯大,因此基于跨平臺(tái)圖形庫(kù)的跨平臺(tái)三維游戲開(kāi)發(fā)也越來(lái)越受重視。OpenGL(open graphics library)是一種獨(dú)立的平臺(tái)無(wú)關(guān)的三維圖形開(kāi)發(fā)庫(kù),在各種語(yǔ)言下進(jìn)行主框架開(kāi)發(fā)并結(jié)合應(yīng)用OpenGL函數(shù)都可以開(kāi)發(fā)出三維游戲。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題是,以大規(guī)模場(chǎng)景對(duì)真實(shí)感和實(shí)時(shí)性的要求、魯棒性和易于實(shí)現(xiàn)三個(gè)標(biāo)準(zhǔn)進(jìn)行分析,提出了適用于游戲中實(shí)時(shí)渲染大規(guī)模場(chǎng)景的解決方案。
解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景系統(tǒng),包括:地形管理模塊、場(chǎng)景模塊、光影特效模塊以及場(chǎng)景支持模塊,
所述地形管理模塊,用以根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染;
所述場(chǎng)景模塊,用以渲染大規(guī)模場(chǎng)景中的不同場(chǎng)景元素;
所述光影特效模塊,用以增強(qiáng)所述大規(guī)模場(chǎng)景中的全局光照和軟陰影;
所述場(chǎng)景支持模塊,用以提供上述地形管理模塊、場(chǎng)景模塊以及光影特效模塊的中運(yùn)算環(huán)境和封裝。
更進(jìn)一步,所述地形管理模塊具體基于四叉樹(shù)的靜態(tài)LOD地形算法:
按照四叉樹(shù)數(shù)據(jù)結(jié)構(gòu)構(gòu)建四叉樹(shù)地形,
遍歷所述四叉樹(shù)的節(jié)點(diǎn),更新索引緩沖然后修補(bǔ)地形裂縫。
更進(jìn)一步,所述光影特效模塊中增強(qiáng)所述大規(guī)模場(chǎng)景中的全局光照的方法進(jìn)一步包括:
基于Blinn-Phong光照模型,實(shí)現(xiàn)Direct GI直接全局光照,
基于CLPV算法(Cascaded Light Propagation Volumes,層次化光傳播體),實(shí)現(xiàn)Indirect GI間接全局光照。
更進(jìn)一步,所述光影特效模塊中增強(qiáng)所述大規(guī)模場(chǎng)景中的軟陰影基于下述的PCSS百分比靠近算法:
4.1)遮擋物查找,對(duì)一個(gè)接收點(diǎn)著色時(shí),在深度圖上確定搜索區(qū)域,查找區(qū)域內(nèi)的點(diǎn)的深度值,并計(jì)算出比該接收點(diǎn)與光源的距離更小的深度值的均值;
4.2)半影區(qū)域大小的確定,所述半影區(qū)域的大小由光源大小、遮擋物和接收點(diǎn)的距離以及遮擋物與光源的距離確定:
4.3)濾波,根據(jù)所述步驟4.2)計(jì)算得到的半影區(qū)域大小作為濾波的大小,并使用PCF方法進(jìn)行濾波。
更進(jìn)一步,所述場(chǎng)景模塊中的場(chǎng)景元素至少包括:{天空、植被、車輛、地形、賽道}。
更進(jìn)一步,所述地形管理模塊,還用以在加載地形時(shí),分別計(jì)算出視點(diǎn)均勻分布在地形的64個(gè)部分的2個(gè)高度的LOD頂點(diǎn)索引,并將128個(gè)LOD頂點(diǎn)索引存儲(chǔ)為lod文件;
以及,還用以在渲染地形時(shí),根據(jù)視點(diǎn)的位置判斷當(dāng)前幀所用的lod文件,將文件解析為頂點(diǎn)索引緩沖。
基于上述本發(fā)明還提供了一種3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景實(shí)現(xiàn)方法,在打開(kāi)大規(guī)模場(chǎng)景時(shí),包括如下步驟:
根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染;
渲染所述大規(guī)模場(chǎng)景中的不同場(chǎng)景元素,用以提高大規(guī)模場(chǎng)景的實(shí)時(shí)性;
并且,增強(qiáng)所述大規(guī)模場(chǎng)景中的全局光照和軟陰影,用以增加所述大規(guī)模場(chǎng)景真實(shí)感。
更進(jìn)一步,根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染時(shí),基于四叉樹(shù)的靜態(tài)LOD地形算法提高所述大規(guī)模場(chǎng)景的渲染速度。
更進(jìn)一步,根據(jù)PCSS算法,增強(qiáng)所述大規(guī)模場(chǎng)景中的軟陰影。
更進(jìn)一步,上述大規(guī)模場(chǎng)景的地形大小為1024*1024,以滿足幀速率至少為30fps
本發(fā)明的有益效果:
1)本發(fā)明的3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景系統(tǒng),由于包括所述地形管理模塊,用以根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染;所述場(chǎng)景模塊,用以渲染大規(guī)模場(chǎng)景中的不同場(chǎng)景元素;所述光影特效模塊,用以增強(qiáng)所述大規(guī)模場(chǎng)景中的全局光照和軟陰影;所述場(chǎng)景支持模塊,用以提供上述地形管理模塊、場(chǎng)景模塊以及光影特效模塊的中運(yùn)算環(huán)境和封裝。從而能夠使得大規(guī)模場(chǎng)景能夠滿足:真實(shí)感和實(shí)時(shí)性、魯棒性和易于實(shí)現(xiàn)的要求。從游戲分析、游戲設(shè)計(jì)著手,劃分出渲染系統(tǒng)的模塊;通過(guò)對(duì)每個(gè)模塊的詳細(xì)設(shè)計(jì)與分析,結(jié)合提出的解決方案,最終利用OpenGL開(kāi)發(fā)實(shí)現(xiàn)了3D大規(guī)模場(chǎng)景游戲的實(shí)時(shí)渲染系統(tǒng)。
2)采用本發(fā)明的方法,對(duì)三維渲染中增強(qiáng)實(shí)時(shí)性和真實(shí)感的技術(shù)進(jìn)行調(diào)研,以魯棒性和易于實(shí)現(xiàn)作為標(biāo)準(zhǔn)分析出適用于渲染大規(guī)模游戲場(chǎng)景的算法,能夠?qū)ο嚓P(guān)開(kāi)發(fā)者提供借鑒和參考。
3)目前越來(lái)越受重視的Linux操作系統(tǒng)下的游戲開(kāi)發(fā)在國(guó)內(nèi)占少數(shù)。相比于只適用于Windows平臺(tái)的DirectX,OpenGL在跨平臺(tái)應(yīng)用開(kāi)發(fā)中具有一定的優(yōu)勢(shì)。本發(fā)明使用OpenGL開(kāi)發(fā),填補(bǔ)了國(guó)內(nèi)跨平臺(tái)三維游戲開(kāi)發(fā)的空白。
附圖說(shuō)明
圖1是本發(fā)明3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景實(shí)現(xiàn)方法流程示意圖;
圖3(a)、(b)是Blinn-Phong模型效果示意圖;
圖4是PCSS軟陰影效果示意圖。
圖5(a)、(b)是PCSS軟陰影效果示意圖。
圖6是實(shí)現(xiàn)靜態(tài)LOD地形的流程圖;
圖7所示是程序中定義的四叉樹(shù)結(jié)構(gòu)體示意圖;
圖8所示是四叉樹(shù)節(jié)點(diǎn)的huffman碼示意圖;
圖9是LOD地形效果圖;
圖10所示是天空盒紋理示意圖;
圖11所示是植被紋理圖;
圖12是兩種草和一種花的分布圖;
圖13是兩種樹(shù)的分布圖。
具體實(shí)施方式
現(xiàn)在將參考一些示例實(shí)施例描述本公開(kāi)的原理??梢岳斫?,這些實(shí)施例僅出于說(shuō)明并且?guī)椭绢I(lǐng)域的技術(shù)人員理解和實(shí)施例本公開(kāi)的目的而描述,而非建議對(duì)本公開(kāi)的范圍的任何限制。在此描述的本公開(kāi)的內(nèi)容可以以下文描述的方式之外的各種方式實(shí)施。
如本文中所述,術(shù)語(yǔ)“包括”及其各種變體可以被理解為開(kāi)放式術(shù)語(yǔ),其意味著“包括但不限于”。術(shù)語(yǔ)“基于”可以被理解為“至少部分地基于”。術(shù)語(yǔ)“一個(gè)實(shí)施例”可以被理解為“至少一個(gè)實(shí)施例”。術(shù)語(yǔ)“另一實(shí)施例”可以被理解為“至少一個(gè)其它實(shí)施例”。
在本申請(qǐng)中的主要專業(yè)術(shù)語(yǔ)及其英文縮略詞:
GI:GlobalIllumination,全局光照。
Direct GI:Direct Global Illumination,直接全局光照。
Indirect GI:Indirect Global Illumination,間接全局光照。
lod文件:本文所用的lod文件,其格式等同于文本文件,用于存儲(chǔ)索引緩沖。
AO:Ambient Occlusion,環(huán)境遮擋。
GLSL:The OpenGL Shading Language。
Huffman編碼:一種編碼方式,是一種用于無(wú)損數(shù)據(jù)壓縮的熵編碼(權(quán)編碼)算法。
可以理解,在本申請(qǐng)中涉及的算法概述如下:
●全局光照算法
目前存在很多全局光照算法,其目的都是模擬或估計(jì)物體表面之間的反射效果,這些算法以其不同的優(yōu)缺點(diǎn)而適用于不同的應(yīng)用[20]。本節(jié)將介紹用于工業(yè)界計(jì)算機(jī)游戲開(kāi)發(fā)的主要的全局光照算法。
計(jì)算機(jī)游戲?qū)θ止庹账惴ǖ囊笫莾?yōu)先考慮運(yùn)行速度、其次考慮渲染效果[Jaroslav Kivnek,Marcos Fajardo,Per H.Christensen,et al.Global Illumination Across Industries.ACM SIGGRAPH 2010 Courses.2010.]。對(duì)于Direct GI,可使用OpenGL管線中使用的默認(rèn)明暗處理模型Blinn-Phong。對(duì)于Indirect GI,基于點(diǎn)的全局光照(Point-Based Global Illumination)的間接光照,區(qū)域光源可產(chǎn)生較好的效果,但該方法的運(yùn)行速度較慢,不適用于大規(guī)模場(chǎng)景[Jaroslav Kivnek,Marcos Fajardo,Per H.Christensen,et al.Global Illumination Across Industries.ACM SIGGRAPH 2010 Courses.2010.];預(yù)計(jì)算光照(Pre-computed Radiance Lighting)能夠滿足任何場(chǎng)景對(duì)運(yùn)行速度和渲染效果的要求,但場(chǎng)景必須是靜態(tài)的,不適用于交互應(yīng)用;Peter-Pike Sloan提出的ProxyPG[Peter-Pike Sloan,PNaga K.Govindaraju,Derek Nowrouzezahrai,PJohn Snyder.Image-Based Proxy Accumulation for Real-Time Soft Global Illumination.Proceedings of the 15th Pacific Conference on Computer Graphics and Applications,2007,97-105.]能滿足交互場(chǎng)景的實(shí)時(shí)渲染,但該方法需要限制場(chǎng)景的規(guī)模才能保證渲染速度,不適用于大規(guī)模場(chǎng)景;Crytek GmbH實(shí)驗(yàn)室提出的Cascaded Light Propagat ion Volumes(CLPV)[Anton Kaplanyan,Carsten Dachsbacher.Cascaded Light Propagation Volumes for Real-Time Indirect Illumination.Proceeding of the 2010 Symposium on Interactive 3D Graphics and Games,2010.]能夠?qū)崿F(xiàn)對(duì)漫反射表面的低頻Indirect GI,其運(yùn)行速度和光照效果都比較完美,該方法已經(jīng)在CryENGINE 2中使用。
●軟陰影算法
本節(jié)對(duì)于軟陰影算法作一個(gè)簡(jiǎn)單的回顧。本節(jié)內(nèi)容介紹的算法主要模擬在真實(shí)世界中的擴(kuò)展光源的作用下生成的軟陰影效果。擴(kuò)展光源的類型從遙遠(yuǎn)的環(huán)境光到區(qū)域光源不等。由于人眼對(duì)于陰影的形狀遠(yuǎn)沒(méi)有對(duì)幾何體本身的形狀敏感,尤其是對(duì)于環(huán)境光源下的軟陰影,人眼對(duì)其精確性的敏感度很低[梅春暉.基于預(yù)計(jì)算及采樣的實(shí)時(shí)高真實(shí)感圖像繪制技術(shù)研究[D].浙江大學(xué)2004]。根據(jù)這個(gè)特征,利用形狀簡(jiǎn)單的近距離光源即可生成逼真的軟陰影,以下介紹的算法主要使用這種光源。
A,準(zhǔn)確的軟陰影生成方法
目前,在包含合理光源的動(dòng)態(tài)場(chǎng)景中,最有效的算法是視點(diǎn)采樣映射(View-Sample Mapping)方法。復(fù)雜深度采樣(Depth-Complexity Sampling)方法總體計(jì)算速度更慢,僅在光源較大時(shí)比較游泳,而視點(diǎn)采樣映射在光源較大時(shí)計(jì)算量很大。遺憾的是,在這種場(chǎng)景下,不能只考慮從光源中心投下的陰影輪廓邊緣。只考慮這個(gè)因素會(huì)使更多的邊緣被轉(zhuǎn)換成四邊形圖元,從而極大增加軟陰影錐的計(jì)算開(kāi)銷。盡管如此,表述的原理可以使用改進(jìn)的遮擋物數(shù)據(jù)結(jié)構(gòu)去實(shí)現(xiàn)更有效的光線追蹤。但是目前看來(lái),這種方法更適用于離線渲染,在動(dòng)態(tài)場(chǎng)景改變時(shí)會(huì)產(chǎn)生諸多問(wèn)題。如果要求軟陰影非常準(zhǔn)確,可以使用光束追蹤,但當(dāng)圖元比較復(fù)雜時(shí)該方法的計(jì)算開(kāi)銷將非常大。生成實(shí)時(shí)交互的準(zhǔn)確軟陰影還有待研究。
B,近似的軟陰影生成方法
這種方法在目前是實(shí)時(shí)應(yīng)用中最有趣的軟陰影方法,使用合理的計(jì)算開(kāi)銷便可達(dá)到較好的軟陰影效果。百分比靠近算法(Percentage-Closer Soft Shadows,PCSS)[Randima Fernando.Percentage-closer soft shadows.In ACM SIGGRAPH 2005 Sketches,July 2005]是目前交互應(yīng)用中使用最廣的方法,比如游戲。該方法能以可接受的速度在較小的光源下生成合理的陰影。PCSS的一個(gè)重要特點(diǎn)是可以應(yīng)用于大規(guī)模場(chǎng)景并生成真實(shí)的太陽(yáng)光效果。如果場(chǎng)景較小,可使用遮擋紋理(Occlusion Textures)[Elmar Eisemann and Xavier decoret.Plausible image based soft shadows using occlusion textures.In Proceedings of SIBGRAPI 2006,pages 155-162,October 2006b]。遮擋紋理的速度非???在Geforce 6 GPU實(shí)時(shí)運(yùn)行可渲染500000個(gè)多邊形),其優(yōu)勢(shì)是與光源的大小無(wú)關(guān),從而能以較低的計(jì)算開(kāi)銷生成較好的軟陰影,并為有較大光源的室內(nèi)場(chǎng)景渲染提供了一個(gè)很好的方案。但是,對(duì)于大規(guī)模場(chǎng)景,Occlusion Textures的效果并不理想。
若場(chǎng)景要求更高的準(zhǔn)確度和更多的魯棒性,可使用反向投影,該方法在[Gael Guennebaud,Loic Barthe,and Mathias Paulin.Real-time soft shadow mapping by back-projection.In Proceedings of Eurographics Symposium on Rendering 2006,pages 227-234,June 2006]中提出。使用遮擋位掩碼可生成及其準(zhǔn)確的軟陰影,同時(shí)使用微四邊形[Michael Schwarz and marc Stamminger.Bitmask soft shadows.Computer Graphics Forum(Proceedings of Eurographics 2007),26(3):515-524,September 2007]可優(yōu)化該陰影效果。遮擋輪廓[Gael Guennebaud,Loic Barthe,and Mathias paulin.High-quality adaptive soft shadow mapping.Computer Graphics Forum(Proceedings of Eurographics 2007),26(3):525-533,September 2007和簡(jiǎn)單的區(qū)域累積也能渲染出不錯(cuò)的效果;比該方法更快的方案是采取等級(jí)輪廓提取和基于包的處理[Baoguang Yang,Jieqing Feng,Gael Guennebaud,and Xinguo Liu.Packet-based hierarchal soft shadow mapping.Computer Graphics Forum(Proceedings of Eurographics Symposium on Rendering 2009),28(4):1121-1130,June2009]。通常來(lái)講,實(shí)現(xiàn)較好軟陰影和較高運(yùn)行速度可能需要用粗糙地近似遮擋物,但粗糙地近似遮擋物需要避免類似明顯的漸變的走樣;特別地,使用該方法需要合理調(diào)整場(chǎng)景,否則其結(jié)果不會(huì)比簡(jiǎn)單的PCSS的視覺(jué)效果更好。
請(qǐng)參考圖1所示是本發(fā)明3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景系統(tǒng)的結(jié)構(gòu)示意圖,一種3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景系統(tǒng),包括:地形管理模塊1、場(chǎng)景模塊2、光影特效模塊4以及場(chǎng)景支持模塊3,
所述地形管理模塊1,用以根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染;
所述場(chǎng)景模塊2,用以渲染大規(guī)模場(chǎng)景中的不同場(chǎng)景元素;
所述光影特效模塊4,用以增強(qiáng)所述大規(guī)模場(chǎng)景中的全局光照和軟陰影;
所述場(chǎng)景支持模塊3,用以提供上述地形管理模塊、場(chǎng)景模塊以及光影特效模塊的中運(yùn)算環(huán)境和封裝。
具體地,所述光影特效模塊4用以全局光照實(shí)現(xiàn),本申請(qǐng)中使用Blinn-Phong實(shí)現(xiàn)Direct GI、CLPV實(shí)現(xiàn)Indirect GI。
Blinn-Phong原理
Blinn-phong光照模型[blinn-phong]是基于Phong[phong]的修正模型,由Jim Blinn提出。Blinn-Phong模型與Phong模型的區(qū)別是,把dot(V,R)換成了dot(N,H),其中H為半角向量,位于法線N和光線L的角平分線方向。Blinn-Phong模型可表示為:
Ispecular=Ks×Is×pow(dot(N,H),n)
其中H=(L+V)/|L+V|,計(jì)算H比計(jì)算反射向量R更快速。
具體地,所述光影特效模塊4還用以軟陰影實(shí)現(xiàn),
百分比靠近算法(PCSS)原理:
PCSS技術(shù)建立在標(biāo)準(zhǔn)的陰影映射的基礎(chǔ)上:在視錐內(nèi)給每一個(gè)像素著色時(shí),PCSS返回一個(gè)浮點(diǎn)數(shù)表示該像素對(duì)應(yīng)的幾何點(diǎn)的陰影數(shù)量(代替了標(biāo)準(zhǔn)陰影映射的深度比較)。同時(shí)PCSS建立與PCF內(nèi)核,當(dāng)PCF內(nèi)核增大時(shí),陰影變得更加柔和。該算法的關(guān)鍵在于變化濾波內(nèi)核的大小生成逼真的軟陰影。如何調(diào)整濾波內(nèi)核的大小使陰影達(dá)到理想的柔和程度是一個(gè)挑戰(zhàn)。PCSS假設(shè)遮擋物、光源和接收物是平行的。如圖3(a)、(b)所示是Blinn-Phong模型效果示意圖。如圖4所示是PCSS軟陰影效果示意圖。如圖5(a)、(b)所示,是PCSS軟陰影效果示意圖。
步驟1:遮擋物查找(Blocker search)。對(duì)一個(gè)接收點(diǎn)(屬于接收物)著色時(shí),在深度圖上確定搜索區(qū)域,查找區(qū)域內(nèi)的點(diǎn)的深度值,并計(jì)算出比該接收點(diǎn)與光源的距離更小的深度值的均值。其中,搜索區(qū)域的大小根據(jù)光源的大小、接收物與光源的距離確定。此處得出的均值用于確定步驟2的半陰影區(qū)域大小。
步驟2:半影區(qū)域大小的確定(Penumbra estimation)。假設(shè)遮擋物、光源和接收物是平行的,半影區(qū)域的大小由光源大小、遮擋物和接收點(diǎn)的距離以及遮擋物與光源的距離確定:
wpenumbra=(dReceiver-dBlocker)×wLight/dBlocker
步驟3:濾波(Filtering)。我們使用步驟2計(jì)算的半影區(qū)域大小作為濾波的大小,使用PCF方法進(jìn)行濾波。如圖
具體地,所述地形管理模塊1用以實(shí)現(xiàn)根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染。主要基于四叉樹(shù)的靜態(tài)LOD地形原理:
一般的地形是這樣實(shí)現(xiàn)的:整個(gè)地形是一個(gè)三角形網(wǎng)格,本文的地形大小是1024*1024,包括1024*1024個(gè)頂點(diǎn)、1024*1024*2個(gè)三角形;在開(kāi)始渲染地形之前,寫(xiě)入地形的頂點(diǎn)緩沖和索引緩沖;每一幀渲染地形的時(shí)候,只根據(jù)索引緩沖便可渲染出地形。
LOD地形利用人眼對(duì)幾何形狀的敏感度簡(jiǎn)化了地形的渲染:在距離視點(diǎn)較近的地方,渲染較多的三角網(wǎng)格,地形細(xì)致真實(shí);距離視點(diǎn)較遠(yuǎn)的地形,渲染較少的三角網(wǎng)格,地形比較粗糙。所以,LOD地形每一幀渲染的頂點(diǎn)個(gè)數(shù)小于一般地形每一幀渲染的頂點(diǎn)個(gè)數(shù),其渲染速度比一般地形的渲染速度高。
基于四叉樹(shù)的LOD地形則是以四叉樹(shù)為數(shù)據(jù)結(jié)構(gòu)來(lái)表示地形,運(yùn)行時(shí)每一幀所用的三角網(wǎng)格在當(dāng)前幀計(jì)算:
1.運(yùn)行前的預(yù)處理:構(gòu)建四叉樹(shù)地形。
2.運(yùn)行時(shí)的每一幀:
1)提取三角網(wǎng)格。本文在提取三角網(wǎng)格時(shí),采用Brian(1987)的細(xì)分標(biāo)準(zhǔn)來(lái)決定每個(gè)四叉樹(shù)節(jié)點(diǎn)的等級(jí)。這個(gè)步驟生成一個(gè)無(wú)限制的四叉樹(shù),同時(shí)該四叉樹(shù)的葉子節(jié)點(diǎn)就是在這一幀渲染的節(jié)點(diǎn)。但是,這個(gè)步驟帶來(lái)的問(wèn)題是地形裂縫。
2)修補(bǔ)裂縫。在修補(bǔ)地形裂縫時(shí),本文參考CryENGINE 3生成的LOD地形的圖案,并設(shè)計(jì)出一個(gè)類似Huffman編碼的方法生成了該圖案。
上述步驟是動(dòng)態(tài)LOD地形每一幀的運(yùn)行流程。由于在運(yùn)行時(shí)每一幀更新三角網(wǎng)格的計(jì)算量比較大,程序的幀速率下降到10fps,本文采用靜態(tài)LOD地形。靜態(tài)LOD地形的不同是,運(yùn)行時(shí)每一幀所用的三角網(wǎng)格在預(yù)處理中計(jì)算并保存,運(yùn)行時(shí)調(diào)用保存的lod文件。從lod文件中讀取三角網(wǎng)格的速度遠(yuǎn)遠(yuǎn)大于計(jì)算三角網(wǎng)格的速度,程序的幀速率上升到150+fps:
1.運(yùn)行前的預(yù)處理:執(zhí)行動(dòng)態(tài)LOD地形的2個(gè)步驟,分別計(jì)算出視點(diǎn)均勻分布在地形的64個(gè)部分的2個(gè)高度的LOD頂點(diǎn)索引,并將這128個(gè)LOD頂點(diǎn)索引存儲(chǔ)為lod文件;
2.運(yùn)行時(shí)的每一幀:根據(jù)視點(diǎn)的位置判斷當(dāng)前幀所用的lod文件,將文件解析為頂點(diǎn)索引緩沖。
圖6是實(shí)現(xiàn)靜態(tài)LOD地形的流程圖,以下介紹關(guān)鍵步驟的實(shí)現(xiàn)過(guò)程,即四叉樹(shù)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)、建造四叉樹(shù)地形、更新索引緩沖、修補(bǔ)裂縫:
●四叉樹(shù)數(shù)據(jù)結(jié)構(gòu)
地形的四叉樹(shù)結(jié)構(gòu)QuadTreeData的核心屬性:
m_nCenter:int,中心頂點(diǎn)的索引。
m_nCorner[4]:int,左上、右上、左下、右下頂點(diǎn)的索引。
m_pChild[4]:QuadTreeData*,左上、右上、左下、右下四個(gè)孩子節(jié)點(diǎn)。
m_bRealLeaf:bool,真實(shí)葉子變量。
m_bVirtualLeaf:bool,虛擬葉子變量。
如圖7所示是程序中定義的四叉樹(shù)結(jié)構(gòu)體示意圖。
●構(gòu)建四叉樹(shù)地形
一個(gè)5*5的地形,頭節(jié)點(diǎn)的m_nCenter是12,m_nCorner[4]依次是0、4、20、24,m_pChild[0]的m_nCenter是6,m_nCorner[4]依次是0、2、10、12,m_pChild[1]、m_pChild[2]、m_pChild[3]的屬性值可以此類推。我們可以設(shè)定整個(gè)四叉樹(shù)的最多層級(jí),比如9,頭結(jié)點(diǎn)的層級(jí)是0。若某個(gè)四叉樹(shù)節(jié)點(diǎn)的m_nCorner[1]和m_nCorner[0]相差為1,或者該四叉樹(shù)節(jié)點(diǎn)位于整個(gè)四叉樹(shù)的第9層,則該四叉樹(shù)節(jié)點(diǎn)為真實(shí)葉子,其m_bRealLeaf值為true,四個(gè)孩子節(jié)點(diǎn)的值均為空NULL,至此,整個(gè)地形的四叉樹(shù)建造完成。
●更新索引緩沖
首先更新虛擬葉子節(jié)點(diǎn):遍歷四叉樹(shù)的每個(gè)節(jié)點(diǎn),并評(píng)價(jià)每個(gè)節(jié)點(diǎn):若該節(jié)點(diǎn)為真實(shí)節(jié)點(diǎn),則該節(jié)點(diǎn)不可再分,將virtualLeaf設(shè)置為true;若該節(jié)點(diǎn)為虛擬節(jié)點(diǎn),若該節(jié)點(diǎn)不滿足評(píng)價(jià)公式(不可再細(xì)分),則將該節(jié)點(diǎn)的virtualLeaf設(shè)置為true。否則將virtualLeaf設(shè)置為false(評(píng)價(jià)公式:g=d/e×r×C1×C2,當(dāng)g<1,則該節(jié)點(diǎn)可再分,virtualLeaf設(shè)置為false。其中,d表示節(jié)點(diǎn)和攝像機(jī)的距離;e表示節(jié)點(diǎn)邊長(zhǎng);r=e/diff,其中diff表示該節(jié)點(diǎn)四個(gè)角最大高度與最小高度的差值;C1、C2代表分辨率。)。
●修補(bǔ)地形裂縫
大致思路是:四叉樹(shù)的每個(gè)節(jié)點(diǎn)都有自己的huffman編碼,通過(guò)huffman編碼可以遍歷到自己的位置。
每個(gè)節(jié)點(diǎn)同等級(jí)的上、下、左、右兄弟節(jié)點(diǎn)的huffman編碼可以根據(jù)自己處于父節(jié)點(diǎn)的位置(左上、右上、左下、右下)推導(dǎo)出來(lái)。在第一步更新了四叉樹(shù)的虛擬葉子節(jié)點(diǎn)之后,遍歷所有的虛擬葉子節(jié),通過(guò)每個(gè)葉子節(jié)點(diǎn)的左上、右上、左下、右下兄弟節(jié)點(diǎn)的huffman編碼找到每個(gè)葉子節(jié)點(diǎn)的兄弟節(jié)點(diǎn),若兄弟節(jié)點(diǎn)的virtualLeaf值為false,則在兄弟節(jié)點(diǎn)與該節(jié)點(diǎn)共享的邊上存在裂縫,進(jìn)行修補(bǔ):找出兄弟節(jié)點(diǎn)在該邊因細(xì)分所添加的三角形網(wǎng)的頂點(diǎn),將這些點(diǎn)的索引依次壓入該節(jié)點(diǎn)該條邊用于修補(bǔ)裂縫的點(diǎn)的鏈表。至此,修補(bǔ)裂縫結(jié)束。如圖8所示是四叉樹(shù)節(jié)點(diǎn)的huffman碼示意圖。圖9是LOD地形效果圖。
具體地,所述場(chǎng)景模塊2,用以渲染大規(guī)模場(chǎng)景中的不同場(chǎng)景元素:
1)天空盒實(shí)現(xiàn)
天空盒的類圖如下圖所示,Plit表示點(diǎn)光源的信息;天空盒的幾何信息存儲(chǔ)在v[8]、vn[8]和vt[8]中,分別表示頂點(diǎn)位置坐標(biāo)、頂點(diǎn)法線坐標(biāo)、頂點(diǎn)紋理坐標(biāo),這些屬性的值在初始化時(shí)Init()中計(jì)算。
天空盒的紋理如下圖所示:天空盒六個(gè)面的紋理從左至右、從上至下依次為背面、底部、前面、左邊、右邊、頂部。紋理文件是texture\skybox\back_bottom_front-left_right_top.ppm,程序中在Viewer.h中定義為texSkybox。
天空盒的GLSL文件是Shader\shadingSkybox.frag和Shader\shadingSkybox.vert,程序中在Viewer.h中定義為shadingSkybox。如圖10所示是天空盒紋理示意圖。
●基本渲染流程
天空盒的渲染在Viewer.cpp文件中的drawSkybox()中實(shí)現(xiàn):
每一幀調(diào)用V()、Size()獲取天空盒的頂點(diǎn)位置、VN()獲取頂點(diǎn)法線、VT()獲取頂點(diǎn)紋理;
使用GLSL實(shí)現(xiàn)shadingSkybox.frag和shadingSkybox.vert中動(dòng)態(tài)云和動(dòng)態(tài)太陽(yáng)的效果。
●動(dòng)態(tài)云的實(shí)現(xiàn)
動(dòng)態(tài)云的實(shí)現(xiàn)有兩種方案:
模擬三維云朵。制作云朵模型,在程序中根據(jù)光照給模型著色,同時(shí)根據(jù)云朵的移動(dòng)速度更新模型的位置。
移動(dòng)天空紋理。在每一幀根據(jù)云朵的移動(dòng)速度的逆方向更新頂部天空盒的紋理貼圖坐標(biāo)。
模擬三維云朵時(shí),根據(jù)光照給云朵著色的部分渲染比較耗時(shí),因?yàn)樵贫涓鞑糠值恼凵?、反射等?jì)算;同時(shí)其效果也不太理想,目前圖形界在云朵模擬方面尚未有效果比較理想的成熟的方案。所以本游戲采用第二種方案來(lái)實(shí)現(xiàn)動(dòng)態(tài)云,在UpdateCloud()中實(shí)現(xiàn),使用cloudSpeed更新vt中天空盒頂部的參數(shù)。
●動(dòng)態(tài)太陽(yáng)的實(shí)現(xiàn)
太陽(yáng)屬于點(diǎn)光源,在本程序中用屬性sun表示。本程序中每一幀根據(jù)太陽(yáng)的大小sun.size、太陽(yáng)的位置sun.p來(lái)渲染一個(gè)發(fā)光球,發(fā)光球的亮度用sun.intensity表示。太陽(yáng)的位置sun.p根據(jù)移動(dòng)速度sunSpeed來(lái)更新。
移動(dòng)太陽(yáng)可帶來(lái)天空效果的變化,即天空盒不同部位的明暗變化。此效果在shadingSkybox.frag中使用頂點(diǎn)法線和太陽(yáng)位置與頂點(diǎn)坐標(biāo)的向量的cosine值來(lái)實(shí)現(xiàn):
2)植被系統(tǒng)實(shí)現(xiàn)
植被系統(tǒng)設(shè)計(jì)了一種花、兩種草、兩種樹(shù),其類圖如下圖所示,LeafVertex表示植被的頂點(diǎn)信息,在初始化植被頂點(diǎn)和頂點(diǎn)索引的時(shí)候使用;兩種草、一種花、兩種樹(shù)的模型、兩種樹(shù)的葉子在程序中有不同的紋理,故分開(kāi)渲染,其幾何信息分別用t2f_v3f_grass1、t2f_v3f_grass2、t2f_v3f_flower、t2f_v3f_tree1、t2f_v3f_tree2、t2f_v3f_treeLeaf1、t2f_v3f_treeLeaf2中表示,索引信息分別用elements_grass1、elements_grass2、elements_flower、elements_tree1、elements_tree2、element_treeLeaf1、element_treeLeaf2表示。以上屬性的值在初始化時(shí)Create()、CreateGrassFlower()、CreateTree()中計(jì)算。
植被中的樹(shù)模型分別是model\tree1.obj、model\tree2.obj。植被紋理如下圖所示,其文件位置在texture目錄下;程序中,上述紋理在Viewer.h中定義為texFlower、texGrass1、texGrass2、texTree1、texTree2、texTreeLeaf1、texTreeLeaf2。
植被系統(tǒng)的的GLSL文件是Shader\shadingPlant.frag和Shader\shadingPlant.vert,程序中在Viewer.h中定義為shadingPlant。
●基本渲染流程
植被系統(tǒng)的渲染在Viewer.cpp文件中的drawPlant()中實(shí)現(xiàn):
調(diào)用T2F_V3F_Flower()和Elements_Flower()獲取花的頂點(diǎn)坐標(biāo)和頂點(diǎn)索引;
將Viewer.h中的texFlower作為紋理、使用GLSL實(shí)現(xiàn)shadingPlant.vert中花草的風(fēng)動(dòng)效果。
●植被的初始化
兩種草、一種花和兩種樹(shù)的樹(shù)葉的初始化類似DirectX中的公告板原理,兩種樹(shù)的模型的初始化使用模型加載。初始化之后所有類型的植被被表示為頂點(diǎn)索引緩沖和頂點(diǎn)緩沖,如圖11所示是植被紋理圖。下面介紹初始化的過(guò)程。
圖12是兩種草和一種花的分布圖,對(duì)應(yīng)程序中的resource\drawPlant.ppm文件。該圖的大小是1024*1024,等同于地形的大小。其中紅色代表花的分布,綠色代表第一種草,藍(lán)色代表第二種草。花草的幾何信息的初始化在CreateFlowerGrass()實(shí)現(xiàn):加載分布圖文件、根據(jù)分布圖中像素的顏色和位置標(biāo)記t2f_v3f_flower、t2f_v3f_grass1、t2f_v3f_grass2的頂點(diǎn)位置,在FlushVertexFlowerGrass()中計(jì)算以上屬性及其對(duì)應(yīng)索引的值。
圖13是兩種樹(shù)的分布圖,對(duì)應(yīng)程序中的resource\treeRange.ppm文件。該圖的大小也是1024*1024,等同于地形的大小。其中綠色代表第一種樹(shù),藍(lán)色代表第二種樹(shù)。樹(shù)的幾何信息的初始化在CreateTree()實(shí)現(xiàn):加載分布圖文件、加載樹(shù)的模型、根據(jù)分布圖中像素的顏色和位置標(biāo)記兩種樹(shù)的模型和t2f_v3f_treeLeaf1、t2f_v3f_treeLeaf2的頂點(diǎn)位置,在FlushVertexTreeLeaf()中計(jì)算以上屬性及其對(duì)應(yīng)索引的值。
●風(fēng)動(dòng)效果的實(shí)現(xiàn)
植被的風(fēng)動(dòng)效果原理非常簡(jiǎn)單,就是使頂點(diǎn)隨時(shí)間呈現(xiàn)余弦狀波動(dòng)效果。此效果在shadingPlant.vert中實(shí)現(xiàn),核心代碼如下:
gl_Position=gI_ModelViewProjectionMatrix×gl_Vertex
gl_Position+=windDirxcos(time)
其中,windDir表示風(fēng)向,time表示全局時(shí)間。
3)車輛渲染實(shí)現(xiàn)
車輛不同部位的材質(zhì)有所不同,主要分為車體、車窗和輪胎,所以這三個(gè)部分的頂點(diǎn)需要分別渲染,所以模型文件也需要分別加載。車輛類的類圖如下所示:body、window、metalWheel、rubberWheel分別表示車體、車窗、金屬部分的車輪、橡膠部分的車輪,其模型都屬于Wavefront.OBJ格式。特別地,玩家駕駛車輛會(huì)使得車輪相對(duì)與車身產(chǎn)生旋轉(zhuǎn),所以,程序中使用變換矩陣transWheel來(lái)表示車輪相對(duì)與車身的旋轉(zhuǎn)效果。
車輛模型分為車體、車窗、金屬部分的車輪和橡膠部分的車輪,模型文件分別是model\carBody.obj、model\carWindow.obj、model\carMetalWheel.obj、model\carRubberWheel.obj;對(duì)應(yīng)的紋理文件是texture\car\carBodyF.ppm、texture\car\carBodyB.ppm、texture\car\carBodyL.ppm、texture\car\carBodyR.ppm、texture\car\carBodyU.ppm、texture\car\carWindow.ppm、texture\car\carMetalWheel.ppm、texture\car\carRubberWheel.ppm;程序中,上述紋理分別在Viewer.h中定義:texCarBodyF,texCarBodyB,texCarBodyU,texCarBodyL,texCarBodyR,texCarMetalWheel,texCarRubberWheel;
車輛渲染的GLSL文件是Shader\shadingCar.frag和Shader\shadingCar.vert,程序中在Viewer.h中定義為shadingCar。
●基本渲染流程
車輛的渲染在Viewer.cpp文件中的drawCar()中實(shí)現(xiàn):
調(diào)用T2F_N3F_V3F_Body()和Elements_Body()獲取車體渲染所用的緩沖數(shù)據(jù),即紋理坐標(biāo)、法線坐標(biāo)、頂點(diǎn)坐標(biāo)、頂點(diǎn)索引;金屬部分車輪和橡膠部分車輪的緩沖數(shù)據(jù)的調(diào)用類似于車體,即調(diào)用T2F_N3F_V3F_MetalWheel()和Elements_MetalWheel()、T2F_N3F_V3F_RubberWheel()
和Elements_RubberWheel();特別地,車窗屬于半透明材質(zhì),沒(méi)有紋理,所以其渲染所用的緩沖數(shù)據(jù)只包括法線坐標(biāo)、頂點(diǎn)坐標(biāo)和頂點(diǎn)索引,調(diào)用N3F_V3F_Window()和Elements_Window()。
將Viewer.h中的texCarBodyF,texCarBodyB,texCarBodyU,texCarBodyL,texCarBodyR,texCarMetalWheel,texCarRubberWheel作為紋理、使用GLSL實(shí)現(xiàn)shadingCar.frag中車體的環(huán)境映射效果、車窗的環(huán)境映射效果(視點(diǎn)在車外)、車窗的環(huán)境折射效果(視點(diǎn)在車內(nèi))、車窗的半透明效果、輪胎的漫反射效果。
●環(huán)境貼圖實(shí)時(shí)更新的實(shí)現(xiàn)
當(dāng)賽車在場(chǎng)景內(nèi)漫游時(shí),車體和車窗應(yīng)該反射出周圍的環(huán)境;當(dāng)視點(diǎn)在車內(nèi)的時(shí)候,從半透明車窗內(nèi)看到折射后的環(huán)境。程序中使用環(huán)境貼圖來(lái)實(shí)現(xiàn)上述效果,而環(huán)境的動(dòng)態(tài)體現(xiàn)在環(huán)境貼圖的實(shí)時(shí)更新。
實(shí)時(shí)更新環(huán)境貼圖的思路是:每一幀渲染車輛之前,將攝像機(jī)位于車輛的位置,以向上、向下、向左、向右、向前、向后為視點(diǎn)將場(chǎng)景渲染六遍,獲得環(huán)境貼圖的六個(gè)紋理,使用這六個(gè)紋理更新當(dāng)前幀的環(huán)境貼圖。
在程序中,環(huán)境貼圖的更新在Viewer.h中的updateEnv()中實(shí)現(xiàn):使用FrameBufferObject[ref]envFBO來(lái)渲染六個(gè)紋理texEnvUp,texEnvBottom,texEnvLeft,texEnvRight,texEnvBack,texEnvFront;使用六個(gè)紋理更新環(huán)境貼圖cubeMap。
●環(huán)境映射、環(huán)境折射的實(shí)現(xiàn)
在GLSL中,環(huán)境映射和環(huán)境折射的原理一致:獲取環(huán)境貼圖在某個(gè)方向的像素值。環(huán)境映射和環(huán)境折射的不同體現(xiàn)在獲取紋理像素值的向量不同:環(huán)境映射的向量是某一個(gè)幾何點(diǎn)與視點(diǎn)組成的向量的反射向量;環(huán)境折射的向量是某一個(gè)幾何點(diǎn)與視點(diǎn)組成的向量的折射向量。計(jì)算出獲取紋理像素值的向量之后,可以調(diào)用GLSL的函數(shù)textureCube來(lái)獲取在該向量方向的紋理。
在shadingCar.frag中,傳入更新的cubeMap,環(huán)境映射和環(huán)境折射的核心代碼如下:
環(huán)境映射
shadingCar.vert:
vec3InVec=normalize(pos-EyePos);//頂點(diǎn)到眼睛的入射向量
R=reflect(InVec,norm);//norm:頂點(diǎn)法線
shadingCar.frag:
gl_FragColor=textureCube(EnvMap,R);
環(huán)境折射
shadingCar.vert:
vec3InVec=normalize(pos-EyePos);//頂點(diǎn)到眼睛的入射向量
T=refract(InVec,norm,ior);//ior:折射率;norm:頂點(diǎn)法線
shadingCar.frag:
gl_FragColor=textureCube(EnvMap,T);
此處描述的折射計(jì)算只能處理一次折射的效果,對(duì)于兩次折射的計(jì)算,可參考的方法。
請(qǐng)參考圖2是本發(fā)明3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景實(shí)現(xiàn)方法流程示意圖,一種3D游戲?qū)崟r(shí)渲染大規(guī)模場(chǎng)景實(shí)現(xiàn)方法,在打開(kāi)大規(guī)模場(chǎng)景時(shí)包括如下步驟:
步驟S100根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染;在步驟S100中根據(jù)距離人眼視點(diǎn)的距離實(shí)時(shí)對(duì)地形進(jìn)行渲染時(shí),基于四叉樹(shù)的靜態(tài)LOD地形算法提高所述大規(guī)模場(chǎng)景的渲染速度。步驟S101渲染所述大規(guī)模場(chǎng)景中的不同場(chǎng)景元素,用以提高大規(guī)模場(chǎng)景的實(shí)時(shí)性;步驟S102增強(qiáng)所述大規(guī)模場(chǎng)景中的全局光照和軟陰影,用以增加所述大規(guī)模場(chǎng)景真實(shí)感。步驟S102中根據(jù)PCSS算法,增強(qiáng)所述大規(guī)模場(chǎng)景中的軟陰影。上述大規(guī)模場(chǎng)景的地形大小為1024*1024,以滿足幀速率至少為30fps。
雖然本公開(kāi)以具體結(jié)構(gòu)特征和/或方法動(dòng)作來(lái)描述,但是可以理解在所附權(quán)利要求書(shū)中限定的本公開(kāi)并不必然限于上述具體特征或動(dòng)作。而是,上述具體特征和動(dòng)作僅公開(kāi)為實(shí)施權(quán)利要求的示例形式。