Hello, so I made alittle toon shader with the help of some tutorials. and it works perfectly on a sphere, but I imported a gravestone that I made in blender and I get this.
![alt text][1]
I don't know how its coming up with that jagged look on the darker part of the gravestone. I'm not sure if this is something that needs to be corrected in blender, my shader or in unity import settings.
In blender I've checked the normal directions and they all look right.
These are my unity import settings for the gravestone.
![alt text][2]
[1]: http://https://i.imgur.com/tc5ORKz.png
[2]: http://https://i.imgur.com/aEwafHh.png
And if you think it might be a shader issue here is my shader code.
Shader "Unlit/MyToonShader"
{
Properties
{
_MainTex("Texture", 2D) = "white" {}
_Color("Color", Color) = (1,1,1,1)
_Color2("Color2", Color) = (1,1,1,1)
_Ramp("Ramp Texture", 2D) = "white" {}
_CutOffPoint("Cut Off Point", Range(0,5)) = 2.5
}
SubShader
{
Tags{ "RenderType" = "Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float2 rampUV : TEXCOORD1;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float2 rampUV : TEXCOORD1;
float3 worldNormal : NORMAL;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _Color;
float4 _Color2;
sampler2D _Ramp;
float _CutOffPoint;
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.worldNormal = UnityObjectToWorldNormal(v.normal); // Gives the fragement func the objects normal, and transforms it from object to world space
// because _WorldSpaceLightPos0 is in world space.
return o;
}
fixed4 frag(v2f i) : SV_Target
{
float3 normal = normalize(i.worldNormal); // normalized Object Normal.
float3 dirLight = normalize(_WorldSpaceLightPos0); // normalized light rotation direction.
float NdotL = 1 - dot(dirLight, normal); // Object Normal to Directional light dot product. // 1 - "inversed".
float cutOff = smoothstep(0, _CutOffPoint, NdotL); // Smooth Step
float3 ramp = tex2D(_Ramp, float2(cutOff, cutOff));
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv) * (ramp, ramp.r) * _Color;
return col;
}
ENDCG
}
}
}
I really appreciate any help I can get, let me know if I need to provide more information.
Thanks,
↧