diff --git a/Assets/sunset_box/Sunset Env.mat b/Assets/sunset_box/Sunset Env.mat index fcbac68..8c8f500 100644 --- a/Assets/sunset_box/Sunset Env.mat +++ b/Assets/sunset_box/Sunset Env.mat @@ -84,6 +84,7 @@ Material: - _SunAngle: 0 - _SunCutoff: 0.06 - _SunRadius: 0.06 + - _Temp: 0.594 - _UVSec: 0 - _ZWrite: 1 m_Colors: diff --git a/Assets/sunset_box/sunset_box.unity b/Assets/sunset_box/sunset_box.unity index 6ac932d..8462b0a 100644 --- a/Assets/sunset_box/sunset_box.unity +++ b/Assets/sunset_box/sunset_box.unity @@ -567,7 +567,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: 5009e49fafd33ed0e980b53b1f9e954d, type: 3} propertyPath: m_LocalPosition.z - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 5009e49fafd33ed0e980b53b1f9e954d, type: 3} diff --git a/Assets/sunset_box/sunset_env_dynamic.shader b/Assets/sunset_box/sunset_env_dynamic.shader index 25f9e7c..831af73 100644 --- a/Assets/sunset_box/sunset_env_dynamic.shader +++ b/Assets/sunset_box/sunset_env_dynamic.shader @@ -24,6 +24,7 @@ _WaterSurface ("Surface Normal", 2D) = "white" {} [Header(Debug)] _Grid ("Grid visibility", Range(0, 1)) = 0 + _Temp ("Test", Range(0, 1)) = 0 } SubShader @@ -41,7 +42,8 @@ #include "UnityCG.cginc" #define PI 3.1416f - #define WHITE fixed4(1.0, 1.0, 1.0, 1.0) + #define WHITE fixed4(1, 1, 1, 1) + #define UP float3(0, 1, 0) struct appdata { @@ -72,6 +74,7 @@ float _SunAngle; float _SunRadius; float _SunCutoff; + float _Temp; float _Grid; @@ -86,21 +89,26 @@ fixed4 frag (v2f i) : SV_Target { - float3 dir = normalize(i.hitPos - i.camPos); - float real_y = asin(dir.y); - float y = abs(real_y); - if (real_y < -0.0) { // distort to look like water reflection - float3 camera_local_pos = i.camPos + mul(unity_WorldToObject, float4(0,0,0,1)); - float3 surface_pos = float3( - camera_local_pos.x - camera_local_pos.y / (dir.y / dir.x), - 0.0, - camera_local_pos.z - camera_local_pos.y / (dir.y / dir.z) - ); - // return fixed4(surface_pos, 1.0); + fixed4 water_mod = 1.0; - // float3 surface_pos = - dir += (tex2D(_WaterSurface, surface_pos.xz * 0.1) - 0.5) * 0.4; + float3 real_dir = normalize(i.hitPos - i.camPos); + float3 dir = real_dir; + float real_y = asin(dir.y); + if (real_y < 0.0) { // distort to look like water reflection + float3 camera_local_pos = i.camPos + mul(unity_WorldToObject, float4(0, 0, 0, 1)); + float3 surface_pos = float3 ( + camera_local_pos.x - camera_local_pos.y / (real_dir.y / real_dir.x), + 0.0, + camera_local_pos.z - camera_local_pos.y / (real_dir.y / real_dir.z) + ); + float3 water_normal = normalize ((tex2D(_WaterSurface, surface_pos.xz * 0.05) - 0.5).zxy ); + water_normal = lerp(UP, water_normal, _Temp); + dir = reflect(dir, water_normal); + + // water_mod = fixed4(0.4, 0.7, 0.8, 1.0); } + float y = abs(real_y); + dir.y = abs(dir.y); float phi = atan2(dir.x, dir.z); @@ -153,6 +161,13 @@ float sun_amount = max(min(_SunRadius/alignment * sun_gradient, 5) - _SunCutoff, 0); col = lerp(col, _SunCol, sun_amount); + + col *= water_mod; + + // debug, this should not be visible + if (dir.y < 0) { + return fixed4(1, 0, 0, 1); + } return col; } ENDCG