diff --git a/Assets/Prefabs/Camera.prefab b/Assets/Prefabs/Camera.prefab index 2d596bcc..a2043050 100644 --- a/Assets/Prefabs/Camera.prefab +++ b/Assets/Prefabs/Camera.prefab @@ -94,7 +94,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_RenderShadows: 1 m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 + m_RequiresOpaqueTextureOption: 1 m_CameraType: 0 m_Cameras: - {fileID: 1754182892474973891} diff --git a/Assets/Prefabs/Interactables/Ball.prefab b/Assets/Prefabs/Interactables/Ball.prefab index 332659e4..b9893734 100644 --- a/Assets/Prefabs/Interactables/Ball.prefab +++ b/Assets/Prefabs/Interactables/Ball.prefab @@ -17,7 +17,7 @@ GameObject: - component: {fileID: 7609458109135603035} - component: {fileID: 7609458109135603028} - component: {fileID: 4181798283356415950} - m_Layer: 0 + m_Layer: 7 m_Name: Ball m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/Interactables/Cube.prefab b/Assets/Prefabs/Interactables/Cube.prefab index 4628dd87..1b59792e 100644 --- a/Assets/Prefabs/Interactables/Cube.prefab +++ b/Assets/Prefabs/Interactables/Cube.prefab @@ -17,7 +17,7 @@ GameObject: - component: {fileID: 4795329138781609757} - component: {fileID: 4795329138781609758} - component: {fileID: 950589851571159716} - m_Layer: 0 + m_Layer: 7 m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} @@ -418,7 +418,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 4795329138887181542} - m_Layer: 0 + m_Layer: 7 m_Name: Center m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/Interactables/Door.prefab b/Assets/Prefabs/Interactables/Door.prefab index 91107046..0e351e58 100644 --- a/Assets/Prefabs/Interactables/Door.prefab +++ b/Assets/Prefabs/Interactables/Door.prefab @@ -18,7 +18,7 @@ GameObject: - component: {fileID: 2904333231284592463} - component: {fileID: 2904333231284592460} - component: {fileID: 2904333231284592461} - m_Layer: 0 + m_Layer: 7 m_Name: Door m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/Interactables/Dummy Lock.prefab b/Assets/Prefabs/Interactables/Dummy Lock.prefab index ef5d370e..826cc602 100644 --- a/Assets/Prefabs/Interactables/Dummy Lock.prefab +++ b/Assets/Prefabs/Interactables/Dummy Lock.prefab @@ -16,7 +16,7 @@ GameObject: - component: {fileID: 6499754372677302386} - component: {fileID: 7241472463710246339} - component: {fileID: 976566040887244869} - m_Layer: 0 + m_Layer: 7 m_Name: Dummy Lock m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/Interactables/Gate (Unlocked).prefab b/Assets/Prefabs/Interactables/Gate (Unlocked).prefab index 776a4895..7dcae6fe 100644 --- a/Assets/Prefabs/Interactables/Gate (Unlocked).prefab +++ b/Assets/Prefabs/Interactables/Gate (Unlocked).prefab @@ -17,7 +17,7 @@ GameObject: - component: {fileID: 3008955352867139539} - component: {fileID: 3008955352867139501} - component: {fileID: 3008955352867139500} - m_Layer: 0 + m_Layer: 7 m_Name: Gate (Unlocked) m_TagString: Untagged m_Icon: {fileID: 0} @@ -538,7 +538,7 @@ GameObject: - component: {fileID: 3008955352914607112} - component: {fileID: 3008955352914607119} - component: {fileID: 3008955352914607118} - m_Layer: 0 + m_Layer: 7 m_Name: Gate (1) m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/Interactables/Interactable Base.prefab b/Assets/Prefabs/Interactables/Interactable Base.prefab index 2ec5f899..2f05f7f4 100644 --- a/Assets/Prefabs/Interactables/Interactable Base.prefab +++ b/Assets/Prefabs/Interactables/Interactable Base.prefab @@ -12,7 +12,7 @@ GameObject: - component: {fileID: 7007801196651952347} - component: {fileID: 4723133526917844122} - component: {fileID: 4793178900451971204} - m_Layer: 0 + m_Layer: 7 m_Name: Interactable Base m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/Interactables/Well_Bucket_Lift.prefab b/Assets/Prefabs/Interactables/Well_Bucket_Lift.prefab index ed9f8bdd..7aac7ece 100644 --- a/Assets/Prefabs/Interactables/Well_Bucket_Lift.prefab +++ b/Assets/Prefabs/Interactables/Well_Bucket_Lift.prefab @@ -10,7 +10,7 @@ GameObject: m_Component: - component: {fileID: 4442211184507422947} - component: {fileID: 4442211184507422956} - m_Layer: 0 + m_Layer: 7 m_Name: Well_Bucket_Lift m_TagString: Untagged m_Icon: {fileID: 0} @@ -64,7 +64,7 @@ GameObject: - component: {fileID: 4442211184634013901} - component: {fileID: 4442211184634013891} - component: {fileID: 4442211184634013900} - m_Layer: 0 + m_Layer: 7 m_Name: RopeHanging (1) m_TagString: Untagged m_Icon: {fileID: 0} @@ -205,6 +205,10 @@ PrefabInstance: propertyPath: m_Name value: Well_Bucket (1) objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: d06e2954ef88f5e48a2fdb4a01290871, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d06e2954ef88f5e48a2fdb4a01290871, type: 3} --- !u!1 &3559126117029711454 stripped @@ -217,7 +221,7 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d06e2954ef88f5e48a2fdb4a01290871, type: 3} m_PrefabInstance: {fileID: 4442211184280744719} m_PrefabAsset: {fileID: 0} ---- !u!65 &4442211184714845958 +--- !u!65 &4442211184714845957 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -228,9 +232,9 @@ BoxCollider: m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 0.002066136, y: 0.0020444675, z: 0.00016364278} - m_Center: {x: -0.0000026421635, y: -0.000013506786, z: -0.0025437085} ---- !u!65 &4442211184714845957 + m_Size: {x: 0.0029036289, y: 0.00002732366, z: 0.0025017397} + m_Center: {x: 0.000012779707, y: -0.0010359833, z: -0.00137466} +--- !u!65 &4442211184714845958 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -241,8 +245,8 @@ BoxCollider: m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 0.0029036289, y: 0.00002732366, z: 0.0025017397} - m_Center: {x: 0.000012779707, y: -0.0010359833, z: -0.00137466} + m_Size: {x: 0.002066136, y: 0.0020444675, z: 0.00016364278} + m_Center: {x: -0.0000026421635, y: -0.000013506786, z: -0.0025437085} --- !u!95 &4442211184714845959 Animator: serializedVersion: 3 diff --git a/Assets/Scripts/Graphics.meta b/Assets/Scripts/Graphics.meta new file mode 100644 index 00000000..0b5a9e87 --- /dev/null +++ b/Assets/Scripts/Graphics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ff1d7ddc42834ba08663482ea39d074 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Graphics/OutlineFeature.cs b/Assets/Scripts/Graphics/OutlineFeature.cs new file mode 100644 index 00000000..671b895a --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineFeature.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +public class OutlineFeature : ScriptableRendererFeature +{ + [System.Serializable] + public class OutlineFeatureSettings + { + public bool isEnabled = true; + public RenderPassEvent insertTiming = RenderPassEvent.AfterRendering; + public Material material; + } + + public OutlineFeatureSettings settings = new OutlineFeatureSettings(); + private RenderTargetHandle renderTargetHandle; + private OutlineRenderPass renderPass; + + public override void Create() + { + renderPass = new OutlineRenderPass("Outline Pass", settings.insertTiming, settings.material); + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + if (!settings.isEnabled) return; + + RenderTargetIdentifier cameraColorTargetIdent = renderer.cameraColorTarget; + renderPass.setup(cameraColorTargetIdent); + renderPass.ConfigureInput(ScriptableRenderPassInput.Normal); + renderer.EnqueuePass(renderPass); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Graphics/OutlineFeature.cs.meta b/Assets/Scripts/Graphics/OutlineFeature.cs.meta new file mode 100644 index 00000000..a7eed7da --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineFeature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6204cd418c7e4bd59128df568813bf0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Graphics/OutlineMaterial.mat b/Assets/Scripts/Graphics/OutlineMaterial.mat new file mode 100644 index 00000000..a1a1870c --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineMaterial.mat @@ -0,0 +1,130 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3343911706550335055 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OutlineMaterial + m_Shader: {fileID: 4800000, guid: ddee5e160afcb494c8df388a38ab8812, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _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} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DepthRadius: 0.002 + - _DepthThreshold: 0.05 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _NormalThreshold: 1 + - _OcclusionStrength: 1 + - _OutlineIntensity: 1 + - _OutlineSize: 0.002 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _Threshold: 0.05 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 0.12156863} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Scripts/Graphics/OutlineMaterial.mat.meta b/Assets/Scripts/Graphics/OutlineMaterial.mat.meta new file mode 100644 index 00000000..4b3d016c --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b4dc2b184e3ad4befa715f0c441b7d20 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Graphics/OutlineMaterialSelected.mat b/Assets/Scripts/Graphics/OutlineMaterialSelected.mat new file mode 100644 index 00000000..c43916e7 --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineMaterialSelected.mat @@ -0,0 +1,132 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3343911706550335055 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OutlineMaterialSelected + m_Shader: {fileID: 4800000, guid: ddee5e160afcb494c8df388a38ab8812, type: 3} + m_ShaderKeywords: _DODEPTHEDGEDETECTION_ON _DONORMALEDGEDETECTION_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _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} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DepthRadius: 0.002 + - _DepthThreshold: 0.069 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DoDepthEdgeDetection: 1 + - _DoNormalEdgeDetection: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _NormalThreshold: 0 + - _OcclusionStrength: 1 + - _OutlineIntensity: 6.7 + - _OutlineSize: 0.002 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _Threshold: 0.05 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 0.43715128, g: 1, b: 0.3999999, a: 0.36862746} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Scripts/Graphics/OutlineMaterialSelected.mat.meta b/Assets/Scripts/Graphics/OutlineMaterialSelected.mat.meta new file mode 100644 index 00000000..aa175e00 --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineMaterialSelected.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f481bf8bfb9a047c8b2346d1e39836be +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Graphics/OutlineObjectsFeature.cs b/Assets/Scripts/Graphics/OutlineObjectsFeature.cs new file mode 100644 index 00000000..97144021 --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineObjectsFeature.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Experimental.Rendering.Universal; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +public class OutlineObjectsFeature : RenderObjects { + private RenderObjectsPass rpoPass; + + // public OutlineObjectsFeatureSettings newSettings = new OutlineObjectsFeatureSettings(); + public RenderPassEvent insertTiming; + public LayerMask layerMask; + public Material mainMaterial; + + + [System.Serializable] + public class OutlineObjectsFeatureSettings : RenderObjectsSettings + { + public RenderPassEvent insertTiming = RenderPassEvent.AfterRenderingTransparents; + // public Material material; + public int layerMask = 1 << 7; + } + + public override void Create() + { + rpoPass = new RenderObjectsPass("Outline Objects Pass", insertTiming, new string[0], RenderQueueType.Opaque, layerMask, new CustomCameraSettings()); + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + rpoPass.overrideMaterial = mainMaterial; + rpoPass.ConfigureInput(ScriptableRenderPassInput.Normal); + renderer.EnqueuePass(rpoPass); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Graphics/OutlineObjectsFeature.cs.meta b/Assets/Scripts/Graphics/OutlineObjectsFeature.cs.meta new file mode 100644 index 00000000..bf92289e --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineObjectsFeature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec8f6252a7d164088b26deaa5b34b585 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Graphics/OutlineRenderPass.cs b/Assets/Scripts/Graphics/OutlineRenderPass.cs new file mode 100644 index 00000000..ec9e1253 --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineRenderPass.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +public class OutlineRenderPass : ScriptableRenderPass +{ + private string profilerTag; + private Material material; + private RenderTargetIdentifier cameraColorTargetIdent; + private RenderTargetHandle tempTexture; + + public OutlineRenderPass(string profilerTag, RenderPassEvent renderPassEvent, Material material) + { + this.profilerTag = profilerTag; + this.renderPassEvent = renderPassEvent; + this.material = material; + } + + public void setup(RenderTargetIdentifier cameraColorTargetIdent) + { + this.cameraColorTargetIdent = cameraColorTargetIdent; + } + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + { + cmd.GetTemporaryRT(tempTexture.id, cameraTextureDescriptor); + } + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + CommandBuffer cmd = CommandBufferPool.Get(profilerTag); + cmd.Clear(); + + cmd.Blit(cameraColorTargetIdent, tempTexture.Identifier(), material, 0); + cmd.Blit(tempTexture.Identifier(), cameraColorTargetIdent); + context.ExecuteCommandBuffer(cmd); + cmd.Clear(); + CommandBufferPool.Release(cmd); + } + + public override void FrameCleanup(CommandBuffer cmd) + { + cmd.ReleaseTemporaryRT(tempTexture.id); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Graphics/OutlineRenderPass.cs.meta b/Assets/Scripts/Graphics/OutlineRenderPass.cs.meta new file mode 100644 index 00000000..a0888e7b --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineRenderPass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54cae72bddf484d09a7a9ea58dff0e15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Graphics/OutlineShader.shader b/Assets/Scripts/Graphics/OutlineShader.shader new file mode 100644 index 00000000..87873f3c --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineShader.shader @@ -0,0 +1,145 @@ +Shader "Custom/Outline" + { + Properties + { + _OutlineColor ("Outline Color", Color) = (1, 1, 1, 1) // color of the outline + _OutlineIntensity ("Outline Intensity", Range(1, 50)) = 1.0 // degree to which outline glows + _OutlineSize ("Outline Size", Range(0, 0.005)) = 0.002 // size of the outline + _DepthThreshold ("Depth Threshold", Range(0, 0.10)) = 0.05 + _NormalThreshold ("Normal Threshold", Range(0, 1)) = 1.0 + +// [Toggle] _DoDepthEdgeDetection ("Depth Edge Detection", Float) = 1.0 +// [Toggle] _DoNormalEdgeDetection ("Normal Edge Detection", Float) = 1.0 + } + + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + + Pass { + CGPROGRAM +// Upgrade NOTE: excluded shader from DX11, OpenGL ES 2.0 because it uses unsized arrays +#pragma exclude_renderers d3d11 gles + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + UNITY_FOG_COORDS(1) + float4 vertex : SV_POSITION; + float4 screenPos : TEXCOORD0; + }; + + float _OutlineSize; + float4 _OutlineColor; + float _OutlineIntensity; + float _NormalThreshold; + float _DepthThreshold; + // float _DoDepthEdgeDetection; + // float _DoNormalEdgeDetection; + UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); + UNITY_DECLARE_TEX2D(_CameraNormalsTexture); + UNITY_DECLARE_TEX2D(_CameraOpaqueTexture); + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.screenPos = ComputeScreenPos(o.vertex); + COMPUTE_EYEDEPTH(o.screenPos.z); + UNITY_TRANSFER_FOG(o,o.vertex); + return o; + } + + + + + + // detect if at edge using the camera normals + bool detectEdgeFromNormal(float2 offsets[4], float2 screenPosition) + { + float3 normals[4]; + for (int j = 0; j < 4; j++) normals[j] = UNITY_SAMPLE_TEX2D(_CameraNormalsTexture, screenPosition + offsets[j]); + const float3 normalFiniteDifference0 = normals[1] - normals[0]; + const float3 normalFiniteDifference1 = normals[3] - normals[2]; + float edgeNormal = sqrt(dot(normalFiniteDifference0, normalFiniteDifference0) + dot(normalFiniteDifference1, normalFiniteDifference1)); + return edgeNormal > _NormalThreshold; + } + + + + + // gets the depth value at i.screenpos + float getDepth(v2f i, float4 offset) + { + float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.screenPos + offset))); + return sceneZ - i.screenPos.z; + } + + // returns max value in a float4 + float getMax(float4 values) + { + float maxValue = 0; + for (int i = 0; i < 4; i++) maxValue = max(maxValue, values[i]); + return maxValue; + } + + // detect if at edge using the depth buffer + bool detectEdgeFromDepth(v2f i, float2 offsets[4]) + { + // const float THRESHOLD = 0.05; + + // depth sampling + float4 adjacentDepths = 0; + float4 localDepth = getDepth(i, 0); + for (int j = 0; j < 4; j++) adjacentDepths[j] = getDepth(i, float4(offsets[j], 0, 0)); + + float depth = max(localDepth, getMax(adjacentDepths)); + return depth > _DepthThreshold; + } + + + + + + + fixed4 frag (v2f i) : SV_Target + { + float2 offsets[] = { + float2(-_OutlineSize, 0), + float2(_OutlineSize, 0), + float2(0, -_OutlineSize), + float2(0, _OutlineSize), + }; + + // screen color + const float2 screenPosition = i.screenPos.xy / i.screenPos.w; + const fixed4 screenColor = UNITY_SAMPLE_TEX2D(_CameraOpaqueTexture, screenPosition); + + // edge detection + const bool atDepthEdge = detectEdgeFromDepth(i, offsets); + const bool atNormalEdge = detectEdgeFromNormal(offsets, screenPosition); + bool atEdge = atDepthEdge && atNormalEdge; + + // mixing + fixed4 col = (atEdge) ? _OutlineColor * _OutlineIntensity : screenColor; + col = lerp(screenColor, col, _OutlineColor[3]); // apply opacity of color + + // apply fog? + UNITY_APPLY_FOG(i.fogCoord, col); + return col; + } + ENDCG + } + } +} diff --git a/Assets/Scripts/Graphics/OutlineShader.shader.meta b/Assets/Scripts/Graphics/OutlineShader.shader.meta new file mode 100644 index 00000000..a5a4841e --- /dev/null +++ b/Assets/Scripts/Graphics/OutlineShader.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ddee5e160afcb494c8df388a38ab8812 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Interaction/Interactable.cs b/Assets/Scripts/Interaction/Interactable.cs index c50536ca..7a512a8a 100644 --- a/Assets/Scripts/Interaction/Interactable.cs +++ b/Assets/Scripts/Interaction/Interactable.cs @@ -32,6 +32,8 @@ public class Interactable : MonoBehaviour public Vector3 GrabPoint { get; private set; } private int _ignoreRaycastLayer; + private int _interactableLayer; + private int _interactableHeldLayer; private Transform _cameraTransform; private float _lastLineOfSightCheck; @@ -40,6 +42,8 @@ public class Interactable : MonoBehaviour private void Start() { _ignoreRaycastLayer = LayerMask.NameToLayer("Ignore Raycast"); + _interactableLayer = LayerMask.NameToLayer("Interactable"); + _interactableHeldLayer = LayerMask.NameToLayer("InteractableHeld"); if (Camera.main != null) _cameraTransform = Camera.main.transform; @@ -50,6 +54,7 @@ public void InteractStart(GameObject source, Vector3 point) onInteractStart.Invoke(source, point); GrabPoint = point; IsHeld = true; + setLayerForHeldStatus(); _lastLineOfSightCheck = Time.time; } @@ -58,6 +63,7 @@ public void InteractEnd() { IsHeld = false; onInteractEnd.Invoke(); + setLayerForHeldStatus(); } private void Update() @@ -75,7 +81,6 @@ private void CheckForObstruction() GameObject self = gameObject; // Move this object to the "Ignore Raycast" layer so we don't count ourself as a blocking object. - int originalLayer = self.layer; self.layer = _ignoreRaycastLayer; if (Physics.Raycast(transform.position, directionToPlayer, out var hit)) @@ -84,7 +89,13 @@ private void CheckForObstruction() if (hit.transform.CompareTag("Player") == false) InteractEnd(); } - - gameObject.layer = originalLayer; + + // reset to correct layer + setLayerForHeldStatus(); + } + + private void setLayerForHeldStatus() + { + gameObject.layer = IsHeld ? _interactableHeldLayer : _interactableLayer; } } \ No newline at end of file diff --git a/Assets/Settings/URP Settings/ForwardRenderer.asset b/Assets/Settings/URP Settings/ForwardRenderer.asset index b9a801ce..21f598ec 100644 --- a/Assets/Settings/URP Settings/ForwardRenderer.asset +++ b/Assets/Settings/URP Settings/ForwardRenderer.asset @@ -12,8 +12,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} m_Name: ForwardRenderer m_EditorClassIdentifier: - m_RendererFeatures: [] - m_RendererFeatureMap: + m_RendererFeatures: + - {fileID: 2835584169613232667} + - {fileID: 6779064132620506433} + m_RendererFeatureMap: 1b8a8458c7045a2741d56f5ee912145e postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} shaders: @@ -42,3 +44,91 @@ MonoBehaviour: m_ShadowTransparentReceive: 1 m_RenderingMode: 0 m_AccurateGbufferNormals: 0 +--- !u!114 &2835584169613232667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec8f6252a7d164088b26deaa5b34b585, type: 3} + m_Name: Outliner Selected + m_EditorClassIdentifier: + m_Active: 1 + settings: + passTag: Outliner Selected + Event: 500 + filterSettings: + RenderQueueType: 0 + LayerMask: + serializedVersion: 2 + m_Bits: 384 + PassNames: [] + overrideMaterial: {fileID: 0} + overrideMaterialPassIndex: 0 + overrideDepthState: 0 + depthCompareFunction: 4 + enableWrite: 1 + stencilSettings: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 0 + failOperation: 0 + zFailOperation: 0 + cameraSettings: + overrideCamera: 0 + restoreCamera: 1 + offset: {x: 0, y: 0, z: 0, w: 0} + cameraFieldOfView: 60 + insertTiming: 500 + layerMask: + serializedVersion: 2 + m_Bits: 256 + mainMaterial: {fileID: 2100000, guid: f481bf8bfb9a047c8b2346d1e39836be, type: 2} +--- !u!114 &6779064132620506433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec8f6252a7d164088b26deaa5b34b585, type: 3} + m_Name: Outline Unselected + m_EditorClassIdentifier: + m_Active: 1 + settings: + passTag: Outline Unselected + Event: 300 + filterSettings: + RenderQueueType: 0 + LayerMask: + serializedVersion: 2 + m_Bits: 384 + PassNames: [] + overrideMaterial: {fileID: 0} + overrideMaterialPassIndex: 0 + overrideDepthState: 0 + depthCompareFunction: 4 + enableWrite: 1 + stencilSettings: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 0 + failOperation: 0 + zFailOperation: 0 + cameraSettings: + overrideCamera: 0 + restoreCamera: 1 + offset: {x: 0, y: 0, z: 0, w: 0} + cameraFieldOfView: 60 + insertTiming: 500 + layerMask: + serializedVersion: 2 + m_Bits: 128 + mainMaterial: {fileID: 2100000, guid: b4dc2b184e3ad4befa715f0c441b7d20, type: 2} diff --git a/Assets/Settings/URP Settings/UniversalRP-HighQuality.asset b/Assets/Settings/URP Settings/UniversalRP-HighQuality.asset index 9386ab9e..2104ad12 100644 --- a/Assets/Settings/URP Settings/UniversalRP-HighQuality.asset +++ b/Assets/Settings/URP Settings/UniversalRP-HighQuality.asset @@ -29,7 +29,7 @@ MonoBehaviour: m_MainLightRenderingMode: 1 m_MainLightShadowsSupported: 1 m_MainLightShadowmapResolution: 4096 - m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsRenderingMode: 0 m_AdditionalLightsPerObjectLimit: 4 m_AdditionalLightShadowsSupported: 1 m_AdditionalLightsShadowmapResolution: 512 @@ -47,7 +47,7 @@ MonoBehaviour: m_DebugLevel: 0 m_UseAdaptivePerformance: 1 m_ColorGradingMode: 0 - m_ColorGradingLutSize: 32 + m_ColorGradingLutSize: 16 m_ShadowType: 1 m_LocalShadowsSupported: 0 m_LocalShadowsAtlasResolution: 256 diff --git a/Assets/Settings/URP Settings/UniversalRP-MediumQuality.asset b/Assets/Settings/URP Settings/UniversalRP-MediumQuality.asset index 385781ac..016a1df7 100644 --- a/Assets/Settings/URP Settings/UniversalRP-MediumQuality.asset +++ b/Assets/Settings/URP Settings/UniversalRP-MediumQuality.asset @@ -29,7 +29,7 @@ MonoBehaviour: m_MainLightRenderingMode: 1 m_MainLightShadowsSupported: 1 m_MainLightShadowmapResolution: 2048 - m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsRenderingMode: 0 m_AdditionalLightsPerObjectLimit: 4 m_AdditionalLightShadowsSupported: 0 m_AdditionalLightsShadowmapResolution: 512 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index d64ed0ff..51f4c472 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -15,8 +15,8 @@ TagManager: - Water - UI - Player - - - - + - Interactable + - InteractableHeld - - -