在Unity中復刻《海島奇兵》海水渲染

週末花了一天時間在Unity中復刻了一下《海島奇兵》海島場景海水的渲染效果,先上目前復刻的效果圖:

總體上還原了海水深度、海面波光、海水流動、海岸泡沫的效果。

復刻的思路其實就是拿Adreno Profiler、SnapDragon和Intel GPA進行抓幀,隨後分析渲染用到的Shader、uniform參數。

記錄一些踩到的坑:

  1. AdrenoProfiler極容易報錯,但是抓到的Resources最完善,但是Mesh中可能某一項屬性如Color末尾缺失,導致導出Obj文件缺少數據,需要手動進行修復,比較花費精力。另外AdrenoProfiler導出的Obj是僞Obj文件,需要手動修復格式描述語法。
  2. SnapDragon要求app的AndroidManifest.xml開啓了Debug選項,否則即使連接上真機,也無法在Take Snapshot窗口中啓動想要抓幀的app。因此需要在抓幀前在反編譯apk添加Debug選項再回編,一般需要配合apktool.jar,但是如果apk開啓了安裝包MD5自校驗,就比較麻煩,騰訊MTP一般都開啓了自校驗。
  3. Intel GPA在安卓下只支持x86架構的app,因此一般選擇連接x86架構的模擬器抓幀,但是直接連接Android的失敗率很高,各種閃退。因此如果使用Intel GPA來抓模擬器,最好配合GraphicsMoniter檢測模擬器真正的繪製進程,隨後在System Analyzer中直接連接localHost,採用DirectX的方式抓幀,成功率理論上是100%。
  4. Intel GPA的FrameAnalyzer體驗最好,但是導出Obj時不含UV信息等,如果在乎Mesh相關的數據,則只能求助AdrenoProfiler。
  5. 抓幀抓到的模型座標系很大概率和Unity不一致,紋理採樣、座標運算等需要進行微調。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章