- Home /
Question by
chirpywiz711 · Dec 09, 2018 at 12:05 AM ·
errorshaderserror messageshaderlabshader writing
Invalid Subscript Metallic
I keep getting the message "Shader error in 'Toony Colors Free/Regular': invalid subscript 'Metallic' at line 98 (on d3d11)".
this is my code.
Shader "Toony Colors Free/Regular"
{
Properties
{
//TOONY COLORS
_Color ("Color", Color) = (0.5,0.5,0.5,1.0)
_HColor ("Highlight Color", Color) = (0.6,0.6,0.6,1.0)
_SColor ("Shadow Color", Color) = (0.3,0.3,0.3,1.0)
//DIFFUSE
_MainTex ("Main Texture (RGB)", 2D) = "white" {}
_Glossiness("Smoothness", Range(0,1)) = 0.5
_Metallic("Metallic", Range(0,1)) = 0.0
_BumpMap("Normal Map", 2D) = "bump" {}
//TOONY COLORS RAMP
_Ramp ("Toon Ramp (RGB)", 2D) = "gray" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf ToonyColorsCustom
#pragma target 3.0
#pragma glsl
//================================================================
// VARIABLES
fixed4 _Color;
sampler2D _MainTex;
struct Input
{
half2 uv_MainTex;
float2 uv_BumpMap;
};
sampler2D _BumpMap;
half _Glossiness;
half _Metallic;
//================================================================
// CUSTOM LIGHTING
//Lighting-related variables
fixed4 _HColor;
fixed4 _SColor;
sampler2D _Ramp;
//Custom SurfaceOutput
struct SurfaceOutputCustom
{
fixed3 Albedo;
fixed3 Normal;
fixed3 Emission;
half Specular;
half _Glossiness;
half _Metallic;
fixed Alpha;
};
inline half4 LightingToonyColorsCustom (SurfaceOutputCustom s, half3 lightDir, half3 viewDir, half atten)
{
s.Normal = normalize(s.Normal);
fixed ndl = max(0, dot(s.Normal, lightDir)*0.5 + 0.5);
fixed3 ramp = tex2D(_Ramp, fixed2(ndl,ndl));
#if !(POINT) && !(SPOT)
ramp *= atten;
#endif
_SColor = lerp(_HColor, _SColor, _SColor.a); //Shadows intensity through alpha
ramp = lerp(_SColor.rgb,_HColor.rgb,ramp);
fixed4 c;
c.rgb = s.Albedo * _LightColor0.rgb * ramp;
c.a = s.Alpha;
#if (POINT || SPOT)
c.rgb *= atten;
#endif
return c;
}
//================================================================
// SURFACE FUNCTION
void surf (Input IN, inout SurfaceOutputCustom o)
{
fixed4 mainTex = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = mainTex.rgb * _Color.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = mainTex.a * _Color.a;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
Fallback "Diffuse"
CustomEditor "TCF_MaterialInspector"
}
,I keep getting message "invalid subscript 'metallic' at line 98 (on d3d11).
This is my shader code.
Shader "Toony Colors Free/Regular"
{
Properties
{
//TOONY COLORS
_Color ("Color", Color) = (0.5,0.5,0.5,1.0)
_HColor ("Highlight Color", Color) = (0.6,0.6,0.6,1.0)
_SColor ("Shadow Color", Color) = (0.3,0.3,0.3,1.0)
//DIFFUSE
_MainTex ("Main Texture (RGB)", 2D) = "white" {}
_Glossiness("Smoothness", Range(0,1)) = 0.5
_Metallic("Metallic", Range(0,1)) = 0.0
_BumpMap("Normal Map", 2D) = "bump" {}
//TOONY COLORS RAMP
_Ramp ("Toon Ramp (RGB)", 2D) = "gray" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf ToonyColorsCustom
#pragma target 3.0
#pragma glsl
//================================================================
// VARIABLES
fixed4 _Color;
sampler2D _MainTex;
struct Input
{
half2 uv_MainTex;
float2 uv_BumpMap;
};
sampler2D _BumpMap;
half _Glossiness;
half _Metallic;
//================================================================
// CUSTOM LIGHTING
//Lighting-related variables
fixed4 _HColor;
fixed4 _SColor;
sampler2D _Ramp;
//Custom SurfaceOutput
struct SurfaceOutputCustom
{
fixed3 Albedo;
fixed3 Normal;
fixed3 Emission;
half Specular;
half _Glossiness;
half _Metallic;
fixed Alpha;
};
inline half4 LightingToonyColorsCustom (SurfaceOutputCustom s, half3 lightDir, half3 viewDir, half atten)
{
s.Normal = normalize(s.Normal);
fixed ndl = max(0, dot(s.Normal, lightDir)*0.5 + 0.5);
fixed3 ramp = tex2D(_Ramp, fixed2(ndl,ndl));
#if !(POINT) && !(SPOT)
ramp *= atten;
#endif
_SColor = lerp(_HColor, _SColor, _SColor.a); //Shadows intensity through alpha
ramp = lerp(_SColor.rgb,_HColor.rgb,ramp);
fixed4 c;
c.rgb = s.Albedo * _LightColor0.rgb * ramp;
c.a = s.Alpha;
#if (POINT || SPOT)
c.rgb *= atten;
#endif
return c;
}
//================================================================
// SURFACE FUNCTION
void surf (Input IN, inout SurfaceOutputCustom o)
{
fixed4 mainTex = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = mainTex.rgb * _Color.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = mainTex.a * _Color.a;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
Fallback "Diffuse"
CustomEditor "TCF_MaterialInspector"
}
Comment
Is it possible to add a metallic map & emissions like on the standard shader, as well as other rendertypes(transparent, fade, etc)?
Your answer
![](https://koobas.hobune.stream/wayback/20220612183606im_/https://answers.unity.com/themes/thub/images/avi.jpg)