I’ve been used a custom shader.
but it doesn’t work in URP configuration.
this is that shader.
Shader
“Toon/Custom/IK_Smooth_Outline”
{
Properties {
_MainTex (“Base (RGB)”, 2D) = “white” {}
_ShadeTex (“Shade Tex”, 2D) = “white” {}
_RimColor ( "Rim Color" , Color ) = (0.26,0.19,0.16,0.0)
_RimPower ( "Rim Power" , Range(0.5,8.0)) = 3.0
_OutlineColor("Outline Color", Color) = (0,0,0,1)
_Outline("Outline Width", Range(.001, 0.1)) = .0016
//_AmbientFactor("Outline Width", Range(0.1, 5)) = 2.7
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Cull Off
CGPROGRAM
#pragma surface surf Shade noambient
sampler2D _MainTex;
sampler2D _ShadeTex;
float4 _RimColor;
float _RimPower;
//uniform float _AmbientFactor;
struct Input {
float2 uv_MainTex;
float3 viewDir;
};
struct SurfaceOutputCustom {
fixed3 Albedo;
fixed3 Normal;
fixed3 Emission;
half Specular;
fixed Gloss;
fixed Alpha;
};
half4 LightingShade(SurfaceOutputCustom s,half3 lightDir,half attend)
{
half NdotL = dot(s.Normal,lightDir);
float3 d_Albedo = s.Albedo * s.Albedo;
//어두운 부분은 좀 더 밝게,
float shadeOffset = lerp(0.50, 0.40, NdotL);
half shade = NdotL*0.1 + shadeOffset;
//half shade = NdotL*0.1+0.5;
half cell_shade = saturate(shade * 6 -3 );
half3 ramp = tex2D(_ShadeTex,float2(shade,shade));
fixed3 ambient = 0;
ambient = UNITY_LIGHTMODEL_AMBIENT * 2.7;
float3 light = clamp(_LightColor0.rgb, 0.0, 1.0);
ambient = clamp(ambient, 1.4, 1.7)*light;
half4 c;
c.rgb = lerp(d_Albedo, s.Albedo, cell_shade) * ramp * ambient;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutputCustom o) {
half4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb ;// * diffuse;
o.Alpha = c.a;
half rim = 1.0 - saturate(dot (normalize(IN.viewDir) , o.Normal));
o.Emission = _RimColor.rgb * pow(rim,_RimPower);
}
ENDCG
CGINCLUDE
#include “UnityCG.cginc”
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f {
float4 pos : POSITION;
float4 color : COLOR;
};
uniform float _Outline;
uniform float4 _OutlineColor;
v2f vert(appdata v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
float3 clipNormal = mul((float3x3) UNITY_MATRIX_VP, mul((float3x3) UNITY_MATRIX_M, v.normal));
float2 offset = normalize(clipNormal.xy) * _Outline * o.pos.w;
//float2 offset = normalize(clipNormal.xy) / _ScreenParams.xy * _Outline * o.pos.w;
o.pos.xy += offset;
o.color = _OutlineColor;
/*o.pos = v.vertex;
o.pos.xyz += v.normal.xyz * _Outline;
o.pos = UnityObjectToClipPos(o.pos);
o.color = _OutlineColor;*/
return o;
}
ENDCG
Pass{
Name "OUTLINE"
Tags{ "LightMode" = "Always" }
Cull Front
ZWrite Off
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
half4 frag(v2f i) :COLOR{ return i.color; }
ENDCG
}
}
FallBack “Diffuse”
}