2. MicroVerse - Roads

MicroVerse - Roads
本篇文章、圖片出處來自 https://docs.google.com/document/d/1LuxGQwlUmB5J2ZhNJMX7ggJoyGCfFid4JC86n7f66UQ/edit?tab=t.0#heading=h.re0osp1jywv0
軟體版本與本翻譯文件可能會有落差,本翻譯文件僅供參考。
本譯文為本站譯者原創翻譯內容,文字著作權歸本站所有。
未經授權,請勿任意轉載、改作或商業使用。

設定說明(Setup)

Roads 模組需要 Unity 的 Spline 套件版本 2.3 或以上才能正常運作。你可以透過以下方式安裝或升級舊版本: 打開 Package Manager(套件管理器),點選右上角的 + 按鈕,選擇「Add Package by Name(依名稱新增套件)」。在文字輸入欄輸入 com.unity.splines,然後按下 Enter 鍵。請確認安裝的是 2.3 或以上的版本。 此外,你還需要安裝 MicroVerse 以及 MicroVerse-Splines 套件。 當所有套件都正確安裝後,請從選單開啟 Windows > MicroVerse > ContentBrowser,並將其固定在一個方便的位置。你可以切換到 Roads(道路) 或 Caves(洞穴) 分頁,然後將一個交叉路口(intersection)拖曳進場景中。 所有元件都必須放置在一個有掛上 RoadSystem 組件 的 GameObject 底下。當你從內容瀏覽器中拖曳交叉路口進場時,MicroVerse 會自動建立這個物件。 請注意,如果你想建立不同種類的道路,使用不同的元件集合,你可以在場景中建立多個 RoadSystem。

腳本負責控制其下所有道路的選項與更新行為。你可以選擇是否隱藏或顯示該系統所建立的 GameObject。

產生設定(The Generate )

當 Generate At Load(載入時產生) 設為 true 時,幾何物件會在場景載入時動態建立。 若設為 false,道路的幾何形狀將直接儲存在場景檔案中。請注意,這可能會導致場景檔變得非常大。這兩種模式的權衡在於:

  • 使用 較大的場景檔案(載入較快)
  • 或是 在場景載入時進行生成(初始載入較慢)

例如,若你在遊戲中依據玩家移動來載入場景,將資料預先儲存成大檔案背景載入,通常會比載入時才進行幾何生成要快,特別是因為物理碰撞的生成速度通常很慢。

Spline Path(樣條路徑)

MicroVerse 會自動將一個 Spline Path 組件加到 RoadSystem 物件上,這用來控制道路與地形的互動方式。更多細節可參考 MicroVerse 的 Spline Path 說明文件。 材質模板(Template Material) 你也可以指定一個「材質模板」。這個資源包內建的道路使用的是一種自訂 Shader,用來繪製高品質的線條與地表磨損效果。除了少數例外,這些道路幾乎都使用相同的材質屬性。 當你設定了 Template Material,該道路系統下的所有道路元件都會共用這些屬性。這讓你可以只調整一次模板材質,就同步更新整個系統的道路外觀,而不必逐一手動修改。 範例模板可以在 Content/Roads/MaterialTemplates 資料夾中找到。

手動更新

最後,如果你需要強制手動刷新整個道路系統,可以點擊 Update System 按鈕。正常情況下你不需要這麼做,但如果你更改了某些來源資料(例如模型),這個功能可以強制重新生成所有道路。

交叉路口(Intersections)

交叉路口可讓你輕鬆地建立並連接多條道路。

當一個交叉路口被放置在道路系統下並選取後,你會在交叉路口上看到數個連接點。 雙擊其中一個連接點,即可建立一段基於樣條(Spline)的道路區段。

若需更多關於 Unity 樣條(Spline)系統的資訊,請參閱 Unity 的 Spline 套件官方文件。 當你建立了樣條後,可以移動並延伸其控制點,來塑造出道路的形狀。 若你在道路系統下再放置另一個交叉路口元件,則可以將樣條的最後一個控制點**吸附(Snap)**到該交叉路口的某個連接點上,以建立更複雜的道路網絡。 請注意:雖然這對道路用途不太實用,但你仍然可以對交叉路口元件進行縮放,與其連接的道路也會自動縮放以符合新的尺寸。 這項功能在製作洞穴或非標準道路(如泥土地、小路等)時特別有用。

選項(Options)

道路與交叉路口的元件上可能會顯示各種可用的選項,若這些選項有被設定,就會出現在元件介面中。 以上方範例來說,道路元件有數個選項可供調整。 其中「Main Layer(主要層)」控制的是沿著樣條(Spline)使用的主要預製件(Prefab)例如道路上的標線樣式就是差異之一。 此外,還可以設定護欄(Guard Rails)、路邊標誌等額外元素。 你也可以在樣條上的特定區段變更這些選項,以覆蓋預設值。 操作方式如下:

  1. 選取該段 Road Spline(道路樣條),並確認進入樣條編輯模式。
  2. 在工具列下方會看到一個「D」按鈕,選取後會進入「Data 模式」。
  3. 在樣條上雙擊即可新增一個控制點,然後你就可以在該點變更選項設定。

請注意:這些選項的變更不會在控制點當下立即生效,而是會套用在從該點延伸出的下一段道路上。

樣條相對變換(Spline Relative Transform)

SplineRelativeTransform 組件可讓一個物件相對於場景中的樣條(Spline)進行定位與變換。 例如,你可能會在道路上放置一個停車標誌,當該道路被編輯時,標誌也會隨之移動。 這是一種非常強大的方式,可以讓你將自訂物件加入道路,並在修改道路的同時自動保持正確位置。

請注意: 凡是在 MicroVerse 內容瀏覽器中,其根節點(Root Transform)上有掛載 SplineRelativeTransform 組件的物件,當你將它放置到場景中時,系統會自動將它對齊到距離 30 公尺內最近的樣條(Spline)。

不只是道路(Not Just Roads)

MicroVerse 的道路系統不僅限於建構道路,也可以用來製作其他內容。 以下是一部示範影片,展示如何使用此系統來建立洞穴,包括自動在地形上壓出洞口的功能,並從零開始一步步帶你完成整個設置流程。

這些素材可免費下載,可以在內容瀏覽器中找到: https://www.youtube.com/watch?v=t1JJGItdVsQ

建立自訂道路(Creating Custom Roads)

雖然系統已內建完整的道路組件,但你仍然可以自行建立交叉路口元件、道路區段,並設定相關選項,搭配提供的自訂 Shader 來製作材質貼圖。

連接(Connections)

連接是透過 GameObject 上的 Connector(連接器)組件 來定義的。這些組件會放置在交叉路口上,並透過指定一個 Road Config(道路配置) 來說明當使用者雙擊該連接點時要產生哪種類型的道路。

道路配置(Road Config)

Road Config 用來指定哪一個 預製件(Prefab) 將會被實例化,並沿著樣條(Spline)彎曲排列。 它可以包含多個元素,這些元素會在元件中顯示為「Main(主要)」選項。 例如:這個範例是條 雙車道道路,它可以選擇標線為雙向行駛或單向行駛。 請注意,Size(大小) 選項非常重要! 它決定了預製件在樣條上重複的間隔距離,例如在這個範例中,每隔 12 公尺 就會產生一個這樣的預製件。

每個項目(Entry)都有一組 Overlays(覆蓋項) 陣列。這些是預製的場景(Prefab’d Scenes),會沿著樣條(Spline)被實例化。 在這個範例中,使用者會看到一個名為「GuardRails(護欄)」的選項,並可從列表中選取要使用的預製件。 你可以設定預設情況下要產生列表中的第一個項目, 或者若未選擇,則預設不產生任何東西; 也可以設定機率值來決定這些物件出現的頻率。 你可以加入任意多種類型的 Overlay,讓使用者在道路上堆疊多種裝飾選項,例如:護欄、指示標誌等。

彎曲規則(BendRules)

當一個預製件在此系統中被使用時,預設會自動沿著樣條彎曲排列。 但如果你希望修改這個行為,可以在該物件上加入 BendRules 組件,來覆蓋預設的彎曲邏輯。

Mode(模式)

選項可用來放置物件而非將其彎曲。可選擇的模式如下:

  1. Bend(彎曲):將物件沿樣條彎曲排列
  2. Place(放置):沿樣條放置物件,但不彎曲
  3. Place Rotate(放置並旋轉):沿樣條放置並依方向旋轉物件
  4. Place Rotate No Slope(放置、旋轉但不傾斜):放置並旋轉物件,但在斜坡上保持物件直立

Cap Mode(端點模式)

用來指定物件在樣條的何處可見。 這可用於只在樣條起點或終點放置物件(例如圍欄的開頭與結尾),而不是在樣條的每個實例開頭或結尾都出現。

Chance(機率)

可用來設定隨機不產生某些物件的機率。 當場景沿著樣條重複時,有時可能會剩下一小段樣條無法完整放置一個預製件,這時可使用 “Required Left” 屬性,避免在只剩很小一段樣條時產生不完整的物件。

Culling Mode(裁切模式)

決定當物件延伸超出樣條結尾時該怎麼處理:

  1. 設為 Cull:若物件中心超出樣條末端,就會被移除
  2. 設為 Clamp:物件會被限制在樣條的終點,仍會顯示出來

最後,你還可以對物件設定 位置、旋轉與縮放的隨機變化值,讓排列更自然不規則。

交叉路口(Intersections)

系統中每個交叉路口物件,都需要掛上 Intersection 組件 才能正確運作。

交叉路口設定(Intersection Setup)

要設定交叉路口,請先新增 Connector(連接器) 到交叉路口物件上,並將它們放置在道路應該連接的位置。 樣條(Spline)道路會沿著 Z 軸(藍色軸) 建立,因此請確保該方向是你希望樣條延伸的方向。 當連接用的 GameObject 都放好後,請將它們加入到 Connection Point List(連接點清單) 中。 你也可以為交叉路口指定一個 Road Config(道路配置)。這個配置會提供使用者在交叉路口上的覆蓋選項, 例如可以套用指定的預製件樣式、或顯示裝飾性物件(如預先放好的圍欄等)。 最後,你可以使用樣條來定義交叉路口如何影響地形(當你使用 MicroVerse 地形系統時)。 你可以建立任意數量的 封閉樣條(Closed Splines),這些樣條會被用來調整交叉路口範圍內的地形形狀。

著色(Shading)

本套件包含一個特殊的 Shader,用來解決道路貼圖常見的問題。 若你想修改此 Shader,則需要安裝最新版的 Better Shaders 和 Better Lit Shader。

  • Better Shaders:可將 Shader 編譯為支援各種 Render Pipeline(如 Built-in、URP、HDRP)
  • Better Lit Shader:提供特效功能,如:濕潤、水坑、積雪、Trax 輪胎痕跡整合

這個自訂 Shader 解決了以下問題: 如何在遠處保持道路標線銳利不鋸齒、近距離又不模糊,同時還能支援像是道路磨損等自訂效果,並使用最少的資料達成。

在這個 Shader 的頂部,可以看到用於打包「法線(Normal)、平滑度(Smoothness)、金屬度(Metallic) 與 環境遮蔽(Ambient Occlusion)」的打包模式(Packing Mode)。

  • 在 Fastest 模式(最快模式) 下,法線、平滑度與環境遮蔽會被打包到同一張貼圖中,以節省取樣成本,僅額外提供一個金屬度的數值。
    此貼圖的通道分佈如下:
    • 紅色(Red):Smoothness(平滑度)
    • 綠色(Green):Normal Y(法線 Y 軸)
    • 藍色(Blue):Ambient Occlusion(環境遮蔽)
    • Alpha(透明度):Normal X(法線 X 軸,從標準法線貼圖的紅色通道取得)
  • 若選擇 Unity Packing 模式,則會使用兩張貼圖:
    • 一張是標準的 法線貼圖(Normal Map)
    • 另一張是類似 HDRP 樣式的 遮罩貼圖(Mask Map),其中 藍色通道未使用

請注意: Albedo(色彩貼圖) 的 Alpha 通道中應包含高度圖(Heightmap)。 這主要用於特殊效果,例如積雪堆積與水坑位置的呈現。

柏油(Asphalt)材質 採用 世界空間中的 Triplanar 單貼圖投影 技術來進行紋理繪製。 你可以控制它的縮放比例,也可以啟用 隨機取樣(Stochastic Sampling),這種方式雖然效能成本較高,但能有效避免材質出現明顯的平鋪感(Tiling)。

Line/Wear Mask(線條/磨損遮罩) 是一張特殊的貼圖,用來決定兩種道路線條的位置,以及道路上的磨損區域。 這張貼圖是以 UV 空間 映射的,其各個通道的用途如下:

  • 紅色通道(Red):Line A 的位置
  • 綠色通道(Green):Line B 的位置
  • 藍色通道(Blue):Wear A(磨損 A)的位置
  • Alpha 通道(透明度):Wear B(磨損 B)的位置

你可以自訂兩種線條的顏色, 如果希望它們具有發光效果(Emissive),也可以指定發光強度。

以下是一張遮罩貼圖中紅色通道(Red Channel)的範例。 這會在道路上產生銳利清晰的白色線條,即使在近距離觀看時也不會出現鋸齒或破圖現象。 若你想要繪製黃色線條(假設你已設定對應的線條顏色屬性),則應將圖樣**畫在綠色通道(Green Channel)**中。

磨損雜訊(Wear Noise)

你可以指定一張貼圖作為系統中的雜訊紋理。請注意,這張貼圖會使用 RGB 三個通道,分別對應不同類型的雜訊效果。 此貼圖是以**世界空間(World Space)**對齊的。 其中的 Line Wear(線條磨損) 參數控制藍色通道(Blue Channel)對線條的影響程度 —— 當藍色通道的雜訊值較高時,線條會逐漸淡化、模糊或消失。

系統中有兩組磨損效果(Wear Systems)可用, 你可以用來在道路上添加裂痕、鋪面破損或其他類型的磨損細節。 Wear Map(磨損貼圖) 是一張法線貼圖(Normal Map), 它會以世界空間方式進行取樣(sample), 但會受到 Line/Wear Mask 貼圖(以 UV 空間取樣)所遮罩, 這讓你可以控制哪些區域出現磨損, 同時又能讓出現的裂痕和破損每次都不完全一樣(因為是世界空間對應,非重複圖樣)。

你可以調整以下效果參數:

  • 整體強度(Overall Weight)
  • 色彩染色(Tint Value)
  • 平滑度(Smoothness)
  • 環境遮蔽(Occlusion)
  • 法線強度(Normal Strength)

此外,磨損效果也會受到 雜訊貼圖的紅色與綠色通道影響, 你可以調整雜訊的 對比度(Contrast), 來讓磨損效果漸進式出現或快速顯現。

效果(Effects)

濕潤(Wetness)、水坑(Puddles)、積雪(Snow) 和 Trax(輪胎痕跡) 效果由 Better Lit Shader 提供,用於模擬各種天氣風化效果。 若想了解這些效果的更多細節與參數設定, 以及如何與天氣系統(例如 Weather Maker 2 和 Enviro)整合, 請參閱 Better Lit Shader 的官方文件。

此網誌的熱門文章

哥利亞遙控炸彈 (Leichter Ladungsträger Goliath)