日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

星际2的一些技术特性

發(fā)布時(shí)間:2025/7/25 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 星际2的一些技术特性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文鏈接:http://ati.amd.com/developer/SIGGRAPH08/Chapter05-Filion-StarCraftII.pdf

?? ?我一直認(rèn)為后處理技術(shù)將會(huì)被越來越多的游戲所重用,星際2的出爐在一定程度上驗(yàn)證了這點(diǎn),把光照,陰影都移到后處理中去,這給場景渲染帶來最大的靈活性,當(dāng)然也帶來了很多難以克服的問題。翻譯這篇文章的主要目的是讓自己熟悉這些技術(shù),并留下一點(diǎn)筆記,順便賞析一下星際2的技術(shù)魅力:)。(這片文章的英文敘述方式簡直讓我嘔吐,如果按原文思路來翻譯,只會(huì)讓讀者也嘔吐,原諒我改變了原文敘述順序,有偏好原文者請參看英文原版)

最早我們就決定讓GPU來更多的負(fù)載畫面效果計(jì)算,而讓CPU解放出來,最主要的原因是,在星際2中玩家可以生成和操縱數(shù)量巨大的游戲物件,這樣就需要有更多的CPU資源用來計(jì)算海量AI和管理龐大的系統(tǒng)資源。GPU主要的負(fù)載源于像素著色器,而不是頂點(diǎn)著色器,因?yàn)槲覀兊囊媸褂帽M可能少的繪制次數(shù)及頂點(diǎn)數(shù)量,而且現(xiàn)代GPU架構(gòu)對于一次渲染上百萬的頂點(diǎn)簡直就是小菜一碟;相比之下,因?yàn)槲业挠螒蚴褂昧搜舆t著色,像素著色器負(fù)擔(dān)著幾乎所有的美術(shù)效果。使用延遲著色的優(yōu)勢就在于能使像素重繪率始終保持在一個(gè)很低的水平,像素著色器的負(fù)載能基本保持恒定不變,而不受場景復(fù)雜度的劇烈影響。
我們的引擎需要處理兩種截然不同的游戲場景,一種是普通的戰(zhàn)略模式,而另一種則是劇情模式。在戰(zhàn)略模式下,相機(jī)通常都高高在上,俯視全局,玩家所關(guān)注的主要是整體策略,而不是游戲的細(xì)枝末梢,絕大部分的游戲物件在屏幕都只是覆蓋了少量的像素,所以游戲物件可以只使用很少的頂點(diǎn)數(shù)量,便可達(dá)到理想的畫面效果。而劇情模式則不同,玩家需要從第一人稱模式下來觀察游戲世界,更加身臨其境,能更多的注意到場景的細(xì)節(jié),這樣我們就需要更加精細(xì)的美術(shù)資源來增強(qiáng)玩家的體驗(yàn)。從技術(shù)上來說,這兩種模式有著截然不同的性質(zhì),比如戰(zhàn)略模式的渲染,需要繪制很多次才能完成一個(gè)畫面(看到的游戲物件實(shí)在太多),但每個(gè)單一游戲物件都不要很精細(xì);而劇情模式下,場景所需要的繪制次數(shù)很少,但每個(gè)游戲物件都需要仔細(xì)渲染,因?yàn)橥婕夷茉诮嚯x觀察到它們。接下來將闡述如何在技術(shù)上實(shí)現(xiàn)這些要求。
基于屏幕的特效 星際2圖形引擎設(shè)計(jì)的一個(gè)很重要的目標(biāo)就是要能在劇情模式下體現(xiàn)出復(fù)雜的光照環(huán)境,現(xiàn)在我們回想一下魔獸爭霸3吧,任意時(shí)刻一個(gè)物體只能受及其有限的燈光影響,這導(dǎo)致了在切換影響物體燈光的時(shí)候,物體的光照效果會(huì)有明顯的突變,因此在魔獸爭霸3很少使用動(dòng)態(tài)光源。而且使用傳統(tǒng)的3D渲染方法會(huì)極大的提高場景的繪制次數(shù),試想一下場景中有一隊(duì)星艦,每個(gè)星艦上都有很多閃爍的燈光,這些燈光會(huì)影響星際自身以及其周圍的其他艦艇,在這種情況下,星艦不得不一艘一艘的渲染,因?yàn)槊克倚桥灥臒艄猸h(huán)境都不一樣,使得GPU效率非常低下。因?yàn)槲覀兊姆謮K地形是通過復(fù)雜的方法將多層地貌混合而成,傳統(tǒng)的繪制方式也會(huì)給地形系統(tǒng)的渲染帶來嚴(yán)重問題。
而解決以上問題的方法,最好就是延遲著色(deferred ?shading),其原理就是先將所有物體先光柵化成像素,然后將每個(gè)像素的深度值、法線和一些與光照無關(guān)的顏色緩沖起來,等待后續(xù)進(jìn)行像素光照著色。你可能會(huì)說使用這種技術(shù)的優(yōu)勢還很難說,畢竟也帶來很多的負(fù)面問題,比如緩沖這么多數(shù)據(jù)是要消耗很多顯存和帶寬的,另外還要增加很多次緩沖采樣,是的,你說的都沒錯(cuò),但這項(xiàng)技術(shù)給我們帶來的最大好處就是讓圖形計(jì)算量與場景復(fù)雜性從原來的指數(shù)關(guān)系變?yōu)榫€性關(guān)系,也是說不管我們給畫面加什么樣的后期特效,其消耗都是固定的,與場景復(fù)雜度無關(guān),不管場景中有500個(gè)還是5個(gè)物件,在特效處理中的負(fù)擔(dān)都差不多,因?yàn)樗刑匦Ф际轻槍ο袼囟皇俏锛摹?
在RTS游戲中保持低的繪制次數(shù)相當(dāng)?shù)闹匾?#xff0c;因此我們希望能在一次繪制中講盡可能多的信息緩沖到顯存中,大多數(shù)硬件支持的MRT數(shù)量為4,每個(gè)RT通道數(shù)量為4,這樣我們就有16個(gè)通道來存儲(chǔ)我們需要的信息,星際2種我們是這樣使用這些通道的: 1。不受燈光影響的顏色分量,比如自發(fā)光、環(huán)境貼圖和光照貼圖(環(huán)境光照顏色)。 2。深度信息 3。像素法線 4。如果使用靜態(tài)環(huán)境遮擋,則保存每個(gè)像素的環(huán)境遮擋值,如果使用屏幕空間的環(huán)境遮擋,那么預(yù)生成的環(huán)境這樣貼圖就忽略掉了。 5。漫反射材質(zhì) 6。鏡面反射材質(zhì) 需要提醒一下的是,DX9下MRTS的尺寸和位深必須都相同,當(dāng)然一部分硬件支持MRT的獨(dú)立寫功能,我們也會(huì)利用這些特性來盡可能避免那些沒有用到的BIT來占用帶寬。在星際2中我們使用了HDR效果,這樣所有緩沖的4個(gè)通道必須是16位浮點(diǎn)格式,當(dāng)然使用高精度格式的數(shù)據(jù)能很好的避免精度問題,而且象素著色器也用不著對數(shù)據(jù)進(jìn)行解碼了,但很不幸的是,每個(gè)緩沖都必須使用4*16的格式,這樣我們每個(gè)象素的輸出帶寬就增加到24字節(jié)了(可能作者沒有考慮Specular項(xiàng)),但馬上我們就要覺得這樣的犧牲對于它帶來的靈活性是完全值得的。
一般渲染的物體都是不透明的,延遲著色的最大問題在于透明的處理,后面我們會(huì)講到如何解決這個(gè)問題。我們的地形是多層的,各層的法線,漫反射和高光都是混合到緩沖的,但只有地形的最底層渲染時(shí)會(huì)寫深度值。緩沖起來的各種值被用來實(shí)現(xiàn)各種各樣的特效,比如深度值用在了光照,體積霧,動(dòng)態(tài)環(huán)境光遮擋,智能位移,景深,投影器,邊緣檢測和厚度測量;法線用在動(dòng)態(tài)環(huán)境光遮擋計(jì)算中;漫反射材質(zhì)和高光材質(zhì)用來計(jì)算光照。
延遲著色
星際2中只有局部燈光才使用延遲著色,如具有一定影響范圍的點(diǎn)光源和聚光燈,一般全場景光照使用傳統(tǒng)的方式先進(jìn)行渲染,因?yàn)槿珗鼍肮?#xff08;比如日光)會(huì)照射到所有模型上,這樣使用延遲著色的話沒有太多好處,實(shí)際上,因?yàn)樾枰俅螌彌_進(jìn)行采樣,延遲著色的效率在這種情況下反而更低。 傳統(tǒng)著色和延遲著色效果其實(shí)都是一樣的,只不過延遲著色將光照作為一個(gè)后處理特效來進(jìn)行,這樣對于復(fù)雜光照環(huán)境,延遲著色擁有更高的效率,因?yàn)槭褂醚舆t著色的話,光照計(jì)算他所影響到的象素上進(jìn)行,而且在SM3.0中能更加高效的取得象素的3D空間坐標(biāo),因?yàn)镻S3.0中新加入一個(gè)寄存器,光柵單元用來向里填充本象素在緩沖中的x,y坐標(biāo),這樣我們能很快的通過象素的Z值求出這個(gè)象素的相機(jī)空間坐標(biāo): float2 vViewPos.xy = float2( x, y ) * float2( 2.0f, -2.0f ) / float2( w, h ) + float2( -1.0f, 1.0f ); vViewPos.zw = float2( 1.0f, 1.0f ); vViewPos.xyz = vViewPos.xyz * fSampledDepth; float3 vWorldPos = mul( p_mInvViewTransform, vViewPos ).xyz; (我覺得原文可能是錯(cuò)的,如果有朋友看出我的錯(cuò)誤,請馬上指正,部分項(xiàng)與原文對照如下) INTERPOLANT_VPOS = float2( x, y ) p_vCameraNearSize = 1.0f p_vRecipRenderTargetSize = float2( w, h )
模板測試,Early-Z和Early-Stencil 我們需要一個(gè)相當(dāng)高效的方法來找出屏幕上屬于某一燈光影響范圍的象素,很自然我們想到了Z TEST 和STENCIL TEST,可以用STENCIL TEST將光照范圍后面的象素給剔除掉,用Z TEST將 光照范圍前面的象素剔除掉。原文并沒有詳細(xì)的說明如何做到這點(diǎn),我根據(jù)自己對DEFERRED SHADING和SHADOW VOLUME的了解,估計(jì)他應(yīng)該是按如下方法做的: 1。首先看下圖2-0,用3個(gè)不同顏色的矩形表示3個(gè)不同的場景物體,黃圈表示燈光照射范圍,綠色物體在光源照射范圍的前面,不受燈光影響,紅色位于燈光照射范圍之內(nèi),是受影響的,深藍(lán)色的物體位于光照范圍之后,也不受影響。 2。首先讓所有場景渲染到相關(guān)的緩沖中,建立起Z,NORMAL,COLOR等數(shù)據(jù)。 3。For 所有 Light a:關(guān)閉Color Write,Z Write. 設(shè)置Stencil測試總是成功,設(shè)置D3DRS_STENCILZFAIL為D3DSTENCILOP_INCR,設(shè)置Z為 D3DCMP_LESS,繪制光照閉合凸體的backface,這樣就能在模板中標(biāo)出所有位于凸體背面之前的象素,如圖2-1 b:正式進(jìn)行光照著色,設(shè)置Stencil測試為D3DCMP_EQUAL,REF值為1,Z測試為D3DCMP_LESS,繪制光照閉合凸體的Frontface,此時(shí)early stencil和early z就開始發(fā)揮作用了,首先early z會(huì)將所有位于燈光照射范圍之前的所有象素剔除掉,留下的結(jié)果如圖2-2中黃色線圈中的部分;early stencil則會(huì)將后面深藍(lán)色物體的所有象素剔除掉,如圖2-3中黃線圍成的范圍內(nèi)象素,只留下a步驟中生成在stencil buffer中的紅色部分象素范圍中的象素,這最后留下的象素才會(huì)正式進(jìn)入象素著色器,進(jìn)行光照計(jì)算。 以上闡述的都是相機(jī)在光照范圍之外時(shí)的算法,當(dāng)相機(jī)在某個(gè)燈光照射范圍內(nèi)的話,只需要簡單繪制包圍體的backface就OK了。暴雪放了一張復(fù)雜光源的圖如下,可以想象下如果使用傳統(tǒng)方法渲染,我們的shader和光照范圍判斷會(huì)有多復(fù)雜.
SSAO屏幕空間內(nèi)的環(huán)境光遮擋 這東西很久以前就有論文,只不過最近讓CRYSIS發(fā)揚(yáng)光大,一炮走紅,其作用就是讓場景明暗更柔和些(其實(shí)是錯(cuò)誤的),給人一種有全局光照的錯(cuò)覺。大概做法是這樣的,按特定方法采樣屏幕中指定象素周圍的指定象素點(diǎn)的深度值,然后用特定方法對采樣結(jié)果進(jìn)行估算,得到一個(gè)遮擋值,最關(guān)鍵的地方就是如何采樣,如何評估采樣值。不過先順便說下,SSAO有著先天的不足,因?yàn)椴蓸拥狞c(diǎn)都是可見SURFACE上的,那么就意味著不能正常評估不可見SURFACE產(chǎn)生的遮擋影響,但因?yàn)锳O表現(xiàn)出來的就是低頻特性,所以這個(gè)缺陷對最終效果影響不大。 怎樣進(jìn)行采樣最好? 我相信很多人都自己實(shí)現(xiàn)過一些AO,但最終效果都不如人意,比如明暗顆粒感太重,即使進(jìn)行了BLUR也無法滿足我們對美的欲望,現(xiàn)在機(jī)會(huì)來了,讓我看看星際大概是怎么做的吧。首先我們必須提一下3D空間中AO MAP的計(jì)算,其原理是對物體表面法線正方向的半球空間進(jìn)行若干光線跟蹤,對各跟蹤結(jié)果進(jìn)行取權(quán)計(jì)算,為了在SSAO中得到一個(gè)與其近似的效果,我們采用同樣方法,先計(jì)算出給定pixel的視空間坐標(biāo)(前面有講到),然后以此坐標(biāo)為基點(diǎn),在周圍選擇8~32個(gè)點(diǎn)進(jìn)行采樣,然后將采樣點(diǎn)的相機(jī)空間坐標(biāo)投影回屏幕坐標(biāo),對深度緩沖進(jìn)行采樣,最后得到采樣點(diǎn)的深度值,再進(jìn)行后續(xù)計(jì)算。最大的問題是如何選擇采樣點(diǎn),選擇得不得法會(huì)導(dǎo)致最后的AO圖噪點(diǎn)嚴(yán)重,為了盡量避免缺陷,星際2中采用了隨機(jī)采樣方式,先生成一砣隨機(jī)向量,并存儲(chǔ)在紋理中,注意隨機(jī)向量的個(gè)數(shù)并不一定要與象素?cái)?shù)量相等,在生成AO圖時(shí),在象素著色器中對此紋理采樣,會(huì)得到一個(gè)經(jīng)過插值的隨機(jī)法向量,我在通過PS 常量寄存器器傳入X(8~32)個(gè)隨機(jī)向量,再使用前面得到的向量對這X個(gè)向量進(jìn)行反射,這樣我們就得到了X個(gè)偽隨機(jī)向量了,傳入的X個(gè)向量的模在0.5~1之間,而不是0~1,是為了防止采樣點(diǎn)過于集中在測試點(diǎn)附近,而且這X個(gè)向量的模受一個(gè)可以由美工調(diào)節(jié)的變量進(jìn)行縮放,這樣美工就可以控制采樣范圍了。
可能現(xiàn)在你很多疑問,為什么要從外界傳入X個(gè)隨機(jī)向量,而不在PS中產(chǎn)生?為什么X個(gè)向量要用一個(gè)預(yù)生成的隨機(jī)向量進(jìn)行反射?為什么這個(gè)用來鏡象的向量不是象素法線,而要額外隨機(jī)生成?有很多困惑,折磨著我們,讓我們寢食難安,但很遺憾,原文并沒有顯式的進(jìn)行解釋,而馬上我就要對這些奇怪的做法做出非官方的揣測,如有不滿盡可指正。
為什么不直接在PS中產(chǎn)生隨機(jī)向量? AO的隨機(jī)是有2個(gè)硬性要求的,第一點(diǎn),每個(gè)象素的采樣點(diǎn)必須都是互相隨機(jī),互不相同的。因?yàn)槊總€(gè)象素點(diǎn)在3D空間中的位置都互不相同,要做到隨機(jī),必須對每一個(gè)測試點(diǎn)的采樣位置都不一樣才能最大的減少最后形成的程序化噪聲,讓顆粒盡可能分散在整個(gè)屏幕上,而不要過分集中;第二點(diǎn),同一象素在不同幀中必須有相同的采樣點(diǎn),這點(diǎn)就很顯然了,否則會(huì)導(dǎo)致場景沒有變化,畫面卻還明暗閃爍不停。根據(jù)以上兩點(diǎn),在PS中隨機(jī)生成向量來采樣是不可能的,或者是實(shí)現(xiàn)起來效率低下特別復(fù)雜。
為什么X個(gè)向量要用一個(gè)預(yù)生成的隨機(jī)向量進(jìn)行反射? 這個(gè)我覺得意圖很明顯,就是為了滿足以上提到的第一個(gè)要求,讓每個(gè)象素的采樣點(diǎn)都互相隨機(jī),否則每個(gè)象素都使用相同的采樣模式,又會(huì)產(chǎn)生噪聲聚集的情況。星際2使用的方法是用一個(gè)隨機(jī)向量(從隨機(jī)紋理中取出),對其他傳人向量進(jìn)行反射來達(dá)到這個(gè)目的,很顯然反射計(jì)算量很小,而且隨機(jī)效果很好,當(dāng)然你也可以把傳入的向量與隨機(jī)向量進(jìn)行加乘減等任意操作,只要能隨機(jī)化就行。
為什么這個(gè)用來鏡象的向量不是象素法線,而要額外隨機(jī)生成? 這個(gè)我就不太有把握了,但其實(shí)在采樣中,法線是有很大作用的,就是對穿到物體內(nèi)部的隨機(jī)采樣向量進(jìn)行反向,因?yàn)椴蓸有枰诜ň€正方向半球內(nèi)進(jìn)行,采到物體內(nèi)部是絕對錯(cuò)誤的。可能使用法線來打亂每個(gè)象素的采樣向量,隨機(jī)度還不夠吧。
如何對采樣得到的深度值進(jìn)行評估? 好了,現(xiàn)在我們知道大概如何進(jìn)行采樣了,接下來再看最后一個(gè)關(guān)鍵點(diǎn),采樣評估。按常理,離測試點(diǎn)近的采樣點(diǎn)顯然對測試點(diǎn)遮擋得更多,實(shí)際上遮擋與距離的平方成反比,但為了讓評估更具隨意性,我們讓美工來控制遮擋系數(shù)與距離的關(guān)系,但無論如何,這個(gè)關(guān)系有幾個(gè)不可違背的特性: 1。如果采樣點(diǎn)的深度大于測試點(diǎn)的深度,那么這個(gè)采樣點(diǎn)給予測試點(diǎn)的遮擋為0,因?yàn)闇y試點(diǎn)在采樣點(diǎn)的后方了。 2。距離越近,遮擋越多。 3。當(dāng)距離大到一定程度時(shí),遮擋要降為0。
遮擋函數(shù)的曲線,大概就如下圖所示,我們可以把這個(gè)函數(shù)做成一個(gè)1維紋理,在PS中使用。
我們還可以進(jìn)一步對AO MAP 進(jìn)行優(yōu)化,如利用高斯模糊進(jìn)一步消除顆粒感,但這個(gè)高斯模糊需要做些特殊處理,因?yàn)椴荒芎唵蔚陌押诘陌椎牡教幦嗖?#xff0c;AO MAP的明暗是有空間關(guān)系的,比如桌子上的暗絕對不能BLUR到旁邊站著的人的身上,因?yàn)閴焊麄兛臻g位置前后距離很遠(yuǎn),沒什么關(guān)系,所以我們BLUR的時(shí)候會(huì)取采樣點(diǎn)和目標(biāo)點(diǎn)的深度很法線測試下,如果距離太遠(yuǎn)或者兩點(diǎn)法線夾角太大那么采樣點(diǎn)的權(quán)重就要變0,最后高斯模糊總權(quán)重要重新計(jì)算,以保證能正確的對結(jié)果歸一化。
最后還有點(diǎn)頭痛的問題需要解決。因?yàn)椴蓸酉蛄渴窃谙鄼C(jī)空間中定義的,那就意味著當(dāng)相機(jī)走近物體時(shí),向量在屏幕上的投影會(huì)變長,一旦采樣點(diǎn)延伸到屏幕之外那就完蛋了,因?yàn)槠聊恢獾纳疃任覀儔焊蜎]有。渲染一個(gè)比顯示更大的區(qū)域很顯然不能很好的解決問題,比較簡單的解決方案是,如果采樣到屏幕之外就返回一個(gè)巨大的深度值,這樣能保證這個(gè)采樣點(diǎn)不會(huì)對測試點(diǎn)產(chǎn)生任何影響,我們可以通過使用紋理采樣的BORD模式達(dá)到這個(gè)目的。
為了防止當(dāng)過度靠近物體,破壞SSAO效果,我們必須在SSAO屏幕空間中限制采樣范圍,如果相機(jī)距離物體太近,那么它的SSAO采樣點(diǎn)延伸太遠(yuǎn),SSAO區(qū)域一致性約束被違反,這樣讓噪聲不至于太明顯。另外還有一個(gè)解決方法就是根據(jù)采樣區(qū)域大小來決定采樣數(shù)量,但會(huì)嚴(yán)重影響幀率,放棄。 (SSAO area consistency constraint is violated確實(shí)是我沒能想明白到底是怎么回事,我就照字翻了,我的理解是這樣的,SSAO ?area 應(yīng)該為影響指定象素AO的空間區(qū)域,這個(gè)區(qū)域在你走近物體時(shí),在3D空間中的體積是基本保持不變的,但如果你走得特別近了,這個(gè)區(qū)域的投影已經(jīng)超出屏幕范圍,現(xiàn)在就必須violate這個(gè)SSAO area的consistency,比如對采樣向量進(jìn)行縮小,讓采樣點(diǎn)回到屏幕空間中。MGD,還是懂的人來解釋下吧) SSAO性能分析 SSAO最大的性能瓶頸在于采樣,隨機(jī)的采樣會(huì)嚴(yán)重破壞了GPU紋理緩沖系統(tǒng)的連續(xù)性,而且采樣的紋理區(qū)域大小也直接影響紋理緩沖的性能,因此我們可以只使用1/4尺寸的深度緩沖來提高性能。如果采樣區(qū)域變大,那么犄角旮旯里的黑暗部分會(huì)變得更加柔和,現(xiàn)在我們就遇到了兩難的問題,美術(shù)既需要在場景中的旮旯明暗對比強(qiáng)烈,又需要平坦部分擁有大范圍采樣的柔和效果。為了達(dá)到這個(gè)要求,我們將SSAO采樣點(diǎn)分成2組,一組在小范圍內(nèi)采樣,使用變化劇烈的深度-遮擋函數(shù),另一組使用大范圍采樣,使用比較平坦的深度-遮擋函數(shù),2組采樣各自計(jì)算遮擋因子,最終我們使用遮擋比較大的那個(gè)。
景深效果

?? ?在延遲著色中,每幀都需要產(chǎn)生深度值緩沖和法線緩沖,既然產(chǎn)生了我們就要有效的加以利用,比如在我們的劇情模式下用得特別頻繁的景深特效。接下來我們將討論在實(shí)現(xiàn)景深效果過程中所碰到的問題以及如何解決它們.


彌散圓(circle of confusion) 物體上任何一點(diǎn)反射的光線通過透鏡成象,如果接受平面完美處于象平面,理論上來說,這個(gè)點(diǎn)的象也應(yīng)該是一個(gè)點(diǎn),但如果不是,就會(huì)發(fā)散成一個(gè)圓,一個(gè)物體上的每個(gè)點(diǎn)的象都成了一個(gè)圓,當(dāng)然看起來就模糊了,所謂的景深也就是容許接受平面在象平面前后偏移的最大距離(更精確的解釋請參考攝影相關(guān)的文章)。我們希望能讓美工更好的控制DOF效果,而不是完全基于物理的,所以我們定義了如下參數(shù)供美工調(diào)節(jié),相距:FocalDepth,景深范圍:NoBlurRange,最大模糊范圍:MaxBlurRange,現(xiàn)在我們定義個(gè)模糊因子,A0 = DofAmount * max( 0, abs(Depth - FocalDepth) - NoBlurRange ), A1 = MaxBlurRange - NoBlurRange, F = A0 /A1, F = 0不模糊 F = 1完全模糊,我們可以看到模糊因子是根據(jù)深度線形變化的。一般來說,我們根據(jù)F的值來增加高斯模糊核的采樣范圍來得到更想要的效果,但實(shí)際并不理想,完美的做法應(yīng)該是增加采樣點(diǎn)數(shù)量,但這個(gè)效率和硬件支持度確實(shí)不允許,//未完待續(xù)

其實(shí)在Shawn Hargreaves的PPT中提到過最終的解決方案應(yīng)該是depth peeling來實(shí)現(xiàn)順序無關(guān)的alpha混合,不過據(jù)說效率很“驚人”,目前來說也就算了,但不排除N年后GPU更快了再拿出來用哦,原理類似的還有woo shadow mapping,相關(guān)知識(shí)請到GOOGLE搜論文看看。
一些疑問: 雖然后處理引擎是發(fā)展趨勢,但也還存在幾個(gè)比較麻煩的問題需要解決 1。ALPHA的完美解決方案 2。對于特殊光照材質(zhì)的支持,比如一個(gè)人的頭發(fā),服裝,皮膚肯定是采用不同的光照方法渲染的,頭發(fā)是各相異性的,服裝是漫反射的,皮膚是帶SSS的,如何知道每個(gè)象素采用哪種著色方式是非常重要的,從畫面上開SC2好象沒能很好的解決這個(gè)問題,比如蟲族應(yīng)該是表面看上去濕轆轆的有黏液,人族應(yīng)該是粗糙鍍層的金屬表面居多,神族物件看上應(yīng)該是閃閃發(fā)亮反光率很高的材質(zhì),現(xiàn)在所有的物體看上去象橡皮泥捏的一樣,特別是戰(zhàn)略模式下尤為明顯。

3。還有一些雜碎,比如反射,陰影等。

(機(jī)器問題,圖片貼不上,隨后再補(bǔ))

通過技術(shù)分析,得到一個(gè)結(jié)論,如果效果全開,星際2一定是相當(dāng)?shù)馁M(fèi)機(jī)器,想買電腦的朋友,可以等等看

轉(zhuǎn)載于:https://www.cnblogs.com/effulgent/archive/2008/12/08/1350332.html

總結(jié)

以上是生活随笔為你收集整理的星际2的一些技术特性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。