博客
关于我
[Unity 优化]Shader
阅读量:709 次
发布时间:2019-03-21

本文共 1582 字,大约阅读时间需要 5 分钟。

igneous

文档内容:

Shader 变种

multi_compile

通过代码控制关键字开关,一定会编译生成变种。

shader_feature

通常由材质控制是否启用,由材质和ShaderVariantCollection决定是否生成变种。如果在AB文件里将Shader与材质球一同打包,才能灵活获取所需的shader_feature。

skip_variants

可用于剪裁某些变种,避免压缩或优化资源。

Graphics 设置

如果设置了“Always Included Shaders”,游戏运行时会将所有变种打包到资源中,确保它们被加载和缓存。

过多变种会导致ShaderLab内存占用增大,影响Shader.Parse(编译)和Shader.CreateGpuProgram(创建CPU执行程序片段)的性能,且变种过多可能会导致性能问题。

ShaderVariantCollection 使用

将其用于WarmUp,是为了优化Shader.CreateGpuProgram的性能,但不要同时使用多个ShaderVariantCollection进行WarmUp,更应该考虑将多个WarmUp过程合并。

合理使用ClearCurrentShaderVariantCollection和SaveCurrentShaderVariantCollection,合并多个 ShaderVariantCollection 提交摊销,让其高效管理多个版本以提高渲染效率。

Shader 打包 AB

将所有所需的Shader文件和ShaderVariantCollection打包到一个 AB 文件中,这样游戏运行时会全部加载并缓存,之后只需调用 ShaderVariantCollection的WarmUp即可同时预热所有变种,避免后续的Shader.Parse和Shader.CreateGpuProgram操作。

注意事项

  • 如果仍然出现Shader.Parse错误,说明存在冗余资源,可能是未被清理的第三方插件或未加入Always Included Shaders的默认Shader。
  • 如果继续出现Shader.CreateGpuProgram错误,大会源于如下原因:
    • 某些Shader变种被不当添加到Always Included Shaders里,例如使用默认材质的Standard shader。
    • 某些Shader重复加载导致冗余。

依此类推,这些问题需要在预处理阶段就得深度分析和优化。

Shader 冗余

依托上述打AB的优化方式,如果仍然出现冗余,主要可能来自以下方面:

  • 第三方插件:如果项目中引入了第三方库或插件,可能会带来额外的Shader文件,但通过合理配置可以避免加载这些无关的资源。

  • 默认材质引用:未被适当移除的默认材质引用的Shader会在项目中存在,且未被加入Always Included Shaders的情况下,可能会导致冗余。

  • ShaderLab 内存占用

    如果发现ShaderLab内存占用异常大,第一反应应确认是否存在冗余Shader变种,特别是那些被不当地添加到了Always Included Shaders中的Standard材质相关Shader。

    此外,过多的变种使用不当会导致Renderer负担加重,尤其是那些大规模的)fbx文件导入的结构中使用的Standard材质,需要谨慎管理。

    通过定期清理冗余资源和调整不必要的变种生成设置,观察内存占用变化,确保ShaderLab能够高效运作。建议通过Profiler 工具查看 Assets/Shader 中重复出现的Shader文件数量,及时exclude 无用资源。

    希望这份优化后的文档能为您提供清晰的指导,帮助您高效使用和管理Shader资源。

    转载地址:http://wxyrz.baihongyu.com/

    你可能感兴趣的文章
    spring配置文件中<context:property-placeholder />的使用
    查看>>
    OSPF有哪些优势?解决了RIP的什么问题?
    查看>>
    OSPF理论
    查看>>
    OSPF的七种类型LSA
    查看>>
    OSPF的安全性考虑:全面解析与最佳实践
    查看>>
    OSPF知识点大全,网络工程师快速收藏!
    查看>>
    ospf综合实验2 2012/9/8
    查看>>
    OSPF规划两大模型:双塔奇兵、犬牙交错
    查看>>
    OSPF认证
    查看>>
    OSPF设计原则,命令以H3C为例
    查看>>
    ospf路由 华3_动态路由OSPF基本原理及配置,一分钟了解下
    查看>>
    OSPF路由协议配置
    查看>>
    OSPRay 开源项目教程
    查看>>
    VC++实现应用程序对插件的支持
    查看>>
    OSS 访问图片资源报“No ‘Access-Control-Allow-Origin‘”的错误
    查看>>
    ossfs常见配置错误
    查看>>
    Ossim4系统故障处理
    查看>>
    Spring赌上未来:响应式的 WebFlux 框架更优雅,性能更强!
    查看>>
    oss报UnknownHost,k8s设置hostAliases参数
    查看>>
    OSS报错The difference between the request time and the current time is too large
    查看>>