所有文章
教學 · 7 min read

在一座 10 萬資產的庫馴服你之前,先馴服它

會自我排序的命名規範、資料夾對標籤、縮圖流水線、重複品策略與見機行事的遷移——讓一座龐大的遊戲資產庫保持可查找的一套實用系統,以及為什麼搜尋速度決定你的關卡看起來有多豐富多變。

Illustration of an asset thumbnail grid with a search field and tag chips

簡而言之: 環境品質受限於美術能在一分鐘內找到什麼。過了幾千個資產,資料夾紀律便不再可擴展——搜尋加標籤接管, 縮圖決定掃視速度,重複品需要一條策略而非一次清洗,而遷移必須見機行事而非逞英雄。這裡是一套能挺過增長的系統,附上 值得照抄的具體規範,以及每一條在規模上為何要緊。

圖書館的閱覽室,暖光下的書架 圖書館不是一堆書——它是書加上一套查找系統。你的資產集合只有在第二部分存在時才是一座庫;否則它就是一堆非常昂貴的東西。

一座凌亂的庫的真實成本

當找對一塊岩石要花四分鐘,美術找過一塊之後就不再找了——場景收斂到那同樣的二十個記得住的資產,而成千上萬個 買來的包躺著沒打開。

損害在螢幕上可見:玩家能感覺到的重複、花在從不出貨的包上的錢,以及壓在每一個陳設小時上的一筆無聲之稅。有一種更鋒利的 說法:一個約莫一分鐘內找不到的資產實際上並不存在。你為它付了錢、存了它、備了份——而它永遠不會出現在關卡裡。可查找 不是家務;它是你視覺多樣性的上限。兩家資產預算相同的工作室,若一家找得到自家資產而另一家找不到,會出貨看起來明顯不同 的遊戲。

命名:無聊、可排序、無歧義

一條規範只有在扁平列表裡有用地排序時才管用——類型前綴、類別、材質或物種、尺寸、索引。無空格,無"final_v2_NEW"。

一個久經檢驗的形態:

SM_Rock_Granite_Large_01        (static mesh)
SM_Rock_Granite_Large_01_LOD1
T_Rock_Granite_D / _N / _R      (textures: diffuse, normal, roughness)
M_Rock_Granite                  (material)
MI_Rock_Granite_Mossy           (material instance)

讓它在規模上管用的規則:每個概念一個詞(Rock,而非 Rock/Stone/Boulder 混用),把最常用來篩選的欄位放前面,好讓 排序有用地成組,索引用零補齊(01,而非 1),這樣 10 不會排在 2 之前,並把規範寫在一頁人人第一天都讀的紙上。 確切的方案遠不如「恰好有一個」要緊——並且今天就開始,無論你現在多大,因為把名字回溯地套到 5 萬個檔案上,是那個沒人會 做完、人人後悔拖延的專案。

資料夾說一件事;標籤說其餘

一個檔案住在一個資料夾裡,卻有許多屬性——資料夾應編碼歸屬與流水線(哪個包、哪個專案),標籤編碼你會據以搜尋 的一切:生物群系、材質、氛圍、尺寸、風格。

用更深的資料夾樹去對抗多維性,會產出那個經典的 Props/Nature/Trees/Dead/Moss/ 墓地,那裡什麼都再也找不到——因為一棵 長苔的枯樺同時屬於五個資料夾卻只能住在一個,於是它總在錯的那四個裡。管用的劃分讓搜尋成為主要入口,而資料夾樹只是管道。

一套涵蓋大部分環境工作的標籤詞彙,比團隊預期的要小:生物群系(森林、沙漠、都市……)、材質(木、花崗岩、鏽蝕……)、 狀態(完好、磨損、廢墟)、尺寸類風格——五個軸,也許四十個詞,一次商定、加以執行。紀律在於讓詞彙封閉: 每一個有人新造的同義詞(「風化」挨著「磨損」)都把兩個標籤的價值砍半,因為搜其一便漏其二。

縮圖決定搜尋品質

一串檔名不是一座庫——一致的縮圖(同一角度、中性光照)讓眼睛每分鐘掃視數百個候選,那才是陳設真正需要的速度。

人類視覺評估一張縮圖網格遠快於解析名字;正是那份一致性讓它管用,因為當呈現相同,資產之間的差異便留在可見處。一塊岩石 以隨機角度、隨機光照拍攝,會藏起自己的形狀;同一塊岩石在標準的四分之三視圖、中性光下,一瞬間就把它揭示出來。批次算繪它們 ——一條縮圖流水線在任何大專案的頭一週就回本。

縮圖也正是規模咬人之處:翻瀏覽十萬張要求虛擬化、快取,以及一條在背景算繪、而非趁編輯器追趕時把它卡住的流水線。那個工程 問題,字面上就是我們為何把一個內容瀏覽器做進了 Numivo——它在一百萬資產下依舊順滑,帶即時縮圖與可選的 AI 打標,把「某處那塊長苔的崖石件」變成一個兩詞搜尋。瀏覽器問題與命名問題是不同層上的同一個問題:兩者都關乎折疊「我需要個 東西」與「我正看著那個東西」之間的距離。

由數千個近乎相同的單元組成的磚牆 重複問題,化為實體:數千個近乎相同的單元。手藝是保住一個可查找的規範版本、悄悄降級其餘,而非刪除任何一堵牆仍靠著的東西。

重複品:留一個,給其餘打標

別一見近似重複就刪(引用會斷)——挑一個規範版本,給其餘打上 duplicate 標籤,把它們從預設搜尋裡過濾掉,等到 沒有任何東西引用它們時才真正退役。

每個長壽專案都會攢下彼此重疊的包:來自四家供應商的四塊花崗岩巨礫、只在一個把手上有別的三隻桶。兩步策略(現在降級、以後刪除) 以零破壞風險立刻拿下可查找的勝利——重複品從搜尋裡消失,卻留在磁碟上供任何已引用它們的場景。每季度跑一遍引用掃描;六個月無 引用通常能整批、安全地清空那片墓地。

要避免的失敗模式是在找到重複品的當天就刪:總有東西引用你刪掉的那個,一個關卡斷了,團隊學會害怕清理——此後沒人再清理任何東西。 先降級後刪除讓清理保持安全,而安全的清理才是唯一持續發生的清理。

遷移:從混沌到系統

絕不為一次大爆炸式清理暫停生產——從今天起把規範套用到一切新的,然後見機行事地遷移舊內容:一個關卡拉進來什麼,就 在半路上給它改名打標。

見機行事的規則有一個美妙的性質:要緊的資產按定義先遷移,因為它們正是在用的那些。一年後仍未被碰過的一切都屬於冷儲存,而非 搜尋結果,且它們本就從不需要遷移。轉而嘗試英雄式週末清理的團隊,往往產出一座改名改到一半的庫——嚴格地說比兩個極端都糟,因為 現在搜尋結果裡混了兩套規範,哪套都不可信。

值得偷師的現場數字

  • 可查找預算:不到 1 分鐘,否則資產在功能上並不存在
  • 涵蓋環境工作的標籤詞彙:約 5 個軸、約 40 個封閉詞
  • 一致算繪下的縮圖掃視速率:每分鐘數百
  • 重複品策略:立刻降級,無引用約 6 個月後刪除
  • 命名:零補齊的索引、每個概念一個詞、一頁規則

迷你 FAQ

AI 標籤夠好到能取代人工打標嗎? 夠好到取代其中大部分——自動標籤扛起大宗(主體、材質、顏色),而人類補上需判斷的 (風格契合、專案特定的詞)。二者結合勝過單用任一,這正是 AI 打標最好作為一個可選的輔助層、而非完整替代的原因。

一座共享庫還是按專案一座? 共享源庫,按專案匯入。庫以完整標籤保管一切;一個專案只拉進它要出貨的,讓建置精簡、烘焙時間 短。把二者混在一起——一個引用整座庫的專案——正是建置體積膨脹的方式。

二進位資產的版本管理呢? 庫是一座花園,不是一份檔案:在你的 DCC 流水線裡對檔案做版本管理,把庫保持為「只留當前最佳」。 活在搜尋結果裡的歷史版本是戴著名牌的雜訊,它們拖慢每個人的每一次搜尋。

怎樣讓團隊真的遵循規範? 讓對的事成為容易的事:一個預填命名模式的儲存/匯入範本、一個把不合規檔案標出來的 lint 步驟, 以及讓合規資產可查找、讓不合規資產不可見的縮圖。由工具強制的規範能留住;靠嘮叨強制的留不住。

醜著開始,現在開始:一頁命名表、十個核心標籤與一致的縮圖,勝過一套下季度才開始的漂亮分類法。庫是花園——不斷的小除草, 絕非一次英雄式的清理。