显存强制回收、mmap 句柄关闭与停机规程
sequenceDiagram
participant E as Unreal Engine
participant SUB as Subsystem
participant K as Kernel (DLL)
E->>SUB: 1. Deinitialize() / EndPlay()
SUB->>K: 2. 物理截断所有推流管道
SUB->>K: 3. UnloadModel()
K->>K: 4. 销毁 WebGPU 缓冲区
K->>K: 5. 物理断开 mmap 映射句柄
Note over SUB, K: 显存资源完全归还 OS
K-->>SUB: 6. 确认资源空
SUB->>SUB: 7. 销毁全局单例实例
由于 LiteRT-LM 是外部 DLL 管理显存,虚幻引擎的 RHI 层无法感知其存在。
如果不调用 UnloadModel,即便退出了 PIE,数 GB 的显存依然会被物理锁定。这会导致下次运行游戏时显存不足(OOM)或者外部渲染软件崩溃。
物理映射的模型文件如果不解绑,Windows OS 会锁定该文件,导致您无法在资源管理器中移动、删除或替换模型文件。
解析如何在关卡结束时优雅回收:
// 在 Provider 或 Subsystem 代理中执行
void MyDeinit() {
// 1. 物理清空所有 Session
Subsystem->ReleaseAllSessions();
// 2. 物理卸载内核并释放显存
FLiteRtLmUnrealApi::UnloadModel();
}