http://hi.baidu.com/dicezxr0/item/a82715c3243d0757bdef69f3
那啥,我寫了這麼多也挺不容易的,轉貼請注明作者和出處
作者:零zXr0
http://hi.baidu.com/h0nker/profile
文章分為上下兩部分:
寒霜系列引擎技術解析[上]:遊戲制作與圖像效果
http://hi.baidu.com/h0nker/h0nker/blog/item/f2897e3608310dd4a2cc2b4c.html
寒霜系列引擎技術解析[下]:音效,Havok與DX11
http://hi.baidu.com/h0nker/blog/item/3691a61371483c8b6538dba7.html
本文為上,看完之後請閱讀 下半部分
本文從09年6月釋出,更新至今一直在修正和填補,至今已經分成上下兩段
目前文章完成度44%-----2010/12/24/ 10 :12
(主要架構已完成)
詳細完成度
編輯器、效能——40%
圖像、DX11——45%
音效——42%
Havok的實體、行為、ai及其他——39%
其他——45%
未完待續............
本文風格:大衆化的學院派
本文面向讀者的定位:遊戲修改愛好者、入門級的遊戲制作人員、對後次世代遊戲技術感興趣的玩家
寒霜遊戲引擎 (Frostbite Game Engine)
寒霜是DICE在2004-2005年開始制作的第二款自主研發圖像引擎,大概到2006年時達到較高完成度,用它制作了一個戰地:叛逆連隊1的示範當時 并沒有立即确認支援DX10.後來在07年确認支援dx10并且為ATI R600顯示卡推出了示範demo.在09年中宣布加入了DX11支援寒霜1代,而叛逆連隊2是第一款使用它的PC遊戲,它也具備了DX11支援. 寒霜引擎2目前仍在開發中,将用在下一款戰地系列遊戲上.
戰地:叛逆連隊2的寒霜1.5與寒霜2的關系:
DICE圖形引擎開發部門老大JA明确表示BFBC2隻是讓Frostbite1 引擎能在DX11模式運作,而Frostbite 2 是DX11+ 引擎(是 FULL DX11完全使用DX11為基礎)
Johan Andersson: Yes AMD are correct, we are working together on DX11 benefits for BFBC2 in Frostbite 1. Frostbite 2 is our future DX11+ engine
一、DX10.1版本的Frostbite引擎相對于 refractor2引擎的技術改進能給我們帶來什麼?
對于遊戲制作人員和模組制作人員:
1.1 提供更多實時過程生成和調節的内容
1.1.1.可以對整個時間、氣候、環境進行動态的調節,而不用像某些老遊戲(指半條命2,現代戰争2等)一樣繪制一個假的遠景。
1.1.2 無需為龐大的山脈群建構高精細度模型,可以在寒霜引擎中直接生成。
1.1.3.無需事先繪制貼圖,寒霜中随便生成一個山脈之後,可以調節溫度來控制山脈的形态
1.1.4 如果沒有這些,會怎樣?
某款EA旗下南韓neowiz公司使用fear2的Lithtech引擎制作的線上FPS遊戲為了節省制作時間和提高執行效率,用貼圖山水雲天空效果代替 模型
就連很多美國頂級次世代大作也會因為技術缺陷為了節省資源迫不得已使用紙片山,比如說<現代戰争2>
現實
DICE在寒霜引擎中如此生成的雪山效果賞析:
1.2 提供更人性化的操作
1.2.1 可以在遊戲引擎内實作一些資源的導出和導入,而不用麻煩的來回轉換格式
與各個平台的良好對接:
1.2.2 在EA Bioware幫助下,用HLSL函數帶來任意大小的輸入和輸出,這意味着更加複雜的表面渲染
1.2.3 界面越來越接近為對外發售而設計簡便圖形化操作的虛幻3引擎外銷版
寒霜引擎編輯器 FrostED 的OBJECT編輯界面
寒霜2 引擎編輯器 FrostED 的OBJECT編輯界面
寒霜2 引擎編輯器 FrostED 的 地圖編輯界面
從業人員正在調整頭部
1.3 全新的檔案架構大幅縮小遊戲内容,減少載入時間
與Refractor2使用簡單的zip壓縮不同,寒霜引擎采用了FBRB封裝檔案和預載入技術,在FBRB下是 res(resouces資源),而資源解開後又有新的dbx等格式.雖然看起來壓縮是一層套一層,在BC2實際遊戲中,讀取速度卻更快.
關于寒霜引擎檔案解包請看我這裡另一篇文:
http://hi.baidu.com/h0nker/blog/item/dd6e086daca73ff04316948d.html
對于所有人:
1.4 大量最新技術将提供更低的配置要求
DX10提供給了寒霜新的渲染架構,寒霜将成為孤島危機的CE2之後,配置要求最低的遊戲引擎之一(在與其他遊戲相同的畫面和遊戲設定下,新一代的技術将起到降低配置要求的作用)
渲染架構:
1.5 更多的動态環境支援
可以提供24小時、365天實時變換的天氣,不像refractor2那樣在SKY.CON中隻能設定一種天氣
日月交替模拟
視訊:
1.6 更大的一切
1.6.1 地圖
refractor2支援8192×8192的地圖,而寒霜是32768×32768=1074平方公裡,這比武裝突襲的地圖還大5倍
但是,為了讓遊戲更激烈,實際遊戲可能隻提供4096×4096或者2048×2048的活動範圍
戰地2的refractor2引擎的2048*2048地圖
寒霜1.5引擎的<戰地:叛逆連隊2>的地圖
1.6.2 可視距離
refractor2中,雖無視距限制,但将視距開到3000以上,遊戲非常卡,寒霜中對遠近景關系安排,通過比傳統LOD更好的方式實作。可視距離更大,記憶體顯存占用更低。
1.6.3 可破壞地形
雖然可破壞地形會帶來大量的資源開銷,而DICE不打算在遊戲中采用,但在GDC07 DICE技術講解上已證明支援破壞地形。
可破壞地形:
二.最新的圖像技術帶來的圖像效果
2.1 Undergrowth綠地系統
2.1.1 UnderGrowth系統帶來耗費資源低,效果較好的草地(特别是遠處草地)
2.1.2 undergrowth系統采用的綠葉支援凹凸
2.2 多層次的渲染封裝将支援一些次表面技術
寒霜中運用在人嘴面的次表面散射
寒霜中運用的次表面散射
寒霜引擎2次表面散射
2.3 寒霜引擎的陰影技術:
2.3.1靜态陰影:
陰影貼圖(shadow map)
既畫在貼圖上的陰影.由預烘培軟體烘培在貼圖上,是以是靜态,不能随環境而變化,也不會帶來額外消耗.
Chrome4引擎遊戲sniper雖具備環境光遮蔽和實時動态陰影
然而去掉實時陰影和AO之後,建築和樹幹的陰影還在,與背景不協調,這就是靜态陰影的弊端之一
在鏡之邊緣中DICE使用自己的Render to Texture Baking插件來将"光影"效果預烘培到虛幻3中
2.3.2非實時動态陰影:
平面陰影(Planar Shadow)
DICE1999年的飛鷹行動中就用了動态平面陰影
這樣一個小圓圈或者别的什麼形态不能變換的陰影即為平面陰影.
2.3.3 動态陰影
映射陰影(Shadow Mapping)
目前多數遊戲的方式,驗證預置的所謂"光源"與目标之間有無障礙,如有,就把障礙物圖像黑化之後映射在目标上.
映射陰影實際是一堆會動的1x1半透明黑色貼圖的組合.....
它的品質和shadow map分辨率大小相關.采樣精度至少1024*1024才能消除陰影鋸齒,交錯,而2048*2048尺寸在地鐵2033,潛行者,孤島危機等高階遊戲中使用.
若映射陰影采樣精度低或映射樹葉之類小且與目标距離遠的物體,就會導緻陰影閃爍,交錯,有鋸齒.
2.3.4 全實時動态陰影
全實時動态陰影的好處:
1. 配合動态環境
例:遊戲中物體可破壞,若使用靜态陰影,你将得到一個隻剩一半的房屋,和畫在貼圖上的完整房屋陰影.
2. 不會被貼圖所影響,
例:當你為地面調用了不同的貼圖,如果新增的貼圖覆寫了陰影的貼圖,将會很囧.
3. 可結合動态全局光,太陽光源,打造晝夜變化效果
自投射陰影(Self-Shadow)
既目标陰影可投射到自身,DICE在05年戰地2中使用了此技術,沒記錯的話,DICE是首家.
缺陷:陰影有鋸齒或閃爍,放棄對SM2.0顯示卡的支援可解決這一問題。
解決方案線性百分比漸進濾波、線性插值濾波算法都隻支援SM3.0以上
注意方向盤投射在前排座位上的陰影
2.3.5 軟陰影(Soft Shadow)
軟陰影隻是一種效果,并非一種技術或者算法,實作方式.
用來模拟現實世界無論光照還是陰影,都是一個輻射度的漸變過程,不是陰暗分明這一效果.
正如上面所說,軟陰影的實作方式遠非一種,現在使用比較廣泛的是對映射陰影邊緣高倍采樣,來得到高品質的柔化邊緣.
虛幻3,lithtech(FEAR)等引擎中都依此實作.
效果雖好,但對顯存和性能影響大.是以Crysis中遠處物體沒有陰影,強開隻能效率低下
2.3.6 解決方案:業界最新的陰影生成技術:
層疊陰影Cascaded Shadow Map
方差陰影Variance Shadow Map
使用CSM/VSM算法,亦或兩者皆用,都可以
層疊陰影CSM
原理是将視錐分割成多個,映射陰影根據距離而非視錐決定陰影精度.這導緻了一些距你較近,但是你看不到的物體使用高精度的陰影. 而較遠,卻看得清的物體沒有陰影.
視錐分割是由專門的高數算法推導,是引擎開發者的事,引擎使用者無需關心。
層疊陰影适合表現大規模場景,即使你在空中,一些物體距離你非常遠,也能具有不錯的陰影.
2.3.7 DICE的解決方案
單通道穩定層疊限制盒陰影 Single-pass Stable Cascaded Bounding Box Shadow Maps(SSCBBSM?)
類似于killzone2中的區域回報層疊陰影貼圖技術,但更先進
在DX10提供的單通道陰影技術中,陰影将由少數紋理陣列構成,而非無數個不同的陰影紋理,是以CPU的工作量大為降低
技術對比
柔化陰影示範:
DX11開啟柔化:
DX10關閉柔化:
對比圖:
DX11模式的軟陰影開啟之後,性能損失不超過5%,如顯示卡強力可能為1%-2%
2.4 支援幾乎所有DX9CSM3.0和DX10的遊戲用材質,以及超大的材質分辨率
2.4.1 寒霜引擎支援的一部分貼圖(07年展示,沒有dx10.1/dx11)
2.4.2 寒霜2引擎業界支援最大的材質分辨率:16384×16384
在寒霜引擎中DX9模式支援4096×4096的材質分辨率,DX10支援8192×8192,DX11模式支援6384×16384。
這是什麼概念?
面向低端PC或者遊戲機的熱門遊戲,比如說《使命召喚4》、《光暈3》隻采用了1024×1024的材質分辨率,一些希望通過炫耀畫面賣引擎的遊戲,就像《虛幻競技場3》,它們會采用2048×2048。而孤島危機最高達4096×4096.
雖然支援但DICE不會傻到真的使用此分辨率材質。
2.4.3 細節貼圖(Detail Mapping)
細節貼圖可依附在UV貼圖上,也可以伴随法線,而它自己本身并不需要UV.
托寒霜引擎可以支援多層材質的福,DICE在遊戲中大量使用細節貼圖,以增強遊戲材質的質感
通過執行個體化的平鋪這張128*128的細節貼圖,在顯存占有很低的情況下,就可以達到極好的效果
寒霜引擎遊戲中細節貼圖開關對比
92.3>86.3 性能損失7%
129.5>128.3 損失1%
109.5>106.7損失2%
現實世界存在大量細節
戰地3
現實
叛逆連隊2
使用Chrome4 Engine的狂野西部:生死同盟也使用了細節貼圖
同樣基于寒霜引擎的榮譽勳章Beta中,沒有使用細節貼圖.則缺乏紋理細節
也有一些因為引擎老舊,無法使用細節貼圖的遊戲,如:COD
2.5 寒霜引擎的凹凸材質方面:
凹凸貼圖(bump mapping):一種老掉牙的凹凸技術,隻能生成簡單的圖像凹凸一般隻适合做地磚和牆壁磚的效果和刻字。在虛幻2遊戲中很流行
凹凸貼圖的典型運用
法線貼圖(Normal Mapping):一種在DX8.1時代開始普及的技術,效果一般,能實作不規則圖像的凹凸,無法實作太大的凹凸
法線貼圖的運用執行個體:
視差映射貼圖(Parallax Occlution Mapping)[隻有少數遊戲引擎支援,比如孤島危機的CE2和戰地的寒霜]
視差遮蔽貼圖是一種妥協,它是欺騙你的眼睛,用較低的資源實作較好的效果,但在一些小角度下效果不好。
2005年DICE為ATI制作的toyshop demo中視差貼圖與法線貼圖效果對比:
左視差貼圖,右法線貼圖
孤島危機中的視差貼圖:
視差遮蔽貼圖與法線貼圖的對比
視差貼圖在frostbite1.5引擎的應用:
視差貼圖在BFBC2中的應用已經較為成熟,可以在擊中物體後動态生成,并配合動态點光源模拟彈頭燒紅狀态到冷卻
視差貼圖開關:
視差貼圖效果
硬體位移置換貼圖(Displacement Mapping)位移貼圖是目前最完美的凹凸處理方式,它和凹凸貼圖、法線貼圖、視察置換貼圖等技術差別在于它是“實體凹凸”,而非欺騙視覺。
3年前是不會有人想到位移貼圖這種在renderman、VR等軟體中靠CPU實作的靜幀渲染技術可以用于遊戲。
為什麼CE2不支援位移貼圖,而為TV平台簡化的CE3卻支援?
所有的新圖像技術都是為了在實作更好效果時獲得更低資源和人力占用。而不是僅僅為了實作某種效果。以抗鋸齒為例,可能你會認為抗鋸齒資源占用很大,但4倍抗鋸齒與開4倍像素值的分辨率相比就很節約。位移貼圖也是同樣的道理。此外,位移貼圖主要基于GPU浮點運算,放到PS3上就正好用到那個浮點運算處理器。
寒霜引擎中的雪山線框,實際隻有十幾萬多邊形,但使用位移貼圖可以達到1億多邊形的效果
位移貼圖與法線貼圖對比
無位移貼圖,隻有法線貼圖:
用曲面細分和位移貼圖代替法線貼圖:
上面的雪山隻有840個多邊形,而使用曲面細分技術和位移貼圖之後,實際效果達到了128萬多邊形應有的效果,大大降低了顯存占用
幾何位移與幾何執行個體開關
草/樹: 使用執行個體技術,實際隻建立一棵樹,其他樹的模型為這一棵的幾何執行個體copy,不需反複建立
山: 高度圖與幾何位移置換,此山實際多邊形數量幾百個,效果足以媲美1000萬多邊形的山
上下兩張圖實際多邊形數量相差 569094-568524=570個
地面受攻擊之後
位移在寒霜引擎中的成熟運用:
2.6 延遲渲染
延遲渲染既是将需要渲染的資料的"索引"計算出來,存儲到G-Buffer(緩沖區)中,再由其他的核心及顯示卡渲染剩下的工作.
進而可以将線程拆分,提前計算出更多有用的資訊,進而提高多核心系統的運作效率
使得在寒霜引擎中,隻需要2.0GHZ的四核心處理器就能達到同架構3GHZ以上雙核心處理器的效能,不過也有使用者因為隻有單核心或雙核心,導緻線程配置設定過多運算效率下降,這是技術革新所必須付出的代價.
寒霜引擎可以為最多16核心的CPU提供最佳運作效率
在DX11的direct compute和延遲渲染的高效率幫助下,寒霜2引擎實作了同時引入1000個點光源,這讓我們離光線追蹤又近了一步。
2.7 光學
2.7.1軌迹光線 GOD RAY與體積光
陽光透過濃密樹葉,屋頂的缺瓦射到地面,都會産生可見的光線軌迹,一些早期遊戲如孤島驚魂,半條命2中使用靜态的點光源或者動态的HDR技術來表現這種情況.而Crysis率先引入了容積光&軌迹光線.
軌迹光線的優勢是可以動态變化,像叛逆連隊2中樹木會搖晃,軌迹光線也會随之而動
Crysis的god-ray
寒霜引擎中的動态god-ray:
metro2033中的god-ray
丁達爾效應
以上兩種都不是光(ilumination),光的定義是一定可以與遊戲中幾何的頂點互動,并影響映射陰影
而這兩種都和HDR BLOOM一樣是普通的視覺效果,并不産生互動.亮,不等于光.
我不知道體積光這個翻譯是誰先說的,實際上,容積/體積的光水雲霧什麼的隻是表示一個圖形引擎能夠支援容積粒子效果容積粒子的用處是多樣的.
這個才是真正意義上的體積"光"
不過這個效果還是有缺陷的,現實中,物體會根據光線照射的材質進行不同程度的光子反彈
而crysis中隻反彈一次,這種就叫做間接光照(inderect illumination)
2.7.2 間接光照,全局光,光子反彈與光能傳遞
所謂光子反彈,就是模拟現實中,光會攜帶能量反射反射的情況.原始的光照是直接光照,反射之後的光照即為間接光照, 而多次反射的過程的叫做光子反彈,光子在反彈中攜帶能量衰減的過程叫做光能傳遞.
直接與間接光照共通構成了完整的光照過程---全局光.
stalker的x-ray引擎中對光子反彈的模拟
直接光照下,光不會反彈
開啟了光子反彈的效果
CE3引擎中對GI的模拟
寒霜引擎2 實時光能傳遞
2.7.3 粒子照明 Particle Lighting
寒霜引擎2支援粒子煙霧被光照所影響
2.7.4 SSR反射
2.8 容積水&塑性變形
容積粒子的實體化,可以運用于塑性變形和其他流體力學模拟
當你在水邊,在地上炸出一個坑,水會順勢流入坑中灌滿.
2.9 整個渲染流程
寒霜1.5(BFBC2)
寒霜精簡版(MOH)
三 音效
先進音效帶來更震撼的聽覺體驗
3.1 HDR音效
HDR音效是DICE原創的一項音效技術,工作的原理大概是平時環境音效正常,有突然出現的聲音(如原來不存在的開火,換子彈,腳步,爆炸等)時就遮蔽環境音效(一直存在的聲音如音樂,流水,挂風聲,自己的腳步等).
聽起來簡單,但這已不是EAX自帶的技術了,不是降低聲音那麼簡單,同時也會調用很多濾波器來處理音效.
效果示範:
3.2 對創新公司最新聲霸卡和音效技術的支援
上一代的refractor2引擎就已經立下了遊戲音效技術标杆,戰地2是首款支援EAX5.0、X-RAM的遊戲,不同的環境、距離有不同的音效,在第一人稱、第三人稱、不同距離、水邊、室内等等環境下開槍音效是不同的,而且按V進行的語音通話中,不是從所有通道同時發聲,而是人在哪,就從哪邊出聲,完全支援杜比5.1環繞。
3.3 在實際開發遊戲時,音頻計算以CPU為主,減低使用者負擔
katamakel,dice音頻技術員說到,為了照顧主機平台和96.3%沒有使用創新聲霸卡的PC使用者,将更多的使用CPU來計算音頻部分.
3.4 DICE的軟實力:聲音采集
DICE沒有“制作”遊戲音效,一切都是錄制的,大多數遊戲公司早就可以到射擊場錄制槍聲音樂
瑞典SAAB公司在2005年用DICE前一代的refractor2引擎技術為瑞典國防部制作了模拟軍事指揮訓練系統,三方關系不錯,是以DICE是少數或者唯一真的可以獲得主戰坦克、自行火炮、重型榴彈炮、SAAB戰鬥機這類裝置進行遊戲音頻錄制的公司。
四 Havok的動作,行為與實體(剛體/流體力學)
DICE與ATI/AMD合作,由最新内部版Havok帶來的強大實體、破壞效果及動作豐富的 BOT
4.1 Havok physics 實體引擎
這是遊戲中所有表現的基石,無需實體卡或特定顯示卡即可實作重力、重量、品質、密度、力量、浮力、彈性的準确模拟。
4.2 Havok destruction 破壞引擎
destruction引擎采用Collision Detection碰撞檢測系統,這将有别于以往傳統遊戲中的hitbox系統。适合造成動态破壞。
帶來前所未有的高範圍破壞,可完全毀壞遊戲内的所有物體(載具、建築、橋梁、樹木.....)和部分地形
帶來前所未有的高精度破壞,你可以削去飛行中飛機的翅膀或者其他什麼地方,也可以炸壞房屋一角,這一切都不是程式編輯好的,不是調用破壞後的模型和貼圖,你可以決定破壞什麼部位。
4.3 Havok animation 動作引擎
它是負責什麼的?好吧,動作就是一切的一切。
如果沒有animation,遊戲中車輪不會轉動,兩腿不會邁開,士兵也不會換彈匣或者蹲、站、跳、卧倒、側傾。最新版的動作引擎帶來流暢的動作,在使用寒霜引擎的rubydemo中,僅ruby臉部就有上百個可動部件,這是前所未有的。值得一提的是很多好萊塢電影大片也是使用Havok。
大量的可動部件
與動作捕捉系統結合:
4.4 Havok Behavior 行為引擎
它将讓bot學會新的行為、動作、戰術
你是否曾注意到,在一些采用havok的遊戲中,就像光暈3和半條命2,友好的AI會轉身面向你,會和你産生互動。敵人則不僅會沖向你開火,他們也會尋找掩護(找到一個物體來擋住你的和它的hitbox),在彩虹6号3:盾牌行動之類的戰術遊戲中,敵人甚至擁有包抄、迂回等戰術。在寒霜內建的最新版中,Havok-Behavior的AI表現會更加強大,例如你會看到bot弓腰通過,攀爬,或者跳過障礙,遇到爆炸物選擇躲避或是撿起來扔回去。
Havok 行為示範:
4.5 子產品化的碰撞檢測系統
子產品化的碰撞檢測系統vs舊式整體Hitbox:
Hitbox系統是傳統的遊戲傷害和實體運算判定系統,每個物體都是一個整體,整體内劃分幾個區塊,2006年之前的遊戲全部采用該系統。
而現在的新一代Havok Destruction遊戲已經采用子產品化分區碰撞檢測系統替代整體hitbox,遊戲每個物體可以由多個子產品組成。可以通過擊毀物體的某一部分(如履帶)造成物體部分功能缺失。也可以根據碰撞力值演算生成不同程度的全地形破壞效果
碰撞檢測系統目前的究極模式:
碰撞檢測系統在遊戲中達成的破壞效果
整體HITBOX也能實作一些破壞,但隻是靠腳本實作.
戰地2的hitbox模式破壞示範:
遊戲中沒有用到的Havok流體力學與布料力學展示:
4.6 Havok vs Physx
physx是以API實作的,是一個外部插件,不能和遊戲引擎完美結合,需不斷檢測你有沒有觸發每一個條件,這需要大量的浮點運算,是以浮點運算能力強的顯示卡運算起來隻是費勁,CPU模式打開它就隻有個位數的幀了.而且physx隻能執行nv官方提供的幾套算法,自由度不高.
而havok是一套功能豐富的遊戲開發元件,開發者可以根據需要把其中幾項功能封裝到自己引擎的底層,由于是CPU運算X86指令集,還能執行很多開發者自己發明的代碼,工作模式是引擎内部的觸發式,是以有些情況下會看到你都看到BFBC2裡面炮彈擊中牆了幾毫秒,牆才碎有延遲.如果你不斷的同時擊碎什麼東西,就不會有延遲了,因為遊戲會自動切換到一個觸發頻率高的模式.有些havok遊戲預設就工作在這個模式
大多數遊戲用的都是havok的剛體力學模拟破壞系統,布料/頭發的柔體力學模拟&氣動方面的流體力學模拟插件沒發揮出來
在破壞的精度上,havok和physx是一樣的,都遠超出實際需要和處理能力
實作方法都是将一個物體劃分為若幹碰撞子產品,每個子產品可被從主體上擊碎下來,然後這個碎塊還繼續帶有碰撞檢測屬性.
理論能達到對着一個人開一槍,可射出一個空腔,而不是擊碎成幾塊.這需要大量碰撞檢測子產品
重要的是physx基于api,在不同api的硬體上無法實作,不能用于多人遊戲,總不能你N卡可以打壞一堵牆崩死後面的A卡使用者,人家不能
同樣是havok,版本也千差萬别,而physx基本相同,因為havok不光是實體模拟,是一整套遊戲開發元件,包括AI(行為),動作等都有
五、寒霜2引擎與DX11:
5.1 DX11 是什麼?廠家的支援情況怎麼樣?寒霜2是如何支援DX11的?它又能帶來什麼?
DX11是微軟09年力推的新一代API,他不是一個真正“全新”的API,而是基于DX10.1,你可以把它當作DX10終極版,DX11同時支援vista和win7,将解決現有即時渲染的很多效能問題。
目前ATI 5系列顯示卡完全支援DX11。目前已有DICE,codemaster,GSC等多家遊戲制作商跟進。DX11完美向下相容DX9.0\9.0B\9.0C DX10.0\DX10.1,其中DX10規範硬體甚至可以通過新驅動獲得Compute shaders等技術的支援,dx11對多線程和多核心提供最佳支援
5.2 寒霜為何,又如何對DX11提供支援?
DICE的程式員們僅花了3個小時就把寒霜從DX10.1規範更新到DX11,70%的時間花費在代碼增加和替換,在做遊戲時可以在DX9.0c/DX10.1/DX11/PS3/XBOX360模式之間切換。DX11版本的寒霜引擎可以對8核心提供支援。
以下是DICE内部切換DX10.1和DX11用的一個腳本
#ifdef DICE_D3D11_ENABLE #include <External/DirectX/Include/d3d11.h> #else #include <External/DirectX/Include/d3d10_1.h> #endif #ifdef DICE_D3D11_ENABLE #define ID3DALLDevice ID3D11Device #define ID3DALLDeviceContext ID3D11DeviceContext #define ID3DALLBuffer ID3D11Buffer #define ID3DALLRenderTargetView ID3D11RenderTargetView #define ID3DALLPixelShader ID3D11PixelShader #define ID3DALLTexture1D ID3D11Texture1D #define D3DALL_BLEND_DESC D3D11_BLEND_DESC1 #define D3DALL_BIND_SHADER_RESOURCE D3D11_BIND_SHADER_RESOURCE #define D3DALL_RASTERIZER_DESC D3D11_RASTERIZER_DESC #define D3DALL_USAGE_IMMUTABLE D3D11_USAGE_IMMUTABLE #else #define ID3DALLDevice ID3D10Device1 #define ID3DALLDeviceContext ID3D10Device1 #define ID3DALLBuffer ID3D10Buffer #define ID3DALLRenderTargetView ID3D10RenderTargetView #define ID3DALLPixelShader ID3D10PixelShader #define ID3DALLTexture1D ID3D10Texture1D #define D3DALL_BLEND_DESC D3D10_BLEND_DESC1 #define D3DALL_BIND_SHADER_RESOURCE D3D10_BIND_SHADER_RESOURCE #define D3DALL_RASTERIZER_DESC D3D10_RASTERIZER_DESC #define D3DALL_USAGE_IMMUTABLE D3D10_USAGE_IMMUTABLE #endif
5.3 DX11新特性在寒霜2中的應用:
隻讀深層紋理緩沖:節省顯存和記憶體占用
BC6H紋理壓縮模式:BC6是為高動态範圍(HDR)的lightmap、envmap等材質打造的壓縮技術,可以節省顯存,壓縮比率為6:1
BC7紋理壓縮模式:為低動态的紋理打造的紋理壓縮技術,可以運用于多數材質,壓縮比率為3:1
Compute shaders通用計算技術:雖然這個GPU通用計算技術是為視訊壓縮轉換等正常任務打造,但遊戲中的粒子效果、後期處理濾鏡等都可以用到這個技術,GPU的參與将減低CPU的負擔。
DOF動态景深:
在一些遊戲中,景深是早就實作了的,不過這種景深更多的是螢幕邊緣XXYY區域模糊或者XX米外模糊.動态景深技術支援根據遊戲内視角具體情況演算出動态景深,不過在DX9API下,會出現類似馬賽克的情況.
AMD 動态景深示範
寒霜1引擎的叛逆連隊中的動态景深示範
Tessellation 曲面細分技術:這個技術很全能,它可以減輕CPU在生成的多邊形時的負擔,又可以對遠近景關系智能調節,比如說遠景隻渲染輪廓和填充基本顔色,不調用高分辨率的貼圖。最重要的是,位移貼圖技術将是以受益。ATI将讓該公司DX9/DX10顯示卡以及使用A卡的XBOX360也支援這一技術,軟飯們可以拿這個去噴索飯了。不過DX9/360版本的曲面細分隻是象征性,因為大多數内容隻支援16位,而DX11是64。
曲面細分和位移貼圖結合方式:
P-F minlod:比前幾代的LOD更好,對遠近景材質提供更合理的安排,以提升圖像效果和渲染速度。非常适合大地圖的戰地類遊戲。它基于Tessellation技術。這代的lod不需要CPU介入,完全GPU處理且不占用顯存/記憶體。
SSAO螢幕空間環境光遮蔽僞光線追蹤技術:雖然DX9和DX10都可以提供環境光遮蔽,但是DX11對此技術将提供一些效能和效果的改進。
BF:BC2的寒霜1.5引起使用的是HBAO技術,寒霜2應該會引入更好的算法
注意坦克底盤凹槽處的陰影,那就是環境光遮蔽的功力展現
六.“技術本身并不能帶來什麼,關鍵是技術的運用”
6.1 寒霜引擎的應用領域:
不隻是戰地,DICE自家的所有遊戲都可以運用,包括拉力賽車、戰地、鏡之邊緣2,如果願意的話彈球遊戲也可以。鏡之邊緣1在05年開始制作,而當時寒霜還沒有完成,是以用了UE3。
6.1.1 已确認使用寒霜引擎的程式:
ATI顯示卡性能示範程式:
ATI Tessellation demo(2007)
ruby demo 4.0 : whiteout(2007)
frostbite2 1000 point light demo(2009)
6.1.2遊戲:
Medal of Hornor / 榮譽勳章2010
Medal of Hornor 2 / 榮譽勳章2
Mirrors Edge 2 /鏡之邊緣2
Need For Speed The Run / 極品飛車16:亡命狂飙
Dead Space 3 / 死亡空間3
Dragon Age 3 / 龍騰世紀3
Army of Four / 戰地四雄
6.1.3戰地系列:
Battlefield 1943 戰地1943
Battlefield Bad Company 戰地叛逆連隊
Battlefield Bad Company 2 戰地叛逆連隊2
Battlefield Bad Company 2- Vietnam 戰地叛逆連隊2:越南
Battlefield 3 戰地3
6.2 寒霜引擎開發套件的輔助工具
DICE美工工具 (DICE Art Tool for MAYA)
DICE開發了一套用于在MAYA中友善建立&關聯角色,動作,裝備的開發元件.
.
七.寒霜引擎2與主流次世代引擎技術規格對比:
七.寒霜引擎2與主流次世代引擎技術規格對比:
寒霜引擎2.0
Frostbite Engine 2
BY EADICE
遊戲: Battlefield 3 尚未發售
主要規格
API: Driectx 11.0&10 & Driectx 9.0C
Texture Resolution(材質解析度) :16384*16384
Quadcore-Multithreading(多核心多線程) √ (16)
Tesselation(曲面細分)√
Deferred shading(延遲渲染)√
Live Create(編輯器動态建立)√
Ambient Occlusion (環境光遮蔽)√
Soft Shadow (柔化陰影)√
Fully-Dynamic Realtime Shadowing(全動态實時陰影)√
Self-Shadow(自投射陰影)√
Anti-Aliasing& Shadow(陰影反鋸齒/閃爍)√
Direct Illumination(直接光照)√
Indirect Illumination(印射光)√
Global Illumination(全局光)√
Local Illumination(局部印射)√
Photon mapping(光子映射貼圖)√
Raytracing(光線追蹤)×
Radiosity(實時輻射度照明)√
bouncing light(光子反彈)√
Dynamic Wet Surface(實時浸潤表面)×
sub-surface scatterring(次表面散射)√
Translucency Shader(半透明印射)√
BLOOM (過飽和度)√
High Dynamic Range (高動态範圍光照)√
God Ray (軌迹光)√
Normal map(法線貼圖)√
Detail map(細節貼圖)√
parallax occlusion(視差映射貼圖)√
Displacement map(硬體位移置換貼圖)√
megatexture(頂點貼圖)×
Multi-sample(多重采樣)√
Alpha to coverage(通道印射)√
shadow map(陰影貼圖)√
Instancing(點緩存系統)√
Gizmo particle(容積粒子)√
Volume Shader(體積Shader)√
Vertex Animation(頂點動畫)√
Bones animation(骨骼動畫)√
Cloth dynamics(布料動力學)√
Hydro dynamics(流體動力學)
Character dynamics(角色動力學)√
Frostbite Engine 1.5
BY EADICE
遊戲:
Battlefield:BadCompany 2 尚未發售
(1.0 for Battlefield 1943& Battlefield BadCompany 無PC版)
主要規格
API:DX11/10/9.0C
材質解析度 :16384*16384
√多核心多線程(4)
√曲面細分
√延遲渲染
√編輯器動态建立
√環境光遮蔽(HB)
√柔化陰影
√全動态實時陰影
√自投射陰影
√陰影反鋸齒/閃爍
√直接光照
√印射光
√全局光
√局部印射
√光子映射貼圖
×光線追蹤
√實時輻射度照明
√光子反彈
×實時浸潤表面
×次表面散射
√半透明印射
√BLOOM
√HDR
√God Ray
√法線貼圖
√細節貼圖
√視差映射貼圖
×硬體位移置換貼圖
×頂點貼圖
√多重采樣
√通道印射
√陰影貼圖
√點緩存系統
√容積粒子
√體積Shader
√頂點動畫
√骨骼動畫
√布料動力學
√流體動力學
√角色動力學
Cryengine 3
BY Crytek
遊戲:
CRYSIS2 尚未發售
主要規格
API: DX11/10/9.0C
材質解析度 :16384*16384
√多核心多線程
√曲面細分
√延遲渲染
√編輯器動态建立
√環境光遮蔽
√柔化陰影
√全動态實時陰影
√自投射陰影
√陰影反鋸齒/閃爍
√直接光照
√印射光
√全局光
√局部印射
√光子映射貼圖
光線追蹤
√實時輻射度照明
√光子反彈
×實時浸潤表面
√次表面散射
√半透明印射
√BLOOM
√HDR
√God Ray
√法線貼圖
√細節貼圖
√視差映射貼圖
√硬體位移置換貼圖
×頂點貼圖
√多重采樣
√通道印射
√陰影貼圖
√點緩存系統
√容積粒子
√體積Shader
√頂點動畫
√骨骼動畫
√布料動力學
√流體動力學
角√色動力學
Cryengine 2
BY Crytek
遊戲:
Crysis PC獨占 150萬
Crysis:Warhead Crysis:Wars PC獨占 單作低于 100萬,尚未記錄 3款總合200萬以上
主要規格
×多核心多線程
×曲面細分
×延遲渲染
×編輯器動态建立
√環境光遮蔽(SS)
√柔化陰影
√全動态實時陰影
√自投射陰影
√陰影反鋸齒/閃爍
√直接光照
√印射光
√全局光
√局部印射
√光子映射貼圖
×光線追蹤
√實時輻射度照明
√光子反彈
×實時浸潤表面
√次表面散射
√半透明印射
√BLOOM
√HDR
√God Ray
√法線貼圖
√細節貼圖
√視差映射貼圖
×硬體位移置換貼圖
×頂點貼圖
√多重采樣
√通道印射
√陰影貼圖
√點緩存系統
√容積粒子
√體積Shader
√頂點動畫
√骨骼動畫
√布料動力學
√流體動力學
√角色動力學
X-Ray Engine 1.6
BY GSC Gameworld
遊戲:
1.0 for Stalker:SOC 200萬
1.5 for Stalker:CS 單作低于 100萬,尚未記錄
1.6 for Stalker:COP 單作低于 100萬,尚未記錄
主要規格
API: DX11/10/9.0C
√多核心多線程
√曲面細分
√延遲渲染
×編輯器動态建立
√環境光遮蔽(SS+HB+HD)
√柔化陰影
√全動态實時陰影
√自投射陰影
√陰影反鋸齒/閃爍
√直接光照
√印射光
√全局光
√局部印射
√光子映射貼圖
×光線追蹤
√實時輻射度照明
√光子反彈
√實時浸潤表面
×次表面散射
√半透明印射
√BLOOM
√HDR
√God Ray
√法線貼圖
√細節貼圖
√視差映射貼圖
×硬體位移置換貼圖
×頂點貼圖
√多重采樣
√通道印射
√陰影貼圖
√點緩存系統
√容積粒子
√體積Shader
√頂點動畫
√骨骼動畫
√布料動力學
√流體動力學
√角色動力學
Chrome 4
BY Techland
遊戲: Call of Juarez : Bound in Blood (Chrome 3 for Call of Juarez )
銷量: 單作低于 100萬,尚未記錄
主要規格
API: DX10/9.0/9.0C
材質解析度:8192*8192
√多核心多線程
×曲面細分
×延遲渲染
×編輯器動态建立
×環境光遮蔽
√柔化陰影
√全動态實時陰影
√自投射陰影
×陰影反鋸齒/閃爍
√直接光照
√印射光
√全局光
√局部印射
√光子映射貼圖
×光線追蹤
√實時輻射度照明
√光子反彈
×實時浸潤表面
√次表面散射
√半透明印射
√BLOOM
√HDR
×God Ray
√法線貼圖
√細節貼圖
√視差映射貼圖
×硬體位移置換貼圖
×頂點貼圖
√多重采樣
√通道印射
√陰影貼圖
√點緩存系統
√容積粒子
√體積shader
√頂點動畫
√骨骼動畫
√布料動力學
√流體動力學
√角色動力學
Unreal Engine 3
BY EPIC
GAME:
UT3 單作低于 100萬,尚未記錄
GOW 單作低于 100萬,尚未記錄
GOW2 無PC版
主要規格
API:DX9.0C
材質解析度:4096*4096
×多核心多線程
×曲面細分
×延遲渲染
×編輯器動态建立
×環境光遮蔽
√柔化陰影
×全動态實時陰影
√自投射陰影
×陰影反鋸齒/閃爍
√直接光照
×印射光
×全局光
√局部印射
×光子映射貼圖
×光線追蹤
×實時輻射度照明
×光子反彈
×實時浸潤表面
×次表面散射
√半透明印射
√BLOOM
√HDR
×God Ray
√法線貼圖
×細節貼圖
×視差映射貼圖
×硬體位移置換貼圖
×頂點貼圖
√多重采樣
×通道印射
√陰影貼圖
×點緩存系統
×容積粒子
×體積shader
√頂點動畫
√骨骼動畫
√布料動力學
√流體動力學
√角色動力學
IW Engine 4/3
BY Infinity Ward
遊戲:
IW3:Call of Duty 4 PC單作低于 100萬,尚未記錄
IW3.5:Call of Duty WAW PC單作低于 100萬,尚未記錄
IW4:Call of DutyModern Warfare2 美國地區17萬以上
主要規格
API: DX9.0C(DX9.0 sm2.0支援IW3)
材質解析度:4096*4096
×多核心多線程
×曲面細分
×延遲渲染
×編輯器動态建立
×環境光遮蔽
×全動态實時陰影
×自投射陰影
×陰影反鋸齒/閃爍
√直接光照
×印射光
×全局光
×局部印射
×光子映射貼圖
×光線追蹤
×實時輻射度照明
×光子反彈
×實時浸潤表面
×次表面散射
√半透明印射
√BLOOM
×HDR
×God Ray
√法線貼圖
×細節貼圖
×視察映射貼圖
×硬體位移置換置換貼圖
×頂點貼圖
√多重采樣
√通道印射
√陰影貼圖
√點緩存系統
×容積粒子
×體積shader
√頂點動畫
√骨骼動畫
×布料動力學
×流體動力學
√角色動力學
好吧,如果一款遊戲不支援上述技術,會發生什麼?
首先是最高效果與最低效果之間差别不大
這是2007年銷量冠軍<使命召喚4:現代戰争>的
最高效果
最低效果
那麼為什麼差別不大呢?因為這款遊戲大多數效果都是靠貼圖實作,而不是sharder.是以無論你開啥效果也沒太大差別.
現在讓我們去掉貼圖
然後就是執行效率低下,優化很差. 多邊形生成率等參數慘不忍睹
多邊形生成率=目前幀多邊形數量X每秒幀數
通常在同樣場景空間下,多邊形數量更多意味着場景内的圖像複雜度更高,表現更精細.或者同樣精細度下場景空間更大.
而多邊形生成率是3D圖形業界衡量軟硬體渲染性能的重要名額.
很多著名射擊遊戲都是執行效率差優化差,靠小場景,紙片貼圖遠景充數的典型
以下是各圖像引擎在我同一台機器上的執行效率(多邊形生成率)
别人如果是I7+5870效率自然分别都會更高,不過隻要都是4核心+DX10系統,效率的排名應該不變
1. CryEngine2 (Crysis)
多邊形數量:2,300,392個/幀
幀率:28.8幀/秒
多邊形生成率:66,251,289個/秒
2. Frostbite Engine (BFBC2 beta)
多邊形數量:1,496,398個/幀
幀率:37.0幀/秒
多邊形生成率:55,366,726個/秒
3. Chrome4 Engine (COJ:BB)
多邊形數量524,186個/幀
幀率:61.2幀/秒
多邊形生成率:32,080,183個/秒
4. Unreal Engine 3 (鏡之邊緣)
多邊形數量:177,517個/幀
幀率:52.0幀/秒
多邊形生成率: 9,230,884個/秒
5. IW4 Engine (現代戰争2)
多邊形數量:99,411個/幀
幀率:70.4幀/秒
多邊形生成率: 6,998,534個/秒
看到上面的排名,有人會問,是不是多邊形數量越多執行效率就越高,而多邊形數量越低執行效率就越低,和API/圖像引擎完全無關呢?
當然不是了.
這裡有一個失敗品drivingspeed,多邊形數量也很多,光是一個車就20W多邊形,不過圖像效果很渣,而且我已經卡到不行。。。
選車界面
多邊形數量: 215,343
幀率: 42.8
多邊形生成率: 9,216,680
多邊形數量: 900,055
幀率: 10.3
多邊形生成率:9,270,599
多邊形數量: 823,235
幀率: 11.6
多邊形生成率:9,549,526
多邊形數量: 742,341
幀率: 12.7
多邊形生成率:9,427,730
通過以上,我們可以發現在遊戲主要參數不變的情況下,多邊形生成率相對比較穩定,多邊形數量與幀率成反比.
是以.如果以UE3,source,IW4等引擎制作出100萬以上多邊形數量的圖像很容易,在同一場景内加幾百個人就可以了,你會發現很快卡的根本動不了.而使用它們的廠商也很有自知之明.會對場景進行簡化,例如像一開始那樣使用紙片貼圖代替模型.減小地圖大小.
其實以UE3,source,IW4等引擎的廠商也很有自知之明.會對場景進行簡化,例如像一開始那樣使用紙片貼圖代替模型.減小地圖大小.
八. 寒霜引擎的版本
8.1 相同點:
FULL DX9.0C SM3.0
HAVOK Physics
Havok Destruction
Havok Animation
Havok Behavior
8.2 不同的版本
frostbite 1
《戰地1943》/《戰地:叛逆連隊》
API:DX9.0C+D3D10.1
Havok Physics 6.0
Havok Destruction1.0
frostbite 1.5
《戰地:叛逆連隊2》/ 《榮譽勳章》多人部分
API:DX9.0CSM3.0+DX10/10.1/d3d11
Havok Physics 6.5
Havok Destruction2.0
frostbite 2
《戰地3》/《極品飛車16:亡命狂飙》/《榮譽勳章2》/《鏡之邊緣2》
傳言:《死亡空間3》/《戰地四雄》/《品質效應3》多人部分
API:DX9+DX10 + FULL Directx 11.0
Havok Physics 7.0?
Havok Destruction3.0?