求问为什么会出现明显交界线
如何修改

Shader "CS201/01Phong"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_AOMap ("AOMap", 2D) = "white" {}
_SpecMask ("_SpecMask", 2D) = "white" {}
_Shininess ("Shininess", Float) = 1
_AmbientColor ("AmbientColor", Color) = (1,1,1,1)
_SpecInt ("SpecInt", Float) = 1
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
Tags {"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase
#include "UnityCG.cginc"
#include "AutoLight.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float3 normal_world : TEXCOORD1;
float3 vertex_world : TEXCOORD2;
};
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _AOMap;
sampler2D _SpecMask;
float4 _LightColor0;
float _Shininess;
float4 _AmbientColor;
float _SpecInt;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.normal_world = normalize(mul(unity_ObjectToWorld,float4(v.normal,0)).xyz);
o.vertex_world = mul(v.vertex,unity_ObjectToWorld).xyz;
return o;
}
half4 frag (v2f i) : SV_Target
{
half4 base_color = tex2D(_MainTex, i.uv);
half4 ao_color = tex2D(_AOMap, i.uv);
half4 spec_mask = tex2D(_SpecMask, i.uv);
half3 normal_world = normalize(i.normal_world);
half3 light_world = normalize(_WorldSpaceLightPos0.xyz);
half NdotL = dot(normal_world,light_world);
half3 diffuse_color = max(0,NdotL) * _LightColor0.xyz * base_color.xyz;
half3 reflect_light_world = normalize(reflect(-light_world,normal_world));
half3 view_world = normalize(_WorldSpaceCameraPos.xyz - i.vertex_world);
half RLdotV = dot(reflect_light_world,view_world);
half3 specular_color = pow(max(0,RLdotV),_Shininess)* _LightColor0.xyz * _SpecInt * spec_mask.rgb;
half3 final_color = (diffuse_color + specular_color + _AmbientColor.xyz) * ao_color;
return half4(final_color, 1.0);
}
ENDCG
}
Pass
{
Tags {"LightMode" = "ForwardAdd"}
blend One One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdadd
#include "UnityCG.cginc"
#include "AutoLight.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float3 normal_world : TEXCOORD1;
float3 vertex_world : TEXCOORD2;
};
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _AOMap;
sampler2D _SpecMask;
float4 _LightColor0;
float _Shininess;
float4 _AmbientColor;
float _SpecInt;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.normal_world = normalize(mul(unity_ObjectToWorld,float4(v.normal,0)).xyz);
o.vertex_world = mul(v.vertex,unity_ObjectToWorld).xyz;
return o;
}
half4 frag (v2f i) : SV_Target
{
half4 base_color = tex2D(_MainTex, i.uv);
half4 ao_color = tex2D(_AOMap, i.uv);
half4 spec_mask = tex2D(_SpecMask, i.uv);
half3 normal_world = normalize(i.normal_world);
#if defined (DIRECTIONAL)
half3 light_world = normalize(_WorldSpaceLightPos0.xyz);
half attenuation = 1;
#elif defined (POINT)
half3 light_world = normalize(_WorldSpaceLightPos0.xyz - i.vertex_world);
half distance = length(_WorldSpaceLightPos0.xyz - i.vertex_world);
half range = 1.0 / unity_WorldToLight[0][0];
float attenuation = saturate((range - distance) / range);
#endif
half NdotL = dot(normal_world,light_world);
half3 diffuse_color = max(0,NdotL) * _LightColor0.xyz * base_color.xyz * attenuation;
half3 reflect_light_world = normalize(reflect(-light_world,normal_world));
half3 view_world = normalize(_WorldSpaceCameraPos.xyz - i.vertex_world);
half RLdotV = dot(reflect_light_world,view_world);
half3 specular_color = pow(max(0,RLdotV),_Shininess)* _LightColor0.xyz * _SpecInt * spec_mask.rgb * attenuation;
half3 final_color = (diffuse_color + specular_color + _AmbientColor.xyz) * ao_color;
return half4(final_color, 1.0);
}
ENDCG
}
}
}