_local:只限本Shader使用该关键字 shader_feature_local:与shader_feature类似, 但是仅限本shader使用 multi_compile_local:与multi_compile类似, 但是限本shader使用 _Vertex:关键字只在顶点着色器作用 _fragment:关键字只在片元着色器作用 适用的情况分类 在Unity编辑模式下: 例如要开关物体反射 控制物体颜色等 适合...
可以写成 #pragma [multi_compile/shader_feature]_local[_vertex/_fragment] A B 具体例子: #pragma multi_compile_local_vertex A B 此方法在暂时不想缩减关键字可以大幅降低Shaderlab的内存占用。 多说一句,真正想降低Shaderlab内存占用还是需要对自己写的关键字进行缩减也要对#include的外部包带来的关键字进行限...
shader_feature和multi_compile后面也可以加其他条件,例如,如果确定一组Keyword声明只会导致VertexShader有变化,即可再后面加_vertex,例如shader_feature_vertex。 shader_feature_local的_local声明和变体数无关,是Unity 2021之前为了解决GlobalKeyword数量问题出现的解决方案,声明为Local Keyword不会占用Global Keyword数,建议...
第一个是在shader_feature后面只跟了一个宏的时候,会生成两个变体,一个是不包含该宏,另一个是包含该宏。另一个区别是打包时的表现。在打包的时候shader_feature不会包含没有使用的变体,而multi_compile会排列组合所有变体。 2.变体 Unity在编译shader时,不同的宏组合会生成独立的shader程序,这些独立的shader程序...
#pragma shader_feature_local_fragment _ALPHATEST_ON:在此处的主要作用是开启alpha裁剪 #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A:不确定,推测此处的主要作用是确定采样处的光滑程度以用于alpha裁剪? #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE:LOD相关,直接保留即可 ...
下面就是 shader_feature_local shader_feature_local_fragment multi_compile multi_compile_fragment 这些都是用来定义宏的,带feature的话是按需生成shader变体,如果不带的话不管你项目里面用没用,都会生成相应的宏变体。 还有这种 #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING 后面带下划线的,是使用引擎内置的变体...
1.1 multi_compile和shader_feature的区别 用multi_compile声明的Keyword是全排列组合,例如: #pragma multi_compile A B #pragma multi_compile C D E 组合出来就是AC、AD、AE、BC、BD和BE6个,如果再来一个#pragma multi_compile F G显然会直接翻倍为12个。
multi_compile_fragment shader_feature_local_vertex 实际使用中multi_compile与shader_feature基本没有区别。他们主要有两个区别。第一个是在shader_feature后面只跟了一个宏的时候,会生成两个变体,一个是不包含该宏,另一个是包含该宏。另一个区别是打包时的表现。在打包的时候shader_feature不会包含没有使用的变体...
一、什么是Shader变体管理 想要回答这个问题,要看看什么是Shader变体。 1. 变体 我们用ShaderLab编写Unity中的Shader,当我们需要让Shader同时满足多个需求,例如,这个是否支持阴影,此时就需要加Keyword(关键字),例如在代码中#pragma multi_compile SHADOW_ON SHADOW_OFF,对逻辑上有差异的地方用#ifdef SHADOW_ON或#if ...
小贴士:shader_feature和multi_compile后面也可以加其他条件,例如如果确定一组keyword声明只会导致vertexshader有变化,即可再后面加_vertex,例如shader_feature_vertex。shader_feature_local的_local声明和变体数无关,是Unity2021之前为了解决GlobalKeyword数量问题出现的解决方案,声明为local keyword不会占用global keyword数,...