低多邊形賽車 · 先遊玩,再打造

低多邊形賽車遊戲 — 在瀏覽器中暢玩一款(或打造你自己的)

打造你自己的低多邊形賽車遊戲

什麼造就了一款出色的低多邊形賽車遊戲,還有一個你現在就能穿梭其中的瀏覽器低多邊形世界,以及打造自己賽道的工具。

✦遊戲
打造一條低多邊形賽道,主題是 沿海公路

低多邊形賽車遊戲是一種幾何刻意粗糙的賽車遊戲:平面著色的三角形、沒有法線貼圖、沒有高頻率的貼圖細節。這項限制不是你得忍受的缺點——而是讓遊戲在高速下得以成立的關鍵。當一輛車在幾秒內穿越 400 公尺的直線路段,你的眼睛並不會去分辨輪輻。它讀取的是輪廓、面的明暗,以及景物掠過的速率。低多邊形幾何讓渲染器有餘裕讓這些線索保持平順。

本頁說明真正區分優劣低多邊形賽車遊戲的關鍵,接著把一個你現在就能在瀏覽器中穿梭其中的低多邊形世界放到你眼前。之後,本頁會帶你一步步在 3D 遊戲建構器中打造自己的賽道:在格線上鋪設道路、放置能發揮速度提示作用的道具,並把賽道閉合成環。無需下載,也無需安裝引擎。

為什麼低多邊形適合賽車

核心論點在於感知。在時速 200 公里下,一個平面著色的面在螢幕上移動,讀起來就是動作。帶有細緻細節的貼圖表面則讀起來像雜訊,因為貼圖縮小的速度快過其細節層級能解析的程度。低多邊形完全避開了這個問題:更少、更大的面,意味著鋸齒問題縮小的同時,影格預算也變得更寬裕。你不再與閃爍搏鬥,而是開始營造速度感。

第二個論點是算術。一段以 2,000 個三角形而非 40,000 個三角形建模的賽道區段,不只是渲染得更快。它讓你能在觸及影格上限之前,放置更多區段、更多景物和更多對手。在賽車遊戲中,影格時間不是舒適性功能,而是輸入延遲。顯示卡每多花一毫秒,玩家看到彎道與車輛回應修正之間就多了一毫秒。

這就是為什麼低多邊形賽車遊戲往往能在普通的硬體和瀏覽器分頁中順暢運行。渲染成本主要由繪製呼叫和填充率決定,而非原始的三角形吞吐量,因此一個採用積極視錐體剔除的低多邊形場景,在內建顯示晶片上能維持在每秒 60 影格所需的 16.6 毫秒預算之內。這種風格不是為弱效能硬體準備的退路,而是一項讓硬體不礙事的決定。

平面著色與動態判讀

平面著色讓每個三角形只有一個法線,因此每個面只有一個亮度值。當相機平移時,這些數值會以離散的階段改變。眼睛會把這些階段捕捉為速度訊號,就像低影格率的頻閃會讓輪子看起來在轉動一樣。在平滑著色的表面上,這個訊號會被抹散到漸層之中,動態判讀因而減弱。

三角形預算實際上用在哪裡

在低多邊形賽車遊戲中,車輛很少是昂貴的物件,賽道才是。一條 5 公里、切成 100 公尺區段並搭配剔除的賽道,其可見集合是有界的,但單一一個 5 公里的網格就不是了。把賽道按區段編列預算,讓剔除去發揮作用。車輛負擔得起 6,000 到 12,000 個三角形;單一區段負擔不起。

什麼造就出色的低多邊形賽車遊戲

第一項限制是賽道在高速下的可讀性。彎道必須在玩家抵達之前就能辨識。這意味著道路與非道路之間要有視覺區隔、帶狀路面兩側要有一致的邊緣處理,以及清楚的彎道頂點提示。如果路面與路肩共享相同的明度和色相,玩家在進入彎道之前都無法判讀。道路與周遭環境之間的明度對比,比柏油路上的貼圖細節更重要。

第二項限制是一條能營造速度感的地平線。平坦而空白的地平線無法傳達你前進得多快。你需要在已知間隔上放置物件——護欄、標誌、桿柱、稜線上的面——讓玩家有速率參照。沿著直線路段以大致均等的間距散布這些物件,然後讓間距在通過彎道時壓縮。即使速度數值沒有改變,眼睛也會把壓縮讀成減速、把擴張讀成加速。

第三項限制是一台永遠不會跟丟道路的相機。追蹤相機需要一段隨速度縮放的預看距離、一個能讓帶狀路面在車底下保持可見的高度,以及一個跟隨車輛朝向、而非瞬間對齊的偏航角。如果相機的偏航角瞬間對齊,世界會猛甩,玩家就會失去空間方向感。以短時間常數阻尼的偏航角——足以感覺靈敏,但並非立即——能讓道路穩穩固定在畫面中。

  • 道路與非道路的明度分離帶狀路面與周遭地形之間應有足夠的亮度差,讓邊緣一眼就能判讀。若有疑慮,把地形調暗,而不是把道路調亮。
  • 以間隔為基礎的速度提示以均等間隔排列的道具能給玩家速率參照。它們在通過彎道時看似壓縮的現象,就是速度的判讀依據。
  • 隨速度縮放的相機預看距離預看距離應隨速度增加;若不這麼做,玩家在高速下會跑得比畫面能呈現的還快。
  • 阻尼化的相機偏航角跟隨式的偏航角能讓道路保持穩定。瞬間對齊的偏航角,是讓一條好賽道變得無法判讀的最快方式。

現在就在這裡穿梭其中

本頁嵌入的可遊玩世界,是我們今天能放進瀏覽器裡、最接近賽道的東西。它是低多邊形、平面著色,而且是為了被穿梭、而非被觀看而打造。使用移動控制來遊歷這個空間;幾何刻意粗糙,好讓影格率維持在足以判讀動作、而不只是看見場景的水準。

移動時可以留意什麼:當你經過時,地平面上的面會以不同角度受光,而那些角度變化就是動態線索。地平線是有內容的、而非空無一物,因此你有東西可以參照。試著走一段長直線再轉個彎,注意你的速度感如何改變,即使移動速度並沒有變。那就是地平線在發揮作用。

這個世界是一個展示空間,而不是一條完成的賽道。它沒有單圈計時器,也沒有對手。它的用途是展示低多邊形判讀在你實際硬體上的即時瀏覽器工作階段中如何表現,而這是對一款瀏覽器遊戲唯一有意義的基準。

打造你自己的賽道

在 3D 遊戲建構器中打造賽道,意味著把幾何放在格線上,而不是雕塑網格。你以世界單位工作,格線則提供一致的尺度:一個格線儲存格等於一段已知距離,因此 20 格的直線是固定長度,無論是誰來打造都一樣。先從帶狀路面開始,接著放置道具,然後設定出生點並把賽道閉合成環。

要留意的失敗模式,是一條在編輯器中可讀、但在高速下不可讀的賽道。先打造一段直線,把相機移到駕駛者的視線高度,在打造其餘部分之前先跑一趟。如果直線盡頭的彎道從直線起點就無法辨識,先修正明度對比或道具配置,再繼續增加賽道。修正一個區段比修正二十個便宜。

1

01

在格線上鋪設道路:一格一格地放置道路區段,讓帶狀路面的寬度在世界單位中保持不變。改變彎道半徑,而不是寬度。

2

02

設定道路與非道路的明度對比:為道路指派一種材質,並給周遭地形明顯不同的明度,讓邊緣在高速下仍可判讀。

3

03

沿著每段直線以均等間隔放置速度提示道具:護欄、桿柱或標記,以一致的間距排列,讓玩家有速率參照。

4

04

在彎道中壓縮道具間距:通過彎道時更緊密的間距會傳達減速,並為彎道頂點提供視覺錨點。

5

05

設定出生點與朝向:把出生點放在道路中心線上,朝向行進方向,並確認相機在出生點有清楚的預看視野。

6

06

把賽道閉合成環:將最後一個區段接回第一個,讓賽道連續,然後以高速跑完一整圈,並修正任何不再可判讀的地方。

低多邊形車輛與素材

車輛和道具可以來自兩個方向:匯入既有的低多邊形素材組,或產生一組與你賽道風格相符的素材。真正重要的限制是面密度的一致性。把一輛以 12,000 個三角形建模的車放進由 200 個三角形區段打造的賽道,會顯得不對勁,因為這兩個物件以不同的尺度呈現細節。讓密度相符、或讓著色相符,最好兩者都做到。

Agent Sprite Forge 會產生精靈圖與素材組,當你需要一組具備相同視覺語言、彼此協調的車輛與道具,而不是一堆各自下載的模型時,這就很實用。如果你要產生一組素材,就讓車輛與賽道旁的道具在同一輪中一起產生,好讓調色盤與面密度保持一致。生成輪次不一致,是賽道看起來像拼湊、而非經過設計的最常見原因。

The Cyclops' Island 是工作室素材中一個低多邊形世界的實作範例:它展示了當每個物件共享同一項著色決策時,一個協調的低多邊形環境如何凝聚成形。在你打造自己的素材組之前,用它作為調色盤與面密度的參考。

  • 面密度相符讓車輛的三角形數量,在每單位可見表面積上與賽道區段維持在同一個數量級。密度差異過大會被讀成風格上的崩壞。
  • 每組素材使用單一調色盤用同一個調色盤產生車輛與道具。事後再加入第二個調色盤,通常是賽道看起來不搭的來源。
  • 全體採用平面著色為素材組中的每個物件套用平面著色。在平面著色的場景裡,只要有一個平滑著色的物件就會立刻被看出,並破壞動態判讀。
  • 先重用,再建模單一個護欄模型經過旋轉和重新上色,就能涵蓋一條賽道的大部分。更少的獨立網格意味著更少的繪製呼叫與更好的影格時間。
Four Seasons Courtyard——賽道所處的低多邊形尺度。
Gaga Little World——玩具尺度的低多邊形。

走進它所屬的世界

精靈圖是一個無處可站的角色。最後一步是其他人都沒提供的:把你剛打造好的圖集放進一個有人能走動的世界——一座小島、一顆行星、一個下雨的街角。本網站上的每個世界,都是由一句文字描述製成,並發布成一個你能實際遊玩的頁面。

FAQ

真的能在瀏覽器裡賽車嗎? +

可以。本頁的可遊玩世界就在瀏覽器分頁中運行,你無需安裝任何東西就能穿梭其中。影格率取決於你的硬體與場景的繪製呼叫數量,但一個可見區段有界的低多邊形場景,在典型的內建顯示晶片上能維持在每秒 60 影格的預算之內。

製作低多邊形賽車遊戲需要寫程式嗎? +

不需要。在 3D 遊戲建構器中,你使用建構器的放置工具,在格線上鋪設道路區段、放置道具、設定出生點,並把賽道閉合成環。只有當你想要建構器所提供之外的自訂行為時,程式碼才會派上用場。

低多邊形的車輛和道具從哪裡來? +

你可以匯入既有的低多邊形素材組,或用 Agent Sprite Forge 產生一組。重要的是一致性:讓車輛與賽道旁的道具在同一輪中產生,好讓它們共享同一個調色盤與面密度。

如何打造一條在高速下依然清晰可讀的賽道? +

先從道路與非道路的明度對比著手,讓邊緣清楚可辨;沿著每段直線以均等間隔放置道具作為速度提示,並在彎道中壓縮它們的間距。接著把出生點設在中心線上,並確保有清楚的預看視野,然後在增加更多賽道之前,以高速跑完一整圈。

在瀏覽器低多邊形賽車遊戲中,效能受什麼限制? +

繪製呼叫和填充率,而非原始的三角形數量。一個以獨立網格渲染的 2,000 三角形區段,會比相同幾何合併後更耗成本。用剔除讓可見區段集合保持有界,並重複使用網格,而不是不斷增加獨立網格。

之後能把賽道匯出到完整的引擎嗎? +

可以。當瀏覽器執行環境不再夠用時,場景可以被匯出,移入完整的引擎。如果你之後需要自訂物理,或需要比瀏覽器執行環境所能處理更多的對手數量,這通常是會走的路。

返回 3D 遊戲建構器

全部 31 個完成的 3D 世界、遊戲和場景都在同一頁面上——每一個都能實際遊玩。

平台: Neta Studio頁面: 低多邊形賽車遊戲接下來閱讀: /use-cases/en/low-poly-3d-assets · /explore/tool/ai-voxel-game-maker · /use-cases/en/isometric-pixel-art
×