在 3DGS 場景中行走:碰撞支持
LCC4Unreal 支持動態碰撞數據加載,角色可在 3DGS 世界中自由走動和交互。
前置條件
碰撞依賴數據自帶的碰撞文件,不同格式的要求不同:
| 格式 | 碰撞數據 | 支持情況 |
|---|---|---|
.lcc | 數據目錄下的 collision.lci,舊版本為 collision.bin | 支持 |
.lcc2 | 數據目錄下 data/mesh/ 中的 .ply 文件 | 支持 |
.sog / .spz / .ply | 無 | 不支持 |
插件按 collision.lci → collision.bin → data/mesh/*.ply 的順序檢測,三者都不存在時輸出警告並禁用碰撞。加載數據後可用 HaveValidCollisionData() 確認當前數據是否包含可用的碰撞數據。
注:
collision.lci需要 LCC Studio v1.6.1 及以上版本導出,更早版本導出的數據使用collision.bin。
單文件格式的替代方案
.sog、.spz、.ply 是單文件格式,不攜帶碰撞數據,插件無法為其生成碰撞。需要碰撞時自行在場景中搭建:
- Blocking Volume:用引擎的阻擋體積拼出地面、牆面等需要阻擋的區域,適合規則形狀,成本最低
- 近似網格:放置一份與 3DGS 形狀貼合的網格並啟用其碰撞,適合形狀複雜的場景。這份網格可以複用代理網格,把它的碰撞預設改為參與阻擋即可
兩種方式都與 LCC 的碰撞加載機制無關,不受 CollisionLoadMaxDistance 影響,也不會隨相機移動動態換入換出。
加載機制
碰撞數據和渲染數據一樣按空間分塊存儲。插件不會一次性加載全部碰撞,而是只加載相機周圍一定範圍內的塊,並隨相機移動動態換入換出。
相機位置變化
│
▼
計算範圍內應加載的碰撞塊集合
│
▼
與上一次的集合比較 ── 相同 ──▶ 跳過,不做任何處理
│ 不同
▼
加載新增的塊 → 交給物理系統烘焙 → 生成碰撞體
幾個實現上的要點:
- 加載範圍由
Max Load Collision Distance(m)控制,超出該距離的區域沒有碰撞 - 首次加載是同步的,避免角色在碰撞尚未就緒時穿過地面掉落;之後的更新都走異步,不阻塞主線程
- 有頻率節流,相機連續移動時不會每幀都重建碰撞
- 可見塊集合未變化時直接跳過,原地小幅移動不會觸發重建
- 只按主相機計算,SceneCapture 不參與碰撞加載
優點
- 內存佔用只與加載範圍有關,與數據總量無關,大場景也能支持碰撞
- 物理系統需要處理的碰撞體數量始終可控,不會因為場景規模增長而拖慢物理計算
代價與規避
| 問題 | 原因 | 規避方式 |
|---|---|---|
| 開始遊戲瞬間角色穿地掉落 | 碰撞尚未構建完成 | 把 PlayerStart 抬高一段距離,或在碰撞就緒後再啟用角色移動 |
| 角色從遠處進入 3DGS 場景範圍時卡頓 | 角色出生在碰撞加載範圍外,首次進入時觸發同步加載 | 讓角色出生點位於碰撞加載範圍內,或一次性加載全部碰撞 |
| 遠處沒有碰撞,射線檢測打不中 | 超出加載範圍的區域不生成碰撞體 | 調大 Max Load Collision Distance(m),或改用不依賴碰撞的判斷方式 |
| 傳送或快速移動後短時間內無碰撞 | 新區域的碰撞塊還在加載 | 一次性加載全部碰撞 |
移動中出現卡頓,Update Collision 耗時高 | 碰撞塊頻繁換入換出並重新烘焙 | 縮小加載範圍,或確認是否真的需要碰撞 |
| 配合導航時導航網格反覆重建 | 碰撞變化觸發 NavMesh 更新 | 調大加載範圍讓目標區域一次性加載完,並使用 Static 烘焙,詳見尋路系統支持 |
一次性加載全部碰撞
上述代價大多來自運行期的動態換入換出。如果場景規模有限、內存有餘量,可以把 Max Load Collision Distance(m) 調大到足以覆蓋整個場景,讓碰撞在加載數據時一次性全部建好。
這樣運行期不再有碰撞塊的換入換出,前面表格裏的穿地掉落、傳送無碰撞、移動卡頓、導航反覆重建都不會出現,配合尋路系統時尤其推薦。
代價是啟動時的加載時間變長、內存佔用固定為全場景碰撞的大小。判斷是否可行:查看 stat xgrids 中的 Collision Data Usage,確認全量加載後的內存佔用在可接受範圍內。
開啟
LCCComponent->SetLCCCollisionEnable(true);
或在 Details 面板中勾選 bEnableCollision。

在 Details 面板中啟用 LCC 碰撞

角色在 LCC 場景中的動態碰撞效果
驗證
通過視圖模式設置,選擇玩家碰撞或可視性碰撞可以觀察到碰撞是否已開啟

使用玩家碰撞或可視性碰撞模式驗證碰撞體
相關屬性
| 屬性 | 說明 |
|---|---|
| bEnableCollision | 啟用碰撞 |
| CollisionLoadMaxDistance | 碰撞數據最大加載距離(默認 300 米) |

配置碰撞啟用狀態與最大加載距離
注意事項
- 開啟碰撞後可使用 UE 引擎自身的 LineTrace 進行基於碰撞體的射線檢測,檢測範圍同樣受加載範圍限制
- 碰撞數據佔用的內存可在
stat xgrids的Collision Data Usage中查看,更新耗時見Update Collision,參數含義見性能優化參數說明