diff options
| -rwxr-xr-x | 3ner.cginc | 4 | ||||
| -rwxr-xr-x | brdf.cginc | 5 | ||||
| -rwxr-xr-x | interpolators.cginc | 2 | ||||
| -rwxr-xr-x | lighting.cginc | 30 |
4 files changed, 22 insertions, 19 deletions
@@ -230,7 +230,9 @@ v2f domain( UNITY_TRANSFER_INSTANCE_ID(patch[0], o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); #if defined(SHADOW_CASTER_PASS) - //TRANSFER_SHADOW_CASTER_NORMALOFFSET(o); + //TRANSFER_SHADOW_CASTER_NORMALOFFSET(o); +#else + TRANSFER_SHADOW(o); #endif return o; } @@ -135,7 +135,6 @@ float4 brdf(Pbr pbr, LightData data) { direct_specular *= data.direct.color * data.direct.NoL; direct_specular *= energy_comp; direct_specular *= remainder; - direct_specular = max(0, direct_specular); specular += direct_specular; #if defined(F_OREN_NAYAR) @@ -149,6 +148,8 @@ float4 brdf(Pbr pbr, LightData data) { diffuse += direct_diffuse; } + return float4(specular + diffuse, 1); + // Indirect #if !defined(FURNACE_TEST_DIRECT) && (defined(FORWARD_BASE_PASS) || defined(OUTLINES_PASS)) { @@ -184,7 +185,7 @@ float4 brdf(Pbr pbr, LightData data) { #endif diffuse *= data.common.ao; - specular *= data.common.spec_ao; + //specular *= data.common.spec_ao; #if defined(_EMISSIONS) && defined(FORWARD_BASE_PASS) float3 emission = pbr.emission; diff --git a/interpolators.cginc b/interpolators.cginc index 5f993db..76b79a5 100755 --- a/interpolators.cginc +++ b/interpolators.cginc @@ -23,7 +23,7 @@ struct v2f { #if defined(_TESSELLATION) float4 tpos : INTERNALTESSPOS; #endif - linear noperspective centroid float4 pos : SV_POSITION; + float4 pos : SV_POSITION; float4 uv01 : TEXCOORD0; float4 uv23 : TEXCOORD1; float3 objPos : TEXCOORD2; diff --git a/lighting.cginc b/lighting.cginc index cde444a..c8c3f64 100755 --- a/lighting.cginc +++ b/lighting.cginc @@ -205,28 +205,28 @@ void GetLighting(v2f i, Pbr pbr, out LightData data) { data.common.V = -view_dir; data.common.N = pbr.normal; - data.common.NoV = saturate(dot(pbr.normal, data.common.V)); + data.common.NoV = max(1e-4, dot(pbr.normal, data.common.V)); #if defined(_CLEARCOAT) - data.common.NoV_cc = saturate(dot(pbr.cc_normal, data.common.V)); + data.common.NoV_cc = max(1e-4, dot(pbr.cc_normal, data.common.V)); #endif // Direct lighting data.direct.dir = getDirectLightDirection(i); data.direct.H = normalize(data.common.V + data.direct.dir); #if defined(_WRAPPED_LIGHTING) - data.direct.NoL = wrapNoL(saturate(dot(pbr.normal, data.direct.dir)), _Wrapped_Lighting_Amount); + data.direct.NoL = max(1e-4, wrapNoL(saturate(dot(pbr.normal, data.direct.dir)), _Wrapped_Lighting_Amount)); #else - data.direct.NoL = saturate(dot(pbr.normal, data.direct.dir)); + data.direct.NoL = max(1e-4, dot(pbr.normal, data.direct.dir)); #endif - data.direct.NoH = saturate(dot(pbr.normal, data.direct.H)); - data.direct.LoH = saturate(dot(data.direct.dir, data.direct.H)); + data.direct.NoH = max(1e-4, dot(pbr.normal, data.direct.H)); + data.direct.LoH = max(1e-4, dot(data.direct.dir, data.direct.H)); #if defined(_CLEARCOAT) - data.direct.NoH_cc = saturate(dot(pbr.cc_normal, data.direct.H)); - data.direct.NoL_cc = saturate(dot(pbr.cc_normal, data.direct.dir)); + data.direct.NoH_cc = max(1e-4, dot(pbr.cc_normal, data.direct.H)); + data.direct.NoL_cc = max(1e-4, dot(pbr.cc_normal, data.direct.dir)); #endif float direct_LoV = dot(data.direct.dir, data.common.V); - data.direct.LoV = saturate(direct_LoV); - data.direct.double_LoV = saturate(2.0f * direct_LoV * direct_LoV - 1.0f); + data.direct.LoV = max(1e-4, direct_LoV); + data.direct.double_LoV = max(1e-4, 2.0f * direct_LoV * direct_LoV - 1.0f); float4 lightColorIntensity = getDirectLightColorIntensity(); data.direct.color = lightColorIntensity.rgb * getShadowAttenuation(i); @@ -237,18 +237,18 @@ void GetLighting(v2f i, Pbr pbr, out LightData data) { data.indirect.dir = normalize(dominant_dir); data.indirect.H = normalize(data.common.V + data.indirect.dir); - data.indirect.NoL = saturate(dot(pbr.normal, data.indirect.dir)); - data.indirect.NoH = saturate(dot(pbr.normal, data.indirect.H)); + data.indirect.NoL = max(1e-4, dot(pbr.normal, data.indirect.dir)); + data.indirect.NoH = max(1e-4, dot(pbr.normal, data.indirect.H)); #if defined(_CLEARCOAT) float3 cc_reflect_dir = reflect(-data.common.V, pbr.cc_normal); float3 cc_dominant_dir = getSpecularDominantDirection(pbr.cc_normal, cc_reflect_dir, pbr.cc_roughness); float3 dir_cc = normalize(cc_dominant_dir); float3 H_cc = normalize(data.common.V + dir_cc); #endif - data.indirect.LoH = saturate(dot(data.indirect.dir, data.indirect.H)); + data.indirect.LoH = max(1e-4, dot(data.indirect.dir, data.indirect.H)); float indirect_LoV = dot(data.indirect.dir, data.common.V); - data.indirect.LoV = saturate(indirect_LoV); - data.indirect.double_LoV = saturate(2.0f * indirect_LoV * indirect_LoV - 1.0f); + data.indirect.LoV = max(1e-4, indirect_LoV); + data.indirect.double_LoV = max(1e-4, 2.0f * indirect_LoV * indirect_LoV - 1.0f); data.indirect.diffuse = getIndirectDiffuse(i, pbr, data); data.indirect.specular = getIndirectSpecular(i, pbr.roughness_perceptual, view_dir, data.indirect.dir, data.indirect.diffuse); |
