簡介
我們在Terrain engine介紹篇時有提到SpeedTree這個高品質的套件,我們在非HDRP環境下使用是會正常顯示的,但當我們將專案升級到HDRP時,就會讓此套件的材質顯示不出來,使用HDRP的Edit -> Render pipeline->Upgrade Project Material to HDRP來升級材質,其餘的材質都是可以無痛轉換,但在SpeedTree則無法直接地將材質升級,此篇就來述說一下要怎麼讓SpeedTree在HDRP環境下也可以正常顯示。
Trees Structure
當我們匯入SpeedTree進入到他的資料夾會看到他的資料結構,會有一棵樹的SpeedTree Prefab、Material資料夾與有關該Prefab所使用到的貼圖。你也可以看到還沒轉換過的樹木在場景中的紫色慘況。首先我們先點選Prefab,在Inspector可以看到有關此模型的設定。
點選Model旁邊的Material按鈕,來看看有哪些材質球需要轉換成HDRP/Lit的,LOD階層有五種,會依照攝影機由近到遠顯示不同的模型與相符的材質;LOD0是離攝影機最近的距離,最遠則會讓此模型消失Culled。
了解了每個LOD所對應的材質球後,我們先從最近(LOD0)的開始動作,找到LOD0材質球資料夾,將裡面的材質球全選,我們先要將它轉換成Standard Shader,必須要這麼做,因無法直接使用無痛轉換法(原因不明)。
有了上一動後,我們才可以進行無痛轉換法Edit -> Render pipeline->Upgrade Project Material to HDRP,點下之後會跳出一個是否要進行此動作視窗,按下Process即可。當我們攝影機是與樹木距離為LOD0時就可以看到你剛剛動作的小成果,但是樹木葉子看起來怪怪的,我們必須進行下一步驟。
我們選到LOD0資料夾內的葉子材質球,我們在Alpha Material那篇有提到怎麼讓物件有透明材質,這邊就可以應用上了,將Surface Type選成Transparent,並將Double-Sided與Alpha Clipping打勾,下一步可以調整葉子的透明材質的穿透度Threshold,SpeedTree官方建議設定值為0.333。
接下來就是重複上面所說的步驟在該樹木的Material資料夾的所有材質,全部轉換好後點選樹木的Prefab並點選Material,如下圖,當你轉換好貼圖時左上方的小圖還是會顯示材質出錯的小圖示,但下方因為你將材質改過後就會即時更新,我們要保持整個樹木物件在Unity3D中任何地方都可以正常顯示的話,請點選Location->Use Embedded Materials,最後按下Apply即可。
當我們的SpeedTree在場景中可以正常顯示時,順道一提可以到樹木的Prefab調整LOD的階層,並且點選每一個LOD可以設定下方有關陰影、光線、Normal Map等等的設定,在中階效能調校時可以調整此區域,多多少少也可以提高整體效能。
Reference:https://store.speedtree.com/the-state-of-the-speedtree-unity-hdrp-pipeline/