Article · Writing
把 GPX 路線動畫交給 GPU:Windows 原生工具的設計與輸出證據
從 GPX 路線、Windows 原生 GPU pipeline 到一段有明確限制的 HEVC MP4 記錄,說明 GPX Animator GPU 的產品範圍與證據邊界。
Evidence trail
Provenance
這篇內容的 canonical URL 是 /writing/gpx-animator-gpu/,發布日期為 2026年8月1日。
相關 Project 證據與實作:https://github.com/Tommyweige/GPX-Animator-GPU
相容的歷史路徑:/posts/gpx-animator-gpu/
文章目錄
GPX 是用來保存 GPS 路線點的檔案格式;它很適合保存路線,卻不適合直接講故事:讀者看見的是一串座標,不是路線如何穿過地圖、距離如何累積,或爬升在哪裡發生。GPX Animator GPU Edition 是我做的 Windows 原生工具,讓這些資料在地圖上變成一段可以播放的動畫,再輸出成 MP4。
這篇是 GPX Animator GPU 的 Overview Article:Profile 負責快速說明 Project 身份與狀態,這裡則說清楚產品流程、上游能力、實際媒體證據,以及哪些數字只是某一次 recorded output,而不是通用 benchmark。
GPU 先解決哪一段問題?
路線的距離與高度仍然要先被整理;GPU 解決的是「把已整理的場景畫出來並輸出成影片」這一段。公開 repository 的主流程是 Windows native Rust desktop app:先用 D3D11/Direct2D(Windows 的繪圖 API)畫出地圖與路線,再放進 NVIDIA RTX texture(GPU 可直接讀寫的畫面緩衝),由 NVENC(NVIDIA 的硬體編碼器)轉成 HEVC(High Efficiency Video Coding,也就是 H.265)或 H.264,最後封裝成 MP4。
README 也明確說明它需要 Windows 10/11 x64、具備 NVENC 的 NVIDIA RTX GPU,且不接受 Intel、AMD、Microsoft WARP 或 CPU fallback。因此,「GPU-first」在這裡不是把任何電腦都宣稱成 GPU 輸出,而是把硬體前提寫進產品契約:不符合條件就拒絕輸出,讓執行路徑和證據保持一致。
載入一份 GPX 路線
以一段 0706 route run 為例,程式載入後會顯示:
- 路線長度:61.27 km
- 爬升:794 m
- GPS 點:4,161 個
- 程式會移除停留點
這些不是從畫面估算的數字:上游 repository 的固定路線基準測試(golden_0706 golden test)仍直接檢查 4,161 個來源點、61,270.092 公尺距離(允許誤差 0.5 公尺)與約 794 公尺爬升,並只保證有停留點被移除。畫面則補上程式如何把這些資料放回地圖、HUD 與海拔圖。

證據圖:記錄中的 0706 route run 原生 Windows 介面。截圖左側可見 .trk 來源檔名、61.27 km、794 m、4,161 個 GPS 點與被移除的停留點;右側同時顯示衛星地圖、路線、HUD 與海拔圖。這張圖與 repository 的 0706-route.gpx fixture 是兩條互相對照、但不冒充同一個檔案的證據。
這張圖的價值不是證明「每次都會得到相同畫面」,而是讓讀者看到輸入資料、可見統計與渲染結果在同一個 runtime 中對得上。
從載入到輸出,真正要對齊的是什麼?
實際流程是先載入一段路線,確認地圖上的路線與統計值,再選擇輸出設定。Follow camera(跟隨鏡頭)讓畫面沿著路線前進;Fit camera(完整路線鏡頭)則保留整段路線的空間關係。兩種模式都可以保留衛星地圖、HUD 與海拔圖,讓最後的影片不只是地圖上有一條線,而是能看出目前走到哪裡、爬升如何變化。
輸出設定
這次 0706 recorded output 使用的設定是:
- 畫面比例:16:9
- 解析度:1080p,也就是 1920×1080
- 影格率:30 FPS
- 編碼:H.265 / HEVC
- 影片秒數欄位:20 秒
- 品質:高畫質
GPU 負責把地圖動畫畫出來,HEVC 負責把畫面壓成 MP4。這裡的 30 FPS 是這次記錄的輸出設定,不是工具唯一支援的 frame rate;目前版本的 UI 也提供 4K、2.5K、1080p、720p 與 60 FPS 選項。

證據圖:真實 Windows UI 中的 4K(3840)選項與 60 FPS MP4 輸出選項。它證明設定介面提供這組選擇,不宣稱這張截圖本身就是已完成的 4K60 吞吐量 benchmark。

證據圖:另一個實際設定狀態,顯示 2.5K(2560)、Follow camera、HEVC 與 60 FPS MP4。這是可交付選項的替代組合,不應和 0706 的 1080p/30 measured output 混為一談。
按下輸出後,進度列會顯示 Rendering 和目前的處理速度。

證據圖:按下輸出後的實際進度畫面;程式正在 Rendering,左下角仍顯示 1080p、30 FPS 與 HEVC 設定,畫面也留下當時看到的 183.5 FPS progress readout。這個 readout 是渲染進度,不是完成影片的 real-time throughput 結論。
輸出結果
作者保存的輸出記錄列出以下檔案資訊;記錄中說明它曾由 FFmpeg 讀取:
- 1920×1080,16:9
- 30 FPS
- HEVC Main
- 750 frames
- 實際長度 25 秒
介面中的影片秒數欄位是輸入設定,不能直接代替 MP4 container 的實際長度;這份記錄以 750 frames ÷ 30 FPS = 25 秒核對其記錄的 duration。原始 MP4、FFmpeg report、file hash、GPU/driver 與完整 run metadata 沒有隨本網站發布,因此這是有來源說明的 recorded output record,不是可供讀者下載驗證的獨立 artifact,也不是對所有 GPX、地圖樣式或 GPU 都成立的固定結果。
輸出影片會把紅色路線、目前公里數、海拔數字,以及右上角的海拔圖一起寫進畫面。

證據圖:從 0706 路線實際輸出 MP4 抽出的 1920×1080 frame。可以看到紅色路線、36.82 km 的當前公里數、114 m 的當前海拔與右上角海拔圖;它示範輸出畫面如何保留行進脈絡。圖片來源:本 Project 的 measured output frame。
技術重點
GPX 載入後會先被整理成路線點、距離與海拔資料,再交給地圖場景產生動畫。在實作層,正式 pipeline 使用 D3D11 texture ring(循環重用的 GPU 畫面緩衝)與 NVENC submission,目標是讓 frame 留在 GPU,直到編碼後的資料交給 MP4 封裝器;上游 README 以 cpu_frame_readbacks == 0 作為這條路徑的診斷契約,也就是不把已繪製的 frame 複製回 CPU。這是 release path 的診斷欄位,不是這張 0706 截圖單獨測出的 benchmark。
對使用者來說,最後會看到的是一條可以跟著鏡頭移動的路線、同步更新的公里數與海拔,以及一個能正常播放的 MP4。GPU、HEVC 與 camera mode 是支撐這個流程的技術;真正重要的是它們是否能被測量、追蹤並在硬體不符合時拒絕假裝成功。
那麼,這些證據實際能支持哪些結論?
這篇可以支持三層不同強度的說法:
- Project scope:目前公開版本是 Windows native、NVIDIA RTX-only 的 GPU-first GPX animator,並提供 4K/60 等輸出設定。
- Route correctness:
golden_0706test 支持 4,161 點、61.270 km 與約 794 m 爬升的 route statistics。 - Recorded delivery:這篇文章保存的 0706 output record 列為 1920×1080、30 FPS、HEVC、750 frames、25 秒;圖片證明了介面、進度與輸出影格,但原始 MP4 與完整硬體 metadata 未公開,不能取代完整 benchmark。
因此,本文不把 4K60 寫成「每次輸出都能即時完成」,也不把畫面中的 183.5 FPS progress readout 寫成影片播放或 export throughput。若要宣稱某台 RTX 在 4K60 達到 real-time gate,仍應附上上游 repository 定義的 hardware acceptance tests 與執行環境。
限制與可重現入口
- 這是 Windows 原生工具;沒有符合 NVENC 的 NVIDIA RTX GPU 時,輸出會被拒絕,而不是靜默改用 CPU 或另一家 GPU 的 fallback。
- 第一次輸出可能需要下載尚未快取的地圖磚;之後會使用本機 cache,離線時則依 repository 的規則使用父層磚或 deterministic placeholder。
- 0706 的畫面與 output record 是特定 route、camera、解析度、frame rate、地圖與硬體條件下的 recorded evidence;原始 MP4 與完整 run metadata 未隨站點發布,不能外推成所有路線的品質或速度。
- 要重跑統計,可從 repository 的
0706-route.gpxfixture 與golden_0706.rs測試開始;要重跑 4K60 throughput,則必須在符合條件的 RTX Windows runner 執行 README 列出的 ignored hardware gates。