手遊逆向分析: Unity內還原遊戲場景/角色渲染效果
以某第三方自研引擎開發的遊戲為例,展示分析過程以及在Unity內重建的效果。
先對比下手機上最高畫質效果和Unity內覆盤效果。帶UI的截圖是真機遊戲第一個戰鬥場景畫面。
下圖是在Unity內復現整個場景的效果。
在截幀工具的選擇上,考慮到獲取真機上準確的資料,排除使用Nsight,GPA和模擬器。最終使用Adreno Profiler和Tegra Graphics Debugger,測試機選用MI3和MI Pad。
另外說明一下,高通推出了新的Snapdragon
Profiler。老的Adreno Profiler經常崩潰,擷取不到完整的Draw Call。原因是隨著高品質遊戲出現,profiler已經無法準確判斷頂點緩衝裡的資料格式。老版本profiler還是拿簡單的頂點格式去套用到新遊戲上,所以經常會出現異常。新的Snapdragon Profiler乾脆直接把存頂點資料的功能給去掉了,以保證其穩定性。但是減少了profiler一個重要的擷取功能。
但是每個裝置廠商的profiler截幀取到的現場資料是完整的,只是無法提供正確的分析結果。針對這個問題的解決方案是自己寫一套vertex buffer,index buffer和API events分析提取除錯工具,根據不同的頂點緩衝格式資訊提取模型,最後再寫一個FBX匯出外掛,把obj檔案轉成Unity可用的assets。最後,Shader的還原,這方面只有靠經驗和人肉翻譯了。
以上是Unity內覆盤後Scene視口的效果。可推測出具體的一些製作細節:
1.地形以Tile為單位,每個Tile的長度是32米。Tile分三層,每層有albedo和法線貼圖,根據一張Mask貼圖做混合。示例場景用了5個Tile。其中一個完整的Tile,其他四個Tile是面積很小的碎片。
2.場景支援天氣系統,分別支援雨天和雪天。可以通過材質引數控制雨雪在地面上的厚度表現。
3.每個模型物件分兩個頂點緩衝。第一個緩衝記錄位置,法線,切線和兩套UV,第二套UV為lightmap uv。第二個緩衝是用編輯器烘培上去的,記錄的資訊有:a)lightmap的編碼對映資料,uv定址資訊,b)模型的世界座標矩陣,傳入shader內計算。這樣做有利於draw call的合批。
4.植被分兩種,帶動畫和無動畫的。
5.模型材質的Lod分兩種,高畫質採用基礎的金屬度物理渲染模型(Physical-based Shading),使用到albedo,metallic,normal和lightmap貼圖,比如視野範圍內的石像。低畫質採用簡單的albedo diffuse加Lightmap,比如視野範圍遠處的房屋古建和浮島。類似浮島這種獨立於Tile之外的場景沒有合批,世界矩陣還是單個傳入pipeline。這種方式符合2.5D視角設計。
6.光源採用一盞平行光主光源,最多支援四個點光源。示例場景中實際使用了平行光產生diffuse,另外加了一盞點光源。點光源掛在角色的身上,跟隨運動。這也是遊戲截圖和Unity復原圖中光影細微差別的原因。因為兩幀角色站立的位置不一樣。
7.示例場景一共使用了6張1024的lightmap。
8.支援兩種霧效,1)高度霧和距離霧混合2)使用貼圖的體積霧。最高畫質使用的是第一種。
9.天空盒模型掛在攝像機上,跟隨其運動。世界座標在Shader根據視錐屬性計算得出。
上篇對手遊場景的逆向分析,接下來的內容針對第三方遊戲在真機上的角色渲染,分析還原其效果。仍然以某自研引擎開發的第三方遊戲為例,介紹在Unity內還原遊戲的角色效果。
首先看真機效果和還原效果對比。
上面第一張帶UI的是遊戲截圖,第二張是分析後Unity內還原效果,第三四張是還原的角色近景。
GPU資料的擷取使用高通和Nvidia的工具。模型的提取轉化需要注意的地方有:
1,因為高通的profiler擷取的頂點資料經常丟失,相關buffer用Tegra Debugger去截。
2,Unity匯入切線時會自動normalize,而NeoX引擎的模型會用切線的長度記錄資訊,同時FBX,unity對單個uv不能同時支援四個通道,所以自己寫工具處理FBX檔案時需要做一個trick:用兩套uv對切線進行編解碼。
3,骨骼動畫採用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+副法線方向上對反射的多次擾動實現。
附:騰訊光子工作室群技術美術組招聘 Shading Tech Artist(含實習生,長期有效)
作者:大星星
專欄地址:https://zhuanlan.zhihu.com/p/26215257
相關文章
- 遊戲場景渲染中的PostProcessing(後處理)遊戲
- Unity遊戲框架設計之場景管理器Unity遊戲框架
- 如何分析休閒遊戲的廣告場景?遊戲
- 製作遊戲是先有劇本還是先有地圖、場景等內容?遊戲地圖
- Newzoo:手機角色扮演遊戲報告遊戲
- 分析“英雄射擊遊戲”的角色設計遊戲
- Unity也做遊戲了?而且還會開源?!Unity遊戲
- Unity遊戲示例來了,用Unity開源遊戲資源做遊戲,遊戲開發不再難!Unity遊戲開發
- 遊戲運營活動效果分析(四):開新服效果分析遊戲
- 國內主機遊戲錢景如何?遊戲
- 網易《天諭》攜手Unity引擎,引爆高品質遊戲市場Unity遊戲
- 【Unity遊戲開發】不接SDK也能在遊戲內拉起加QQ群操作?Unity遊戲開發
- 遊戲角色設計思路遊戲
- 某Unity3D遊戲加固產品分析Unity3D遊戲
- 內容型休閒遊戲分析(一)——填色遊戲遊戲
- 遊戲場景中的光影設計遊戲
- Unity 報告 | 2020年遊戲市場分析及2021年趨勢預測Unity遊戲
- 遊戲基礎知識:角色“退場”的設計遊戲
- 場景分析:遊戲關卡難度對玩家流失的影響遊戲
- 改編不是亂編:我們是如何在遊戲中還原《紅樓夢》經典場景的遊戲
- 一個遊戲角色是如何誕生的——原畫篇遊戲
- 遊戲基礎知識——“載具內部”場景的設計手法遊戲
- 技術分享 |《原神》部分渲染效果分析(非官方)
- 遊戲圖形批量渲染及優化:Unity靜態合批技術遊戲優化Unity
- 遊戲運營活動效果分析(二):版本更新遊戲
- 【Unity3D開發小遊戲】《戰棋小遊戲》Unity開發教程Unity3D遊戲
- 模擬經營手遊之王?《Township》遊戲拆解分析遊戲
- 國內PC遊戲市場回暖 端遊許迎高峰遊戲
- 使用Unity製作遊戲AIUnity遊戲AI
- 遊戲場景構成研究:圖形構成遊戲
- 遊戲運營活動效果分析(三):區服合併分析遊戲
- 遊戲運營活動效果分析(六):新人直升活動分析遊戲
- 建築師解構遊戲關卡——遊戲研發中的場景需求遊戲
- GameRes 3月手遊覆盤:317 款遊戲測試,休閒遊戲持續領跑手遊市場GAM遊戲
- 室內設計遊戲為何風靡移動遊戲市場?遊戲
- FANTASIAN for Mac(RPG角色扮演遊戲)Mac遊戲
- 使用 GAN 生成新的遊戲角色遊戲
- 記一次逆向分析解密還原Class檔案解密