【SIGGRAPH 2015】【巫師3 狂獵 The Witcher 3: Wild Hunt 】頂級的開放世界游戲的實現技術
作者:西川善司
計算機圖形和交互技術的學術大會【
SIGGRAPH 2015
】,在北美時間的8月9日到13日召開了。
SIGGRAPH 2015的會場,因E3而被熟知的洛杉磯會議中心
SIGGRAPH有着美國洛杉磯和以外地區交替舉辦的慣例,2014年是在加拿大的溫哥華,而今年是在洛杉磯舉辦。會場是舉辦了【
Electronic Entertainment Ex(E3)
】的洛杉磯會議中心。
雖然這些年商業活動方面也加深了,不過
SIGGRAPH還是學術大會。所以,召開規模和來場人數都沒有E3多,也沒有像E3那樣覆蓋了會議中心的巨大廣告。
會場沒有巨大的包裝廣告,外觀只有【
SIGGRAPH 2015
】的橫幅。
和往年一樣,也有很多日本的游戲開發者到場,光是第一天,就看到了SQUARE ENIX,Sony Computer Entertainment ,SEGA Games,tri-Ace,Silicon Studio的開發者。和面向游戲開發着的【
Game Developers Conference
】(GDC)相比,雖然新聞報道者相對較少,但通過從周圍聽到到日語,感覺到到場的日本人的比例,並不比GDC差。
SIGGRAPH 2015上,也有很多游戲圖形相關的會議,最初的9號,有
tri-Ace代表的
五反田義治和
Silicon Studio的
川瀬正樹的關於基於光學的后處理特效技術解說【
Real-Time Rendering of Physically Based Optical Effects in Theory and Practice
】,除此之外,【
Uncharted 4: A Thief's End 】(神秘海域4)和【
The Order:1886
】,【
Deus Ex: Mankind Divided
】,【
Rise of the Tomb Raider
】(古墓麗影)等也會有,今年游戲關聯的會議也很充實,筆者(西川)會在覆蓋范圍內報告的。
五反田義治與
川瀬正樹等人的聯合演講
全部巨大化的巫師3(Witcher3)
SIGGRAPH報告中的一個,就是在日本人氣急劇上升的RPG【
巫師3 狂獵(
The Witcher 3: Wild Hunt
)
】為主題的制作解說。
名為【
Killing Monsters: Behind the Scenes of the Witcher 3: Wild Hunt
】的會議,由該作品的圖形結構和配置解說【
Building the World of The Witcher 3: Wild Hunt
】和圖形引擎的詳細解說【
Rendering Features of The Witcher 3: Wild Hunt
】的兩部分構成。全部報告的話時間花費太多,本篇報告的是非游戲開發者也容易理解的話題比較多的前半部分會議的概要。
負責會議的
是,是擔當
CD PROJEKT RED的技術美術指導的
Krzysztof Krzyscin
名為巫師3的RPG,是以屋內屋外的無縫銜接的廣闊開放世界為舞台,游戲世界里存在的東西,也是全部都在動態移動,玩家可以和這些交互,是挑戰再現【究極的生動游戲世界】的作品。
巫師3的賣點。超過40平方公里的地域,屋內外無縫環境,超過200小時的游戲量,相當大的世界。
2011年發售的前作【
The Witcher 2: Assassins of Kings
】(簡稱巫師
2
)的情況,開發人員總數93人,巫師2
是幾倍的222人,對應開發規模人員也擴大了。
巫師3和巫師2開發員工總數比較。對應游戲世界的擴大,開發規模也擴大了。
還有,巫師2里,探索的區域面積是1.2平方公里,巫師3是48.1平方公里,游戲世界的規模也擴大了。不光如此,總游戲時間也擴大到200小時以上,就像字面上所說,向系列最大級的大作游戲成長。
Krzyscin回顧到。
巫師3和巫師2的大小比較,大概擴大了40倍
圖形引擎采用了基於物理渲染
游戲平台成為了
PlayStation 4(后面簡稱PS4)以及
Xbox One后,巫師3的圖形引擎也革新了,采用了稱作現世代標准配置的基於物理的渲染。
渲染引擎方面,以延遲渲染(
Deferred Rendering
)為基礎,采用通過GPU的
Compute Shader進行光源剔除處理的【
Tiled Base Deferred Rendering
】,半透明等需要特殊處理的對象物體,另外使用了Forward
Rendering。
另外說一下,其他的工作室里,以【戰地4】等
Electronic Arts的游戲而熟知的游戲引擎【寒霜(
Frostbite
)】,也采用了這種方式。
Diffuse擴散反射使用了
Lambert 模型,Specular鏡面反射采用了
Cook-Torrance模型,通過【Uber Shader】(萬能型Shader)的設計,1個Shader就可以表現各種材質,成為了近代的配置。之前巫師
2里的shader數是110個,在巫師3里,盡管向圖片真實上提高着,還是限制為29個。
黃點表示的是巫師2的Shader數,紅點是巫師3的Shader數。盡管表現力提升了,shader數還是變成了1/4的程度。
在最近游戲里也常見的,巫師3同樣采用了游戲內晝夜隨時變化的表現。表現晝夜變化的關鍵,就是光照。
巫師3中,全方向光源采用了使用環境Cubemap的【
Imaged Based Lighting
】,這個環境Cubemap的使用,要美術師手動來設定獲取位置來生成。Specular鏡面反射用的CubeMap是128x128像素,而更粗糙一些的Diffuse擴散反射使用的是16x16像素。
環境CubeMap的獲取位置是通過美術師手動設定。
關於這個CubeMap,並不是靜止的,而是每3幀被重新生成的結構,動態的光源變化也在環境CubeMap里反映。因此,金屬材質上的Specular鏡面反射效果,有3幀的延遲,不過還是可以反映近處的動態光源位置。
通過每3幀更新一次的環境Cubemap來對應場景的動態變化。
從上向下降低粗糙度的材質着色結果的例子。
拍攝的實際的晝夜變化的演示動畫,可以做參考
巫師3中,基於物理渲染的晝夜表現
顯示晝夜表現的兩個種類的演示,通過基於物理渲染的導入,在任何光照條件下,也不會出現材質的陰影表現不自然的狀況。
Krzyscin,對開發世界游戲表現不可欠缺的
天氣系統的概要也做了說明。
這個,就是預先制作出晴天,陰天,雨天和雪天的的天氣模板,再通過調整構成天氣的風和雨的強度的參數,可以作出各種天氣變化的結構。
巫師3中天氣系統模板的一個例子
特別是風,成為巫師3中的氣候系統的重要要素,風的強度和方向,會影響衣服的搖擺和水面的波浪,漂浮在水面上的物體對象的浮力,以及花草樹木的搖擺。在現在的游戲里,只是搖晃表現,都會很好的受到風的影像來運動。有玩家注意到么。
受風影像變化的要素
接觸雨和水后角色被濡濕的表現也導入了。角色方面,在骨骼信息里有[
Wetness
](
濡濕狀況
)的參數,是進入河中,或者被雨淋時
濡濕狀況值會上升,離開水或雨時,經過一段時間
濡濕狀況值會減低的結構。看這個動畫里也可以很容易的理解。
進行水
濡表現的系統概要
巫師3中,被水浸入的角色的濡濕表現
有顏色的影像不太容易理解,通過看消去顏色的表現,角色進入水的部分變黑,出水后過一會變回白色的狀況就好理解了。
表現
水濡的Shader,是通過基於物理渲染來降低
濡濕部分的粗糙度的提高Specular鏡面反射效果的同時,降低Albedo(反射率)使之變黑來實現的。由於衣服被水
濡濕,通過水影響的材質表面會變得光滑和增加光澤,顏色看起來也會發黑。就是通過這個Shader來表現的。
那么,盡管天氣系統很重要,在建築物里和洞窟中等不受氣候影響的地方,天氣系統無法觸及的。這里使用的就是,稱作【Interior Volume】的立體的標記系統
屋內外無縫銜接的巫師3,必須設定在屋里不受天氣的影響
被屋頂和牆壁圍住的降雨無法達到的建築物里,把建築物全體設置為
Interior Volume。被設定為
Interior Volume的領域,就變成天氣系統無法影響的,【建築物里也下雨】的這種在有些開放世界游戲里看到的現象,在巫師3里是不會發生的。
介紹
Interior Volume的配置的幻燈片
介紹
Interior Volume的配置的幻燈片,對幻燈片左邊的建築物,像右邊幻燈片里那樣來設定
Interior Volume,制作出天氣系統無法影響的領域。
為了雨水的落地和流動的表現,程序化(Procedural )的后處理特效的方法使用也做了說明,根據
Krzyscin所說,是從繪制完成的場景的深度信息,計算出場景的像素單位的發現,對應這個傾向,來分配進行雨水表現的shader。
進行雨表現的特殊后處理特效的實現
通過這個可以做到的表現的話,例如,(物體表面)正朝向天空(頭頂上)部分的雨水落下,適用波紋蔓延的效果,(表面)橫向朝向天空的部分,使用雨水向下流動的效果。
物體對象和角色的動作也是,通過面的單位來適用雨的效果。
巫師3里的雨水的表現
移動物體對象改變雨打中的面的角度,可以看到特效變化的狀況。
巫師3的交互系統
Krzyscin敘述到,
巫師3盡全力制作的,不光是風景的表現,還有角色和環境的交互表現的開放。不過雖然盡全力的,但還是每個的實現還是簡單的。
例如,配合角色運動的衣服,和物體對象的動態破壞,通過
NVIDIA的【
PhysX
】來實時模擬動態生成。還有,進入水中的剛體物體對象的運動,使用了簡單的福利模擬,草木和角色的碰撞,進行了膠囊形的簡單碰撞判斷,進行草木的倒下的表現。
進行角色和環境交互表現的要素
巫師3中,配合角色動作的衣服和飾品的動作表現
飾品和小道具的動作,通過
PhysX的物理模擬來生成,女性的毛發也是一樣,女性的內衣姿態算是“殺必死”了
物體對象的交互,對是通過管理1024x1024紋素的平面領域,采用給予膠囊形狀的基本碰撞來進行波浪模擬的古典方法。因此,角色和物體對象接觸水面引起的波浪,都是基本的同心圓狀的
波浪
。雖然並不真實,但因為巫師3不是水里游戲為主的游戲,這么做也足夠了。
物體對象和水面的交互,采用了正統的方法、
巫師3中,物體對象和水面的接觸表現。
突入到水面的物體對象,在沖擊波產生了波紋。這個沖擊波的形狀,基本上都是簡單的膠囊裝。
角色之間的群組系統和野生動物的行為控制,動物群的控制機能也實現了。因為“說起來就太長了”(
Krzyscin氏
),這次只有其中的群組的控制系統被做了簡單的說明。
群組的控制系統,是通過鳥和魚運動中使用,提前計算回避彼此間不會互相重疊沖突的行為,在游戲里再給予它隨機數元素,可以看到有機的群體活動。看這個動畫也很容易理解了。
巫師3中,通過群體控制系統來運動的鳥群
巫師3的地形表現
最后被說明的,是地形和水面區域表現使用的技法。巫師3中的地形,是通過BumpMapTexture來生成表現凹凸分布的結構,通過Height Map,在接近視點的地方,進行高精度適應型的tessellation,生成了有很多多邊形的地形。
地形是基於Height Map來構築的
對於地形的Texture Mapping,采用的了
X/Y/Z 3個方向進行平面Mapping的
Tri-Planar Mapping方法、通過這個技術,在復雜凹凸的地形的貼上地表明的Texture,不會產生異常的變形。
還有,在地形上放置的道路並不是程序生成,而是通過美術師來進行設定。
地形上的道路是通過美術師來設定的
巫師3中地形表現的要素分解
水面方面,首先是對決定的場所做“成為水面”的設定,而水面上的凹凸波浪的表現,通過畫面坐標系的Tessellation來實現的。總之,接近視點的地方波浪用更多的多邊形表現,距離遠的就用較少的多邊形表現的結構。另外,視野外的水面被剔除掉,也不進行繪制和模擬。
水面波浪的表現也是
使用Tessellation來制作的,做成接近視點的波浪多邊形更多的來表現的結構。
另外說一句,波動模擬方面,是實現了
Jerry Tessendorf的論文【
Simulating Ocean Surface
】中提倡的方法。這個方法,最初是在孤島危機(
Crysis
)中,以后在各種游戲中實現,有着把復雜的波動的重合,用快速傅里葉變換(Fast Fourier Transform, FFT
)在頻域中進行的特點。
原文鏈接
http://jerrytessendorf.blogspot.com/2011/10/simulating-ocean-surface-jerry.html
巫師3的情況,
表現對象相鄰波浪
是通過512x512點的柵格來處理的。最初的實驗是通過CPU進行計算,產品版中成功的通過GPGPU來降低處理消耗,通過和其他處理的疊加,成功的隱藏了處理的時間,
Krzyscin說明到。
波浪的模擬,采用了標准的
Jerry Tessendorf的方法
巫師3中海面和波浪的表現
海面的波浪表現方面,和水面的基於波紋的波浪不同,是合成了復數的頻率的波動來生成的。還有,對於漂浮的物體對象,進行基本的浮力發生的模擬來生成行為。
所謂開放世界的表現,可以說是就像制作【世界模擬器】一樣。即便是數十平方公里四方的有限空間,不加入所有要素的話,就無法構築出有說服力的世界。正因為如此是難度很高的表現主題。
因為完全世界模擬器的構築並不現實,【用什么程度的品質來實現哪
些元素
】變得很重要,巫師3中,選擇了在以一各個的實現方式的簡單方法的同時,實現了考慮能實現的全部的表現要素,通過人力和物力的方法,構築了開放的世界。
雖然通過這些可以獲得開放世界的表現的一個回答,但之前登場的合金裝備5和最終幻想15等日本制作的開放世界的游戲,能實現哪種程度的表現上,也非常的在意。
總之,在國內外的頂級的游戲開發中,對開放世界表現的追求肯定會繼續推進的。
