Fallback을 Diffuse로 두었을때와 VertexLit을 두었을때 variants 차이가 생긴다.
Variants included를 열어보면
생성되는 Snippet platroms은 10개와 4개로 compiler에서 생성한 지시자는 다음과 같다.
nolightmap nodirlightmap nodynlightmap interpolateview noforwardadd
// 생성된 shader는 lambert 조명 모델을 사용하나 built-in lighting인 Lambert가 아닌 조명모델에 직접 작성해준 것으로 테스트.
fixed4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten) {
half NdotL = dot (s.Normal, lightDir);
half4 c;
c.rgb = s.Albedo * _LightColor0.rgb * (NdotL* atten);
//c.a = s.Alpha;
return fixed4(c.rgb,1);
}
각 define을 살펴보면
SHADOWS_CUBE SHADOWS_DEPTH
2 keyword variants used in scene:
SHADOWS_DEPTH
SHADOWS_CUBE
_Normal_ON _Rim_ON
FOG_EXP FOG_EXP2 FOG_LINEAR
DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON
16 keyword variants used in scene:
DIRECTIONAL
DIRECTIONAL SHADOWS_SCREEN
DIRECTIONAL VERTEXLIGHT_ON
DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON
DIRECTIONAL FOG_LINEAR
DIRECTIONAL FOG_LINEAR SHADOWS_SCREEN
DIRECTIONAL FOG_LINEAR VERTEXLIGHT_ON
DIRECTIONAL FOG_LINEAR SHADOWS_SCREEN VERTEXLIGHT_ON
DIRECTIONAL _Normal_ON _Rim_ON
DIRECTIONAL SHADOWS_SCREEN _Normal_ON _Rim_ON
DIRECTIONAL VERTEXLIGHT_ON _Normal_ON _Rim_ON
DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON _Normal_ON _Rim_ON
DIRECTIONAL FOG_LINEAR _Normal_ON _Rim_ON
DIRECTIONAL FOG_LINEAR SHADOWS_SCREEN _Normal_ON _Rim_ON
DIRECTIONAL FOG_LINEAR VERTEXLIGHT_ON _Normal_ON _Rim_ON
DIRECTIONAL FOG_LINEAR SHADOWS_SCREEN VERTEXLIGHT_ON _Normal_ON _Rim_ON
// Fallback을 Off로 설정하면 이 항목만 생성된다. shader_feature 로 선언한 지시자는 _Normal_ON과 _Rim_ON 두가지만..
FOG_EXP FOG_EXP2 FOG_LINEAR POINT SPOT
6 keyword variants used in scene:
<no keywords defined>
POINT
SPOT
FOG_LINEAR
FOG_LINEAR POINT
FOG_LINEAR SPOT
FOG_EXP FOG_EXP2 FOG_LINEAR
2 keyword variants used in scene:
<no keywords defined>
FOG_LINEAR
FOG_EXP FOG_EXP2 FOG_LINEAR
2 keyword variants used in scene:
<no keywords defined>
FOG_LINEAR
//이건 타겟 플랫폼에 따라 각각 두번 생성
------------------------------------------------------------------------------
아래는 Diffuse Fallback에 따른 추가 variants
compiler에서 lightmap 선언을 막았는데도 생성이 된다...
FOG_EXP FOG_EXP2 FOG_LINEAR
DIRECTIONAL DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE DYNAMICLIGHTMAP_ON LIGHTMAP_ON SHADOWS_SCREEN VERTEXLIGHT_ON
12 keyword variants used in scene:
DIRECTIONAL
DIRECTIONAL LIGHTMAP_ON
DIRECTIONAL SHADOWS_SCREEN
DIRECTIONAL LIGHTMAP_ON SHADOWS_SCREEN
DIRECTIONAL VERTEXLIGHT_ON
DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON
DIRECTIONAL FOG_LINEAR
DIRECTIONAL FOG_LINEAR LIGHTMAP_ON
DIRECTIONAL FOG_LINEAR SHADOWS_SCREEN
DIRECTIONAL FOG_LINEAR LIGHTMAP_ON SHADOWS_SCREEN
DIRECTIONAL FOG_LINEAR VERTEXLIGHT_ON
DIRECTIONAL FOG_LINEAR SHADOWS_SCREEN VERTEXLIGHT_ON
FOG_EXP FOG_EXP2 FOG_LINEAR
DIRECTIONAL DIRECTIONAL_COOKIE POINT POINT_COOKIE SPOT
10 keyword variants used in scene:
POINT
DIRECTIONAL
SPOT
POINT_COOKIE
DIRECTIONAL_COOKIE
FOG_LINEAR POINT
DIRECTIONAL FOG_LINEAR
FOG_LINEAR SPOT
FOG_LINEAR POINT_COOKIE
DIRECTIONAL_COOKIE FOG_LINEAR
FOG_EXP FOG_EXP2 FOG_LINEAR
DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE DYNAMICLIGHTMAP_ON LIGHTMAP_ON UNITY_HDR_ON
8 keyword variants used in scene:
<no keywords defined>
LIGHTMAP_ON
UNITY_HDR_ON
LIGHTMAP_ON UNITY_HDR_ON
FOG_LINEAR
FOG_LINEAR LIGHTMAP_ON
FOG_LINEAR UNITY_HDR_ON
FOG_LINEAR LIGHTMAP_ON UNITY_HDR_ON
DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE DYNAMICLIGHTMAP_ON LIGHTMAP_ON UNITY_HDR_ON
4 keyword variants used in scene:
<no keywords defined>
LIGHTMAP_ON
UNITY_HDR_ON
LIGHTMAP_ON UNITY_HDR_ON
Lightmap을 컴파일러에서 제한해도 variants가 생기는건 그림자를 lightmap위에 그려져야 하므로 생성되는 것으로 보인다. shadow mask를 지원하는 5.6 버젼 이후에서는 다르게 적용될것 같은데 이쪽은 아직 테스트 전.
Diffuse로 그리는것과 vertexLit으로 했을때 차이가 나는것도 같은 맥락으로 이해하면 될듯하다.
shadow를 캐스팅 하지 않을때 variants 생성이 크게 줄어드는 것이 이때문이다.
'Technical Report > Unity Shader' 카테고리의 다른 글
Unity fragment self shadow casting (0) | 2017.09.18 |
---|---|
Unity Shaderlab Shader Model Features (0) | 2017.09.04 |
Unity Normal defined function (0) | 2017.07.04 |
Unity compiler directives (0) | 2017.06.27 |
Unity Mobile device에서 Shader의 fixed 처리 (0) | 2017.06.27 |