d3dcompiler_47.dll 只在 Unity 材质预览时报错:编辑器 SDK 和着色器缓存怎么拆
d3dcompiler_47.dll 缺失时按 Windows SDK、Unity/Unreal 编辑器目录、着色器缓存和隔离记录处理。
玩家包能跑,一打开 Unity 材质球或 Unreal 着色器编译窗口就提示找不到 d3dcompiler_47.dll,说明缺的是编辑器编译期用的着色器编译库,不是显卡驱动。这个文件可能来自 Windows SDK,也可能被编辑器自己的 Binaries 带着。先记下失败发生在预览、点击 Compile,还是第一次 Cook。

一、d3dcompiler_47.dll 在着色器编译里的具体作用

编辑器预览材质、编译 Shader、Cook 资源时会调用这套编译器。玩家运行时通常已经带上编译好的着色器,所以游戏能玩、编辑器不能预览,并不矛盾。它不是 DirectX 游戏运行库的替代品。
二、d3dcompiler_47.dll 文件分析:SDK 还是编辑器自带

先看失败进程是 Unity.exe、UnrealEditor.exe 还是独立的 ShaderCompileWorker。任务管理器里对上进程后,再看该目录的 Binaries 或 Windows SDK 的 10.0 路径里有没有同名文件。两套路径都缺,才考虑补 SDK。
三、d3dcompiler_47.dll 缺失的常见触发场景

常见触发:刚装完编辑器没勾 SDK 组件、清理缓存时删掉了编译器、安全软件隔离了 Binaries、以及用绿色包启动编辑器。先写失败发生在预览球、点 Compile,还是 Cook 队列第一项。
四、d3dcompiler_47.dll 兼容性问题

同一台机器上 Unity 2021 和 2022 可能各带一份编译器。不要把 A 版本的 d3dcompiler_47.dll 复制到 B 版本目录。Windows SDK 的版本号也要和编辑器文档一致。
五、修复 d3dcompiler_47.dll 的五种方法

方法一:打开 Visual Studio Installer 或独立 Windows SDK 安装器,按编辑器文档勾选对应 Windows 10/11 SDK,完成安装后重启。再打开原先失败的那个材质球或 Shader 窗口。
方法二:打开 Unity Hub 或 Epic Games Launcher,选中当前正在用的编辑器版本,进入“校验/修复”或 Verify,等进度走完后再看编辑器 Binaries 目录是否回填 d3dcompiler_47.dll。完成后重启编辑器,只打开原先失败的那个材质球,再点一次 Compile,不要同时清着色器缓存或改图形 API。
方法三:电脑小白可用智鸟dll修复工具扫描 d3dcompiler_47.dll 及相关组件,它适合自动检查 DLL 缺失和组件异常,并按提示一键修复。使用步骤(以 智鸟dll修复的工具 为例):首先打开电脑,进入【此电脑】以后在顶部文件路径栏目输入:dll修复.site(鼠标移到右侧的箭头点击)或者直接点击回车键(Enter)打开检查工具。 也可进入智鸟 DLL 修复页。扫描后只处理与本次编辑器提示对应的项目,重启后再打开同一材质预览。
方法四:打开安全软件隔离区,按第一次预览失败的时间查找 d3dcompiler_47.dll 或编辑器 Binaries 路径。确认来自官方安装后再恢复。随后重新编译原先失败的 Shader。
方法五:从开始菜单打开“终端(管理员)”,执行 sfc /scannow,必要时再执行 DISM /Online /Cleanup-Image /RestoreHealth。完成后重启。系统检查不能替代 SDK 或编辑器自带的编译器文件。
六、手动替换 d3dcompiler_47.dll 的操作风险
从别的游戏目录拷一份编译器到编辑器里,版本对不上就会改报入口点错误,还可能污染已经能 Cook 的工程。应当让 SDK 安装器或编辑器校验回填原文件。
七、着色器缓存清错时怎样收场
如果已经手动删过 Library/ShaderCache 或 DerivedDataCache,先不要继续删。补齐编译器之后,只打开原先失败的那一个材质球重新编译,确认能出预览再决定是否清更大范围的缓存。
八、修复后怎样验证编辑器预览
只运行玩家包不够。应重新打开原先失败的材质预览,再点一次 Compile;如果是 Cook 失败,还要提交原来的那一项。两次成功并且重启编辑器后再测一次,才说明编译库恢复了。
把编辑器版本、失败窗口和真正生效的步骤记下来。下次再看到 d3dcompiler_47.dll,先确认是不是又只在预览或编译时报。
延伸参考