Simulator Scene in Unity3D – Terrain Engine (Section 2)

Paint Trees

延續上一篇Section1將地形繪製後,接著講述地面上的植栽樹木工具,可以先至Asset Store下載免費版的SpeedTree來練習Paint Trees。如下圖所示上方的紅色框框是在說明如何在Terrain塗繪樹木;我們先來說明怎樣把素材匯入到Terrain Engine中。

先找到Edit Trees按鈕並按下Add Tree,一開始只有這選項可以點選,因為Engine中沒有樹木可以Edit & Remove。點選後會跳出左邊視窗,在橙色框框處可以拖拉SpeedTree的Prefab到這空位處,或是可以點選後面的小錨點,系統會自動歸類出可以匯入的樹木物件。

這裡要提到的是Bend Factor數值,他是可以控制跟Wind系統連動的參數,我們下載的SpeedTree物件沒有包含這個功能在裡面,要在Unity Tree Editor製作的樹木才可以使用這參數,所以在這邊我們就維持0,都設定好後按下Add。

完成上一動後,就會出現一棵樹在Engine的資料庫中。而我們在地形中的樹木當然都不想要高矮胖瘦都一樣,如此會顯得整個場景很生硬不自然,所以Settings的部分就是要上每棵樹木都可以隨機產生高矮胖瘦與顏色。

Brush Size
繪製樹木的筆刷大小,但不一定筆刷越大數量越多,是跟下面樹木的大小參數有關。
Tree Density
樹密度控制,在Brush Size定義的區域上繪製樹的平均數量。數值越大越密。
Tree Height
樹木的高度,後面有個Random按鈕,建議打勾,拉霸有分最大值與最小值,Random出來的變數會介於使用者所界定的值去新增。
Lock Width to Height
這個選項就是要不要依照樹木的物件原始比例去縮放,建議是打勾。當這個按鈕打勾時,下方的Tree Width就會disable不能讓使用者調整。
Tree Width
樹木的寬度。也是有Random的模式。
Random Tree Rotation
這邊是在講如果你的樹木有製作LOD的效果,就把這選項打勾,因為它可以幫助創建一個外觀自然的隨機森林的,而不是人工種植相同的樹。 如果要以固定的相同旋轉角度放置樹,就把這選項取消,建議是打勾才沒違背我們的宗旨。
Color Variation
應用於樹的隨機陰影量。 假如你的樹木Shader有TreeInstanceColor屬性時,此方法才有效。 例如,使用Tree Editor製作的樹都有掛載TreeInstanceColor屬性。所以我們的SpeedTree調這個是沒效果的。
Tree Contribute Global Illumination
啟用此選框可向Unity指示GameObject的位置是固定的,並且它將參與Global Illumination計算。如果未將GameObject標記為Lightmap,仍然可以使用Light Probes將其照亮。

這邊Unity提供了一個懶人植栽功能,如下圖所示。將下方Settings都設定好之後,我們不用再Terrain上繪製,直接按下Mass Place Trees會跳出左測視窗,裡面有兩個參數要設定,一個是Number Of Trees你要在Terrain上自動生長的樹木數量,第二個是Keep Existing Trees這個是假如你已經有在Terrain上繪製好自己的樹木是否要留著的選項。

上述都設定好之後按下Place,系統直接給你長好長滿。

實用且重要的撇步
假如你自己繪製的樹木覺得不好看想要移除,案Ctrl+Z又回不到之前的那樣,Enging有提供特殊編輯方法,在第一張圖有用紅色匡出,繪製是直接在Terrain上按滑鼠左鍵,要移除指定樹木,就先選擇該樹木的type接著就按著Ctrl並在想要移除的樹木Terrain上按下滑鼠左鍵即可。假如不限數目品種就按Shift+滑鼠右鍵即可。在下面要說的Paint Detail也是這樣繪製與移除。

Paint Details

這個工具主要是草植被或是低水平的地面細節所會使用到的工具,這邊就有出現筆刷的選項,在剛剛的樹木工具則沒有。但繪製方式是跟樹木工具相同,我們可以按下Edit Details…按鈕來新增要植栽的物件。這邊可以新增的方式有兩種,其一是Add Grass Texture,這個是指需要有帶著alpha圖層的貼圖就可以新增,可以看下圖左側視窗有個Detail Texture,放置貼圖處,而其餘參數是設定該物件的大小、顏色、混雜度。
這邊要著重提到的是Billboard參數,他是可以讓Texture做出double-side一個效果,當你Camera移動的視角轉動,Texture會跟著他做計算並呈現,讓草感覺很稠密,假如資源允許建議是打勾。

而第二種新增方法叫做Add Detail Mesh,如下圖,在Detail區塊中他吃的是GameObject的資料型態,所以你要先經過場景處理過,包成Prefab,或是要新增的物件是一個3D物件,才可以拖拉到此區塊中,而其餘的參數跟上面以Texture新增的差不多。
Render Mode有兩個選項,一個是在Vertex Lit,Unity將細節對象渲染為頂點點亮的實體。 Grass模式下,Unity以類似於草的方式使用光照在場景中渲染細節。

Paint Details一樣有筆刷大小、材質精細度與材質在Terrain上的數量,在Paint Details的Settings可以做數值的拖拉,全部設定好之後就可以在地形上繪製了。

Terrain Settings

這邊會比較多東西要設定,打個比方這邊是要安排我們的Terrain的身理數值、地形上素材的精細度與扯到系統資源的東西。我們仔細地依序介紹。

Basic Terrain

Grouping ID , Auto Connect在上一篇有講過,與鄰近的Terrain他會自動連結並給他相同的Grouping ID。
Draw:啟用地形渲染。你不打勾你就看不到你的Terrain。
Draw Instanced:將渲染實體化,把這選項選取會將渲染的細節靜態化,可以省系統資源
Pixel Error:地圖間的渲染密度(例如Heightmap , Texture)與生成的地形之間的映射精度,簡單來說就是容錯率,容錯率越低他要計算的Pixel會越多。較高的值表示較低的精度,但具有較低的渲染開銷,數值越高越省效能
Base Map Dist.:Unity會計算你賦予Terrain的Texture解析度,假如你設定的值小於你的解析度,系統會把超出的材質降低畫質以維持效能,所以這裡數值越低越省效能,但也要衡量你要呈現的畫質。
Cast Shadows:使用此選項定義地形如何將陰影投射到場景中的其他對像上。有四個選項:1.Off :Terrain不會投射陰影,2.On:開啟投射陰影,3.Two Side:從地形的任一側投射兩側陰影,4.Shadow Only:來自地形的陰影可見,但地形本身不可見。
Reflection Probes:使用此設置可以設置Unity如何在Terrain上使用Reflection Probes光照。Standard Material與含有支持反射渲染的Material才有效。裡面也有四個選項可以選。1.Off:禁用Reflection Probes,並使用Skybox Reflection。2.Blend Probes:使用Reflection Probes的效果。假如有多個反射物件則他們的效果會互相影響。3.Blend Probes And Skybox:兩者併用。4.Simple:單純使用Reflection Probes,不會跟其他反射物件交互。
Material:設置渲染Terrain時要使用的材質。在目前HDRP版本必須使用Unity提供的Default HDTerrainMaterial,否則又會一片紫色了。

Tree & Detail Objects

此處設定是牽扯到Terrain上的植被,故調整好也會對效能有所提升。

Draw:此按鈕假如勾選,Engine會將你所在Terrain上的Trees & Details顯示;不勾選擇不會呈現。
Bake Light Probes For Trees:此打勾,Unity創建一個內部的Light Probes來將每個樹木相互運算光照,但此內部光照不會跟場景的其他物件影響,只會與Terrain中的樹木有關。
Remove Light Probe Ringing:這個選項可能是不要讓太多的光照影響樹木的渲染,意思是有些光照可以指定物件渲染,而在此移除這種功能再對於Terrain的樹,但Bake的Lightmap則不會影響。
Preserve Tree Prototype Layer:有時候樹木植栽到Terrain物件上就會跟原本直接拖曳到場景的樣貌有所不同,此按鈕是在說是否要保持原樣。
Detail Distance:距Camera的距離  超出的部分將被剔除。這個參數類似Camera的Near&Far參數。
Detail Density:給定面積單位中的Details or Grass的數量。將此值設置得較低可以減少渲染開銷。
Tree Distance:距Camera的距離,超過該距離的樹木就會看不見。
Billboard Start:這裏可以看一下什麼是BillBoard,他就是類似LOD的效果,這邊假如你有使用這個物件且貼上樹木的2D Texture,當Camera超過一個距離時,較遠的樹木則會轉換成這個render模式。所以這邊是調整距離門檻。
Fade Length:樹在場景中GameObject之間過渡的距離與Billboard。
Max Mesh Trees:表示為實體3D網格的可見樹的最大數量。超過此限制,將樹木替換成Billboard。

Physics & Wind Settings for Grass

Physics
Thickness:該值表示Terrain的Collider厚度有多少(厚度是沿著Y軸延展),厚度越厚,可防止高速移動掉落的GameObject穿透到地形中。設定這個就可以不用使用耗資源的Continuous Collision Detection

Wind Settings for Grass
假如你場景中有掛載Wind object,下列的設定才會有效果。
Speed:設定風速。
Size:風吹過草地上的漣漪的大小。
Bending:風在草物體上彎曲的程度。
Grass Tint:Grass的整體顏色。

Mesh Resolution

Terrain Width & Length:Terrain物件的常跟寬。
Terrain Height:Terrain的高,要注意的是他算是最高限度限制,會連動到Set Hight的最大高度。
Detail Resolution Per Patch:單個面片(mesh)中的單元數。將該值平方以形成單元格網格,並且必須是Detail Resolution的倍率。數值介於8 – 128。
Detail Resolution:可用於在Terrain上放置詳細信息的單元格數。將該值平方成一個網格單元。數值介於0 – 4048。

Exp.最小單位8

Texture Resolutions

Base Texture Resolution:相對貼圖分辨率。數值介於16 – 2048。
Control Texture Resolution:控制貼圖分辨率。16 – 2048。
Heightmap Resolution:地形的高度圖的分辨率。該值必須是2的倍數加上1的,例如513,即512 + 1。

假如你已經把Terrain畫好,想在別的專案使用相同的地形,可以點選Export按鈕,系統會將Hightmap匯出。另一個則是匯入Import。

Lighting & LightMapping

Lighting
Contribute Global Illumination :假使將此選項打勾,Terrain就會跟Lightmap跟Light Probe互相影響,前提是要先bake Lightmap。

Lightmapping
Scale In Lightmap:指定對象相對於Lightmap的uv,假使數值為0時則不會被lightmap影響,使用者可以自己調整想要影響值的大小。
Lightmap Parameters:大家可以看看什麼是Lightmap Parameters可設定的參數,可以新增自己的parameter並使用之。這個值是在bake lightmap前需要設定完成的,是對於Terrain對於細節要指定bake的參數。

小結

這篇也是“樂樂長”,在此做個紀錄且可以更了解Terrain的設定會影響整個遊戲執行的效能,每一個功能的解釋都要有基礎的概念,在往後使用Terrain物件可以更加的順手。

Reference:https://docs.unity3d.com/Manual/terrain-OtherSettings.html

在〈Simulator Scene in Unity3D – Terrain Engine (Section 2)〉中有 1 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *