SpinningTop · 效能
2026-08-20 / 兩條效能線的現況、barry 的 60fps 做了什麼、以及還差什麼
板子 RK3576、正式版打包 —— 環境正確。但渲染路徑不同:renderMode=pipeline(不是出貨的 compat)+ HUD 搬 HTML DOM(4Hz 更新)+關掉:Cover、透明 Canvas 疊層、特效、影子、outline、常駐動畫、蓄力光暈。
在這個條件下:24–34 隻怪 + 4 顆 3D 陀螺 + HUD,多輪 59.4–60.2。是真戰鬥場面,不是待機。
乾淨重啟 120 秒自主遊玩 = 50.74fps,且每輪出現 4.7–5.0 秒的 GPU SwapBuffers 長幀,原因未定位。報告原文:「不能把 B6 標成穩定 60」。
| 手段 | 白話 | 實測收益 |
|---|---|---|
| 移除全畫面 Cover | 一張 1920×1080 的裝飾圖層壓在每幀更新的 3D 畫面上,光「疊著」就貴 | 48–54 → 59–60 |
| 停掉常駐 UI 動畫 | 大量 HUD 元件每幀都在改樣式,畫面永遠是「髒」的 | 約 +3 fps |
| HUD 改 HTML + 降頻 | 數字每秒更新 4 次、值沒變就不碰畫面 | 守住 16.7ms 預算的關鍵之一 |
| 首次蓄力卡頓修復 | 蓄力光暈第一次顯示時才上傳貼圖,造成單次卡頓 | 1450ms → 33ms |
| 粒子批次化 | 同發射器的粒子一批送 GPU,不逐顆 | 54.28 → 59.64 |
| 碰撞粒子預算 | 一般命中最多 24 顆、擊殺保留完整星芒 | 4P 回歸解除的主因之一 |
| WebGL2D 凹多邊形修正 | 12 角星原本會被畫成實心方塊(真 bug) | 視覺正確性,非速度 |
| 怪物骨架 30Hz 交錯 | 每隻怪的骨架隔幀更新(有開關) | 54.05 → 57.16 |
| Prefab 算式編譯一次 | 原本每次都重新產生函式 | 120 秒省 2.84 秒 |
沒有單一招數,是十來項各拿幾 fps 疊出來的。最大的兩項是移除 Cover 與粒子批次化。
barry 團隊在自己的報告裡撤回過三次自己的數字(量測網址被 shell 截斷造成的假 59fps、預熱無效、高效能模式 hint 無效),且量測腳本有「遊戲真的在打」的門檻(血量、移動率)。這是有紀律的量測,不是宣稱。
完整審過的是 6a929099(08-15,diff + 報告全文 + 錨點現查)。其後 4 顆未審(7f60979c、f33ed1b6、411da0da、8c0ea1bc)—— 其中兩顆在恢復特效與拖尾,B6 現況可能已比 50.74 好,未驗。
碰撞/死亡粒子的砍量(例:Boss 死亡爆炸約 120 顆 → 全域上限 24 顆、火花 20→6)直接改在正式玩法程式裡,沒有包在量測開關內 —— 一合併,所有玩家的特效密度立刻變。這是畫面品質取捨,見拍板清單第 3 項。
兩個數字都只對「現行 compat 出貨路徑」成立 —— 任何場合引用都要帶這個前綴。
拆帳實測:疊層成本裡瞄準虛線一群就佔 +6.00ms(run44,ABAB 兩輪)。搬到 WebGL 後板上 35 → 45fps(08-14 上線期間實證),畫質零損失。
45fps 是 2026-08-14 短暫上線期間的實證,該版本已被後續部署覆蓋,目前不在線上。「已經有 45」和「曾經有過 45」是兩件事 —— 現在線上是 35fps 的版本。
2026-08-20 上午直接抓兩個站的線上產物驗證:玩家站 App-CxO0K4FX.js、開發站 App-B9V2U5Tw.js,兩邊都是 useWebGL2DOverlay:!1(關)。程式保存在分支上,恢復需要「合併+開預設+重新部署」。
| 項目 | 實測 | 成本/代價 |
|---|---|---|
| 關影子 | −3.2ms | 工程近零(翻預設),代價是畫面沒影子。⚠️ 正式版目前沒有關的路徑,這 3.2ms 玩家天天在付 |
| overlayScale 0.5 | 先前 −5.43ms | ⚠️ 那是虛線搬走前量的,殘值必須重量 |
| 怪數配額 | 0.19ms/隻,約 2ms 空間 | 玩法取捨 |
JS 2.1ms(有效值為 11.9)/19.3、19.4 地板/2.98MB 上傳(實際 63KB/幀)/8.87fps/25.4% resize 佔比。疊層族 5.89、6.1–7.2 是待機場面值,引用要帶負載註記。
判決書的原結論是「現路徑不可達 60,換路徑才可能」—— barry 等於把那條路做出來了,他的 60 是預測的兌現,不是反例。
而且他砍掉最有效的幾項(Cover、疊層合成),正好就是我們量到最貴的幾項 —— 兩份數據互相印證。
在 barry 的 B3 條件下跑我們的 atrace 差分 —— 若主執行緒遠低於 14.5,就實證「14.5 是 compat 路徑成本、不是平台成本」,兩套量測完全閉環。這格還沒做。
| # | 事項 | 誰能決定 | 卡在什麼 | 工 |
|---|---|---|---|---|
| 1 | 目標定調:60fps(把 barry 路徑變成出貨路徑)還是先收穩 45 | 蔡 | 只缺這個決定;後面所有排程掛在這題 | — |
| 2 | webgl2d 回線上(合併+開預設+重部署,恢復 35→45) | 蔡點頭、負責人執行 | 08-14 被舊樹部署蓋掉後至今未恢復 | 小時級 |
| 3 | 碰撞粒子密度砍量(Boss 死亡 120→24 顆等,無開關) | 只有蔡(畫面品質取捨) | 接受=直接合;不接受=要求包進開關再合 | 加開關為小工 |
| 4 | B6 特效未達標 + 秒級 GPU 卡頓根因 | 工程(barry 線) | 根因未定位;逐項排除已做完,下一步要 GPU 資源層追蹤 | 未知 |
| 5 | 影子/outline 回歸 + 現路徑「關影子 −3.2ms」取捨 | 蔡(畫面取捨) | 兩條線都在等同一個畫面決定 | 決定後小工 |
| 6 | barry 分支與 main 的合併:同檔衝突 + pipeline 視覺驗收(含實玩看刀片自轉) | 我們 | 合併語意要人工對、驗收要真 GPU 截圖 | 天級 |
| 7 | atrace 在 B3 條件的對照(兩套量測閉環的最後一格) | 我們 | 只需板窗+既有腳本 | 半天 |