summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x3ner.cginc4
-rwxr-xr-xbrdf.cginc5
-rwxr-xr-xinterpolators.cginc2
-rwxr-xr-xlighting.cginc30
4 files changed, 22 insertions, 19 deletions
diff --git a/3ner.cginc b/3ner.cginc
index def3ed0..c8d76e6 100755
--- a/3ner.cginc
+++ b/3ner.cginc
@@ -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;
}
diff --git a/brdf.cginc b/brdf.cginc
index 254adc3..2b1b754 100755
--- a/brdf.cginc
+++ b/brdf.cginc
@@ -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);