summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-05-27 13:47:24 -0700
committeryum <yum.food.vr@gmail.com>2024-05-27 13:47:24 -0700
commit7f0f66a5925a7c4dc27a6b061510b0f5905780e6 (patch)
tree1ea3a7711b8ed70c3331ceaaa13be66209db7d4d
parent1a62981f052ca321ca47627d41cda83e8ea60420 (diff)
Implement shadow receiving
-rw-r--r--interpolators.cginc7
-rw-r--r--pbr.cginc3
-rw-r--r--tooner.shader4
-rw-r--r--tooner_lighting.cginc23
-rw-r--r--tooner_outline_pass.cginc18
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
diff --git a/pbr.cginc b/pbr.cginc
index 7f97e56..ac4e533 100644
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -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)