Unity社區(qū)大咖,帶你學(xué)習(xí)多細(xì)節(jié)層次技術(shù)(Level Of Detail,以下簡(jiǎn)稱LOD)。
LOD是非常常用的游戲優(yōu)化技術(shù)。通過精度不同建模,在鏡頭離該物體近的時(shí)候使用精度高的建模展示細(xì)節(jié),在鏡頭離得遠(yuǎn)的時(shí)候放上精度較低的建模來加快整體場(chǎng)景的渲染速度。即根據(jù)攝像機(jī)與物體距離,Unity會(huì)自動(dòng)切換模型,從而達(dá)到性能優(yōu)化的目的。
優(yōu)缺點(diǎn):高效率優(yōu)化GPU,但是因?yàn)橥惶啄P托枰獪?zhǔn)備多個(gè)(高中低)模型,所以內(nèi)存占用會(huì)增多,相當(dāng)于用內(nèi)存換取減輕GPU性能負(fù)擔(dān),提高GPU效率,從而達(dá)到一個(gè)高效率的渲染效果。
官方文檔:https://docs.unity3d.com/Manual/LevelOfDetail.html
LOD維基:https://zh.wikipedia.org/wiki/細(xì)節(jié)層次
實(shí)戰(zhàn)應(yīng)用
快速學(xué)會(huì)基礎(chǔ)配置
嚴(yán)格設(shè)定命名規(guī)則,為了統(tǒng)一管理資源和識(shí)別使用,模型名稱高中低:_LOD0、_LOD1、_LOD2,Culled(模型在場(chǎng)景消失),數(shù)字序號(hào)最低,復(fù)雜程度越高。
設(shè)置層次細(xì)節(jié)組,定義一個(gè)空對(duì)象,添加LODGroup組件。
拖拽不同精度的模型在LODGroup組件對(duì)應(yīng)級(jí)別上(高精度:LOD0(相機(jī)最近顯示)、中精度:LOD1、低精度:LOD2)
Project Settings中與LOD組件相關(guān)參數(shù)
LOD Bias:LOD的偏移值,預(yù)先設(shè)置的【LOD百分比】/Lod Bias=當(dāng)前LOD的百分比,當(dāng)設(shè)置?個(gè)最?效果,如果Lod Bias數(shù)值越?時(shí),那么【LOD百分比】越小,此時(shí)兼容的物體越遠(yuǎn),這時(shí)細(xì)節(jié)不變。
在真實(shí)的環(huán)境中這樣理解,在?配置機(jī)器上,設(shè)置了高畫質(zhì),并設(shè)置對(duì)應(yīng)的Lod Bias非常大,那么物體的細(xì)節(jié)就不會(huì)根據(jù)攝像機(jī)距離進(jìn)?變化,反之設(shè)置低配置時(shí),Lod Bias設(shè)置越小,那么細(xì)節(jié)變化就會(huì)非常明顯。
Maximum LOD Level:最大LOD級(jí)別,表示游戲中使用的最高LOD級(jí)別。在該級(jí)別以上的模型不會(huì)被使用,并且在編譯時(shí)忽略。(這將節(jié)省存儲(chǔ)空間和內(nèi)存空間)。
學(xué)會(huì)在Unity Shader中設(shè)置LOD
Shader會(huì)有一個(gè)LOD值,每個(gè)SubShader有一個(gè)LOD值,當(dāng)SubShader的LOD值小于此Shader的LOD值時(shí),SubShader才能工作。默認(rèn)情況下一個(gè)Shader允許的LOD層級(jí)是無限大的,也就是只要硬件支持的Shader就可以工作。并且也可以利用Shader的細(xì)節(jié)表現(xiàn)提升游戲的性能。
Shader的LOD可以使用Shader.maximumLOD來控制單獨(dú)的Shader,也可以使用Shader.globalMaximumLOD控制全局所有的Shader。
在SubShader中可以使用LOD命令指定不同的LOD屬性,所以可以通過代碼動(dòng)態(tài)修改某一個(gè)Shader的LOD(注意:當(dāng)游戲運(yùn)行修改Shader LOD,結(jié)束游戲后保存Shader在LOD中,所以我們?cè)谟螒蛐薷木褪且脤?shí)際的Shader資源,并且當(dāng)Shader代碼被修改重新編譯,LOD值也會(huì)被重置)
ShaderLad為子著色器指定LOD值:
https://docs.unity3d.com/cn/current/Manual/SL-ShaderLOD.html
參數(shù)Fade Mode(淡化模式)
LOD優(yōu)化策略
我們都知道一套好的LOD系統(tǒng)需要美術(shù)在資源上做大量的資源分級(jí)工作,同時(shí)需要程序搭建完善的LOD框架和輔助工具,每增加一個(gè)功能模塊都需要把LOD考慮進(jìn)來。并且在一般情況,我們還需要根據(jù)手機(jī)機(jī)型的不同采用不同的渲染LOD。如安卓系統(tǒng)低端機(jī)上使用更為簡(jiǎn)單的材質(zhì),從而來降低低端設(shè)備的GPU壓力。
基礎(chǔ)LOD使用原則:
精度復(fù)雜物體(面數(shù)高、頂點(diǎn)數(shù)高)需應(yīng)用LOD
遠(yuǎn)景物件適用
大面積重復(fù)的物體適用
確定項(xiàng)目的LOD分檔,細(xì)節(jié)模塊分級(jí):
三方資源優(yōu)秀分享
1,按需制作LOD,自動(dòng)生成LOD插件:
PolyFew、MantisLODEditor、UltimateLODSystemMT
2,自動(dòng)生成LOD插件AutoLod:
https://assetstore.unity.com/packages/tools/utilities/autolod-impostors-199759
3,自動(dòng)生成LOD插件(Github):
https://github.com/manaporkun/Automatic-LOD-Generator
4,自動(dòng)減面工具:
https://github.com/huailiang/lod
5,草、樹(地形)LOD生成:
https://github.com/Tiggilyboo/UnityQuadTreePlanet
6,地形生成:
https://github.com/barrettotte/Terrain-Generation-Study
7,在Unity中加載Max3D文件:
https://github.com/ProjSEED/Unity-3mx