包含此页的版本:
不含此页的版本:
每次构建项目时,Unity 编辑器都会编译构建所需的所有着色器:每个必需的着色器着色器在 GPU 上运行的程序。更多信息
请参阅术语表variant,适用于每个所需的图形 API。
当您在 Unity 编辑器中工作时,编辑器不会预先编译所有内容。这是因为编译每个图形 API 的每个变体可能需要很长时间。
相反,Unity 编辑器会执行以下作:
Library/ShaderCache文件夹。着色器编译是使用名为UnityShaderCompiler.倍数UnityShaderCompiler进程可以启动(通常机器中的每个 CPU 内核一个),以便在玩家构建时可以并行完成着色器编译。当编辑器不编译着色器时,编译器进程不执行任何作,也不会消耗计算机资源。
如果有很多经常更改的着色器,则着色器缓存文件夹可能会变得非常大。删除此文件夹是安全的;它只会导致 Unity 重新编译着色器变体。
在玩家构建时,所有“尚未编译”的着色器变体都会被编译,因此即使编辑器没有碰巧使用它们,它们也会出现在游戏数据中。
不同的平台使用不同的着色器编译器进行着色器程序编译,如下所示:
您可以使用编译指示配置各种着色器编译器设置。
着色器编译涉及几个步骤。第一步是预处理。在此步骤中,称为预处理器的程序为编译器准备着色器源代码。
在早期版本的 Unity 中,编辑器使用着色器编译器为当前平台提供的预处理器。现在,Unity 使用自己的预处理器,也称为缓存着色器预处理器。
缓存着色器预处理器经过优化,可加快着色器导入和编译速度。它的工作原理是缓存中间预处理数据,因此编辑器只需在包含文件的内容发生变化时解析包含文件,这使得编译同一着色器的多个变体更加高效。
有关缓存着色器预处理器与先前行为之间差异的详细信息,请参阅 Unity 论坛:新建着色器预处理器。
在构建游戏时,Unity 可以检测到游戏未使用某些内部着色器变体,并将它们从构建数据中排除(“剥离”)。有关更多信息,请参阅着色器变体Unity 根据着色器关键字及其状态的特定组合生成的着色器程序的版本。一个着色器对象可以包含多个着色器变体。更多信息
请参阅术语表.