Unity3d 如何避免Unity合并所有标准着色器变体

Unity3d 如何避免Unity合并所有标准着色器变体,unity3d,Unity3d,将标准着色器添加到图形时--始终包括着色器,Unity始终在sharedassets0.asset中阻塞。我知道它是背景中的一种变体。它大约有60000个变种,使得.apk尺寸比普通尺寸大三倍。即使是一个空项目,构建也需要很长的时间(几个小时)。如果我从列表中删除着色器,当我从资产包加载模型时,它将是粉红色的。只需将标准添加到列表中,那么一切都正常!有没有办法解决这个问题?请帮帮我!我尽我所能在谷歌上搜索 编辑:增加Unity 2018.2,描述如下: 您可以在IList中查看每个单独的着色器关

标准着色器添加到图形时--始终包括着色器,Unity始终在sharedassets0.asset中阻塞。我知道它是背景中的一种变体。它大约有60000个变种,使得.apk尺寸比普通尺寸大三倍。即使是一个空项目,构建也需要很长的时间(几个小时)。如果我从列表中删除着色器,当我从资产包加载模型时,它将是粉红色的。只需将标准添加到列表中,那么一切都正常!有没有办法解决这个问题?请帮帮我!我尽我所能在谷歌上搜索

编辑:增加Unity 2018.2,描述如下: 您可以在IList中查看每个单独的着色器关键字组合,并删除您确定不需要的组合。这个API并不复杂,但是标准的着色器关键字没有很好的文档记录。某些关键字对应于enum,而其他关键字则不对应。最后,我使用此预处理器删除了
内置ShaderDefine.UNITY\u HARDWARE\u TIER1
内置ShaderDefine.UNITY\u HARDWARE\u TIER2
实例上的所有
着色器CompilerData
(这不在
内置ShaderDefine
枚举中)已启用,因为我确信我们没有使用质量设置切换和实例化

Unity着色器变体集合的工作有点不稳定。我最终使用了一个名为“”的插件来清理混乱。但是这个过程仍然很不愉快,因为当你删除一个关键词时,你有可能会破坏一些东西

我能想到的最好的解决方案是在项目开始时删除所有“内置着色器”(可能不是“延迟”的是您正在使用延迟渲染)和“始终包括着色器”,如果有人需要内置着色器,请从Unity下载存档下载“内置着色器”,并仅将所需的着色器导入项目。以便您可以:

  • 100%控制内置着色器
  • 仅编译您使用的着色器
  • 避免AssetBundles中的着色器重复(如果打包引用默认导入着色器的内容,则将为每个AssetBundle复制着色器)

但这个“最佳解决方案”肯定是事后诸葛亮,对你目前的处境毫无帮助。试试着色器控制。

嗨,我想建议一种适合我的方法。我本打算发表评论,但我的声誉还没有达到50。我不推荐这个答案,但我想这对你的尝试没有坏处

我没有在图形下包含着色器——始终包含着色器,而是转到项目设置->播放器->优化,并在预加载资源下包含着色器

我也怀疑这样做是否正确,但它解决了我的问题。如果有人能指出它的错误并解释一下,我会很高兴,因为我在互联网上找不到太多关于这种方法的参考资料

我在game dev stack exchange上发布了一个类似的问题

我已经看过这个页面了!它不起作用!