普通网友 2025-11-13 04:05 采纳率: 98.5%
浏览 9
已采纳

UE5 D3D崩溃常见于显卡驱动不兼容或内存溢出

在使用Unreal Engine 5通过DirectX 12(D3D12)运行高负载场景时,频繁出现D3D设备崩溃(Device Removed),错误日志提示“DXGI_ERROR_DEVICE_REMOVED”且伴随驱动超时。此类问题多源于显卡驱动版本过旧或与引擎不兼容,尤其在NVIDIA或AMD新架构显卡上更为显著;同时,GPU内存溢出或资源提交不当亦会触发相同异常。如何从驱动兼容性、内存管理及D3D12资源同步角度排查并解决该类崩溃?
  • 写回答

1条回答 默认 最新

  • 小丸子书单 2025-11-13 09:20
    关注

    1. 问题背景与现象分析

    在使用Unreal Engine 5(UE5)通过DirectX 12(D3D12)运行高负载场景时,频繁出现“DXGI_ERROR_DEVICE_REMOVED”错误,伴随驱动超时(Driver Timeout),导致渲染中断或程序崩溃。该异常本质是Windows图形子系统为保护系统稳定性强制移除GPU设备。常见触发因素包括:显卡驱动版本过旧或不兼容、GPU内存溢出、资源提交不当、命令队列同步错误等。

    • NVIDIA Ampere 或 AMD RDNA2/3 架构显卡上尤为显著
    • UE5 的 Nanite、Lumen 等高负载特性加剧资源压力
    • 错误日志中常伴随 DXGI_ERROR_DRIVER_INTERNAL_ERRORDXGI_ERROR_DEVICE_HUNG

    2. 排查路径:由浅入深的诊断流程

    1. 确认是否为偶发性驱动超时
    2. 检查显卡驱动版本与UE5兼容性矩阵
    3. 启用D3D Debug Layer捕获底层API调用异常
    4. 监控GPU内存使用趋势(VRAM + 显存提交)
    5. 分析命令列表提交频率与同步机制
    6. 审查资源生命周期管理(如未正确释放Texture或Buffer)
    7. 验证多线程渲染任务调度合理性
    8. 定位是否存在长时间运行的Compute Shader阻塞主队列
    9. 使用PIX或RenderDoc进行帧级调试
    10. 构建最小复现案例以隔离问题模块

    3. 驱动兼容性排查与解决方案

    显卡厂商推荐驱动版本(2024~2025)已知冲突版本UE5适配状态
    NVIDIA551.86+535.98(部分Lumen崩溃)完全支持
    AMDAdrenalin 24.5.1+23.12.1(Nanite异常)需开启Experimental D3D12 Backend
    Intel Arc31.0.101.4887+30.x以下全系有限支持,建议关闭Mesh Shading

    解决方案:

    • 定期更新至WHQL认证驱动
    • 在项目设置中启用“Use DirectX 12 Agility SDK”以绕过系统D3D版本限制
    • 通过注册表禁用TDR(Timeout Detection and Recovery)仅用于测试:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers
      设置 TimeoutDetectionInterval = 0xFFFFFFFF(生产环境严禁使用)

    4. GPU内存管理优化策略

    D3D12对显存管理极为敏感,UE5中以下行为易引发溢出:

    
    // 示例:手动创建大纹理时应检查预算
    IDXGIAdapter3* Adapter;
    UINT64 currentUsage, budget;
    adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_VIDEO_MEMORY, &memInfo);
    if (memInfo.CurrentUsage > 0.9f * memInfo.Budget) {
        UE_LOG(LogRHI, Warning, TEXT("GPU VRAM usage exceeds 90%% threshold"));
    }
    
    • 启用 rhi.MemoryInfoLog 实时输出显存统计
    • 配置流送池大小:r.Streaming.PoolSize=1200(单位MB)
    • 避免一次性加载大型静态网格体,使用HLOD或Instance替代
    • 压缩材质格式(ASTC/BC7)、启用Virtual Textures减少驻留内存

    5. D3D12资源同步与命令队列管理

    UE5底层RHI基于D3D12 Command Queue模型,若资源屏障(Barrier)设置不当,将导致设备移除。

    graph TD A[Begin Frame] --> B[Record Graphics Commands] B --> C{Need UAV/RTV Transition?} C -->|Yes| D[Insert UAV Barrier] C -->|No| E[Submit to Queue] D --> E E --> F[Signal Fence] F --> G[Present] G --> H{TDR Triggered?} H -->|Yes| I[Device Removed] H -->|No| A

    关键修复点:

    • 确保所有UAV写操作前后插入正确的D3D12_RESOURCE_BARRIER
    • 避免跨帧未完成的Fence等待,使用双缓冲或环形结构
    • 控制每帧提交的Command List数量(建议≤32)
    • 使用异步计算队列分离光照计算任务
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月14日
  • 创建了问题 11月13日