出现d3d11问题导致编辑器崩溃
升级到Unity 6,有时出现下面这种D3D11的问题,会导致编辑器崩溃。
在 Windows 系统中,当显卡由于长时间忙碌而被重置时,可能会导致这个不可恢复的错误。在部分情况下,如果不及时处理,还可能出现 BSOD(蓝屏死机)VIDEO_TDR_FAILURE 。如果检测到当前 TDR 值 低于 10 秒,就会弹出提示窗口。
为什么 GPU 驱动会崩溃?
为了防止渲染或 GPU 计算任务长时间占用系统,Windows 操作系统会在渲染时间超过几秒时强制终止 GPU 驱动。驱动被终止后,相关的应用程序会随之崩溃。
由于 GPU 渲染或计算任务的时间长短与多种因素有关(例如 GPU 性能、驱动版本、操作系统、网格大小、纹理大小等),因此无法从应用程序层面预估并避免此类崩溃。
Windows 系统中有一个注册表键值用于指定系统等待 GPU 响应的时间长度(即 TDR 值 )。应用程序无法直接修改这个设置,但用户可以手动调整。
更多信息参考官方文档:TDR 注册表键文档。
以下是多个用户尝试并验证过的解决方案,希望能帮助你快速解决问题。如有新方法,欢迎补充。
可以优先尝试6:修改 TDRDelay 和 TDRDdiDelay 值。
如果不行的话,再试试其他方法。因为造成这个问题的原因比较多。
解决方案列表
1. 在 Windows 设置中指定首选显卡
通过设置让 Unity 使用你的独立显卡,而非集成显卡(通常性能较差)。
- 路径:
设置 > 系统 > 显示 > 图形设置 > “选择要设置首选项的应用” > 桌面应用 > 浏览 - 选择你的 Unity 编辑器路径(
unity.exe),然后点击“选项”,设置为“高性能”。 - 提示: 可通过任务管理器的性能选项卡确认 Unity 是否使用集成显卡。
2. 在 Nvidia 控制面板中指定显卡设置
确保在 Nvidia 控制面板中,为 Unity 编辑器设置使用独立显卡。
- 路径:
打开 Nvidia 控制面板 > 管理 3D 设置 > 程序设置
为unity.exe指定独立显卡。
3. 将 Unity 添加到杀毒软件白名单
某些杀毒软件可能干扰 Unity 的运行,可尝试将 unity.exe 添加到白名单中。
- 如果问题仍未解决,可暂时关闭杀毒软件测试(但不建议长期关闭)。
4. 删除项目的 Library 文件夹
- 方法:
关闭 Unity 后,删除项目目录下的Library文件夹。重新打开项目时,Unity 会自动重建此文件夹。 - 效果: 有用户反馈此操作能解决问题。
5. 进行 Windows 就地升级
- 方法:
下载 Windows 最新版本的安装程序,执行“就地升级”。- 在安装过程中选择“保留我的文件”以及“保留我的应用”。
- 效果: 一些用户反馈此操作能修复系统问题。
6. 修改 TDRDelay 和 TDRDdiDelay 值
- 原理: 增加显卡响应的超时时间,以防止 Windows 过早重置显卡。
- 风险: 设置不当可能导致系统不稳定,甚至蓝屏死机(BSOD)。
- 修改方法:
参考 Adobe 官方教程。
7. 添加 Unity 启动参数 -force-d3d11 或 -force-d3d12
- 方法:
- 打开 Unity Hub,点击项目名称右侧的“...” > 高级项目设置。
- 在“命令行参数”中输入
-force-d3d12或-force-d3d11,然后保存并打开项目。
- 效果: 强制 Unity 使用指定的图形 API,可能解决设备重置问题。
8. 禁用集成显卡
- 方法:
在设备管理器中禁用集成显卡。- 注意: 如果你的设备只有一张显卡,请不要尝试此方法。
补充建议
- 更新显卡驱动程序:
确保显卡驱动程序是通过官方网站(如 Nvidia 官网)下载的最新版本。 - 联系显卡厂商支持:
Nvidia 用户可以通过 Nvidia 官方支持 联系工程师寻求帮助。
参考:
2. https://helpx.adobe.com/substance-3d-painter/technical-support/technical-issues/gpu-issues/gpu-drivers-crash-with-long-computations-tdr-crash.html