
項目最近從Unity5.5.1更新到Unity2017.4.1,抛棄了一些相容低端機的做法,項目更新了基于standard shader的PBR、線性空間、後期效果PostProcessingStack V2,從2月的預研到3月份正式更新,在短時間内做了新的效果更新。其實2017年也一直在做效果的提升,在這個手遊畫面競争愈發激烈的時代,卻顯得很乏力,但是2017年
基于Unity5.5.1的努力不能因為結果不理想而被否定,是以我總是想對那些說我們畫面比不過其他手遊的同僚或者對手進行技術辟謠。謹以此文獻給2017年的辛苦付出,順帶提及的2018年的變化有空會重新整理。
一、主城翻新
2017年對主城翻新了2次,第一次是增加了一片野外區域,地圖尺寸擴充為512*256,後來因為大輕功的需求,第二次重新調整了建築大小和密度,地圖尺寸擴充為512*512。
每一次翻新都涉及到模型調整、光照調整、邏輯重做、曆程重改等等,但是到了年底,項目仍然做出了新的決定,重做主城,畢竟遊戲都做到第二版了,需要給新玩家耳目一新的感覺。
二、大地圖制作
重新定義主要視角為3D視角,開始制作大野外、大地形的場景,地圖尺寸512*512。而現在制作的新主城尺寸達到1024*1024,新野外尺寸也做到了2048*2048。
三、基于實體的渲染
渲染流程更新為真正的基于實體的渲染,光照模型更新為PBR ( Physically-Based Rendering ),替換掉以前模拟PBR所用的Blinn-phong。PBR渲染的紋理:顔色貼圖、法線貼圖、金屬度、粗糙度、自發光。其中Metal、Roughness、Emission會合并到一張貼圖的RGB通道上使用。由于項目風格還是偏向卡通化,貼圖制作還是以手繪為主,相信将來移動平台的遊戲制作也都會慢慢轉為标準PBR流程。
四、實時光照和實時陰影
全場景使用實時陰影,在使用實時陰影的同時,還希望場景表現有明暗關系,是以使用了實時光照+陰影+Lightmap。烘焙Lightmap時,不烘焙場景物件的陰影,隻烘焙物件的AO到光照圖,通過實時光照産生實時陰影。我們規範在場景中隻存在一盞實時燈光,這裡在烘焙AO光照圖時,根據需要會增加點光源和場景補光來烘焙需要的光照資訊。因為要相容關閉陰影的情況,是以需要烘焙兩套光照圖,并做對應的優化方案。目前更新Unity2017後使用新的光照流程Mixed Lighting的ShadowMask模式,間接光照和陰影圖分離,與舊方案達到的效果一緻。
五、使用Covermap
從場景的頂視圖視角映射一張帶光影和紋理的圖檔到場景地圖上的物件。地面使用Covermap可以增加燈光細節,地形和草使用Covermap能增加地形細節和大片草的明暗細節。
六、水面實時反射
七、HDR+Bloom
開啟HDR下的Bloom效果,使用的是舊的StandardAssets中的Optimized Bloom。
八、GPU草及草的碰撞
使用GPU Instance特性來繪制草,通過植被輔助工具生成大量的草,單個場景草的數量級可以達到300,000顆,同屏可繪制的草的頂點數可達到20,000個。
九、角色增加流光效果
十、角色捏臉
捏臉使用了骨骼、BlendShape、Shader參數來控制。
十一、存在的問題
年底Untiy官方技術人員過來答疑時,我總結了一些存在的問題
1、缺乏較好的場景LOD功能。LODGroup對于烘焙的場景不太适用且在記憶體方面有負擔。(MeshStreaming功能還在2018計劃中)
2、場景shader的LOD做法仍有不需要的_L、_N貼圖被加載。
3、地形制作美術流程複雜,期望Unity自帶的地形及地形LOD功能可用。(後來的回報是,現在“WorldMachine-Unity-ZBrush-減面優化-拆分”的流程比較适合于目前在移動平台使用)
4、視距擴大後,陰影品質要開到進階才能滿足效果,Unity自帶陰影無法優化。(Unity2017的Mixed Lighting有對實時陰影的優化)
5、遮擋剔除不适合開放空間的遊戲類型。
6、貼圖尺寸變大,記憶體消耗過大,需要可降低記憶體的Mipmap Streaming技術。(開啟Mipmap,并在低端機和低端畫質強制QualitySettings.masterTextureLimit從1級生效,可降低記憶體)
7、需要更多的後期效果,合并優化。(PostProcessingStack)
8、美術資源加載和解除安裝的合理管理。
9、期望優化盡量對美術不可見,不需要美術通過複雜規範來實作優化,而是程式自動優化。
對于第9點,在2017年特别有感觸,美術規範越來越複雜,需要先梳理一番留下必須要的規範,簡化不必要的規範。
我們繞過Unity提供的功能并實作了很多額外的功能,反而是因為Unity對開發人員來說太友善了,以往在自研引擎上需要某一個功能,從發起需求到排入計劃到開發功能到驗收完成所需要的時間,基于Unity來實作時間大大縮短,基于Unity引擎的工具需求,因為太友善就直接做了,慢慢的堆砌出很多的潛規則反而對美術越來越不友好。如果要簡化規則,就需要重視前期的規劃,讓規則更加合理化和黑盒化,當然也有很多必要的規範,也是為了配合程式更好的調配資源和實作功能。
我認為好的優化應該是盡量對美術不可見的,美術能專注于最高效果的表現而不是被各種各樣的規範所拖累,我們不能盡善盡美,但是應該往這個方向努力。Unity開發團隊更重視PC端的功能完善,對手遊團隊來說引擎确實存在一些問題,此外,我們對Unity引擎的引擎底層和功能的熟悉程度還需要加強,才能從更好的角度去解決問題。
在ProjectReview過程中發現一個比較嚴重的問題,就是美術對Lightmap參數的了解不足,官方有關于烘焙流程的詳細文檔,後面會進行總結。https://unity3d.com/cn/learn/tutorials/s/graphics
1、 烘焙速度問題,提高烘焙速度的兩個主要問題:
1)UV Chat 分布不合理:調整Parameter的Resolution參數
2)降低UV Chain的數量:修改GenerateLightmap UV 的Advanced參數
2、 烘焙效果問題
1)未開啟間接光計算精度IndirectResolution和AO。
2)直接光DirectLight過多,建議使用單盞,可以通過後期校色來得到陰影顔色,ColorGrading和Lut的開銷在低配機上也是可以接收的。
3)UV Chat也與烘焙結果有關,應該提升牆體、地面的精度,降低細節部分的精度。
4)陰影精度不夠可以通過模糊參數進行調整。
5)烘焙機推薦設定32核心256G記憶體。