diff options
| -rw-r--r-- | fog.cginc | 5 | ||||
| -rw-r--r-- | mochie_shadow_caster.cginc | 56 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 2 |
3 files changed, 23 insertions, 40 deletions
@@ -229,13 +229,14 @@ Fog00PBR getFog00(v2f i, ToonerData tdata) { float3 obj_pos_depth_hit; float2 screen_uv; + float eye_depth_world; { float3 full_vec_eye_to_geometry = i.worldPos - _WorldSpaceCameraPos; float3 world_dir = normalize(i.worldPos - _WorldSpaceCameraPos); float perspective_divide = 1.0 / i.pos.w; float perspective_factor = length(full_vec_eye_to_geometry * perspective_divide); screen_uv = i.screenPos.xy * perspective_divide; - float eye_depth_world = + eye_depth_world = GetLinearZFromZDepth_WorksWithMirrors( SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, tdata.screen_uv), screen_uv) * perspective_factor; @@ -400,7 +401,7 @@ Fog00PBR getFog00(v2f i, ToonerData tdata) { Fog00PBR pbr; pbr.albedo = acc; - pbr.albedo.a *= 10; + pbr.albedo.a *= 1; pbr.albedo.a = smooth_min(pbr.albedo.a, .99, 1); // Add some dithering to lit color to break up banding diff --git a/mochie_shadow_caster.cginc b/mochie_shadow_caster.cginc index 11d0941..64f6350 100644 --- a/mochie_shadow_caster.cginc +++ b/mochie_shadow_caster.cginc @@ -1,3 +1,4 @@ +#include "atrix256.cginc" #include "gerstner.cginc" #ifndef __MOCHIE_SHADOW_CASTER_INC @@ -49,6 +50,8 @@ struct v2f { float2 uv : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO + float3 worldPos : TEXCOORD1; + float2 screenPos : TEXCOORD2; }; v2f vert (appdata v){ @@ -75,50 +78,27 @@ v2f vert (appdata v){ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) o.uv = v.uv; + o.worldPos = mul(unity_ObjectToWorld, v.vertex); + + float2 suv = o.pos * float2(0.5, 0.5 * _ProjectionParams.x); + o.screenPos = TransformStereoScreenSpaceTex(suv + 0.5 * o.pos.w, o.pos.w); + return o; } -float2 get_uv_by_channel(v2f i, uint which_channel) { - switch (which_channel) { - case 0: - return i.uv0; - break; -#if !defined(_OPTIMIZE_INTERPOLATORS) - case 1: - return i.uv1; - break; -#if !defined(LIGHTMAP_ON) - case 2: - return i.uv2; - break; - case 3: - return i.uv3; - break; - case 4: - return i.uv4; - break; - case 5: - return i.uv5; - break; - case 6: - return i.uv6; - break; - case 7: - return i.uv7; - break; -#endif -#endif // _OPTIMIZE_INTERPOLATORS - default: - return 0; - break; +float4 frag (v2f i) : SV_Target { + ToonerData tdata; + { + float3 full_vec_eye_to_geometry = i.worldPos - _WorldSpaceCameraPos; + float3 world_dir = normalize(i.worldPos - _WorldSpaceCameraPos); + float perspective_divide = 1.0 / i.pos.w; + float perspective_factor = length(full_vec_eye_to_geometry * perspective_divide); + tdata.screen_uv = i.screenPos.xy * perspective_divide; + tdata.screen_uv_round = floor(tdata.screen_uv * _ScreenParams.xy); } -} -#define UV_SCOFF(i, tex_st, which_channel) get_uv_by_channel(i, round(which_channel)) * (tex_st).xy + (tex_st).zw - -float4 frag (v2f i) : SV_Target { #if defined(_BASECOLOR_MAP) - float4 albedo = _MainTex.SampleBias(GET_SAMPLER_PBR, UV_SCOFF(i, _MainTex_ST, 0), _Global_Sample_Bias); + float4 albedo = _MainTex.SampleBias(linear_repeat_s, i.uv, _Global_Sample_Bias); albedo *= _Color; #else float4 albedo = _Color; diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index efb3336..e088c17 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -1583,6 +1583,8 @@ float4 effect(inout v2f i, out float depth) float4 clip_pos = mul(UNITY_MATRIX_VP, float4(i.worldPos, 1.0)); depth = clip_pos.z / clip_pos.w; } +#else + depth = 0; #endif const float3 view_dir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos); const float3 view_dir_c = normalize(i.centerCamPos - i.worldPos); |
