diff --git a/Assets/Shaders/AddShadow.cs b/Assets/Shaders/AddShadow.cs new file mode 100755 index 0000000..066a46d --- /dev/null +++ b/Assets/Shaders/AddShadow.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Rendering; + +public class AddShadow : MonoBehaviour +{ + public Camera SceneCam; + public Light PointLight; + + private Camera shadowCam; + + public Shader PostShader; + + private List lights; + + // Start is called before the first frame update + void Start() + { + lights = FindObjectsOfType().ToList(); + shadowCam = GetComponent(); + } + + private AmbientMode cacheAmbientMode; + private Color cacheAmbientSkyColor; + private float cacheAmbientIntensity; + private Material cacheSkybox; + void OnPreRender() + { + //Debug.Log("PRE " + (Camera.current == shadowCam)); + //lights.ForEach(l => l.enabled = false); + + PointLight.intensity = 1; + + cacheAmbientMode = RenderSettings.ambientMode; + cacheSkybox = RenderSettings.skybox; + cacheAmbientSkyColor = RenderSettings.ambientSkyColor; + cacheAmbientIntensity = RenderSettings.ambientIntensity; + + RenderSettings.ambientMode = AmbientMode.Flat; + RenderSettings.skybox = null; + RenderSettings.ambientSkyColor = new Color(0, 0, 0, 1); + RenderSettings.ambientIntensity = 0; + } + + void OnPostRender() + { + //Debug.Log("POST " + (Camera.current == shadowCam)); + PointLight.intensity = 1; + //lights.ForEach(l => l.enabled = true); + + + RenderSettings.ambientMode = cacheAmbientMode; + RenderSettings.skybox = cacheSkybox; + RenderSettings.ambientSkyColor = cacheAmbientSkyColor; + RenderSettings.ambientIntensity = cacheAmbientIntensity; + } + + // Update is called once per frame + void Update() + { + shadowCam.CopyFrom(SceneCam); + shadowCam.clearFlags = CameraClearFlags.Depth; + shadowCam.SetReplacementShader(PostShader, ""); + shadowCam.cullingMask = ~LayerMask.GetMask("NoShadow"); + } +} diff --git a/Assets/Shaders/AddShadow.cs b/Assets/Shaders/AddShadow.cs new file mode 100755 index 0000000..066a46d --- /dev/null +++ b/Assets/Shaders/AddShadow.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Rendering; + +public class AddShadow : MonoBehaviour +{ + public Camera SceneCam; + public Light PointLight; + + private Camera shadowCam; + + public Shader PostShader; + + private List lights; + + // Start is called before the first frame update + void Start() + { + lights = FindObjectsOfType().ToList(); + shadowCam = GetComponent(); + } + + private AmbientMode cacheAmbientMode; + private Color cacheAmbientSkyColor; + private float cacheAmbientIntensity; + private Material cacheSkybox; + void OnPreRender() + { + //Debug.Log("PRE " + (Camera.current == shadowCam)); + //lights.ForEach(l => l.enabled = false); + + PointLight.intensity = 1; + + cacheAmbientMode = RenderSettings.ambientMode; + cacheSkybox = RenderSettings.skybox; + cacheAmbientSkyColor = RenderSettings.ambientSkyColor; + cacheAmbientIntensity = RenderSettings.ambientIntensity; + + RenderSettings.ambientMode = AmbientMode.Flat; + RenderSettings.skybox = null; + RenderSettings.ambientSkyColor = new Color(0, 0, 0, 1); + RenderSettings.ambientIntensity = 0; + } + + void OnPostRender() + { + //Debug.Log("POST " + (Camera.current == shadowCam)); + PointLight.intensity = 1; + //lights.ForEach(l => l.enabled = true); + + + RenderSettings.ambientMode = cacheAmbientMode; + RenderSettings.skybox = cacheSkybox; + RenderSettings.ambientSkyColor = cacheAmbientSkyColor; + RenderSettings.ambientIntensity = cacheAmbientIntensity; + } + + // Update is called once per frame + void Update() + { + shadowCam.CopyFrom(SceneCam); + shadowCam.clearFlags = CameraClearFlags.Depth; + shadowCam.SetReplacementShader(PostShader, ""); + shadowCam.cullingMask = ~LayerMask.GetMask("NoShadow"); + } +} diff --git a/Assets/Shaders/AddShadow.cs.meta b/Assets/Shaders/AddShadow.cs.meta new file mode 100755 index 0000000..03300e3 --- /dev/null +++ b/Assets/Shaders/AddShadow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1916aa89c6e6f3a419676f7ccae1756e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/AddShadow.cs b/Assets/Shaders/AddShadow.cs new file mode 100755 index 0000000..066a46d --- /dev/null +++ b/Assets/Shaders/AddShadow.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Rendering; + +public class AddShadow : MonoBehaviour +{ + public Camera SceneCam; + public Light PointLight; + + private Camera shadowCam; + + public Shader PostShader; + + private List lights; + + // Start is called before the first frame update + void Start() + { + lights = FindObjectsOfType().ToList(); + shadowCam = GetComponent(); + } + + private AmbientMode cacheAmbientMode; + private Color cacheAmbientSkyColor; + private float cacheAmbientIntensity; + private Material cacheSkybox; + void OnPreRender() + { + //Debug.Log("PRE " + (Camera.current == shadowCam)); + //lights.ForEach(l => l.enabled = false); + + PointLight.intensity = 1; + + cacheAmbientMode = RenderSettings.ambientMode; + cacheSkybox = RenderSettings.skybox; + cacheAmbientSkyColor = RenderSettings.ambientSkyColor; + cacheAmbientIntensity = RenderSettings.ambientIntensity; + + RenderSettings.ambientMode = AmbientMode.Flat; + RenderSettings.skybox = null; + RenderSettings.ambientSkyColor = new Color(0, 0, 0, 1); + RenderSettings.ambientIntensity = 0; + } + + void OnPostRender() + { + //Debug.Log("POST " + (Camera.current == shadowCam)); + PointLight.intensity = 1; + //lights.ForEach(l => l.enabled = true); + + + RenderSettings.ambientMode = cacheAmbientMode; + RenderSettings.skybox = cacheSkybox; + RenderSettings.ambientSkyColor = cacheAmbientSkyColor; + RenderSettings.ambientIntensity = cacheAmbientIntensity; + } + + // Update is called once per frame + void Update() + { + shadowCam.CopyFrom(SceneCam); + shadowCam.clearFlags = CameraClearFlags.Depth; + shadowCam.SetReplacementShader(PostShader, ""); + shadowCam.cullingMask = ~LayerMask.GetMask("NoShadow"); + } +} diff --git a/Assets/Shaders/AddShadow.cs.meta b/Assets/Shaders/AddShadow.cs.meta new file mode 100755 index 0000000..03300e3 --- /dev/null +++ b/Assets/Shaders/AddShadow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1916aa89c6e6f3a419676f7ccae1756e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Floor.mat b/Assets/Shaders/Floor.mat new file mode 100755 index 0000000..dd400e7 --- /dev/null +++ b/Assets/Shaders/Floor.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Floor + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Shaders/AddShadow.cs b/Assets/Shaders/AddShadow.cs new file mode 100755 index 0000000..066a46d --- /dev/null +++ b/Assets/Shaders/AddShadow.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Rendering; + +public class AddShadow : MonoBehaviour +{ + public Camera SceneCam; + public Light PointLight; + + private Camera shadowCam; + + public Shader PostShader; + + private List lights; + + // Start is called before the first frame update + void Start() + { + lights = FindObjectsOfType().ToList(); + shadowCam = GetComponent(); + } + + private AmbientMode cacheAmbientMode; + private Color cacheAmbientSkyColor; + private float cacheAmbientIntensity; + private Material cacheSkybox; + void OnPreRender() + { + //Debug.Log("PRE " + (Camera.current == shadowCam)); + //lights.ForEach(l => l.enabled = false); + + PointLight.intensity = 1; + + cacheAmbientMode = RenderSettings.ambientMode; + cacheSkybox = RenderSettings.skybox; + cacheAmbientSkyColor = RenderSettings.ambientSkyColor; + cacheAmbientIntensity = RenderSettings.ambientIntensity; + + RenderSettings.ambientMode = AmbientMode.Flat; + RenderSettings.skybox = null; + RenderSettings.ambientSkyColor = new Color(0, 0, 0, 1); + RenderSettings.ambientIntensity = 0; + } + + void OnPostRender() + { + //Debug.Log("POST " + (Camera.current == shadowCam)); + PointLight.intensity = 1; + //lights.ForEach(l => l.enabled = true); + + + RenderSettings.ambientMode = cacheAmbientMode; + RenderSettings.skybox = cacheSkybox; + RenderSettings.ambientSkyColor = cacheAmbientSkyColor; + RenderSettings.ambientIntensity = cacheAmbientIntensity; + } + + // Update is called once per frame + void Update() + { + shadowCam.CopyFrom(SceneCam); + shadowCam.clearFlags = CameraClearFlags.Depth; + shadowCam.SetReplacementShader(PostShader, ""); + shadowCam.cullingMask = ~LayerMask.GetMask("NoShadow"); + } +} diff --git a/Assets/Shaders/AddShadow.cs.meta b/Assets/Shaders/AddShadow.cs.meta new file mode 100755 index 0000000..03300e3 --- /dev/null +++ b/Assets/Shaders/AddShadow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1916aa89c6e6f3a419676f7ccae1756e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Floor.mat b/Assets/Shaders/Floor.mat new file mode 100755 index 0000000..dd400e7 --- /dev/null +++ b/Assets/Shaders/Floor.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Floor + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Shaders/Floor.mat.meta b/Assets/Shaders/Floor.mat.meta new file mode 100755 index 0000000..5c0bf88 --- /dev/null +++ b/Assets/Shaders/Floor.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d600daf5bd4f8ac4e88efe24c7b89f18 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/AddShadow.cs b/Assets/Shaders/AddShadow.cs new file mode 100755 index 0000000..066a46d --- /dev/null +++ b/Assets/Shaders/AddShadow.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Rendering; + +public class AddShadow : MonoBehaviour +{ + public Camera SceneCam; + public Light PointLight; + + private Camera shadowCam; + + public Shader PostShader; + + private List lights; + + // Start is called before the first frame update + void Start() + { + lights = FindObjectsOfType().ToList(); + shadowCam = GetComponent(); + } + + private AmbientMode cacheAmbientMode; + private Color cacheAmbientSkyColor; + private float cacheAmbientIntensity; + private Material cacheSkybox; + void OnPreRender() + { + //Debug.Log("PRE " + (Camera.current == shadowCam)); + //lights.ForEach(l => l.enabled = false); + + PointLight.intensity = 1; + + cacheAmbientMode = RenderSettings.ambientMode; + cacheSkybox = RenderSettings.skybox; + cacheAmbientSkyColor = RenderSettings.ambientSkyColor; + cacheAmbientIntensity = RenderSettings.ambientIntensity; + + RenderSettings.ambientMode = AmbientMode.Flat; + RenderSettings.skybox = null; + RenderSettings.ambientSkyColor = new Color(0, 0, 0, 1); + RenderSettings.ambientIntensity = 0; + } + + void OnPostRender() + { + //Debug.Log("POST " + (Camera.current == shadowCam)); + PointLight.intensity = 1; + //lights.ForEach(l => l.enabled = true); + + + RenderSettings.ambientMode = cacheAmbientMode; + RenderSettings.skybox = cacheSkybox; + RenderSettings.ambientSkyColor = cacheAmbientSkyColor; + RenderSettings.ambientIntensity = cacheAmbientIntensity; + } + + // Update is called once per frame + void Update() + { + shadowCam.CopyFrom(SceneCam); + shadowCam.clearFlags = CameraClearFlags.Depth; + shadowCam.SetReplacementShader(PostShader, ""); + shadowCam.cullingMask = ~LayerMask.GetMask("NoShadow"); + } +} diff --git a/Assets/Shaders/AddShadow.cs.meta b/Assets/Shaders/AddShadow.cs.meta new file mode 100755 index 0000000..03300e3 --- /dev/null +++ b/Assets/Shaders/AddShadow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1916aa89c6e6f3a419676f7ccae1756e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Floor.mat b/Assets/Shaders/Floor.mat new file mode 100755 index 0000000..dd400e7 --- /dev/null +++ b/Assets/Shaders/Floor.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Floor + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Shaders/Floor.mat.meta b/Assets/Shaders/Floor.mat.meta new file mode 100755 index 0000000..5c0bf88 --- /dev/null +++ b/Assets/Shaders/Floor.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d600daf5bd4f8ac4e88efe24c7b89f18 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/PointShadows.shader b/Assets/Shaders/PointShadows.shader new file mode 100755 index 0000000..c29d4e4 --- /dev/null +++ b/Assets/Shaders/PointShadows.shader @@ -0,0 +1,106 @@ +// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Lit/Diffuse With Shadows" +{ + Properties + { + } + SubShader + { + Pass + { + name "DEPTH" + // Render out *only depth information* + // This allows us to just shade the items we want in the next pass + Tags {"LightMode" = "Always"} + + ZWrite On + ZTest LEqual + + ColorMask 0 + + CGPROGRAM + #include "UnityCG.cginc" + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_fwdadd_fullshadows nolightmap nodirlightmap nodynlightmap novertexlight + + struct v2f + { + float4 pos : SV_POSITION; + }; + v2f vert(appdata_base v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + return fixed4(0,0,0,0); + } + ENDCG + } + Pass + { + Name "FORWARD" + // Point shadows happen in the Add pass of forward rendering + Tags {"LightMode" = "ForwardAdd"} + + ZWrite Off + ZTest Equal + + Blend SrcAlpha OneMinusSrcAlpha + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "Lighting.cginc" + + #pragma multi_compile_fwdadd_fullshadows nolightmap nodirlightmap nodynlightmap novertexlight + + #include "AutoLight.cginc" + + struct v2f + { + + float4 pos : SV_POSITION; + float3 worldNormal:NORMAL; + float3 worldPos:TEXTURE0; + SHADOW_COORDS(1) // put shadows data into TEXCOORD1 + }; + v2f vert(appdata_base v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + o.worldNormal = UnityObjectToWorldNormal(v.normal); + TRANSFER_SHADOW(o) + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + fixed shadow = SHADOW_ATTENUATION(i); + + float3 lightDir = normalize(i.worldPos - _WorldSpaceLightPos0.xyz); + float nl = max(0, dot(i.worldNormal, -lightDir)); + + // only want nl if the dot produce is > 0 (anything facing the light) + nl = 1 - step(nl, 0); + + float light = min(nl, shadow); + + return fixed4(light, light, light, 1 - light); + } + ENDCG + } + + // shadow casting support + UsePass "Legacy Shaders/VertexLit/SHADOWCASTER" + } +} \ No newline at end of file diff --git a/Assets/Shaders/AddShadow.cs b/Assets/Shaders/AddShadow.cs new file mode 100755 index 0000000..066a46d --- /dev/null +++ b/Assets/Shaders/AddShadow.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Rendering; + +public class AddShadow : MonoBehaviour +{ + public Camera SceneCam; + public Light PointLight; + + private Camera shadowCam; + + public Shader PostShader; + + private List lights; + + // Start is called before the first frame update + void Start() + { + lights = FindObjectsOfType().ToList(); + shadowCam = GetComponent(); + } + + private AmbientMode cacheAmbientMode; + private Color cacheAmbientSkyColor; + private float cacheAmbientIntensity; + private Material cacheSkybox; + void OnPreRender() + { + //Debug.Log("PRE " + (Camera.current == shadowCam)); + //lights.ForEach(l => l.enabled = false); + + PointLight.intensity = 1; + + cacheAmbientMode = RenderSettings.ambientMode; + cacheSkybox = RenderSettings.skybox; + cacheAmbientSkyColor = RenderSettings.ambientSkyColor; + cacheAmbientIntensity = RenderSettings.ambientIntensity; + + RenderSettings.ambientMode = AmbientMode.Flat; + RenderSettings.skybox = null; + RenderSettings.ambientSkyColor = new Color(0, 0, 0, 1); + RenderSettings.ambientIntensity = 0; + } + + void OnPostRender() + { + //Debug.Log("POST " + (Camera.current == shadowCam)); + PointLight.intensity = 1; + //lights.ForEach(l => l.enabled = true); + + + RenderSettings.ambientMode = cacheAmbientMode; + RenderSettings.skybox = cacheSkybox; + RenderSettings.ambientSkyColor = cacheAmbientSkyColor; + RenderSettings.ambientIntensity = cacheAmbientIntensity; + } + + // Update is called once per frame + void Update() + { + shadowCam.CopyFrom(SceneCam); + shadowCam.clearFlags = CameraClearFlags.Depth; + shadowCam.SetReplacementShader(PostShader, ""); + shadowCam.cullingMask = ~LayerMask.GetMask("NoShadow"); + } +} diff --git a/Assets/Shaders/AddShadow.cs.meta b/Assets/Shaders/AddShadow.cs.meta new file mode 100755 index 0000000..03300e3 --- /dev/null +++ b/Assets/Shaders/AddShadow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1916aa89c6e6f3a419676f7ccae1756e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Floor.mat b/Assets/Shaders/Floor.mat new file mode 100755 index 0000000..dd400e7 --- /dev/null +++ b/Assets/Shaders/Floor.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Floor + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Shaders/Floor.mat.meta b/Assets/Shaders/Floor.mat.meta new file mode 100755 index 0000000..5c0bf88 --- /dev/null +++ b/Assets/Shaders/Floor.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d600daf5bd4f8ac4e88efe24c7b89f18 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/PointShadows.shader b/Assets/Shaders/PointShadows.shader new file mode 100755 index 0000000..c29d4e4 --- /dev/null +++ b/Assets/Shaders/PointShadows.shader @@ -0,0 +1,106 @@ +// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Lit/Diffuse With Shadows" +{ + Properties + { + } + SubShader + { + Pass + { + name "DEPTH" + // Render out *only depth information* + // This allows us to just shade the items we want in the next pass + Tags {"LightMode" = "Always"} + + ZWrite On + ZTest LEqual + + ColorMask 0 + + CGPROGRAM + #include "UnityCG.cginc" + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_fwdadd_fullshadows nolightmap nodirlightmap nodynlightmap novertexlight + + struct v2f + { + float4 pos : SV_POSITION; + }; + v2f vert(appdata_base v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + return fixed4(0,0,0,0); + } + ENDCG + } + Pass + { + Name "FORWARD" + // Point shadows happen in the Add pass of forward rendering + Tags {"LightMode" = "ForwardAdd"} + + ZWrite Off + ZTest Equal + + Blend SrcAlpha OneMinusSrcAlpha + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "Lighting.cginc" + + #pragma multi_compile_fwdadd_fullshadows nolightmap nodirlightmap nodynlightmap novertexlight + + #include "AutoLight.cginc" + + struct v2f + { + + float4 pos : SV_POSITION; + float3 worldNormal:NORMAL; + float3 worldPos:TEXTURE0; + SHADOW_COORDS(1) // put shadows data into TEXCOORD1 + }; + v2f vert(appdata_base v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + o.worldNormal = UnityObjectToWorldNormal(v.normal); + TRANSFER_SHADOW(o) + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + fixed shadow = SHADOW_ATTENUATION(i); + + float3 lightDir = normalize(i.worldPos - _WorldSpaceLightPos0.xyz); + float nl = max(0, dot(i.worldNormal, -lightDir)); + + // only want nl if the dot produce is > 0 (anything facing the light) + nl = 1 - step(nl, 0); + + float light = min(nl, shadow); + + return fixed4(light, light, light, 1 - light); + } + ENDCG + } + + // shadow casting support + UsePass "Legacy Shaders/VertexLit/SHADOWCASTER" + } +} \ No newline at end of file diff --git a/Assets/Shaders/PointShadows.shader.meta b/Assets/Shaders/PointShadows.shader.meta new file mode 100755 index 0000000..65b1ed6 --- /dev/null +++ b/Assets/Shaders/PointShadows.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e0e3a7667aa1d634096fe8f52372ea9e +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: