工程趣聞 2026 年 6 月 10 日

2026-06-10 — Catlantean 3D 的 1993 渲染技術、測試案例縮減器除錯利器、清理 AI 開發者的技術債

primary=https://staniks.github.io/articles/catlantean-3d-blog-1 primary=https://tratt.net/laurie/blog/2026/test_case_reducers_are_underappreciated_debugging_tools.html primary=https://lobste.rs/

Catlantean 3D:用 1993 年的技術手法製作現代遊戲

staniks.github.io · Marko Stanic · 2026-06-10(HN 熱門討論)

遊戲開發者 Marko Stanic 記錄了他在開發 Catlantean 3D 過程中刻意採用 1993 年代技術手法的設計決策。遊戲預計 2027 年 Q1 上架 Steam,核心渲染架構以 raycasting 為基礎,強制限制解析度 320×240、256 色調色盤,並以固定點算術(fixed-point arithmetic)處理遊戲邏輯以確保確定性。

調色盤化的著色系統

效能最有趣的部分在著色模型。引擎預先計算一張 colormap——一個二維的調色盤索引矩陣,橫軸是原色、縱軸是距離所對應的暗化等級。每個像素的著色只需一次表格查詢,而非即時計算光照:

colormap_row = 32 * fragment_distance / view_distance
final_color = colormap[colormap_row][original_color]

色彩空間選擇 Oklab(而非傳統 RGB 線性插值),使暗化在感知上更均勻;刻意引入暖色調偏移模擬 1993 年代螢幕的顯色特性。

資產管線與 Gibbing 系統

3D 模型以 Blender 建立,透過 Python 腳本批量渲染後量化至 256 色索引格式,合成節點增強對比度與清晰度。貼圖以程序化方式生成:高度圖 → 法線圖(烘焙光照)、噪點圖、污損圖、基礎色彩與 Brightmap(選擇性保色)組成完整管線。

Gibbing(碎裂動畫)系統值得一提:以 Voronoi 分解將 sprite 切片,對每個碎片追蹤質心速度、旋轉、重力與阻力,傷口「流血」以 BFS 從邊界向內染色。所有效果均可調參(碎片數、爆炸力、重力係數)。地圖編輯器以 wxPython 自製,支援光照等級繪製與 C++ binding。

遊戲將以 $5–$8 價格發售,引擎程式碼開源,遊戲資產則需購買。

原始來源:staniks.github.io


測試案例縮減器:超越編譯器工程的被低估除錯利器

tratt.net · Laurie Tratt · 2026-06-10(Lobsters 熱門討論)

編譯器工程師長期使用測試案例縮減器(test-case reducer),但這類工具在更廣泛的軟體工程中幾乎無人知曉。Laurie Tratt 論證,任何能被定義為「有趣性測試(interestingness test)」的除錯問題都可以從中受益

運作原理

縮減器接受三個輸入:程式、輸入資料、以及判定「輸入是否仍能重現問題」的有趣性測試。縮減器迭代地嘗試移除輸入的各個片段,若移除後有趣性測試仍通過,則以縮減後的版本為新基線,持續直到無法再縮小為止。實際效果:典型可達 95–99% 的輸入縮減率,讓原本數千行的重現案例壓縮至數十行。

工具與應用場景

文章提到三個工具:

  • Shrink Ray:支援並行縮減、具備精細縮減規則與進度視覺化
  • Creduce:歷史悠久的編譯器導向縮減器
  • ddmin:早期通用縮減器,奠定演算法基礎

Tratt 示範了兩個編譯器以外的應用:將隨機 C 程式縮減超過 60%、以及針對 yk 直譯器(JIT 項目)以追蹤長度為度量指標進行縮減——有趣性測試比較追蹤長度而非布林式錯誤條件,讓縮減器朝實用的最小化目標搜尋。

處理不確定性的方法也值得注意:有趣性測試可多次運行同一輸入,逐步提高確定性要求,使縮減器在具有隨機行為的系統中仍能正常運作。

原始來源:tratt.net


清理 AI 搖滾巨星開發者留下的爛攤子

Lobste.rs 熱門討論 · 2026-06-10

Lobste.rs 上一篇文章引發大量工程師分享真實案例:當一個專案大量依賴 AI 生成程式碼後,後繼維護者面對的究竟是什麼。討論揭示了 AI 輔助開發帶來的新型技術債模式,與傳統人工技術債有質的不同。

典型症狀

最常被提及的問題模式包含:程式碼量大幅膨脹(AI 傾向用多個具體實作取代一個抽象),測試覆蓋率高但測試品質低(測試測的是生成出來的行為而非正確行為),以及命名與風格的「方言轉換」——不同 prompt 生成的程式碼各有一套慣例,合並後形成風格拼盤。

另一個觀察:AI 生成的程式碼常常「能動但不知為何能動」,內含被生成框架特定的假設,但這些假設未被文件化。當假設不再成立時,除錯者必須重建 AI 當初的推理脈絡。

工程師的因應策略

討論中出現的實用策略包含:在 PR review 中強制要求「此 AI 生成片段為何如此?」的說明;針對 AI 輸出運行測試案例縮減器(與上篇文章形成呼應);在 onboarding 文件中明確標記「此段由 AI 生成,請閱讀後再修改」。多位工程師指出,問題通常不在於使用 AI,而在於團隊缺乏建立 AI 使用規範的流程。

原始來源:Lobste.rs


End of article
0
Would love your thoughts, please comment.x
()
x