把 GPX 路線動畫交給 GPU:Windows 原生工具的設計與輸出證據

從 GPX 路線、Windows 原生 GPU pipeline 到一段有明確限制的 HEVC MP4 記錄,說明 GPX Animator GPU 的產品範圍與證據邊界。

6 分鐘閱讀
把 GPX 路線動畫交給 GPU:Windows 原生工具的設計與輸出證據
文章目錄

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 與海拔圖。

GPX Animator GPU Edition 載入 0706 路線後的實際介面

Windows 版工具載入 GPX 路線後的畫面:地圖上顯示行程軌跡、距離、高度和移除停留點後的結果。

這張圖的價值不是證明「每次都會得到相同畫面」,而是讓讀者看到輸入資料、可見統計與渲染結果在同一個 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 選項。

GPX Animator GPU Edition 的 4K 輸出選單

輸出設定畫面提供 4K 和 60 FPS 選項;這表示可以選擇該規格,不代表實際輸出一定能維持 4K60。

GPX Animator GPU Edition 的 2.5K Follow camera 設定

另一組可選設定:2.5K、鏡頭跟隨、HEVC 和 60 FPS。它和下方展示的 1080p 影片是不同設定。

按下輸出後,進度列會顯示 Rendering 和目前的處理速度。

GPX Animator GPU Edition 實際輸出中的進度介面

輸出進行中,畫面顯示當前解析度、影格率和 HEVC 設定。進度上的 FPS 數字反映畫面繪製速度,不等於成品影片的播放速度。

輸出結果

作者保存的輸出記錄列出以下檔案資訊;記錄中說明它曾由 FFmpeg 讀取:

  • 1920×1080,16:9
  • 30 FPS
  • HEVC Main
  • 750 frames
  • 實際長度 25 秒

介面上的秒數是輸入設定;成品影片的實際長度仍應以輸出檔案為準。

輸出影片會把紅色路線、目前公里數、海拔數字,以及右上角的海拔圖一起寫進畫面。

從 0706 路線實際輸出 MP4 抽出的影片畫面

輸出影片畫面顯示紅色路線、目前里程與高度;地圖和高度圖保留了行程進度。

技術重點

程式會讓畫面留在顯示卡中處理,再交給硬體編碼成 MP4,避免把每一張完成的畫面都搬回處理器。這能減少資料搬動,但實際輸出速度仍要看完整影片測試。

對使用者來說,最後會看到的是一條可以跟著鏡頭移動的路線、同步更新的公里數與海拔,以及一個能正常播放的 MP4。GPU、HEVC 與 camera mode 是支撐這個流程的技術;真正重要的是它們是否能被測量、追蹤並在硬體不符合時拒絕假裝成功。

這次示範能告訴我們什麼?

這次測試使用一條 61.27 公里、4,161 個定位點的路線,爬升約 794 公尺;工具能把路線畫在地圖上、同步顯示距離與高度,並輸出一支 1920×1080、每秒 30 格、長 25 秒的影片。

這是一條路線和一台電腦上的完整操作示範,不代表所有路線和硬體都會得到相同畫質或速度。設定畫面雖然可以選 4K 和 60 FPS,但本文沒有宣稱它能在所有情況下即時完成這種輸出;進度上的 183.5 FPS 也只是繪製速度,不是成品影片的播放速度。

使用時需要知道的事

  • 這是 Windows 原生工具;沒有符合 NVENC 的 NVIDIA RTX GPU 時,輸出會被拒絕,而不是靜默改用 CPU 或另一家 GPU 的 fallback。
  • 第一次輸出可能會先下載地圖;之後會使用本機快取。離線時若缺少地圖,程式會用簡化底圖補上。
  • 這段示範來自一條路線和特定硬體,只能展示當時的輸出效果,不能代表所有路線和電腦的速度或畫質。