diff options
| author | yum <yum.food.vr@gmail.com> | 2024-05-27 13:47:24 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-05-27 13:47:24 -0700 |
| commit | 7f0f66a5925a7c4dc27a6b061510b0f5905780e6 (patch) | |
| tree | 1ea3a7711b8ed70c3331ceaaa13be66209db7d4d | |
| parent | 1a62981f052ca321ca47627d41cda83e8ea60420 (diff) | |
Implement shadow receiving
| -rw-r--r-- | interpolators.cginc | 7 | ||||
| -rw-r--r-- | pbr.cginc | 3 | ||||
| -rw-r--r-- | tooner.shader | 4 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 23 | ||||
| -rw-r--r-- | tooner_outline_pass.cginc | 18 |
5 files changed, 31 insertions, 24 deletions
diff --git a/interpolators.cginc b/interpolators.cginc index 9e967c3..112561b 100644 --- a/interpolators.cginc +++ b/interpolators.cginc @@ -15,7 +15,7 @@ struct appdata struct v2f { - float4 clipPos : POSITION; + float4 pos : POSITION; float2 uv : TEXCOORD0; #if defined(LIGHTMAP_ON) float2 lmuv : TEXCOORD1; @@ -38,7 +38,7 @@ struct appdata struct v2f { - float4 clipPos : SV_POSITION; + float4 pos : SV_POSITION; float2 uv : TEXCOORD0; #if defined(LIGHTMAP_ON) float2 lmuv : TEXCOORD1; @@ -48,8 +48,9 @@ struct v2f float3 worldPos : TEXCOORD4; float3 objPos : TEXCOORD5; + SHADOW_COORDS(6) #if defined(VERTEXLIGHT_ON) - float3 vertexLightColor : TEXCOORD6; + float3 vertexLightColor : TEXCOORD7; #endif }; #endif @@ -13,6 +13,7 @@ UNITY_DECLARE_TEXCUBE(_Cubemap); UnityLight CreateDirectLight(float3 normal, float ao, v2f i) { UNITY_LIGHT_ATTENUATION(attenuation, i, i.worldPos); + UnityLight light; light.color = _LightColor0.rgb * attenuation * ao; #if defined(POINT) || defined(POINT_COOKIE) || defined(SPOT) @@ -20,6 +21,8 @@ UnityLight CreateDirectLight(float3 normal, float ao, v2f i) #else light.dir = _WorldSpaceLightPos0; #endif + + if (round(_Confabulate_Normals)) { light.dir = normal; } diff --git a/tooner.shader b/tooner.shader index 256bfc1..8542e62 100644 --- a/tooner.shader +++ b/tooner.shader @@ -201,7 +201,7 @@ Shader "yum_food/tooner" CGPROGRAM #pragma target 5.0 - #pragma multi_compile _ LIGHTMAP_ON VERTEXLIGHT_ON + #pragma multi_compile _ VERTEXLIGHT_ON SHADOWS_SCREEN #pragma shader_feature_local _ _BASECOLOR_MAP #pragma shader_feature_local _ _NORMAL_MAP #pragma shader_feature_local _ _METALLIC_MAP @@ -302,7 +302,7 @@ Shader "yum_food/tooner" CGPROGRAM #pragma target 5.0 - #pragma multi_compile_fwdadd + #pragma multi_compile_fwdadd_fullshadows #pragma multi_compile DIRECTIONAL DIRECTIONAL_COOKIE POINT SPOT #pragma shader_feature_local _BASECOLOR_MAP #pragma shader_feature_local _NORMAL_MAP diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index f746fbf..119ae77 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -87,16 +87,19 @@ v2f vert(appdata v) UNITY_TRANSFER_INSTANCE_ID(v, o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - o.clipPos = UnityObjectToClipPos(v.position); + o.pos = UnityObjectToClipPos(v.position); o.worldPos = mul(unity_ObjectToWorld, v.position); o.objPos = v.position; o.normal = UnityObjectToWorldNormal(v.normal); o.tangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); o.uv = v.uv0.xy; - #if defined(LIGHTMAP_ON) +#if defined(LIGHTMAP_ON) o.lmuv = v.uv1 * unity_LightmapST.xy + unity_LightmapST.zw; - #endif +#endif +#if defined(SHADOWS_SCREEN) + TRANSFER_SHADOW(o); +#endif getVertexLightColor(o); @@ -209,7 +212,7 @@ v2f domain( patch[0].position * baryc.x + patch[1].position * baryc.y + patch[2].position * baryc.z; - data.clipPos = UnityObjectToClipPos(pos); + data.pos = UnityObjectToClipPos(pos); data.objPos = pos; data.worldPos = mul(unity_ObjectToWorld, pos); @@ -306,9 +309,9 @@ void geom(triangle v2f tri_in[3], // Apply transformed worldPos to other coordinate systems. if (_Explode_Phase > 1E-6) { - v0.clipPos = UnityObjectToClipPos(v0_objPos); - v1.clipPos = UnityObjectToClipPos(v1_objPos); - v2.clipPos = UnityObjectToClipPos(v2_objPos); + v0.pos = UnityObjectToClipPos(v0_objPos); + v1.pos = UnityObjectToClipPos(v1_objPos); + v2.pos = UnityObjectToClipPos(v2_objPos); } } #endif // __EXPLODE @@ -324,9 +327,9 @@ void geom(triangle v2f tri_in[3], float3 v1_objPos = mul(unity_WorldToObject, float4(v1.worldPos, 1)); float3 v2_objPos = mul(unity_WorldToObject, float4(v2.worldPos, 1)); - v0.clipPos = UnityObjectToClipPos(v0_objPos); - v1.clipPos = UnityObjectToClipPos(v1_objPos); - v2.clipPos = UnityObjectToClipPos(v2_objPos); + v0.pos = UnityObjectToClipPos(v0_objPos); + v1.pos = UnityObjectToClipPos(v1_objPos); + v2.pos = UnityObjectToClipPos(v2_objPos); } #endif #if defined(_CLONES) diff --git a/tooner_outline_pass.cginc b/tooner_outline_pass.cginc index 1f60bdf..82b6be8 100644 --- a/tooner_outline_pass.cginc +++ b/tooner_outline_pass.cginc @@ -63,7 +63,7 @@ v2f vert(appdata v) v2f o; o.worldPos = mul(unity_ObjectToWorld, v.vertex); o.objPos = v.vertex; - o.clipPos = UnityObjectToClipPos(v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.normal = normal; o.uv = v.uv0.xy; #if defined(LIGHTMAP_ON) @@ -75,7 +75,7 @@ v2f vert(appdata v) v2f o; o.worldPos = 0; o.objPos = 0; - o.clipPos = 0; + o.pos = 0; o.normal = 0; o.uv = 0; #if defined(LIGHTMAP_ON) @@ -175,7 +175,7 @@ v2f domain( patch[0].vertex * baryc.x + patch[1].vertex * baryc.y + patch[2].vertex * baryc.z; - data.clipPos = UnityObjectToClipPos(pos); + data.pos = UnityObjectToClipPos(pos); data.objPos = pos; data.worldPos = mul(unity_ObjectToWorld, pos); @@ -285,9 +285,9 @@ void geom(triangle v2f tri_in[3], v1_objPos = mul(unity_WorldToObject, float4(v1.worldPos, 1)); v2_objPos = mul(unity_WorldToObject, float4(v2.worldPos, 1)); - v0.clipPos = UnityObjectToClipPos(v0_objPos); - v1.clipPos = UnityObjectToClipPos(v1_objPos); - v2.clipPos = UnityObjectToClipPos(v2_objPos); + v0.pos = UnityObjectToClipPos(v0_objPos); + v1.pos = UnityObjectToClipPos(v1_objPos); + v2.pos = UnityObjectToClipPos(v2_objPos); } #endif #if defined(_SCROLL) @@ -302,9 +302,9 @@ void geom(triangle v2f tri_in[3], float3 v1_objPos = mul(unity_WorldToObject, float4(v1.worldPos, 1)); float3 v2_objPos = mul(unity_WorldToObject, float4(v2.worldPos, 1)); - v0.clipPos = UnityObjectToClipPos(v0_objPos); - v1.clipPos = UnityObjectToClipPos(v1_objPos); - v2.clipPos = UnityObjectToClipPos(v2_objPos); + v0.pos = UnityObjectToClipPos(v0_objPos); + v1.pos = UnityObjectToClipPos(v1_objPos); + v2.pos = UnityObjectToClipPos(v2_objPos); } #endif #if defined(_CLONES) |
