1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
| Shader "Unlit/017" { Properties { _MainTex ("Texture", 2D) = "white" {} _Diffuse("Diffuse", Color) = (1,1,1,1) _OutLine("OutLine", Range(0,0.2)) = 0.1 _OutLineColor("OutLineColor", Color) = (0,0,0,0) _Steps("Steps", Range(1, 30)) = 1 _ToonEffect("ToonEffect", Range(0,1)) = 0.5 _RimColor("RimColor", Color) = (1,1,1,1) _RimPower("RimPower", Range(0.001, 3)) = 1 _XRayColor("XRayColor", Color) = (1,1,1,1) _XRayPower("XRayPower", Range(0.001, 3)) = 1 } SubShader { Tags {"Queue"="Geometry+1000" "RenderType"="Opaque" } LOD 100 Pass { Name "Xray" Tags {"ForceNoShadowCasting"="true"} Blend DstAlpha One ZWrite Off ZTest Greater CGPROGRAM
#pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" fixed4 _XRayColor; float _XRayPower;
struct v2f { float4 vertex : SV_POSITION; float3 viewDir : TEXCOORD0; float3 Normal : TEXCOORD1; };
v2f vert(appdata_base v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.Normal = v.normal; o.viewDir = UnityWorldSpaceViewDir(v.vertex); return o; }
fixed4 frag(v2f i) : SV_Target { float3 normal = normalize(i.Normal); float3 viewDir = normalize(i.viewDir); float rim = 1 - dot(normal, viewDir); return _XRayColor * pow(rim, 1/_XRayPower); } ENDCG } Pass { Name "OutLine" Cull Front CGPROGRAM
#pragma vertex vert #pragma fragment frag #include "Lighting.cginc"
float _OutLine; fixed _OutLineColor; struct v2f { float4 vertex : SV_POSITION; };
v2f vert(appdata_base v) { v2f o;
o.vertex = UnityObjectToClipPos(v.vertex); float3 normal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, v.normal)); float2 viewNormal = TransformViewToProjection(normal.xy); o.vertex.xy += viewNormal * _OutLine; return o; }
float4 frag(v2f i):SV_Target { return _OutLineColor; } ENDCG } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" struct v2f { float4 vertex : SV_POSITION; float2 uv : TEXCOORD0; fixed3 worldNormal : TEXCOORD1; float3 worldPos : TEXCOORD2; };
sampler2D _MainTex; float4 _MainTex_ST; float4 _Diffuse; float _Steps; float _ToonEffect; fixed4 _RimColor; float _RimPower;
v2f vert (appdata_base v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); o.worldPos = mul(unity_ObjectToWorld, v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; }
fixed4 frag (v2f i) : SV_Target { fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; fixed4 albedo = tex2D(_MainTex, i.uv); fixed3 worldLightDir = UnityWorldSpaceLightDir(i.worldPos); fixed3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos)); float difLight = dot(worldLightDir, i.worldNormal)*0.5+0.5; difLight = smoothstep(0, 1, difLight); float toon = floor(difLight * _Steps) / _Steps; difLight = lerp(difLight, toon, _ToonEffect); fixed3 diffuse = _LightColor0.rgb * albedo * _Diffuse.rgb * difLight;
float rim = 1 - dot(i.worldNormal, viewDir); fixed3 rimColor = _RimColor * pow(rim, 1/_RimPower); return float4(ambient + diffuse + rimColor, 1); } ENDCG } } }
|