手游逆向分析<二>: Unity內還原《鎮魔曲》角色渲染效果

上篇對手游場景的逆向分析,本文針對第三方遊戲在真機上的角色渲染,分析還原其效果。仍然以自研引擎NeoX開發的《鎮魔曲》為例,介紹在Unity內還原遊戲的角色效果。

首先看真機效果和還原效果對比。

上面第一張帶UI的是遊戲截圖,第二張是分析後Unity內還原效果,第三四張是還原的角色近景。

GPU數據的截取使用高通和Nvidia的工具。模型的提取轉化需要注意的地方有:

1, 因為高通的profiler截取的頂點數據經常丟失, 相關buffer用Tegra Debugger去截。

2,Unity導入切線時會自動normalize, 而NeoX引擎的模型會用切線的長度記錄信息,同時FBX,unity對單個uv不能同時支持四個通道,所以自己寫工具處理FBX文件時需要做一個trick: 用兩套uv對切線進行編解碼。

3,骨骼動畫NeoX採用GPU計算,而Unity在CPU計算。為了方便展示,模型需要帶有骨骼動畫pose,這個在導出FBX時把截到的骨骼矩陣計算到頂點。

材質Shader人肉翻譯,解析提取後總結如下:

1, 角色分為三部分,身體,頭部和頭髮繪製(不包括武器道具)。

2, 角色光照。實時光包括一盞平行光和點光源,預計算Spherical Harmonics Diffuse對角色補光,美術可以通過參數修改lighting的佔比,以及再打一盞平行光補光,避免出現明暗劇烈過渡。

3, 頭髮的SH Lighting在頂點計算,身體的SH Lighting在像素計算。

4, 角色的Spherical Harmonics Diffuse在展示界面和場景內設置是不一樣的,但是在同一個場景內,SH都是一樣的。反射則是靜態的,永遠保持不變。

5, 服裝金屬部分,採用GGX BRDF模型。

6, 皮膚部分3S的表現主要是對diffuse進行線性warp處理。

7, 頭髮各向異性效果,通過brdf + 副法線方向上對反射的多次擾動實現。

相關鏈接: 手游逆向分析<一>:Unity內還原《鎮魔曲》場景渲染效果
推薦閱讀:

Unity命令行模式,也能「日誌實時輸出」
利用GPU實現無盡草地的實時渲染

TAG:Unity游戏引擎 | 手机游戏 | 计算机图形学 |