多版本Shader与multi_compile

 
 
#pragma multi_compile Type_1 Type_2 Type_3 ...

这个指令将会生成多个Shader变体(variants),运行时根据材质或是全局的Keyword决定哪个变体起效

所有关键字都没有起效的话, 会选择第一个起效,所以一般是写 XXX_OFF XXX_ON  默认关闭某选项

#pragma multi_compile __ FOO_ON

这种方式会少用一个关键字(总关键字数目有限制 256最大,内部已经用了大约60个)

#pragma shader_feature 和 #pragma multi_compile相似

不同的是shader_feature没有用到的不会被包含进去 multi_compile 全部版本都会被包含

所以 shader_feature 材质用 multi_compile 代码控制用

#pragma shader_feature FANCY_STUFF 是  #pragma shader_feature _ FANCY_STUFF 的缩写

shader中判断

#ifdef Type_n

... ..

#endif

在脚本里用

Material.EnableKeyword 和 DisableKeyword

Shader.EnableKeyword 和 DisableKeyword

控制keyword起效

注意: 5.4中用Shader.EnableKeyword设置了全局使用默认的key, 用Material.EnableKeywor设置单个不使用默认值无效

用Shader.EnableKeyword设置了全局不使用默认的key, 用Material.EnableKeywor设置单个使用默认值起效

EnableKeyword 和 DisableKeyword 最好组合使用 比如一组有三个,必须写1个enable2个disable

#pragma multi_compile A B C

#pragma multi_compile D E

会生成6(3*2)个变体

用上面的方式并不能根据不同的情况减少Pass,

可以用LOD属性控制SubShader的起效来手动的管理起效的Pass

把需要的基础Pass放在基础Shader中,用UsePass来组织需要起效的Pass

默认的ShaderLOD值为 200

Built-in shaders in Unity have their LODs set up this way:

    • VertexLit kind of shaders = 100
    • Decal, Reflective VertexLit = 150
    • Diffuse = 200
    • Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250
    • Bumped, Specular = 300
    • Bumped Specular = 400
    • Parallax = 500
    • Parallax Specular = 600

最新文章

  1. 离开Autodesk,开启新篇章
  2. [LeetCode] Fizz Buzz 嘶嘶嗡嗡
  3. python中threading的用法
  4. ASP.NET Repeater嵌套Repeater实现菜单加载
  5. font-face使用备忘
  6. 在ScrollView下加入的组件,不能自动扩展到屏幕高度
  7. oracle sql 优化
  8. lua 基础库
  9. JNDI初认识
  10. UCOS 杂项 笔记
  11. JQuery中html()方法的注意事项
  12. 基于注解Spring MVC综合Hibernate(需要jar包,spring和Hibernate整合配置,springMVC组态,重定向,)批量删除
  13. leetcode[105] Construct Binary Tree from Inorder and Postorder Traversal
  14. pyparsing:定制自己的解析器
  15. mysql阅读收录
  16. BugkuCTF~代码审计~WriteUp
  17. LG P2473 [SCOI2008]奖励关
  18. VBA 连接,提醒 rs AS new adodb.recordset 的变量未定义
  19. 20155331 《网络对抗》 Exp6 信息搜集与漏洞扫描
  20. MIT-6.828-JOS-lab3:User Environments

热门文章

  1. [2018-08-25]模板引擎Razor Engine 用法示例
  2. 20145239杜文超 《Java程序设计》第8周学习总结
  3. POJ1113 Wall —— 凸包
  4. 用CSS实现新闻轮播效果
  5. Btree算法的C语言实现
  6. docker的操作
  7. POJ3067(树状数组:统计数字出现个数)
  8. Linux的学习思路
  9. Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)
  10. HTTP协议详解之http请求分析