最美馬賽克——簡析八方旅人的render path

序言
八方旅人6月份在pc上發(fā)布了(其實還有手游,不知道什么時候公測),還帶來了新的價格單位“方”,不過這些不是本文討論對象。雖然八方旅人沒有參加夏促,但是在這個周末還是帶來了PC版第一次打折,只要5.6方。在爆機NS版的時候就一直想研究八方旅人的渲染,現(xiàn)在機會來了,自然不能錯過。
八方旅人在防截幀上還是做了一些努力的。很慚愧,我個人也做了點微小的工作。對于這種防君子不防小人的設(shè)計,我還是很喜歡的。
接下來分析一下畫面,先提前說結(jié)論,和UE4的PC/Console的render path區(qū)別不是很大,經(jīng)典的延遲渲染,對UE4 SM5很熟悉的同學(xué)可以直接跳過本文絕大部分內(nèi)容。我就那歐菲利亞的出生點,圣火城,還有開頭的第一個戰(zhàn)斗的一些值得說的地方討論一下。如果大家有什么見解和疑問,也歡迎在評論區(qū)指出。
場景

對場景抓幀之后,我直接被嚇了一大跳,1690個drawcall,驚了!我以為八方旅人的場景非常復(fù)雜,但是完全想不到八方旅人的場景居然這么的復(fù)雜。這個時候,就要回想起延遲渲染的流程,然后按步驟依次拆解。
Depthonly pass

首先是延遲渲染的depthonly pass,沒什么好說的。
Geometry pass
接下來是Geometry pass

可以看到,Geom pass和UE4的Geom pass非常的像



noraml,diffuse,depth這些延遲渲染該有的應(yīng)有盡有。而且,可以看到,是3D場景+2D人物的方式來進(jìn)行繪制,從drawcall的數(shù)量來說,已經(jīng)完全不比3A游戲少了。

其中,有一個RT專門用來繪制人物。


人物的Color map的A通道用來存儲mask。除了Color map之外,還有一張額外的Normal map,可以說八方旅人的人物渲染非?!?A”非常豪華了。
其中,還有一些我想額外說的。雖然是像素風(fēng)的游戲,但是建模異常的精致,尤其是場景。在這個場景中舉幾個例子。



一扇門幾扇窗就有7w頂點,而教堂更是超過了11w的頂點。這個模型精度可以說是相當(dāng)?shù)目鋸垼业姆磻?yīng)真的就是四個字——工匠精神。
也許是風(fēng)格化的貼圖需要,也許是性能確實OK,這些地方并沒有使用LOD。整個渲染過程中有很多看上去可以batch的地方?jīng)]有batch,也許GPU真的不瓶頸吧。
Shadow map
在Depthmap中繪制了大量的volume之后,就開始了shadowmap的繪制

我在Goem pass還給沒有LOD找了個理由,但是看到shadow map之后,我只能說,犯懶了。shadowmap完全沒有必要使用原模型。
緊接著繪制陰影

Pointlight and fog

球型是點光源的范圍,最后幾個全屏是霧
Decal

繪制場景中被雪覆蓋的區(qū)域
體積光

場景中只有一道體積光,而且并不是十分明顯,我高亮一下drawcall可以看得清楚一些

Particle
接下來就是八方旅人的粒子系統(tǒng)了,相信大家也被八方旅人的特效驚艷到了

其實就是UE4 cascade?particle system,其中有一點需要注意,就是場景中的表示可互動的氣泡也用粒子系統(tǒng)繪制了

Post-processing

后期效果包括Bloom,景深,Tone mapping。其中

該圖是景深的mask,表示不要景深模糊的區(qū)域。由上下兩半構(gòu)成,上半是圖像本身的mask,下半是bloom后的mask,顏色相反,bloom的mask可以看到比原圖的mask稍微大一圈。
UI

和UE4相同,UI的繪制放在最后,記得我之前提過,場景中的3D UI以粒子系統(tǒng)的形式提供,而場景中的2D UI,可以說非常簡單。
戰(zhàn)斗
戰(zhàn)斗畫面的render path大體和場景一致,我就把一些不同的地方點出來吧。
人物



人物戰(zhàn)斗是另外一套精靈圖,真的是良心十足了。
陰影

可以看到戰(zhàn)斗場景陰影貼圖使用了SCM,人物陰影和場景陰影貼圖是分開的
粒子

相比大地圖場景,戰(zhàn)斗場景要額外繪制技能特效
UI
戰(zhàn)斗場景的UI比漫游場景還是復(fù)雜很多的,畢竟交互也多了不少



可以看到,UI使用了扭曲特效,也就產(chǎn)生了額外的讀寫RT