diff --git a/BlueWater/Assets/Screen Space Cavity Curvature.meta b/BlueWater/Assets/Screen Space Cavity Curvature.meta
new file mode 100644
index 000000000..89630931a
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 60431f40c0e3b47a19dc69f418d720a0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Demo.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Demo.meta
new file mode 100644
index 000000000..9c0d01fd7
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Demo.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c7f647a83c6674f4a9c40ebd43aec85d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo.unity b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo.unity
new file mode 100644
index 000000000..fa9fec5de
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo.unity
@@ -0,0 +1,1255 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.61, g: 0.61, b: 0.61, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 3
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 1
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 705507994}
+ m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 11
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 0
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 500
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 2
+ m_PVRDenoiserTypeDirect: 0
+ m_PVRDenoiserTypeIndirect: 0
+ m_PVRDenoiserTypeAO: 0
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 0
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &62044222
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 62044226}
+ - component: {fileID: 62044225}
+ - component: {fileID: 62044224}
+ - component: {fileID: 62044223}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &62044223
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &62044224
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &62044225
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &62044226
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.75, y: 0, z: -0.5}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 7
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &507238151
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 507238155}
+ - component: {fileID: 507238154}
+ - component: {fileID: 507238153}
+ - component: {fileID: 507238152}
+ m_Layer: 5
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &507238152
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 507238151}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &507238153
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 507238151}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+--- !u!223 &507238154
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 507238151}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_AdditionalShaderChannelsFlag: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &507238155
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 507238151}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 2129219930}
+ m_Father: {fileID: 0}
+ m_RootOrder: 10
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!1 &515219615
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 515219619}
+ - component: {fileID: 515219618}
+ - component: {fileID: 515219617}
+ - component: {fileID: 515219616}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &515219616
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &515219617
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &515219618
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &515219619
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.25, y: 2, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &705507993
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 705507995}
+ - component: {fileID: 705507994}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &705507994
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_Enabled: 1
+ serializedVersion: 10
+ m_Type: 1
+ m_Shape: 0
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Intensity: 1.5
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 0.311
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &705507995
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &793684285
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 793684289}
+ - component: {fileID: 793684288}
+ - component: {fileID: 793684287}
+ - component: {fileID: 793684286}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &793684286
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &793684287
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &793684288
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &793684289
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.75, y: 1, z: -0.25}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1183939126
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1183939130}
+ - component: {fileID: 1183939129}
+ - component: {fileID: 1183939128}
+ - component: {fileID: 1183939127}
+ m_Layer: 0
+ m_Name: 'Capsule '
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!136 &1183939127
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1183939128
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1183939129
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1183939130
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_LocalRotation: {x: -0, y: -0, z: -0.3663209, w: 0.9304886}
+ m_LocalPosition: {x: 0.017, y: 0.018, z: -1.963}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 9
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: -42.978}
+--- !u!1 &1211703946
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1211703950}
+ - component: {fileID: 1211703949}
+ - component: {fileID: 1211703948}
+ - component: {fileID: 1211703947}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &1211703947
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1211703948
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1211703949
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1211703950
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.25, y: 1, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1613233554
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1613233558}
+ - component: {fileID: 1613233557}
+ - component: {fileID: 1613233556}
+ - component: {fileID: 1613233555}
+ m_Layer: 0
+ m_Name: Capsule
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!136 &1613233555
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1613233556
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1613233557
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1613233558
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -1.57}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 8
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1796420149
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1796420153}
+ - component: {fileID: 1796420152}
+ - component: {fileID: 1796420151}
+ - component: {fileID: 1796420150}
+ m_Layer: 0
+ m_Name: Plane
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!64 &1796420150
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &1796420151
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1796420152
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1796420153
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: -0.5, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1802322463
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1802322467}
+ - component: {fileID: 1802322466}
+ - component: {fileID: 1802322465}
+ - component: {fileID: 1802322464}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &1802322464
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1802322465
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8b69337571b906e4fa155f23ea29714f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1802322466
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1802322467
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.75, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1983969772
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1983969776}
+ - component: {fileID: 1983969775}
+ - component: {fileID: 1983969774}
+ - component: {fileID: 1983969773}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1983969773
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1983969772}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1d35af20b508d5546ba80581bc1b979a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ ssccShader: {fileID: 4800000, guid: 89ec5ce1bd95ed946a65b649164a9c1d, type: 3}
+ effectIntensity: 1
+ distanceFade: 0
+ curvaturePixelRadius: 2
+ curvatureBrights: 2
+ curvatureDarks: 3
+ cavitySamples: 2
+ saturateCavity: 1
+ cavityRadius: 0.25
+ cavityBrights: 3
+ cavityDarks: 2
+ normalsSource: 0
+ debugMode: 0
+ output: 0
+--- !u!81 &1983969774
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1983969772}
+ m_Enabled: 1
+--- !u!20 &1983969775
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1983969772}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.4745098, g: 0.4745098, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: 3
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_AllowMSAA: 0
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 1
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &1983969776
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1983969772}
+ m_LocalRotation: {x: -0.3012502, y: -0.33482242, z: 0.113903515, w: -0.8855328}
+ m_LocalPosition: {x: -2.1670876, y: 3.896474, z: -2.8583183}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2129219929
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2129219930}
+ - component: {fileID: 2129219932}
+ - component: {fileID: 2129219931}
+ m_Layer: 5
+ m_Name: Help Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2129219930
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2129219929}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 507238155}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 20, y: -20}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 1}
+--- !u!114 &2129219931
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2129219929}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 25
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: 'This demo scene is for the Built-In renderer. If everything is pink
+ open Demo_URP/Demo_HDRP instead.
+
+
+ If you want the effect to only affect
+ certain objects, set SSCC Output to _SSCCTexture and import Builtin from "_SSCCTexture
+ Examples", use that shader.'
+--- !u!222 &2129219932
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2129219929}
+ m_CullTransparentMesh: 0
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo.unity.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo.unity.meta
new file mode 100644
index 000000000..3be0407f0
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo.unity.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 57d9676b747e04a54943269ac00aa478
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/Demo/Demo.unity
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo_Readme.txt b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo_Readme.txt
new file mode 100644
index 000000000..b41e09bc7
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo_Readme.txt
@@ -0,0 +1,3 @@
+This demo scene is for the Built-in render pipeline.
+For URP and HDRP demos look inside their respective folders.
+You might have to toggle the SSCC component on the camera off and back on again.
\ No newline at end of file
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo_Readme.txt.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo_Readme.txt.meta
new file mode 100644
index 000000000..d498872fa
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Demo_Readme.txt.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: ade6b4cfebd3fb848a02000f8e236d59
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/Demo/Demo_Readme.txt
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Grey.mat b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Grey.mat
new file mode 100644
index 000000000..4fb6fb375
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Grey.mat
@@ -0,0 +1,333 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &-9139891969420624701
+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: 1
+--- !u!114 &-6363685895679108359
+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: da692e001514ec24dbc4cca1949ff7e8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ version: 2
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Grey
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _NORMALMAP_TANGENT_SPACE
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses:
+ - DistortionVectors
+ - MOTIONVECTORS
+ - TransparentDepthPrepass
+ - TransparentDepthPostpass
+ - TransparentBackface
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _AnisotropyMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BaseColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BaseMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BentNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BentNormalMapOS:
+ 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}
+ - _CoatMaskMap:
+ 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}
+ - _DetailMap:
+ 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}
+ - _DistortionVectorMap:
+ 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}
+ - _EmissiveColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _HeightMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _IridescenceMaskMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _IridescenceThicknessMap:
+ 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}
+ - _MaskMap:
+ 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}
+ - _NormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _NormalMapOS:
+ 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}
+ - _SpecularColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _SubsurfaceMaskMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _TangentMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _TangentMapOS:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ThicknessMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _TransmittanceColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _AORemapMax: 1
+ - _AORemapMin: 0
+ - _ATDistance: 1
+ - _AddPrecomputedVelocity: 0
+ - _AlbedoAffectEmissive: 0
+ - _AlphaClip: 0
+ - _AlphaCutoff: 0.5
+ - _AlphaCutoffEnable: 0
+ - _AlphaCutoffPostpass: 0.5
+ - _AlphaCutoffPrepass: 0.5
+ - _AlphaCutoffShadow: 0.5
+ - _AlphaDstBlend: 0
+ - _AlphaSrcBlend: 1
+ - _Anisotropy: 0
+ - _Blend: 0
+ - _BlendMode: 0
+ - _BumpScale: 1
+ - _CoatMask: 0
+ - _Cull: 2
+ - _CullMode: 2
+ - _CullModeForward: 2
+ - _Cutoff: 0.5
+ - _DepthOffsetEnable: 0
+ - _DetailAlbedoScale: 1
+ - _DetailNormalMapScale: 1
+ - _DetailNormalScale: 1
+ - _DetailSmoothnessScale: 1
+ - _DiffusionProfile: 0
+ - _DiffusionProfileHash: 0
+ - _DisplacementLockObjectScale: 1
+ - _DisplacementLockTilingScale: 1
+ - _DisplacementMode: 0
+ - _DistortionBlendMode: 0
+ - _DistortionBlurBlendMode: 0
+ - _DistortionBlurDstBlend: 1
+ - _DistortionBlurRemapMax: 1
+ - _DistortionBlurRemapMin: 0
+ - _DistortionBlurScale: 1
+ - _DistortionBlurSrcBlend: 1
+ - _DistortionDepthTest: 1
+ - _DistortionDstBlend: 1
+ - _DistortionEnable: 0
+ - _DistortionScale: 1
+ - _DistortionSrcBlend: 1
+ - _DistortionVectorBias: -1
+ - _DistortionVectorScale: 2
+ - _DoubleSidedEnable: 0
+ - _DoubleSidedNormalMode: 1
+ - _DstBlend: 0
+ - _EmissiveColorMode: 1
+ - _EmissiveExposureWeight: 1
+ - _EmissiveIntensity: 1
+ - _EmissiveIntensityUnit: 0
+ - _EnableBlendModePreserveSpecularLighting: 1
+ - _EnableFogOnTransparent: 1
+ - _EnableGeometricSpecularAA: 0
+ - _EnergyConservingSpecularColor: 1
+ - _EnvironmentReflections: 1
+ - _GlossMapScale: 1
+ - _Glossiness: 0.261
+ - _GlossyReflections: 1
+ - _HeightAmplitude: 0.02
+ - _HeightCenter: 0.5
+ - _HeightMapParametrization: 0
+ - _HeightMax: 1
+ - _HeightMin: -1
+ - _HeightOffset: 0
+ - _HeightPoMAmplitude: 2
+ - _HeightTessAmplitude: 2
+ - _HeightTessCenter: 0.5
+ - _InvTilingScale: 1
+ - _Ior: 1.5
+ - _IridescenceMask: 1
+ - _IridescenceThickness: 1
+ - _LinkDetailsWithBase: 1
+ - _MaterialID: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _NormalMapSpace: 0
+ - _NormalScale: 1
+ - _OcclusionStrength: 1
+ - _PPDLodThreshold: 5
+ - _PPDMaxSamples: 15
+ - _PPDMinSamples: 5
+ - _PPDPrimitiveLength: 1
+ - _PPDPrimitiveWidth: 1
+ - _Parallax: 0.02
+ - _QueueOffset: 0
+ - _ReceiveShadows: 1
+ - _ReceivesSSR: 1
+ - _RefractionModel: 0
+ - _SSRefractionProjectionModel: 0
+ - _Smoothness: 0.261
+ - _SmoothnessRemapMax: 1
+ - _SmoothnessRemapMin: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecularAAScreenSpaceVariance: 0.1
+ - _SpecularAAThreshold: 0.2
+ - _SpecularHighlights: 1
+ - _SpecularOcclusionMode: 1
+ - _SrcBlend: 1
+ - _StencilRef: 0
+ - _StencilRefDepth: 8
+ - _StencilRefDistortionVec: 4
+ - _StencilRefGBuffer: 10
+ - _StencilRefMV: 40
+ - _StencilWriteMask: 6
+ - _StencilWriteMaskDepth: 8
+ - _StencilWriteMaskDistortionVec: 4
+ - _StencilWriteMaskGBuffer: 14
+ - _StencilWriteMaskMV: 40
+ - _SubsurfaceMask: 1
+ - _SupportDecals: 1
+ - _Surface: 0
+ - _SurfaceType: 0
+ - _TexWorldScale: 1
+ - _TexWorldScaleEmissive: 1
+ - _Thickness: 1
+ - _TransmissionEnable: 1
+ - _TransparentBackfaceEnable: 0
+ - _TransparentCullMode: 2
+ - _TransparentDepthPostpassEnable: 0
+ - _TransparentDepthPrepassEnable: 0
+ - _TransparentSortPriority: 0
+ - _TransparentWritingMotionVec: 0
+ - _TransparentZWrite: 0
+ - _UVBase: 0
+ - _UVDetail: 0
+ - _UVEmissive: 0
+ - _UVSec: 0
+ - _UseEmissiveIntensity: 0
+ - _UseShadowThreshold: 0
+ - _WorkflowMode: 1
+ - _ZTestDepthEqualForOpaque: 3
+ - _ZTestGBuffer: 4
+ - _ZTestModeDistortion: 4
+ - _ZTestTransparent: 4
+ - _ZWrite: 1
+ m_Colors:
+ - _BaseColor: {r: 0.7519999, g: 0.7519999, b: 0.7519999, a: 1}
+ - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0}
+ - _Color: {r: 0.496, g: 0.496, b: 0.496, a: 1}
+ - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0}
+ - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
+ - _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
+ - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1}
+ - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0}
+ - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
+ - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+ - _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
+ - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
+ - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1}
+ - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
+ - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}
+ - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Grey.mat.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Grey.mat.meta
new file mode 100644
index 000000000..ba7ba79ce
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Demo/Grey.mat.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 8b69337571b906e4fa155f23ea29714f
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/Demo/Grey.mat
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/README.txt b/BlueWater/Assets/Screen Space Cavity Curvature/README.txt
new file mode 100644
index 000000000..0376a69c0
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/README.txt
@@ -0,0 +1,29 @@
+Screen Space Cavity & Curvature v1.0
+Created by Jolly Theory.
+Email: jollytheorygames@gmail.com
+
+-----
+USAGE:
+
+Built-in render pipeline:
+1) Add SSCC component to your camera. Adjust settings. Done.
+
+URP:
+1) Make sure URP v7.1.8+ is installed, import URP.unitypackage by double clicking it.
+2) Your URP Renderer asset > Renderer Features > add SSCCRenderFeature.
+3) Make sure your UniversalRenderPipelineAsset's > Depth Texture is on. Or locally toggle in on in your camera.
+4) Make sure your camera's > Post Processing is on.
+5) Effect will now be enabled by default. You can add SSCC to your Post Process Volume to adjust settings. To disable the effect set Effect Intensity to zero. Done.
+
+HDRP:
+1) Make sure HDRP v7.1.8+ is installed, import HDRP.unitypackage by double clicking it.
+2) Project Settings > HDRP Default Settings > Custom Post Process Orders (at the bottom) > After Opaque And Sky > add SSCC custom post process.
+3) Effect will now be enabled by default. You can add SSCC to your Post Process Volume to adjust settings. To disable the effect set Effect Intensity to zero. Done.
+
+----
+TIPS:
+
+- Use View Normals debug mode to see what objects are contributing their normals data to the effect,
+if you have a custom shader and it does not show up in this view, you'll need to either add a Depth pass to it and use Reconstructed normals, or add a DepthNormals pass to it.
+(Please consult Google on how to do this for your render pipeline.)
+- If you want to exclude a certain object from being affected by the effect, take a look at the _SSCCTexture output mode (read its tooltip), and the "_SSCCTexture Examples" folder.
\ No newline at end of file
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/README.txt.meta b/BlueWater/Assets/Screen Space Cavity Curvature/README.txt.meta
new file mode 100644
index 000000000..7c13361d5
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/README.txt.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 80618c7fb55148147b616bb1a96ad689
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/README.txt
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Runtime.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime.meta
new file mode 100644
index 000000000..ebd587b9b
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d7c017c4be4fff94daca8578ebc3991f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.Runtime.asmdef b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.Runtime.asmdef
new file mode 100644
index 000000000..cc0382aa5
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.Runtime.asmdef
@@ -0,0 +1,15 @@
+{
+ "name": "SSCC.Runtime",
+ "references": [],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [
+ "UNITY_2019_1_OR_NEWER"
+ ],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.Runtime.asmdef.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.Runtime.asmdef.meta
new file mode 100644
index 000000000..d9056f72c
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.Runtime.asmdef.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 85820f79590499445879fb52e62eb068
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/Runtime/SSCC.Runtime.asmdef
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.cs b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.cs
new file mode 100644
index 000000000..497662954
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.cs
@@ -0,0 +1,465 @@
+using UnityEngine;
+using UnityEngine.Rendering;
+#if ENABLE_VR
+using XRSettings = UnityEngine.XR.XRSettings;
+#endif
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+using System;
+using System.Collections.Generic;
+
+namespace ScreenSpaceCavityCurvature
+{
+ [ExecuteInEditMode, ImageEffectAllowedInSceneView, AddComponentMenu("SSCC Screen Space Cavity Curvature")]
+ [RequireComponent(typeof(Camera))]
+ public class SSCC : MonoBehaviour
+ {
+ public enum PerPixelNormals { DeferredGBuffer, Camera, ReconstructedFromDepth }
+ public enum DebugMode { Disabled, EffectOnly, ViewNormals }
+ public enum CavitySamples { Low6, Medium8, High12 }
+ public enum OutputEffectTo { Screen, [InspectorName("_SSCCTexture in shaders")] _SSCCTexture }
+
+ [HideInInspector] public Shader ssccShader;
+
+ //
+ [Tooltip("Lerps the whole effect from 0 to 1.")] [Range(0f, 1f)] public float effectIntensity = 1f;
+ [Tooltip("Divides effect intensity by (depth * distanceFade).\nZero means effect doesn't fade with distance.")] [Range(0f, 1f)] public float distanceFade = 0f;
+
+ [Space(6)]
+
+ [Tooltip("The radius of curvature calculations in pixels.")] [Range(0, 4)] public int curvaturePixelRadius = 2;
+ [Tooltip("How bright does curvature get.")] [Range(0f, 5f)] public float curvatureBrights = 2f;
+ [Tooltip("How dark does curvature get.")] [Range(0f, 5f)] public float curvatureDarks = 3f;
+
+ [Space(6)]
+
+ [Tooltip("The amount of samples used for cavity calculation.")] public CavitySamples cavitySamples = CavitySamples.Low6;
+ [Tooltip("True: uses pow() blending to make colors more saturated in bright/dark areas of cavity.\n\nFalse: uses additive blending.")] public bool saturateCavity = true;
+ [Tooltip("The radius of cavity calculations in world units.")] [Range(0f, 0.5f)] public float cavityRadius = 0.25f;
+ [Tooltip("How bright does cavity get.")] [Range(0f, 5f)] public float cavityBrights = 3f;
+ [Tooltip("How dark does cavity get.")] [Range(0f, 5f)] public float cavityDarks = 2f;
+
+ [Space(6)]
+
+ [Tooltip("Where to get normals from.")] public PerPixelNormals normalsSource = PerPixelNormals.Camera;
+ [Tooltip("May be useful to check what objects contribute normals, as objects that do not contribute their normals will not contribute to the effect.")] public DebugMode debugMode = DebugMode.Disabled;
+
+ [Space(6)]
+
+ [Tooltip("Screen: Applies the effect over the entire screen.\n\n_SSCCTexture: Instead of writing the effect to the screen, will write the effect into a global shader texture named _SSCCTexture, so you can sample it selectively in your shaders and exclude certain objects from receiving outlines etc. See \"Output To Texture Examples\" folder for example shaders.")] public OutputEffectTo output = OutputEffectTo.Screen;
+ //
+
+ void CheckParameters()
+ {
+ if (GraphicsSettings.renderPipelineAsset != null)
+ {
+ Debug.LogWarning("Please follow the SRP usage instructions.");
+ enabled = false;
+ }
+
+ ssccCamera.depthTextureMode |= DepthTextureMode.Depth;
+ if (normalsSource == PerPixelNormals.Camera) ssccCamera.depthTextureMode |= DepthTextureMode.DepthNormals;
+
+ if (ssccCamera.actualRenderingPath != RenderingPath.DeferredShading && normalsSource == PerPixelNormals.DeferredGBuffer) normalsSource = PerPixelNormals.Camera;
+
+ if (stereoActive && ssccCamera.actualRenderingPath != RenderingPath.DeferredShading && normalsSource != PerPixelNormals.ReconstructedFromDepth) normalsSource = PerPixelNormals.ReconstructedFromDepth;
+
+ if (output == OutputEffectTo._SSCCTexture && ssccCamera.actualRenderingPath == RenderingPath.DeferredShading) normalsSource = PerPixelNormals.ReconstructedFromDepth; //cant get correct normals texture in deferred
+ }
+
+ OutputEffectTo Output => debugMode != DebugMode.Disabled ? OutputEffectTo.Screen : output;
+
+ static class Pass
+ {
+ public const int Copy = 0;
+ public const int Composite = 1;
+ }
+ static class ShaderProperties
+ {
+ public static int mainTex = Shader.PropertyToID("_MainTex");
+ public static int tempTex = Shader.PropertyToID("_TempTex");
+ public static int uvTransform = Shader.PropertyToID("_UVTransform");
+ public static int inputTexelSize = Shader.PropertyToID("_Input_TexelSize");
+ public static int uvToView = Shader.PropertyToID("_UVToView");
+ public static int worldToCameraMatrix = Shader.PropertyToID("_WorldToCameraMatrix");
+
+ public static int effectIntensity = Shader.PropertyToID("_EffectIntensity");
+ public static int distanceFade = Shader.PropertyToID("_DistanceFade");
+
+ public static int curvaturePixelRadius = Shader.PropertyToID("_CurvaturePixelRadius");
+ public static int curvatureRidge = Shader.PropertyToID("_CurvatureBrights");
+ public static int curvatureValley = Shader.PropertyToID("_CurvatureDarks");
+
+ public static int cavityWorldRadius = Shader.PropertyToID("_CavityWorldRadius");
+ public static int cavityRidge = Shader.PropertyToID("_CavityBrights");
+ public static int cavityValley = Shader.PropertyToID("_CavityDarks");
+
+ public static int globalSSCCTexture = Shader.PropertyToID("_SSCCTexture");
+ }
+
+ Material material;
+ Camera ssccCamera;
+ CommandBuffer cmdBuffer;
+ int width;
+ int height;
+ bool stereoActive;
+ XRSettings.StereoRenderingMode stereoRenderingMode;
+ int screenWidth;
+ int screenHeight;
+
+ CameraEvent cameraEvent => Output == OutputEffectTo.Screen ? CameraEvent.BeforeImageEffectsOpaque : CameraEvent.BeforeForwardOpaque;
+ CameraEvent[] possibleCameraEvents = new[] { CameraEvent.BeforeImageEffectsOpaque, CameraEvent.BeforeForwardOpaque };
+
+ Mesh fullscreenTriangle
+ {
+ get
+ {
+ if (m_FullscreenTriangle != null) return m_FullscreenTriangle;
+ m_FullscreenTriangle = new Mesh { name = "Fullscreen Triangle" };
+ m_FullscreenTriangle.SetVertices(new List { new Vector3(-1f, -1f, 0f), new Vector3(-1f, 3f, 0f), new Vector3(3f, -1f, 0f) });
+ m_FullscreenTriangle.SetIndices(new[] { 0, 1, 2 }, MeshTopology.Triangles, 0, false);
+ m_FullscreenTriangle.UploadMeshData(false);
+ return m_FullscreenTriangle;
+ }
+ }
+
+ bool isCommandBufferDirty
+ {
+ get
+ {
+ if (m_IsCommandBufferDirty || m_PreviousDebugMode != debugMode || m_PreviousWidth != width || m_PreviousHeight != height || m_PreviousRenderingPath != ssccCamera.actualRenderingPath
+ || m_PreviousOutputEffectTo != Output || m_PreviousCameraEvent != cameraEvent)
+ {
+ m_PreviousDebugMode = debugMode; m_PreviousWidth = width; m_PreviousHeight = height; m_PreviousRenderingPath = ssccCamera.actualRenderingPath;
+ m_PreviousOutputEffectTo = Output; m_PreviousCameraEvent = cameraEvent;
+ return true;
+ }
+ return false;
+ }
+ set
+ {
+ m_IsCommandBufferDirty = value;
+ }
+ }
+
+ RenderTextureDescriptor m_sourceDescriptor;
+ bool m_IsCommandBufferDirty;
+ Mesh m_FullscreenTriangle;
+ DebugMode? m_PreviousDebugMode;
+ int m_PreviousWidth;
+ int m_PreviousHeight;
+ RenderingPath m_PreviousRenderingPath;
+ OutputEffectTo m_PreviousOutputEffectTo;
+ CameraEvent m_PreviousCameraEvent;
+
+ static RenderTextureFormat defaultHDRRenderTextureFormat
+ {
+ get
+ {
+ #if UNITY_ANDROID || UNITY_IPHONE || UNITY_TVOS || UNITY_SWITCH || UNITY_EDITOR
+ RenderTextureFormat format = RenderTextureFormat.RGB111110Float;
+ #if UNITY_EDITOR
+ var target = EditorUserBuildSettings.activeBuildTarget;
+ if (target != BuildTarget.Android && target != BuildTarget.iOS && target != BuildTarget.tvOS && target != BuildTarget.Switch)
+ return RenderTextureFormat.DefaultHDR;
+ #endif
+ if (SystemInfo.SupportsRenderTextureFormat(format))
+ return format;
+ #endif
+ return RenderTextureFormat.DefaultHDR;
+ }
+ }
+ RenderTextureFormat sourceFormat { get { return ssccCamera.allowHDR ? defaultHDRRenderTextureFormat : RenderTextureFormat.Default; } }
+ static RenderTextureFormat colorFormat { get { return SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBHalf) ? RenderTextureFormat.ARGBHalf : RenderTextureFormat.Default; } }
+
+ void OnEnable()
+ {
+ if (!SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.Depth))
+ {
+ Debug.LogWarning("SSCC shader is not supported on this platform.");
+ this.enabled = false;
+ return;
+ }
+
+ if (ssccShader == null) ssccShader = Shader.Find("Hidden/SSCC");
+ if (ssccShader == null)
+ {
+ Debug.LogError("SSCC shader was not found...");
+ return;
+ }
+
+ if (!ssccShader.isSupported)
+ {
+ Debug.LogWarning("SSCC shader is not supported on this platform.");
+ this.enabled = false;
+ return;
+ }
+
+ Initialize();
+ }
+
+ void OnDisable()
+ {
+ ClearCommandBuffer(cmdBuffer);
+
+ if (material != null)
+ DestroyImmediate(material);
+ if (fullscreenTriangle != null)
+ DestroyImmediate(fullscreenTriangle);
+ }
+
+ void OnPreRender()
+ {
+ if (ssccShader == null || ssccCamera == null) return;
+
+ FetchRenderParameters();
+ CheckParameters();
+ UpdateMaterialProperties();
+ UpdateShaderKeywords();
+
+ if (isCommandBufferDirty)
+ {
+ ClearCommandBuffer(cmdBuffer);
+ BuildCommandBuffer(cmdBuffer);
+ ssccCamera.AddCommandBuffer(cameraEvent, cmdBuffer);
+ isCommandBufferDirty = false;
+ }
+ }
+
+ void OnValidate()
+ {
+ if (ssccShader == null || ssccCamera == null) return;
+
+ CheckParameters();
+ }
+
+ void Initialize()
+ {
+ m_sourceDescriptor = new RenderTextureDescriptor(0, 0);
+
+ ssccCamera = GetComponent();
+ ssccCamera.forceIntoRenderTexture = true;
+
+ material = new Material(ssccShader);
+ material.hideFlags = HideFlags.HideAndDontSave;
+
+ cmdBuffer = new CommandBuffer { name = "SSCC" };
+ isCommandBufferDirty = true;
+ }
+
+ void FetchRenderParameters()
+ {
+ #if !UNITY_SWITCH && ENABLE_VR
+ if (ssccCamera.stereoEnabled)
+ {
+ var xrDesc = XRSettings.eyeTextureDesc;
+ stereoRenderingMode = XRSettings.StereoRenderingMode.SinglePass;
+
+ if (XRSettings.stereoRenderingMode == XRSettings.StereoRenderingMode.MultiPass)
+ stereoRenderingMode = XRSettings.StereoRenderingMode.MultiPass;
+
+ #if UNITY_STANDALONE || UNITY_EDITOR || UNITY_PS4
+ if (xrDesc.dimension == TextureDimension.Tex2DArray)
+ stereoRenderingMode = XRSettings.StereoRenderingMode.SinglePassInstanced;
+ #endif
+
+ if (stereoRenderingMode == XRSettings.StereoRenderingMode.SinglePass)
+ {
+ //xrDesc.width /= 2;
+ xrDesc.vrUsage = VRTextureUsage.None;
+ }
+
+ width = xrDesc.width;
+ height = xrDesc.height;
+ m_sourceDescriptor = xrDesc;
+
+ screenWidth = XRSettings.eyeTextureWidth;
+ screenHeight = XRSettings.eyeTextureHeight;
+
+ if (stereoRenderingMode == XRSettings.StereoRenderingMode.SinglePass)
+ screenWidth /= 2;
+
+ stereoActive = true;
+ }
+ else
+ #endif
+ {
+ width = ssccCamera.pixelWidth;
+ height = ssccCamera.pixelHeight;
+ m_sourceDescriptor.width = width;
+ m_sourceDescriptor.height = height;
+ screenWidth = width;
+ screenHeight = height;
+ stereoActive = false;
+ }
+
+ }
+
+ void ClearCommandBuffer(CommandBuffer cmd)
+ {
+ if (cmd != null)
+ {
+ //if (ssccCamera != null) ssccCamera.RemoveCommandBuffer(cameraEvent, cmd);
+ if (ssccCamera != null) foreach (var camEvent in possibleCameraEvents) ssccCamera.RemoveCommandBuffer(camEvent, cmd);
+ cmd.Clear();
+ }
+ }
+
+ void BuildCommandBuffer(CommandBuffer cmd)
+ {
+ if (Output == OutputEffectTo._SSCCTexture)
+ {
+ cmd.ReleaseTemporaryRT(ShaderProperties.globalSSCCTexture);
+ //GetScreenSpaceTemporaryRT(cmd, ShaderProperties.globalSSCCTexture, colorFormat: sourceFormat);
+ cmd.GetTemporaryRT(ShaderProperties.globalSSCCTexture, width, height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGBHalf);
+ cmd.SetGlobalTexture(ShaderProperties.globalSSCCTexture, new RenderTargetIdentifier(ShaderProperties.globalSSCCTexture, 0, CubemapFace.Unknown, -1));
+ }
+ else
+ {
+ cmd.SetGlobalTexture(ShaderProperties.globalSSCCTexture, BuiltinRenderTextureType.None);
+ GetScreenSpaceTemporaryRT(cmd, ShaderProperties.tempTex, colorFormat: sourceFormat);
+ if (stereoActive && ssccCamera.actualRenderingPath != RenderingPath.DeferredShading)
+ cmd.Blit(BuiltinRenderTextureType.CameraTarget, ShaderProperties.tempTex);
+ else
+ BlitFullscreenTriangle(cmd, BuiltinRenderTextureType.CameraTarget, ShaderProperties.tempTex, material, Pass.Copy);
+ }
+
+ cmd.SetGlobalVector(ShaderProperties.uvTransform, SystemInfo.graphicsUVStartsAtTop ? new Vector4(1f, -1f, 0f, 1f) : new Vector4(1f, 1f, 0f, 0f));
+
+ if (Output == OutputEffectTo.Screen)
+ BlitFullscreenTriangle(cmd, ShaderProperties.tempTex, BuiltinRenderTextureType.CameraTarget, material, Pass.Composite);
+ else
+ BlitFullscreenTriangle(cmd, ShaderProperties.globalSSCCTexture, material, Pass.Composite);
+
+ if (Output == OutputEffectTo.Screen)
+ cmd.ReleaseTemporaryRT(ShaderProperties.tempTex);
+ }
+
+ void UpdateMaterialProperties()
+ {
+ float tanHalfFovY = Mathf.Tan(0.5f * ssccCamera.fieldOfView * Mathf.Deg2Rad);
+ float invFocalLenX = 1.0f / (1.0f / tanHalfFovY * (screenHeight / (float)screenWidth));
+ float invFocalLenY = 1.0f / (1.0f / tanHalfFovY);
+
+ material.SetVector(ShaderProperties.inputTexelSize, new Vector4(1f / width, 1f / height, width, height));
+ material.SetVector(ShaderProperties.uvToView, new Vector4(2.0f * invFocalLenX, -2.0f * invFocalLenY, -1.0f * invFocalLenX, 1.0f * invFocalLenY));
+ material.SetMatrix(ShaderProperties.worldToCameraMatrix, ssccCamera.worldToCameraMatrix);
+
+ material.SetFloat(ShaderProperties.effectIntensity, effectIntensity);
+ material.SetFloat(ShaderProperties.distanceFade, distanceFade);
+
+ material.SetFloat(ShaderProperties.curvaturePixelRadius, new float[] { 0f, 0.5f, 1f, 1.5f, 2.5f }[curvaturePixelRadius]);
+ material.SetFloat(ShaderProperties.curvatureRidge, curvatureBrights == 0f ? 999f : (5f - curvatureBrights));
+ material.SetFloat(ShaderProperties.curvatureValley, curvatureDarks == 0f ? 999f : (5f - curvatureDarks));
+
+ material.SetFloat(ShaderProperties.cavityWorldRadius, cavityRadius);
+ material.SetFloat(ShaderProperties.cavityRidge, cavityBrights * 2f);
+ material.SetFloat(ShaderProperties.cavityValley, cavityDarks * 2f);
+ }
+
+ void UpdateShaderKeywords()
+ {
+ material.shaderKeywords = new string[]
+ {
+ ssccCamera.orthographic ? "ORTHOGRAPHIC_PROJECTION" : "__",
+ debugMode == DebugMode.EffectOnly ? "DEBUG_EFFECT" : debugMode == DebugMode.ViewNormals ? "DEBUG_NORMALS" : "__",
+ normalsSource == PerPixelNormals.Camera ? "NORMALS_CAMERA" : normalsSource == PerPixelNormals.ReconstructedFromDepth ? "NORMALS_RECONSTRUCT" : "__",
+ cavitySamples == CavitySamples.Low6 ? "CAVITY_SAMPLES_6" : cavitySamples == CavitySamples.Medium8 ? "CAVITY_SAMPLES_8" : cavitySamples == CavitySamples.High12 ? "CAVITY_SAMPLES_12" : "",
+ saturateCavity ? "SATURATE_CAVITY" : "__",
+ Output == OutputEffectTo._SSCCTexture ? "OUTPUT_TO_TEXTURE" : "__"
+ };
+ }
+
+
+
+ //-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+ RenderTextureDescriptor GetDefaultDescriptor(int depthBufferBits = 0, RenderTextureFormat colorFormat = RenderTextureFormat.Default, RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default)
+ {
+ var modifiedDesc = new RenderTextureDescriptor(m_sourceDescriptor.width, m_sourceDescriptor.height, m_sourceDescriptor.colorFormat, depthBufferBits);
+ modifiedDesc.dimension = m_sourceDescriptor.dimension;
+ modifiedDesc.volumeDepth = m_sourceDescriptor.volumeDepth;
+ modifiedDesc.vrUsage = m_sourceDescriptor.vrUsage;
+ modifiedDesc.msaaSamples = m_sourceDescriptor.msaaSamples;
+ modifiedDesc.memoryless = m_sourceDescriptor.memoryless;
+
+ modifiedDesc.useMipMap = m_sourceDescriptor.useMipMap;
+ modifiedDesc.autoGenerateMips = m_sourceDescriptor.autoGenerateMips;
+ modifiedDesc.enableRandomWrite = m_sourceDescriptor.enableRandomWrite;
+ modifiedDesc.shadowSamplingMode = m_sourceDescriptor.shadowSamplingMode;
+
+ if (ssccCamera.allowDynamicResolution)
+ modifiedDesc.useDynamicScale = true; //IF YOU ARE GETTING AN ERROR HERE, UNFORTUNATELY YOUR UNITY VERSION IS TOO LOW FOR THIS ASSET
+
+ if (colorFormat != RenderTextureFormat.Default)
+ modifiedDesc.colorFormat = colorFormat;
+
+ if (readWrite == RenderTextureReadWrite.sRGB)
+ modifiedDesc.sRGB = true;
+ else if (readWrite == RenderTextureReadWrite.Linear)
+ modifiedDesc.sRGB = false;
+ else if (readWrite == RenderTextureReadWrite.Default)
+ modifiedDesc.sRGB = QualitySettings.activeColorSpace == ColorSpace.Linear;
+
+ return modifiedDesc;
+ }
+
+ RenderTexture GetScreenSpaceRT(int depthBufferBits = 0, RenderTextureFormat colorFormat = RenderTextureFormat.Default, RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default,
+ FilterMode filter = FilterMode.Bilinear, int widthOverride = 0, int heightOverride = 0)
+ {
+ var desc = GetDefaultDescriptor(depthBufferBits, colorFormat, readWrite);
+ if (widthOverride > 0)
+ desc.width = widthOverride;
+ if (heightOverride > 0)
+ desc.height = heightOverride;
+
+ //intermediates in VR are unchanged
+ if (stereoActive && desc.dimension == TextureDimension.Tex2DArray)
+ desc.dimension = TextureDimension.Tex2D;
+
+ var rt = new RenderTexture(desc);
+ rt.filterMode = filter;
+ return rt;
+ }
+
+ void GetScreenSpaceTemporaryRT(CommandBuffer cmd, int nameID,
+ int depthBufferBits = 0, RenderTextureFormat colorFormat = RenderTextureFormat.Default, RenderTextureReadWrite readWrite = RenderTextureReadWrite.Default,
+ FilterMode filter = FilterMode.Bilinear, int widthOverride = 0, int heightOverride = 0)
+ {
+ var desc = GetDefaultDescriptor(depthBufferBits, colorFormat, readWrite);
+ if (widthOverride > 0)
+ desc.width = widthOverride;
+ if (heightOverride > 0)
+ desc.height = heightOverride;
+
+ //intermediates in VR are unchanged
+ if (stereoActive && desc.dimension == TextureDimension.Tex2DArray)
+ desc.dimension = TextureDimension.Tex2D;
+
+ cmd.GetTemporaryRT(nameID, desc, filter);
+ }
+
+ void BlitFullscreenTriangle(CommandBuffer cmd, RenderTargetIdentifier source, RenderTargetIdentifier destination, Material material, int pass = 0)
+ {
+ cmd.SetGlobalTexture(ShaderProperties.mainTex, source);
+ cmd.SetRenderTarget(destination);
+ cmd.DrawMesh(fullscreenTriangle, Matrix4x4.identity, material, 0, pass);
+ }
+
+ void BlitFullscreenTriangle(CommandBuffer cmd, RenderTargetIdentifier destination, Material material, int pass = 0)
+ {
+ cmd.SetRenderTarget(destination);
+ cmd.DrawMesh(fullscreenTriangle, Matrix4x4.identity, material, 0, pass);
+ }
+
+ void BlitFullscreenTriangleWithClear(CommandBuffer cmd, RenderTargetIdentifier source, RenderTargetIdentifier destination, Material material, Color clearColor, int pass = 0)
+ {
+ cmd.SetGlobalTexture(ShaderProperties.mainTex, source);
+ cmd.SetRenderTarget(destination);
+ cmd.ClearRenderTarget(false, true, clearColor);
+ cmd.DrawMesh(fullscreenTriangle, Matrix4x4.identity, material, 0, pass);
+ }
+
+ }
+}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.cs.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.cs.meta
new file mode 100644
index 000000000..1081de1ce
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Runtime/SSCC.cs.meta
@@ -0,0 +1,19 @@
+fileFormatVersion: 2
+guid: 1d35af20b508d5546ba80581bc1b979a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences:
+ - ssccShader: {fileID: 4800000, guid: 89ec5ce1bd95ed946a65b649164a9c1d, type: 3}
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/Runtime/SSCC.cs
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP.meta
new file mode 100644
index 000000000..0abf8087c
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b2b5c4b3b11cf664f92d82ad1f52ea3f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/HDRP.unitypackage.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/HDRP.unitypackage.meta
new file mode 100644
index 000000000..359db9b46
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/HDRP.unitypackage.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 7dd73fb2fec8fb642be983cf08cfd6b1
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/SRP/HDRP.unitypackage
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/README HDRP & URP.txt b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/README HDRP & URP.txt
new file mode 100644
index 000000000..a99e8713c
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/README HDRP & URP.txt
@@ -0,0 +1,16 @@
+From README.txt:
+...
+
+USAGE:
+
+URP:
+1) Make sure URP v7.1.8+ is installed, import URP.unitypackage by double clicking it.
+2) Your URP Renderer asset > Renderer Features > add SSCCRenderFeature.
+3) Make sure your UniversalRenderPipelineAsset's > Depth Texture is on. Or locally toggle in on in your camera.
+4) Make sure your camera's > Post Processing is on.
+5) Effect will now be enabled by default. You can add SSCC to your Post Process Volume to adjust settings. To disable the effect set Effect Intensity to zero. Done.
+
+HDRP:
+1) Make sure HDRP v7.1.8+ is installed, import HDRP.unitypackage by double clicking it.
+2) Project Settings > HDRP Default Settings > Custom Post Process Orders (at the bottom) > After Opaque And Sky > add SSCC custom post process.
+3) Effect will now be enabled by default. You can add SSCC to your Post Process Volume to adjust settings. To disable the effect set Effect Intensity to zero. Done.
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/README HDRP & URP.txt.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/README HDRP & URP.txt.meta
new file mode 100644
index 000000000..d13b71cdf
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/README HDRP & URP.txt.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: a4f2c4eda6a6d854386932e5059c70f4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/SRP/README HDRP & URP.txt
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP.meta
new file mode 100755
index 000000000..22abd4f48
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1cc168b4bbd03cb409a2574f94bffca0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP.unitypackage.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP.unitypackage.meta
new file mode 100644
index 000000000..2562dbcb6
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP.unitypackage.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 1c45d0aac2834f14db81b11cdbcec705
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/SRP/URP.unitypackage
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP.meta
new file mode 100755
index 000000000..f11475a93
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ceb044e4471ba614b990f738cc991e8d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/DemoVolume_URP.asset b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/DemoVolume_URP.asset
new file mode 100644
index 000000000..ca1e71764
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/DemoVolume_URP.asset
@@ -0,0 +1,68 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+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: d7fd9488000d3734a9e00ee676215985, type: 3}
+ m_Name: DemoVolume_URP
+ m_EditorClassIdentifier:
+ components:
+ - {fileID: 6698968451673211470}
+--- !u!114 &6698968451673211470
+MonoBehaviour:
+ m_ObjectHideFlags: 3
+ 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: d468b943de483f641a8eb80fcd52e584, type: 3}
+ m_Name: SSCC
+ m_EditorClassIdentifier:
+ active: 1
+ effectIntensity:
+ m_OverrideState: 1
+ m_Value: 1
+ distanceFade:
+ m_OverrideState: 1
+ m_Value: 0
+ curvaturePixelRadius:
+ m_OverrideState: 1
+ m_Value: 2
+ curvatureBrights:
+ m_OverrideState: 1
+ m_Value: 2
+ curvatureDarks:
+ m_OverrideState: 1
+ m_Value: 3
+ cavitySamples:
+ m_OverrideState: 1
+ m_Value: 2
+ saturateCavity:
+ m_OverrideState: 1
+ m_Value: 1
+ cavityRadius:
+ m_OverrideState: 1
+ m_Value: 0.25
+ cavityBrights:
+ m_OverrideState: 1
+ m_Value: 3
+ cavityDarks:
+ m_OverrideState: 1
+ m_Value: 2
+ normalsSource:
+ m_OverrideState: 1
+ m_Value: 1
+ debugMode:
+ m_OverrideState: 1
+ m_Value: 0
+ output:
+ m_OverrideState: 1
+ m_Value: 0
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/DemoVolume_URP.asset.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/DemoVolume_URP.asset.meta
new file mode 100644
index 000000000..d4c715448
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/DemoVolume_URP.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3844da643c9d844259d02c8fa266eae8
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Demo_URP.unity b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Demo_URP.unity
new file mode 100644
index 000000000..f72264a56
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Demo_URP.unity
@@ -0,0 +1,1332 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.61, g: 0.61, b: 0.61, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 1
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 705507994}
+ m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 0
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 500
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 2
+ m_PVRDenoiserTypeDirect: 0
+ m_PVRDenoiserTypeIndirect: 0
+ m_PVRDenoiserTypeAO: 0
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 0
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 112000000, guid: 004e932bd620c4f94ab9c59f47549a32,
+ type: 2}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &62044222
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 62044226}
+ - component: {fileID: 62044225}
+ - component: {fileID: 62044224}
+ - component: {fileID: 62044223}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &62044223
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &62044224
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &62044225
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &62044226
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 62044222}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.75, y: 0, z: -0.5}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 8
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &320814834
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 320814838}
+ - component: {fileID: 320814837}
+ - component: {fileID: 320814836}
+ - component: {fileID: 320814835}
+ m_Layer: 5
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &320814835
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 320814834}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &320814836
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 320814834}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &320814837
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 320814834}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_AdditionalShaderChannelsFlag: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &320814838
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 320814834}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 547490583}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!1 &515219615
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 515219619}
+ - component: {fileID: 515219618}
+ - component: {fileID: 515219617}
+ - component: {fileID: 515219616}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &515219616
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &515219617
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &515219618
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &515219619
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 515219615}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.25, y: 2, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &547490582
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 547490583}
+ - component: {fileID: 547490585}
+ - component: {fileID: 547490584}
+ m_Layer: 5
+ m_Name: Help Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &547490583
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 547490582}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 320814838}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 20, y: -20}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 1}
+--- !u!114 &547490584
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 547490582}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 25
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 1
+ m_LineSpacing: 1
+ m_Text: "Your URP Renderer asset > Renderer Features > add SSCCRenderFeature.\n\nEffect
+ will now be enabled by default. You can add SSCC to your Post Process Volume
+ to adjust settings. To disable SSCC set it's Effect Intensity to zero.\nIf you
+ want the effect to only affect certain objects, set SSCC Output to _SSCCTexture
+ and import URP2020/2021 from \"_SSCCTexture Examples\", use that shader.\nIf
+ the effect is not showing up in Game View, make sure Post Processing and Depth
+ Texture are enabled on your Camera. \nIf that doesn't help, try right click \"Screen
+ Space Cavity Curvature\" -> \"Reimport\". If all else fails, email me at jollytheorygames@gmail.com"
+--- !u!222 &547490585
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 547490582}
+ m_CullTransparentMesh: 0
+--- !u!1 &705507993
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 705507995}
+ - component: {fileID: 705507994}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &705507994
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_Enabled: 1
+ serializedVersion: 10
+ m_Type: 1
+ m_Shape: 0
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Intensity: 1.5
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 0.311
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &705507995
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &793684285
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 793684289}
+ - component: {fileID: 793684288}
+ - component: {fileID: 793684287}
+ - component: {fileID: 793684286}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &793684286
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &793684287
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &793684288
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &793684289
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 793684285}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.75, y: 1, z: -0.25}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 7
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &963194225
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 963194228}
+ - component: {fileID: 963194227}
+ - component: {fileID: 963194226}
+ - component: {fileID: 963194229}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &963194226
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+--- !u!20 &963194227
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.4745098, g: 0.4745098, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: 3
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_AllowMSAA: 0
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 1
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &963194228
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_LocalRotation: {x: -0.3012502, y: -0.33482242, z: 0.113903515, w: -0.8855328}
+ m_LocalPosition: {x: -2.1670876, y: 3.896474, z: -2.8583183}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &963194229
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_RenderShadows: 1
+ m_RequiresDepthTextureOption: 1
+ m_RequiresOpaqueTextureOption: 2
+ m_CameraType: 0
+ m_Cameras: []
+ m_RendererIndex: -1
+ m_VolumeLayerMask:
+ serializedVersion: 2
+ m_Bits: 1
+ m_VolumeTrigger: {fileID: 0}
+ m_RenderPostProcessing: 1
+ m_Antialiasing: 0
+ m_AntialiasingQuality: 2
+ m_StopNaN: 0
+ m_Dithering: 0
+ m_ClearDepth: 1
+ m_AllowXRRendering: 1
+ m_RequiresDepthTexture: 0
+ m_RequiresColorTexture: 0
+ m_Version: 2
+--- !u!1 &1183939126
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1183939130}
+ - component: {fileID: 1183939129}
+ - component: {fileID: 1183939128}
+ - component: {fileID: 1183939127}
+ m_Layer: 0
+ m_Name: 'Capsule '
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!136 &1183939127
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1183939128
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1183939129
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1183939130
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1183939126}
+ m_LocalRotation: {x: -0, y: -0, z: -0.3663209, w: 0.9304886}
+ m_LocalPosition: {x: 0.017, y: 0.018, z: -1.963}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 10
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: -42.978}
+--- !u!1 &1211703946
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1211703950}
+ - component: {fileID: 1211703949}
+ - component: {fileID: 1211703948}
+ - component: {fileID: 1211703947}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &1211703947
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1211703948
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1211703949
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1211703950
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1211703946}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.25, y: 1, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1401428545
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1401428547}
+ - component: {fileID: 1401428546}
+ m_Layer: 0
+ m_Name: Global Volume
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1401428546
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1401428545}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ isGlobal: 1
+ priority: 0
+ blendDistance: 0
+ weight: 1
+ sharedProfile: {fileID: 11400000, guid: 3844da643c9d844259d02c8fa266eae8, type: 2}
+--- !u!4 &1401428547
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1401428545}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 6.6492877, y: -5.671105, z: -8.536943}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 11
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1613233554
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1613233558}
+ - component: {fileID: 1613233557}
+ - component: {fileID: 1613233556}
+ - component: {fileID: 1613233555}
+ m_Layer: 0
+ m_Name: Capsule
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!136 &1613233555
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1613233556
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1613233557
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1613233558
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1613233554}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -1.57}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 9
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1796420149
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1796420153}
+ - component: {fileID: 1796420152}
+ - component: {fileID: 1796420151}
+ - component: {fileID: 1796420150}
+ m_Layer: 0
+ m_Name: Plane
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!64 &1796420150
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &1796420151
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1796420152
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1796420153
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796420149}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: -0.5, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1802322463
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1802322467}
+ - component: {fileID: 1802322466}
+ - component: {fileID: 1802322465}
+ - component: {fileID: 1802322464}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &1802322464
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1802322465
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7d476d19bc658e34784926e0220faf57, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1802322466
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1802322467
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1802322463}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.75, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Demo_URP.unity.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Demo_URP.unity.meta
new file mode 100755
index 000000000..ea946d617
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Demo_URP.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d16d1fb8798b3ad40a771b9f3856c197
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Grey_URP.mat b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Grey_URP.mat
new file mode 100644
index 000000000..ed3d61172
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Grey_URP.mat
@@ -0,0 +1,361 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &-9139891969420624701
+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: 7
+--- !u!114 &-3737353351393463922
+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: da692e001514ec24dbc4cca1949ff7e8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ version: 2
+--- !u!21 &2100000
+Material:
+ serializedVersion: 8
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Grey_URP
+ m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
+ m_Parent: {fileID: 0}
+ m_ModifiedSerializedProperties: 0
+ m_ValidKeywords: []
+ m_InvalidKeywords: []
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap:
+ RenderType: Opaque
+ disabledShaderPasses:
+ - DistortionVectors
+ - MOTIONVECTORS
+ - TransparentDepthPrepass
+ - TransparentDepthPostpass
+ - TransparentBackface
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _AnisotropyMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BaseColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BaseMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BentNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BentNormalMapOS:
+ 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}
+ - _CoatMaskMap:
+ 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}
+ - _DetailMap:
+ 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}
+ - _DistortionVectorMap:
+ 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}
+ - _EmissiveColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _HeightMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _IridescenceMaskMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _IridescenceThicknessMap:
+ 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}
+ - _MaskMap:
+ 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}
+ - _NormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _NormalMapOS:
+ 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}
+ - _SpecularColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _SubsurfaceMaskMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _TangentMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _TangentMapOS:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ThicknessMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _TransmittanceColorMap:
+ 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_Ints: []
+ m_Floats:
+ - _AORemapMax: 1
+ - _AORemapMin: 0
+ - _ATDistance: 1
+ - _AddPrecomputedVelocity: 0
+ - _AlbedoAffectEmissive: 0
+ - _AlphaClip: 0
+ - _AlphaCutoff: 0.5
+ - _AlphaCutoffEnable: 0
+ - _AlphaCutoffPostpass: 0.5
+ - _AlphaCutoffPrepass: 0.5
+ - _AlphaCutoffShadow: 0.5
+ - _AlphaDstBlend: 0
+ - _AlphaSrcBlend: 1
+ - _AlphaToMask: 0
+ - _Anisotropy: 0
+ - _Blend: 0
+ - _BlendMode: 0
+ - _BlendModePreserveSpecular: 1
+ - _BumpScale: 1
+ - _CavityMultiplier: 1
+ - _ClearCoatMask: 0
+ - _ClearCoatSmoothness: 0
+ - _CoatMask: 0
+ - _Cull: 2
+ - _CullMode: 2
+ - _CullModeForward: 2
+ - _CurvatureMultiplier: 1
+ - _Cutoff: 0.5
+ - _DepthOffsetEnable: 0
+ - _DetailAlbedoMapScale: 1
+ - _DetailAlbedoScale: 1
+ - _DetailNormalMapScale: 1
+ - _DetailNormalScale: 1
+ - _DetailSmoothnessScale: 1
+ - _DiffusionProfile: 0
+ - _DiffusionProfileHash: 0
+ - _DisplacementLockObjectScale: 1
+ - _DisplacementLockTilingScale: 1
+ - _DisplacementMode: 0
+ - _DistortionBlendMode: 0
+ - _DistortionBlurBlendMode: 0
+ - _DistortionBlurDstBlend: 1
+ - _DistortionBlurRemapMax: 1
+ - _DistortionBlurRemapMin: 0
+ - _DistortionBlurScale: 1
+ - _DistortionBlurSrcBlend: 1
+ - _DistortionDepthTest: 1
+ - _DistortionDstBlend: 1
+ - _DistortionEnable: 0
+ - _DistortionScale: 1
+ - _DistortionSrcBlend: 1
+ - _DistortionVectorBias: -1
+ - _DistortionVectorScale: 2
+ - _DoubleSidedEnable: 0
+ - _DoubleSidedNormalMode: 1
+ - _DstBlend: 0
+ - _DstBlendAlpha: 0
+ - _EmissiveColorMode: 1
+ - _EmissiveExposureWeight: 1
+ - _EmissiveIntensity: 1
+ - _EmissiveIntensityUnit: 0
+ - _EnableBlendModePreserveSpecularLighting: 1
+ - _EnableFogOnTransparent: 1
+ - _EnableGeometricSpecularAA: 0
+ - _EnergyConservingSpecularColor: 1
+ - _EnvironmentReflections: 1
+ - _GlossMapScale: 1
+ - _Glossiness: 0.261
+ - _GlossyReflections: 1
+ - _HeightAmplitude: 0.02
+ - _HeightCenter: 0.5
+ - _HeightMapParametrization: 0
+ - _HeightMax: 1
+ - _HeightMin: -1
+ - _HeightOffset: 0
+ - _HeightPoMAmplitude: 2
+ - _HeightTessAmplitude: 2
+ - _HeightTessCenter: 0.5
+ - _InvTilingScale: 1
+ - _Ior: 1.5
+ - _IridescenceMask: 1
+ - _IridescenceThickness: 1
+ - _LinkDetailsWithBase: 1
+ - _MaterialID: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _NormalMapSpace: 0
+ - _NormalScale: 1
+ - _OcclusionStrength: 1
+ - _PPDLodThreshold: 5
+ - _PPDMaxSamples: 15
+ - _PPDMinSamples: 5
+ - _PPDPrimitiveLength: 1
+ - _PPDPrimitiveWidth: 1
+ - _Parallax: 0.02
+ - _QueueOffset: 0
+ - _ReceiveShadows: 1
+ - _ReceivesSSR: 1
+ - _RefractionModel: 0
+ - _SSRefractionProjectionModel: 0
+ - _Smoothness: 0.261
+ - _SmoothnessRemapMax: 1
+ - _SmoothnessRemapMin: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecularAAScreenSpaceVariance: 0.1
+ - _SpecularAAThreshold: 0.2
+ - _SpecularHighlights: 1
+ - _SpecularOcclusionMode: 1
+ - _SrcBlend: 1
+ - _SrcBlendAlpha: 1
+ - _StencilRef: 0
+ - _StencilRefDepth: 8
+ - _StencilRefDistortionVec: 4
+ - _StencilRefGBuffer: 10
+ - _StencilRefMV: 40
+ - _StencilWriteMask: 6
+ - _StencilWriteMaskDepth: 8
+ - _StencilWriteMaskDistortionVec: 4
+ - _StencilWriteMaskGBuffer: 14
+ - _StencilWriteMaskMV: 40
+ - _SubsurfaceMask: 1
+ - _SupportDecals: 1
+ - _Surface: 0
+ - _SurfaceType: 0
+ - _TexWorldScale: 1
+ - _TexWorldScaleEmissive: 1
+ - _Thickness: 1
+ - _TransmissionEnable: 1
+ - _TransparentBackfaceEnable: 0
+ - _TransparentCullMode: 2
+ - _TransparentDepthPostpassEnable: 0
+ - _TransparentDepthPrepassEnable: 0
+ - _TransparentSortPriority: 0
+ - _TransparentWritingMotionVec: 0
+ - _TransparentZWrite: 0
+ - _UVBase: 0
+ - _UVDetail: 0
+ - _UVEmissive: 0
+ - _UVSec: 0
+ - _UseEmissiveIntensity: 0
+ - _UseShadowThreshold: 0
+ - _WorkflowMode: 1
+ - _ZTestDepthEqualForOpaque: 3
+ - _ZTestGBuffer: 4
+ - _ZTestModeDistortion: 4
+ - _ZTestTransparent: 4
+ - _ZWrite: 1
+ m_Colors:
+ - _BaseColor: {r: 0.504, g: 0.504, b: 0.504, a: 1}
+ - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0}
+ - _Color: {r: 0.504, g: 0.504, b: 0.504, a: 1}
+ - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0}
+ - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
+ - _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
+ - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1}
+ - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0}
+ - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
+ - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+ - _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
+ - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
+ - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1}
+ - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
+ - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}
+ - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0}
+ m_BuildTextureStacks: []
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Grey_URP.mat.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Grey_URP.mat.meta
new file mode 100755
index 000000000..40287485b
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Demo_URP/Grey_URP.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7d476d19bc658e34784926e0220faf57
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime.meta
new file mode 100755
index 000000000..b95bc9613
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b1c5eca1b4c8d52469ef0633cc25e44b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.Universal.Runtime.asmdef b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.Universal.Runtime.asmdef
new file mode 100755
index 000000000..1e689692f
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.Universal.Runtime.asmdef
@@ -0,0 +1,24 @@
+{
+ "name": "SSCC.Universal.Runtime",
+ "references": [
+ "GUID:df380645f10b7bc4b97d4f5eb6303d95",
+ "GUID:15fc0a57446b3144c949da3e2b9737a9"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [
+ "UNITY_2019_3_OR_NEWER"
+ ],
+ "versionDefines": [
+ {
+ "name": "com.unity.render-pipelines.universal",
+ "expression": "10.0.0-preview",
+ "define": "URP_10_0_0_OR_NEWER"
+ }
+ ],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.Universal.Runtime.asmdef.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.Universal.Runtime.asmdef.meta
new file mode 100755
index 000000000..465757c38
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.Universal.Runtime.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d677d4c7cb4775748ba9aec34639fc81
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.cs b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.cs
new file mode 100755
index 000000000..05292d3f9
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.cs
@@ -0,0 +1,80 @@
+//#define URP_10_0_0_OR_NEWER
+//#define UNITY_2021_2_OR_NEWER
+
+using System;
+using UnityEngine;
+using UnityEngine.Rendering;
+using UnityEngine.Rendering.Universal;
+
+namespace ScreenSpaceCavityCurvature.Universal
+{
+ [ExecuteInEditMode, VolumeComponentMenu("ScreenSpaceCavityCurvature")]
+ public class SSCC : VolumeComponent, IPostProcessComponent
+ {
+
+ public enum PerPixelNormals
+ {
+ ReconstructedFromDepth,
+#if URP_10_0_0_OR_NEWER
+ Camera
+#else
+ Camera_URP_VER_TOO_LOW
+#endif
+ }
+ public enum DebugMode { Disabled, EffectOnly, ViewNormals }
+ public enum CavitySamples { Low6, Medium8, High12 }
+ public enum OutputEffectTo
+ {
+ Screen,
+#if URP_10_0_0_OR_NEWER
+ [InspectorName("_SSCCTexture in shaders")] _SSCCTexture
+#else
+ [InspectorName("_SSCCTexture (URP 10+)")] _SSCCTexture
+#endif
+ }
+
+ [Serializable] public sealed class DebugModeParameter : VolumeParameter { public DebugModeParameter(DebugMode value, bool overrideState = false) : base(value, overrideState) { } }
+ [Serializable] public sealed class GetNormalsFromParameter : VolumeParameter { public GetNormalsFromParameter(PerPixelNormals value, bool overrideState = false) : base(value, overrideState) { } }
+ [Serializable] public sealed class CavitySamplesParameter : VolumeParameter { public CavitySamplesParameter(CavitySamples value, bool overrideState = false) : base(value, overrideState) { } }
+ [Serializable] public sealed class OutputParameter : VolumeParameter { public OutputParameter(OutputEffectTo value, bool overrideState = false) : base(value, overrideState) { } }
+
+ //
+ [Header("(Make sure Post Processing and Depth Texture are enabled.)")]
+ [Tooltip("Lerps the whole effect from 0 to 1.")] public ClampedFloatParameter effectIntensity = new ClampedFloatParameter(1f, 0f, 1f);
+ [Tooltip("Divides effect intensity by (depth * distanceFade).\nZero means effect doesn't fade with distance.")] public ClampedFloatParameter distanceFade = new ClampedFloatParameter(0f, 0f, 1f);
+
+ [Space(6)]
+
+ [Tooltip("The radius of curvature calculations in pixels.")] public ClampedIntParameter curvaturePixelRadius = new ClampedIntParameter(2, 0, 4);
+ [Tooltip("How bright does curvature get.")] public ClampedFloatParameter curvatureBrights = new ClampedFloatParameter(2f, 0f, 5f);
+ [Tooltip("How dark does curvature get.")] public ClampedFloatParameter curvatureDarks = new ClampedFloatParameter(3f, 0f, 5f);
+
+ [Space(6)]
+
+ [Tooltip("The amount of samples used for cavity calculation.")] public CavitySamplesParameter cavitySamples = new CavitySamplesParameter(CavitySamples.High12);
+ [Tooltip("True: uses pow() blending to make colors more saturated in bright/dark areas of cavity.\n\nFalse: uses additive blending.")] public BoolParameter saturateCavity = new BoolParameter(true);
+ [Tooltip("The radius of cavity calculations in world units.")] public ClampedFloatParameter cavityRadius = new ClampedFloatParameter(0.25f, 0f, 0.5f);
+ [Tooltip("How bright does cavity get.")] public ClampedFloatParameter cavityBrights = new ClampedFloatParameter(3f, 0f, 5f);
+ [Tooltip("How dark does cavity get.")] public ClampedFloatParameter cavityDarks = new ClampedFloatParameter(2f, 0f, 5f);
+
+ [Space(6)]
+
+ [Tooltip("Where to get normals from.")]
+#if URP_10_0_0_OR_NEWER
+ public GetNormalsFromParameter normalsSource = new GetNormalsFromParameter(PerPixelNormals.Camera);
+#else
+ public GetNormalsFromParameter normalsSource = new GetNormalsFromParameter(PerPixelNormals.ReconstructedFromDepth);
+#endif
+ [Tooltip("May be useful to check what objects contribute normals, as objects that do not contribute their normals will not contribute to the effect.")] public DebugModeParameter debugMode = new DebugModeParameter(DebugMode.Disabled);
+
+ [Space(6)]
+
+ [Tooltip("Screen: Applies the effect over the entire screen.\n\n_SSCCTexture: Instead of writing the effect to the screen, will write the effect into a global shader texture named _SSCCTexture, so you can sample it selectively in your shaders and exclude certain objects from receiving outlines etc. See \"Output To Texture Examples\" folder for example shaders.")] public OutputParameter output = new OutputParameter(OutputEffectTo.Screen);
+ //
+
+ //public bool IsActive() => true;
+ public bool IsActive() => effectIntensity.value > 0f;
+
+ public bool IsTileCompatible() => true;
+ }
+}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.cs.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.cs.meta
new file mode 100755
index 000000000..c863aec76
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCC.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d468b943de483f641a8eb80fcd52e584
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCCRendererFeature.cs b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCCRendererFeature.cs
new file mode 100755
index 000000000..69a6bbc55
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCCRendererFeature.cs
@@ -0,0 +1,329 @@
+//#define URP_10_0_0_OR_NEWER
+//#define UNITY_2021_2_OR_NEWER
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Experimental.Rendering;
+using UnityEngine.Rendering;
+using UnityEngine.Rendering.Universal;
+
+namespace ScreenSpaceCavityCurvature.Universal
+{
+
+ public class SSCCRendererFeature : ScriptableRendererFeature
+ {
+ private class SSCCRenderPass : ScriptableRenderPass
+ {
+ void CheckParameters()
+ {
+#if !URP_10_0_0_OR_NEWER
+ if (sscc.normalsSource.value == SSCC.PerPixelNormals.Camera_URP_VER_TOO_LOW)
+ {
+ sscc.normalsSource.value = SSCC.PerPixelNormals.ReconstructedFromDepth;
+ Debug.LogWarning("URP version too low for Camera based normals, only available in URP 10+ (Unity 2020+).");
+ }
+ if (sscc.output.value == SSCC.OutputEffectTo._SSCCTexture)
+ {
+ sscc.output.value = SSCC.OutputEffectTo.Screen;
+ Debug.LogWarning("URP version too low for texture output mode, only available in URP 10+ (Unity 2020+).");
+ }
+#endif
+ }
+
+ SSCC.OutputEffectTo Output => sscc.debugMode.value != SSCC.DebugMode.Disabled ? SSCC.OutputEffectTo.Screen : sscc.output.value;
+
+ public SSCC sscc;
+
+ static class Pass
+ {
+ public const int Copy = 0;
+ public const int Composite = 1;
+ }
+
+ static class ShaderProperties
+ {
+ public static int mainTex = Shader.PropertyToID("_MainTex");
+ public static int tempTex = Shader.PropertyToID("_TempTex");
+ public static int uvTransform = Shader.PropertyToID("_UVTransform");
+ public static int inputTexelSize = Shader.PropertyToID("_Input_TexelSize");
+ public static int uvToView = Shader.PropertyToID("_UVToView");
+ public static int worldToCameraMatrix = Shader.PropertyToID("_WorldToCameraMatrix");
+
+ public static int effectIntensity = Shader.PropertyToID("_EffectIntensity");
+ public static int distanceFade = Shader.PropertyToID("_DistanceFade");
+
+ public static int curvaturePixelRadius = Shader.PropertyToID("_CurvaturePixelRadius");
+ public static int curvatureRidge = Shader.PropertyToID("_CurvatureBrights");
+ public static int curvatureValley = Shader.PropertyToID("_CurvatureDarks");
+
+ public static int cavityWorldRadius = Shader.PropertyToID("_CavityWorldRadius");
+ public static int cavityRidge = Shader.PropertyToID("_CavityBrights");
+ public static int cavityValley = Shader.PropertyToID("_CavityDarks");
+
+ public static int globalSSCCTexture = Shader.PropertyToID("_SSCCTexture");
+ }
+
+ Material material { get; set; }
+ RenderTargetIdentifier source { get; set; }
+ CameraData cameraData { get; set; }
+ RenderTextureDescriptor sourceDesc { get; set; }
+
+ public void Setup(Shader shader, ScriptableRenderer renderer, RenderingData renderingData)
+ {
+ if (material == null) material = CoreUtils.CreateEngineMaterial(shader);
+
+#if !URP_10_0_0_OR_NEWER
+ source = renderer.cameraColorTarget;
+ cameraData = renderingData.cameraData;
+
+ FetchVolumeComponent();
+ renderPassEvent = Output == SSCC.OutputEffectTo.Screen ? RenderPassEvent.BeforeRenderingTransparents : RenderPassEvent.BeforeRenderingOpaques;
+#endif
+ }
+
+#if URP_10_0_0_OR_NEWER
+ #if UNITY_2022_1_OR_NEWER
+ static RTHandle noneRTHandle = RTHandles.Alloc(BuiltinRenderTextureType.None);
+ #endif
+ public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
+ {
+ #if UNITY_2022_1_OR_NEWER
+ source = renderingData.cameraData.renderer.cameraColorTargetHandle; //implicit conversion hopefully will exist for forseable future
+ #else
+ source = renderingData.cameraData.renderer.cameraColorTarget;
+ #endif
+ cameraData = renderingData.cameraData;
+
+ FetchVolumeComponent();
+
+ var passInput = ScriptableRenderPassInput.Depth;
+ if (sscc.normalsSource.value == SSCC.PerPixelNormals.Camera)
+ passInput |= ScriptableRenderPassInput.Normal;
+
+ ConfigureInput(passInput);
+
+#if UNITY_2021_2_OR_NEWER
+ ConfigureColorStoreAction(RenderBufferStoreAction.DontCare);
+#endif
+
+ renderPassEvent = Output == SSCC.OutputEffectTo.Screen ? RenderPassEvent.BeforeRenderingTransparents : RenderPassEvent.BeforeRenderingOpaques;
+
+ if (Output == SSCC.OutputEffectTo._SSCCTexture)
+ #if UNITY_2022_1_OR_NEWER
+ ConfigureTarget(noneRTHandle);
+ #else
+ ConfigureTarget(BuiltinRenderTextureType.None);
+ #endif
+ }
+#endif
+
+ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
+ {
+ if (material == null) return;
+
+ FetchVolumeComponent();
+
+ if (!sscc.IsActive()) return;
+
+ cameraTextureDescriptor.msaaSamples = 1;
+ cameraTextureDescriptor.depthBufferBits = 0;
+ sourceDesc = cameraTextureDescriptor;
+
+ CheckParameters();
+ UpdateMaterialProperties();
+ UpdateShaderKeywords();
+
+ if (Output == SSCC.OutputEffectTo._SSCCTexture)
+ #if UNITY_2022_1_OR_NEWER
+ ConfigureTarget(noneRTHandle);
+ #else
+ ConfigureTarget(BuiltinRenderTextureType.None);
+ #endif
+ }
+
+ public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
+ {
+ if (material == null)
+ {
+ Debug.LogError("SSCC material has not been correctly initialized...");
+ return;
+ }
+ if (!sscc.IsActive()) return;
+ var cmd = CommandBufferPool.Get("SSCC");
+
+ if (Output == SSCC.OutputEffectTo._SSCCTexture)
+ {
+ cmd.ReleaseTemporaryRT(ShaderProperties.globalSSCCTexture);
+ cmd.GetTemporaryRT(ShaderProperties.globalSSCCTexture, sourceDesc.width, sourceDesc.height, 0, FilterMode.Bilinear, GraphicsFormat.R16G16B16A16_SFloat/*.R32G32B32A32_SFloat*/);
+ cmd.SetGlobalTexture(ShaderProperties.globalSSCCTexture, new RenderTargetIdentifier(ShaderProperties.globalSSCCTexture, 0, CubemapFace.Unknown, -1));
+ }
+ else
+ {
+ cmd.GetTemporaryRT(ShaderProperties.tempTex, sourceDesc, FilterMode.Point);
+ BlitFullscreenMesh(cmd, source, ShaderProperties.tempTex, material, Pass.Copy);
+ }
+
+ if (Output == SSCC.OutputEffectTo.Screen)
+ BlitFullscreenMesh(cmd, ShaderProperties.tempTex, source, material, Pass.Composite);
+ else
+ BlitFullscreenMesh(cmd, ShaderProperties.globalSSCCTexture, material, Pass.Composite);
+
+ if (Output == SSCC.OutputEffectTo.Screen)
+ cmd.ReleaseTemporaryRT(ShaderProperties.tempTex);
+
+ context.ExecuteCommandBuffer(cmd);
+ CommandBufferPool.Release(cmd);
+ }
+
+ public void Cleanup()
+ {
+ CoreUtils.Destroy(material);
+ }
+
+ private void FetchVolumeComponent()
+ {
+ if (sscc == null)
+ sscc = VolumeManager.instance.stack.GetComponent();
+ }
+
+ void UpdateMaterialProperties()
+ {
+ var sourceWidth = cameraData.cameraTargetDescriptor.width;
+ var sourceHeight = cameraData.cameraTargetDescriptor.height;
+
+ float tanHalfFovY = Mathf.Tan(0.5f * cameraData.camera.fieldOfView * Mathf.Deg2Rad);
+ float invFocalLenX = 1.0f / (1.0f / tanHalfFovY * (sourceHeight / (float)sourceWidth));
+ float invFocalLenY = 1.0f / (1.0f / tanHalfFovY);
+
+ material.SetVector(ShaderProperties.inputTexelSize, new Vector4(1f / sourceWidth, 1f / sourceHeight, sourceWidth, sourceHeight));
+ material.SetVector(ShaderProperties.uvToView, new Vector4(2.0f * invFocalLenX, -2.0f * invFocalLenY, -1.0f * invFocalLenX, 1.0f * invFocalLenY));
+ material.SetMatrix(ShaderProperties.worldToCameraMatrix, cameraData.camera.worldToCameraMatrix);
+
+ material.SetFloat(ShaderProperties.effectIntensity, sscc.effectIntensity.value);
+ material.SetFloat(ShaderProperties.distanceFade, sscc.distanceFade.value);
+
+ material.SetFloat(ShaderProperties.curvaturePixelRadius, new float[] { 0f, 0.5f, 1f, 1.5f, 2.5f }[sscc.curvaturePixelRadius.value]);
+ material.SetFloat(ShaderProperties.curvatureRidge, sscc.curvatureBrights.value == 0f ? 999f : (5f - sscc.curvatureBrights.value));
+ material.SetFloat(ShaderProperties.curvatureValley, sscc.curvatureDarks.value == 0f ? 999f : (5f - sscc.curvatureDarks.value));
+
+ material.SetFloat(ShaderProperties.cavityWorldRadius, sscc.cavityRadius.value);
+ material.SetFloat(ShaderProperties.cavityRidge, sscc.cavityBrights.value * 2f);
+ material.SetFloat(ShaderProperties.cavityValley, sscc.cavityDarks.value * 2f);
+ }
+
+ void UpdateShaderKeywords()
+ {
+ material.shaderKeywords = new string[]
+ {
+ cameraData.camera.orthographic ? "ORTHOGRAPHIC_PROJECTION" : "__",
+ sscc.debugMode.value == SSCC.DebugMode.EffectOnly ? "DEBUG_EFFECT" : sscc.debugMode.value == SSCC.DebugMode.ViewNormals ? "DEBUG_NORMALS" : "__",
+ sscc.normalsSource.value == SSCC.PerPixelNormals.ReconstructedFromDepth ? "NORMALS_RECONSTRUCT" : "__",
+ sscc.cavitySamples.value == SSCC.CavitySamples.Low6 ? "CAVITY_SAMPLES_6" : sscc.cavitySamples.value == SSCC.CavitySamples.Medium8 ? "CAVITY_SAMPLES_8" : sscc.cavitySamples.value == SSCC.CavitySamples.High12 ? "CAVITY_SAMPLES_12" : "",
+ sscc.saturateCavity.value ? "SATURATE_CAVITY" : "__",
+ Output == SSCC.OutputEffectTo._SSCCTexture ? "OUTPUT_TO_TEXTURE" : "__"
+ };
+ }
+
+
+
+ //-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+ static Mesh s_FullscreenMesh = null;
+ static Mesh fullscreenMesh
+ {
+ get
+ {
+ if (s_FullscreenMesh != null)
+ return s_FullscreenMesh;
+
+ float topV = 1.0f;
+ float bottomV = 0.0f;
+
+ s_FullscreenMesh = new Mesh { name = "Fullscreen Quad" };
+ s_FullscreenMesh.SetVertices(new List
+ {
+ new Vector3(-1.0f, -1.0f, 0.0f),
+ new Vector3(-1.0f, 1.0f, 0.0f),
+ new Vector3(1.0f, -1.0f, 0.0f),
+ new Vector3(1.0f, 1.0f, 0.0f)
+ });
+
+ s_FullscreenMesh.SetUVs(0, new List
+ {
+ new Vector2(0.0f, bottomV),
+ new Vector2(0.0f, topV),
+ new Vector2(1.0f, bottomV),
+ new Vector2(1.0f, topV)
+ });
+
+ s_FullscreenMesh.SetIndices(new[] { 0, 1, 2, 2, 1, 3 }, MeshTopology.Triangles, 0, false);
+ s_FullscreenMesh.UploadMeshData(true);
+ return s_FullscreenMesh;
+ }
+ }
+
+ public void BlitFullscreenMesh(CommandBuffer cmd, RenderTargetIdentifier source, RenderTargetIdentifier destination, Material material, int passIndex = 0)
+ {
+ cmd.SetGlobalTexture(ShaderProperties.mainTex, source);
+ cmd.SetRenderTarget(destination, 0, CubemapFace.Unknown, -1);
+ cmd.DrawMesh(/*RenderingUtils.*/fullscreenMesh, Matrix4x4.identity, material, 0, passIndex);
+ }
+
+ public void BlitFullscreenMesh(CommandBuffer cmd, RenderTargetIdentifier destination, Material material, int passIndex = 0)
+ {
+ cmd.SetRenderTarget(destination, 0, CubemapFace.Unknown, -1);
+ cmd.DrawMesh(/*RenderingUtils.*/fullscreenMesh, Matrix4x4.identity, material, 0, passIndex);
+ }
+
+ }
+
+ [SerializeField]
+ [Space(15)]
+ [Header("You can now add SSCC to your Post Process Volume.")]
+ Shader shader;
+ private SSCCRenderPass renderPass;
+
+ public override void Create()
+ {
+ if (!isActive)
+ {
+ renderPass?.Cleanup();
+ renderPass = null;
+ return;
+ }
+
+ name = "SSCC";
+
+ renderPass = new SSCCRenderPass();
+ }
+
+ void OnDisable()
+ {
+ renderPass?.Cleanup();
+ }
+
+#if URP_10_0_0_OR_NEWER
+ protected override void Dispose(bool disposing)
+ {
+ renderPass?.Cleanup();
+ renderPass = null;
+ }
+#endif
+
+ public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
+ {
+ shader = Shader.Find("Hidden/Universal Render Pipeline/SSCC");
+ if (shader == null)
+ {
+ Debug.LogWarning("SSCC shader was not found. Please ensure it compiles correctly");
+ return;
+ }
+
+ if (renderingData.cameraData.postProcessEnabled)
+ {
+ renderPass.Setup(shader, renderer, renderingData);
+ renderer.EnqueuePass(renderPass);
+ }
+ }
+ }
+}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCCRendererFeature.cs.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCCRendererFeature.cs.meta
new file mode 100755
index 000000000..87f9f3c32
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Runtime/SSCCRendererFeature.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 55e6184d2ea958044a6434dca151c688
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences:
+ - shader: {fileID: 4800000, guid: 62449f654265cf94e81275e55a4b1823, type: 3}
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders.meta
new file mode 100755
index 000000000..63783a1f8
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 58f43e59c74c01e44af838546ad2efae
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders/URP_SSCC.shader b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders/URP_SSCC.shader
new file mode 100755
index 000000000..fcd94ac91
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders/URP_SSCC.shader
@@ -0,0 +1,202 @@
+Shader "Hidden/Universal Render Pipeline/SSCC"
+{
+ Properties
+ {
+ _MainTex("", any) = "" {}
+ }
+
+ HLSLINCLUDE
+
+ #pragma target 3.0
+ #pragma prefer_hlslcc gles
+ #pragma exclude_renderers d3d11_9x
+ #pragma editor_sync_compilation
+
+ #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
+ #if VERSION_GREATER_EQUAL(10, 0)
+ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
+ #endif
+
+ TEXTURE2D_X(_MainTex);
+ SAMPLER(sampler_LinearClamp);
+ SAMPLER(sampler_PointClamp);
+
+ CBUFFER_START(FrequentlyUpdatedUniforms)
+ float4 _Input_TexelSize;
+ float4 _UVToView;
+ float4x4 _WorldToCameraMatrix;
+
+ float _EffectIntensity;
+ float _DistanceFade;
+
+ float _CurvaturePixelRadius;
+ float _CurvatureBrights;
+ float _CurvatureDarks;
+
+ float _CavityWorldRadius;
+ float _CavityBrights;
+ float _CavityDarks;
+ CBUFFER_END
+
+ struct Attributes
+ {
+ float4 positionOS : POSITION;
+ float2 uv : TEXCOORD0;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct Varyings
+ {
+ float4 positionCS : SV_POSITION;
+ float2 uv : TEXCOORD0;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ Varyings Vert(Attributes input)
+ {
+ Varyings output;
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+ output.positionCS = float4(input.positionOS.xyz, 1.0);
+ #if UNITY_UV_STARTS_AT_TOP
+ output.positionCS.y *= -1;
+ #endif
+ output.uv = input.uv;
+ return output;
+ }
+
+ ENDHLSL
+
+ SubShader
+ {
+ Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
+ LOD 100
+ ZWrite Off ZTest Always Blend Off Cull Off
+
+ Pass // 0
+ {
+ Name "Copy"
+
+ HLSLPROGRAM
+ #pragma vertex Vert
+ #pragma fragment Frag
+
+ half4 Frag(Varyings input) : SV_Target
+ {
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
+
+ float2 uv = UnityStereoTransformScreenSpaceTex(input.uv);
+ return SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv);
+ }
+ ENDHLSL
+ }
+
+ Pass // 1
+ {
+ Name "Composite"
+
+ ColorMask RGB
+
+ HLSLPROGRAM
+ #pragma multi_compile_local __ DEBUG_EFFECT DEBUG_NORMALS
+ #pragma multi_compile_local __ ORTHOGRAPHIC_PROJECTION
+ #pragma multi_compile_local __ NORMALS_RECONSTRUCT
+ #pragma multi_compile_fragment __ _GBUFFER_NORMALS_OCT
+ #pragma multi_compile_local CAVITY_SAMPLES_6 CAVITY_SAMPLES_8 CAVITY_SAMPLES_12
+ #pragma multi_compile_local __ SATURATE_CAVITY
+ #pragma multi_compile_local __ OUTPUT_TO_TEXTURE
+
+ #pragma vertex Vert
+ #pragma fragment Composite_Frag
+
+ //
+ inline half4 FetchSceneColor(float2 uv) {
+ return SAMPLE_TEXTURE2D_X(_MainTex, sampler_PointClamp, uv);
+ }
+ inline float FetchRawDepth(float2 uv) {
+ return SampleSceneDepth(uv);
+ }
+ inline float LinearizeDepth(float depth) {
+ #if ORTHOGRAPHIC_PROJECTION
+ #if UNITY_REVERSED_Z
+ depth = 1 - depth;
+ #endif
+ float linearDepth = _ProjectionParams.y + depth * (_ProjectionParams.z - _ProjectionParams.y);
+ #else
+ float linearDepth = LinearEyeDepth(depth, _ZBufferParams);
+ #endif
+ return linearDepth;
+ }
+ inline float3 FetchViewPos(float2 uv) {
+ float depth = LinearizeDepth(FetchRawDepth(uv));
+ //return float3((uv * _UVToView.xy + _UVToView.zw) * depth, depth);
+ float4 UVToView = float4(2 / unity_CameraProjection._m00, -2 / unity_CameraProjection._m11, -1 / unity_CameraProjection._m00, 1 / unity_CameraProjection._m11);
+ #if ORTHOGRAPHIC_PROJECTION
+ return float3((uv * UVToView.xy + UVToView.zw), depth);
+ #else
+ return float3((uv * UVToView.xy + UVToView.zw) * depth, depth);
+ #endif
+ }
+ inline float3 MinDiff(float3 P, float3 Pr, float3 Pl) {
+ float3 V1 = Pr - P;
+ float3 V2 = P - Pl;
+ return (dot(V1, V1) < dot(V2, V2)) ? V1 : V2;
+ }
+ inline float3 FetchViewNormals(float3 P, float2 uv) {
+ #if NORMALS_RECONSTRUCT
+ float c = FetchRawDepth(uv);
+ half3 viewSpacePos_c = FetchViewPos(uv);
+ // get data at 1 pixel offsets in each major direction
+ half3 viewSpacePos_l = FetchViewPos(uv + float2(-1.0, 0.0) * _Input_TexelSize.xy);
+ half3 viewSpacePos_r = FetchViewPos(uv + float2(+1.0, 0.0) * _Input_TexelSize.xy);
+ half3 viewSpacePos_d = FetchViewPos(uv + float2(0.0, -1.0) * _Input_TexelSize.xy);
+ half3 viewSpacePos_u = FetchViewPos(uv + float2(0.0, +1.0) * _Input_TexelSize.xy);
+ half3 l = viewSpacePos_c - viewSpacePos_l;
+ half3 r = viewSpacePos_r - viewSpacePos_c;
+ half3 d = viewSpacePos_c - viewSpacePos_d;
+ half3 u = viewSpacePos_u - viewSpacePos_c;
+ half4 H = half4(
+ FetchRawDepth(uv + float2(-1.0, 0.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(+1.0, 0.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(-2.0, 0.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(+2.0, 0.0) * _Input_TexelSize.xy)
+ );
+ half4 V = half4(
+ FetchRawDepth(uv + float2(0.0, -1.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(0.0, +1.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(0.0, -2.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(0.0, +2.0) * _Input_TexelSize.xy)
+ );
+ half2 he = abs((2 * H.xy - H.zw) - c);
+ half2 ve = abs((2 * V.xy - V.zw) - c);
+ half3 hDeriv = he.x < he.y ? l : r;
+ half3 vDeriv = ve.x < ve.y ? d : u;
+ float3 N = normalize(cross(hDeriv, vDeriv));
+ #else
+ #if VERSION_GREATER_EQUAL(10, 0)
+ float3 N = SampleSceneNormals(uv);
+ #if UNITY_VERSION >= 202110 || VERSION_GREATER_EQUAL(10, 9)
+ N = mul((float3x3)_WorldToCameraMatrix, N);
+ #else
+ N = float3(N.x, N.y, -N.z); //?
+ #endif
+ #else
+ float3 N = float3(0, 0, 0);
+ #endif
+ N = float3(N.x, -N.yz);
+ #endif
+
+ N = float3(N.x, -N.y, N.z);
+ return N;
+ }
+ //
+ #include "../../../Shaders/Shared.cginc"
+
+ ENDHLSL
+ }
+ }
+
+ Fallback Off
+}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders/URP_SSCC.shader.meta b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders/URP_SSCC.shader.meta
new file mode 100755
index 000000000..0653a936e
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/SRP/URP/Shaders/URP_SSCC.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 62449f654265cf94e81275e55a4b1823
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Shaders.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders.meta
new file mode 100644
index 000000000..9b7ce422f
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 76172b2df8171ae4e8cdc749378f9fac
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Builtin_SSCC.shader b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Builtin_SSCC.shader
new file mode 100644
index 000000000..b3087e86c
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Builtin_SSCC.shader
@@ -0,0 +1,231 @@
+Shader "Hidden/SSCC"
+{
+ Properties {
+ _MainTex ("", any) = "" {}
+ }
+
+ CGINCLUDE
+
+ #pragma target 3.0
+ #pragma editor_sync_compilation
+
+ #include "UnityCG.cginc"
+
+ UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex);
+ UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
+ UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraGBufferTexture2);
+
+ UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
+
+ CBUFFER_START(FrequentlyUpdatedUniforms)
+ float4 _Input_TexelSize;
+ float4 _UVToView;
+ float4x4 _WorldToCameraMatrix;
+
+ float _EffectIntensity;
+ float _DistanceFade;
+
+ float _CurvaturePixelRadius;
+ float _CurvatureBrights;
+ float _CurvatureDarks;
+
+ float _CavityWorldRadius;
+ float _CavityBrights;
+ float _CavityDarks;
+ CBUFFER_END
+
+ CBUFFER_START(PerPassUpdatedUniforms)
+ float4 _UVTransform;
+ CBUFFER_END
+
+ struct Attributes
+ {
+ float3 vertex : POSITION;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct Varyings
+ {
+ float4 vertex : SV_POSITION;
+ float2 uv : TEXCOORD0;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ float2 TransformTriangleVertexToUV(float2 vertex)
+ {
+ float2 uv = (vertex + 1.0) * 0.5;
+ return uv;
+ }
+ Varyings Vert_Default(Attributes input)
+ {
+ Varyings o;
+
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_INITIALIZE_OUTPUT(Varyings, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ o.vertex = float4(input.vertex.xy, 0.0, 1.0);
+ o.uv = TransformTriangleVertexToUV(input.vertex.xy);
+
+ #if UNITY_UV_STARTS_AT_TOP
+ o.uv = o.uv * float2(1.0, -1.0) + float2(0.0, 1.0);
+ #endif
+
+ o.uv = TransformStereoScreenSpaceTex(o.uv, 1.0);
+
+ return o;
+ }
+
+ Varyings Vert_UVTransform(Attributes input)
+ {
+ Varyings o;
+
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_INITIALIZE_OUTPUT(Varyings, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ o.vertex = float4(input.vertex.xy, 0.0, 1.0);
+ o.uv = TransformTriangleVertexToUV(input.vertex.xy) * _UVTransform.xy + _UVTransform.zw;
+
+ o.uv = TransformStereoScreenSpaceTex(o.uv, 1.0);
+
+ return o;
+ }
+
+ ENDCG
+
+ SubShader
+ {
+ LOD 100
+ ZTest Always Cull Off ZWrite Off
+
+ // 0
+ Pass
+ {
+ Name "Copy"
+
+ CGPROGRAM
+ #pragma vertex Vert_Default
+ #pragma fragment Frag
+
+ half4 Frag(Varyings input) : SV_Target
+ {
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
+
+ return UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, input.uv);
+ }
+ ENDCG
+ }
+
+ // 1
+ Pass
+ {
+ Name "Composite"
+
+ ColorMask RGB
+
+ CGPROGRAM
+ #pragma multi_compile_local __ DEBUG_EFFECT DEBUG_NORMALS
+ #pragma multi_compile_local __ ORTHOGRAPHIC_PROJECTION
+ #pragma multi_compile_local __ NORMALS_CAMERA NORMALS_RECONSTRUCT
+ #pragma multi_compile_local CAVITY_SAMPLES_6 CAVITY_SAMPLES_8 CAVITY_SAMPLES_12
+ #pragma multi_compile_local __ SATURATE_CAVITY
+ #pragma multi_compile_local __ OUTPUT_TO_TEXTURE
+
+ #pragma vertex Vert_UVTransform
+ #pragma fragment Composite_Frag
+
+ //
+ inline half4 FetchSceneColor(float2 uv) {
+ return UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, uv);
+ }
+ inline float FetchRawDepth(float2 uv) {
+ return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv);
+ }
+ inline float LinearizeDepth(float depth) {
+ #if ORTHOGRAPHIC_PROJECTION
+ #if UNITY_REVERSED_Z
+ depth = 1 - depth;
+ #endif
+ float linearDepth = _ProjectionParams.y + depth * (_ProjectionParams.z - _ProjectionParams.y);
+ #else
+ float linearDepth = LinearEyeDepth(depth);
+ #endif
+ return linearDepth;
+ }
+ inline float3 FetchViewPos(float2 uv) {
+ float depth = LinearizeDepth(FetchRawDepth(uv));
+ //return float3((uv * _UVToView.xy + _UVToView.zw) * depth, depth);
+ float4 UVToView = float4(2 / unity_CameraProjection._m00, -2 / unity_CameraProjection._m11, -1 / unity_CameraProjection._m00, 1 / unity_CameraProjection._m11);
+ #if ORTHOGRAPHIC_PROJECTION
+ return float3((uv * UVToView.xy + UVToView.zw), depth);
+ #else
+ return float3((uv * UVToView.xy + UVToView.zw) * depth, depth);
+ #endif
+ }
+ inline float3 MinDiff(float3 P, float3 Pr, float3 Pl) {
+ float3 V1 = Pr - P;
+ float3 V2 = P - Pl;
+ return (dot(V1, V1) < dot(V2, V2)) ? V1 : V2;
+ }
+ inline float3 FetchViewNormals(float3 P, float2 uv) {
+ #if NORMALS_RECONSTRUCT
+ /*float3 Pr, Pl, Pt, Pb;
+ Pr = FetchViewPos(uv + float2(_Input_TexelSize.x, 0));
+ Pl = FetchViewPos(uv + float2(-_Input_TexelSize.x, 0));
+ Pt = FetchViewPos(uv + float2(0, _Input_TexelSize.y));
+ Pb = FetchViewPos(uv + float2(0, -_Input_TexelSize.y));
+ float3 N = normalize(cross(MinDiff(P, Pr, Pl), MinDiff(P, Pt, Pb)));*/
+ //
+ float c = FetchRawDepth(uv);
+ half3 viewSpacePos_c = FetchViewPos(uv);
+ // get data at 1 pixel offsets in each major direction
+ half3 viewSpacePos_l = FetchViewPos(uv + float2(-1.0, 0.0) * _Input_TexelSize.xy);
+ half3 viewSpacePos_r = FetchViewPos(uv + float2(+1.0, 0.0) * _Input_TexelSize.xy);
+ half3 viewSpacePos_d = FetchViewPos(uv + float2(0.0, -1.0) * _Input_TexelSize.xy);
+ half3 viewSpacePos_u = FetchViewPos(uv + float2(0.0, +1.0) * _Input_TexelSize.xy);
+ half3 l = viewSpacePos_c - viewSpacePos_l;
+ half3 r = viewSpacePos_r - viewSpacePos_c;
+ half3 d = viewSpacePos_c - viewSpacePos_d;
+ half3 u = viewSpacePos_u - viewSpacePos_c;
+ half4 H = half4(
+ FetchRawDepth(uv + float2(-1.0, 0.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(+1.0, 0.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(-2.0, 0.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(+2.0, 0.0) * _Input_TexelSize.xy)
+ );
+ half4 V = half4(
+ FetchRawDepth(uv + float2(0.0, -1.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(0.0, +1.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(0.0, -2.0) * _Input_TexelSize.xy),
+ FetchRawDepth(uv + float2(0.0, +2.0) * _Input_TexelSize.xy)
+ );
+ half2 he = abs((2 * H.xy - H.zw) - c);
+ half2 ve = abs((2 * V.xy - V.zw) - c);
+ half3 hDeriv = he.x < he.y ? l : r;
+ half3 vDeriv = ve.x < ve.y ? d : u;
+ float3 N = normalize(cross(hDeriv, vDeriv));
+ //
+ #else
+ #if NORMALS_CAMERA
+ float3 N = DecodeViewNormalStereo(UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv));
+ #else
+ float3 N = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraGBufferTexture2, uv).rgb * 2.0 - 1.0;
+ N = mul((float3x3)_WorldToCameraMatrix, N);
+ #endif
+ N = float3(N.x, -N.yz);
+ #endif
+
+ N = float3(N.x, -N.y, N.z);
+ return N;
+ }
+ //
+ #include "Shared.cginc"
+
+ ENDCG
+ }
+
+ }
+
+ FallBack off
+}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Builtin_SSCC.shader.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Builtin_SSCC.shader.meta
new file mode 100644
index 000000000..77201eca6
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Builtin_SSCC.shader.meta
@@ -0,0 +1,16 @@
+fileFormatVersion: 2
+guid: 89ec5ce1bd95ed946a65b649164a9c1d
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/Shaders/Builtin_SSCC.shader
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Shared.cginc b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Shared.cginc
new file mode 100644
index 000000000..2916e7be4
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Shared.cginc
@@ -0,0 +1,219 @@
+
+//CAVITY V
+#ifdef CAVITY_SAMPLES_6
+ #define CAVITY_SAMPLES 6
+#endif
+#ifdef CAVITY_SAMPLES_8
+ #define CAVITY_SAMPLES 8
+#endif
+#ifdef CAVITY_SAMPLES_12
+ #define CAVITY_SAMPLES 12
+#endif
+#ifdef SSCC_HDRP
+ #define ACTUAL_CAVITY_SAMPLES (CAVITY_SAMPLES+2)
+#else
+ #define ACTUAL_CAVITY_SAMPLES (CAVITY_SAMPLES)
+#endif
+float _InterleavedGradientNoise(float2 pixCoord, int frameCount)
+{
+ const float3 magic = float3(0.06711056f, 0.00583715f, 52.9829189f);
+ float2 frameMagicScale = float2(2.083f, 4.867f);
+ pixCoord += frameCount * frameMagicScale;
+ return frac(magic.z * frac(dot(pixCoord, magic.xy)));
+}
+float3 PickSamplePoint(float2 uv, float randAddon, int index)
+{
+ float2 positionSS = uv * _Input_TexelSize.zw;
+ float gn = _InterleavedGradientNoise(positionSS, index);
+ float u = frac(gn) * 2.0 - 1.0;
+ float theta = gn * 6.28318530717958647693;
+ float sn, cs;
+ sincos(theta, sn, cs);
+ return float3(float2(cs, sn) * sqrt(1.0 - u * u), u);
+}
+float3x3 GetCoordinateConversionParameters(out float2 p11_22, out float2 p13_31)
+{
+ float3x3 camProj = (float3x3)unity_CameraProjection;
+ //float3x3 camProj = (float3x3)/*UNITY_MATRIX_P*/_Projection;
+ p11_22 = rcp(float2(camProj._11, camProj._22));
+ p13_31 = float2(camProj._13, camProj._23);
+ return camProj;
+}
+float3 ReconstructViewPos(float2 uv, float depth, float2 p11_22, float2 p13_31)
+{
+ #if ORTHOGRAPHIC_PROJECTION
+ float3 viewPos = float3(((uv.xy * 2.0 - 1.0 - p13_31) * p11_22), depth);
+ #else
+ float3 viewPos = float3(depth * ((uv.xy * 2.0 - 1.0 - p13_31) * p11_22), depth);
+ #endif
+ return viewPos;
+}
+void SampleDepthAndViewpos(float2 uv, float2 p11_22, float2 p13_31, out float depth, out float3 vpos)
+{
+ depth = LinearizeDepth(FetchRawDepth(uv));
+ vpos = ReconstructViewPos(uv, depth, p11_22, p13_31);
+}
+void Cavity(float2 uv, float3 normal, out float cavity, out float edges)
+{
+ cavity = edges = 0.0;
+ float2 p11_22, p13_31;
+ float3x3 camProj = GetCoordinateConversionParameters(p11_22, p13_31);
+
+ float depth;
+ float3 vpos;
+ SampleDepthAndViewpos(uv, p11_22, p13_31, depth, vpos);
+
+ float randAddon = uv.x * 1e-10;
+ float rcpSampleCount = rcp(ACTUAL_CAVITY_SAMPLES);
+
+ //UNITY_LOOP
+ UNITY_UNROLL
+ for (int i = 0; i < int(ACTUAL_CAVITY_SAMPLES); i++)
+ {
+ #if defined(SHADER_API_D3D11)
+ i = floor(1.0001 * i);
+ #endif
+
+ #if 0
+ float3 v_s1 = PickSamplePoint(uv.yx, randAddon, i);
+ #else
+ float3 v_s1 = PickSamplePoint(uv, randAddon, i);
+ #endif
+ v_s1 *= sqrt((i + 1.0) * rcpSampleCount) * _CavityWorldRadius * 0.5;
+ float3 vpos_s1 = vpos + v_s1;
+
+ float3 spos_s1 = mul(camProj, vpos_s1);
+ #if ORTHOGRAPHIC_PROJECTION
+ float2 uv_s1_01 = clamp((spos_s1.xy + 1.0) * 0.5, 0.0, 1.0);
+ #else
+ float2 uv_s1_01 = clamp((spos_s1.xy * rcp(vpos_s1.z) + 1.0) * 0.5, 0.0, 1.0);
+ #endif
+
+ float depth_s1 = LinearizeDepth(FetchRawDepth(uv_s1_01));
+ float3 vpos_s2 = ReconstructViewPos(uv_s1_01, depth_s1, p11_22, p13_31);
+
+ float3 dir = vpos_s2 - vpos;
+ float len = length(dir);
+ float f_dot = dot(dir, normal);
+ //float kBeta = 0.002;
+ float kBeta = 0.002 * 4;
+ float f_cavities = f_dot - kBeta * depth;
+ float f_edge = -f_dot - kBeta * depth;
+ float f_bias = 0.05 * len + 0.0001;
+
+ if (f_cavities > -f_bias)
+ {
+ float attenuation = 1.0 / (len * (1.0 + len * len * 3.));
+ cavity += f_cavities * attenuation;
+ }
+ if (f_edge > f_bias)
+ {
+ float attenuation = 1.0 / (len * (1.0 + len * len * 0.01));
+ edges += f_edge * attenuation;
+ }
+ }
+
+ //cavity *= 1.0 / ACTUAL_CAVITY_SAMPLES;
+ //edges *= 1.0 / ACTUAL_CAVITY_SAMPLES;
+ cavity *= 1.0 * _CavityWorldRadius * 0.5;
+ edges *= 1.0 * _CavityWorldRadius * 0.5;
+
+ float kContrast = 0.6;
+ cavity = pow(abs(cavity * rcpSampleCount), kContrast);
+ edges = pow(abs(edges * rcpSampleCount), kContrast);
+
+ cavity = clamp(cavity * _CavityDarks, 0.0, 1.0);
+ edges = edges * _CavityBrights;
+}
+//CAVITY ^
+
+//CURVATURE V
+float CurvatureSoftClamp(float curvature, float control)
+{
+ if (curvature < 0.5 / control)
+ return curvature * (1.0 - curvature * control);
+ return 0.25 / control;
+}
+float Curvature(float2 uv, float3 P)
+{
+ float3 offset = float3(_Input_TexelSize.xy, 0.0) * (_CurvaturePixelRadius);
+
+ float normal_up = FetchViewNormals(P, uv + offset.zy).g;
+ float normal_down = FetchViewNormals(P, uv - offset.zy).g;
+ float normal_right = FetchViewNormals(P, uv + offset.xz).r;
+ float normal_left = FetchViewNormals(P, uv - offset.xz).r;
+
+ float normal_diff = (normal_up - normal_down) + (normal_right - normal_left);
+
+ if (abs(normal_diff) <= 0.1) return 0; //slight low pass filter to remove noise from camera normals precision
+
+ if (normal_diff >= 0.0)
+ return 2.0 * CurvatureSoftClamp(normal_diff, _CurvatureBrights);
+ else
+ return -2.0 * CurvatureSoftClamp(-normal_diff, _CurvatureDarks);
+}
+//CURVATURE ^
+
+float invLerp(float from, float to, float value) {
+ return (value - from) / (to - from);
+}
+float remap(float origFrom, float origTo, float targetFrom, float targetTo, float value) {
+ float rel = invLerp(origFrom, origTo, value);
+ return lerp(targetFrom, targetTo, rel);
+}
+float4 Composite_Frag(Varyings input) : SV_Target
+{
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
+
+ #ifdef UnityStereoTransformScreenSpaceTex
+ float2 uv = UnityStereoTransformScreenSpaceTex(input.uv);
+ #else
+ float2 uv = input.uv;
+ #endif
+ float3 P = FetchViewPos(uv);
+ float3 N = FetchViewNormals(P, uv);
+ float4 col = FetchSceneColor(uv);
+ float4 untouchedCol = FetchSceneColor(uv);
+ //float depth01 = FetchRawDepth(uv);
+ //if (depth01 == 1.0 || depth01 == 0.0) return col;
+
+ float curvature = 0.0;
+ curvature = Curvature(uv, P);
+ float cavity = 0.0, edges = 0.0;
+ Cavity(uv, N, cavity, edges);
+
+ if (uv.x < _Input_TexelSize.x * 2 || uv.y < _Input_TexelSize.y * 2 || 1 - uv.x < _Input_TexelSize.x * 2 || 1 - uv.y < _Input_TexelSize.y * 2) { curvature = cavity = edges = 0; };
+
+ col.rgb += (curvature * 0.4);
+
+ #if SATURATE_CAVITY
+ col.rgb = pow(saturate(col.rgb), 1 - (edges * 0.5));
+ col.rgb = pow(saturate(col.rgb), 1 + (cavity * 1));
+ #else
+ col.rgb += (edges * 0.2);
+ col.rgb -= (cavity * 0.2);
+ #endif
+
+ //Uncomment this block of code for on/off back and forth effect preview
+ //if (uv.x < sin(_Time.y+(3.1415/2)) * 0.5 + 0.5)
+ //{
+ // if (uv.x > (sin(_Time.y+(3.1415/2)) * 0.5 + 0.5) - 0.002) return 0;
+ // return untouchedCol;
+ //}
+
+
+ #if DEBUG_EFFECT
+ return ((1.0 - cavity) * (1.0 + edges) * (1.0 + curvature)) * 0.25;
+ #elif DEBUG_NORMALS
+ return float4(N * 0.5 + 0.5, 1);
+ #endif
+
+ #if OUTPUT_TO_TEXTURE
+ float r = curvature * 0.4;
+ float g = (edges * 0.2) - (cavity * 0.2);
+ return float4(r * rcp(max(1, P.z * _DistanceFade)) * _EffectIntensity, g * rcp(max(1, P.z * _DistanceFade)) * _EffectIntensity, 1, 1);
+ //Values rescaled so they're more consistent to work with, if you just +curvature+edges it should match 'screen' output
+ #else
+ return lerp(untouchedCol, col, rcp(max(1, P.z * _DistanceFade)) * _EffectIntensity);
+ #endif
+}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Shared.cginc.meta b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Shared.cginc.meta
new file mode 100644
index 000000000..0d1c9c257
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/Shaders/Shared.cginc.meta
@@ -0,0 +1,16 @@
+fileFormatVersion: 2
+guid: 320b7d4bebad59e4ead8d08b151d6a7f
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/Shaders/Shared.cginc
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples.meta
new file mode 100644
index 000000000..93d1c04b1
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2caf2819c0dabce42b6b938c8f5a9ba4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Builtin _SSCCTexture Example.unitypackage.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Builtin _SSCCTexture Example.unitypackage.meta
new file mode 100644
index 000000000..ac90239fa
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Builtin _SSCCTexture Example.unitypackage.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 0e83bea63c06f674eb5018b4edaaa234
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Builtin _SSCCTexture
+ Example.unitypackage
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Readme.txt b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Readme.txt
new file mode 100644
index 000000000..69ba74211
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Readme.txt
@@ -0,0 +1,8 @@
+Feel free to ignore this if you're using the "Screen" output mode of the asset, having it applied all over the screen.
+
+-------
+This folder contains example shaders for if you want to use the "_SSCCTexture in shaders" output mode of the asset.
+This allows you to selectively apply the effect to certain objects / filter our the others.
+Only available for Builtin(2019/2020/2021), URP(2020/2021). Unfortunately not available for URP(2019) and HDRP(at all).
+
+Import appropriate .unitypackage for an example implementation of how to sample _SSCCTexture in shaders.
\ No newline at end of file
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Readme.txt.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Readme.txt.meta
new file mode 100644
index 000000000..203beba03
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Readme.txt.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 9673b087a168cd34984bd85711945362
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Readme.txt
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2020 _SSCCTexture Example.unitypackage.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2020 _SSCCTexture Example.unitypackage.meta
new file mode 100644
index 000000000..15a3132b3
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2020 _SSCCTexture Example.unitypackage.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: c2a3494b77a23b54aa8b5ad80b580749
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2020 _SSCCTexture
+ Example.unitypackage
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2021+ _SSCCTexture Example.unitypackage.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2021+ _SSCCTexture Example.unitypackage.meta
new file mode 100644
index 000000000..9ce8069e0
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2021+ _SSCCTexture Example.unitypackage.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 63fa4c6385d5807478747f832fef4a20
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 216995
+ packageName: Screen Space Cavity & Curvature (Built-In/URP/HDRP)
+ packageVersion: 1.1.5
+ assetPath: Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/URP2021+
+ _SSCCTexture Example.unitypackage
+ uploadId: 614792
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity GUI.cs b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity GUI.cs
new file mode 100755
index 000000000..7c721af27
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity GUI.cs
@@ -0,0 +1,131 @@
+#if UNITY_EDITOR
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UnityEditor.Rendering.Universal.ShaderGUI
+{
+ class LitShaderCavity2021 : BaseShaderGUI
+ {
+ static readonly string[] workflowModeNames = Enum.GetNames(typeof(LitGUI.WorkflowMode));
+
+ private LitGUI.LitProperties litProperties;
+ private MaterialProperty curvatureMultiplier = null;
+ private MaterialProperty cavityMultiplier = null;
+
+ // collect properties from the material properties
+ public override void FindProperties(MaterialProperty[] properties)
+ {
+ base.FindProperties(properties);
+ litProperties = new LitGUI.LitProperties(properties);
+
+ curvatureMultiplier = FindProperty("_CurvatureMultiplier", properties);
+ cavityMultiplier = FindProperty("_CavityMultiplier", properties);
+ }
+
+ // material changed check
+ //public override void ValidateMaterial(Material material)
+ //{
+ // SetMaterialKeywords(material, LitGUI.SetMaterialKeywords, LitDetailGUI.SetMaterialKeywords);
+ //}
+
+ // material main surface options
+ public override void DrawSurfaceOptions(Material material)
+ {
+ // Use default labelWidth
+ EditorGUIUtility.labelWidth = 0f;
+
+ if (litProperties.workflowMode != null)
+ DoPopup(LitGUI.Styles.workflowModeText, litProperties.workflowMode, workflowModeNames);
+
+ base.DrawSurfaceOptions(material);
+ }
+
+ // material main surface inputs
+ public override void DrawSurfaceInputs(Material material)
+ {
+ base.DrawSurfaceInputs(material);
+ LitGUI.Inputs(litProperties, materialEditor, material);
+ DrawEmissionProperties(material, true);
+ DrawTileOffset(materialEditor, baseMapProp);
+
+ materialEditor.RangeProperty(curvatureMultiplier, curvatureMultiplier.displayName);
+ materialEditor.RangeProperty(cavityMultiplier, cavityMultiplier.displayName);
+ }
+
+ // material main advanced options
+ public override void DrawAdvancedOptions(Material material)
+ {
+ if (litProperties.reflections != null && litProperties.highlights != null)
+ {
+ materialEditor.ShaderProperty(litProperties.highlights, LitGUI.Styles.highlightsText);
+ materialEditor.ShaderProperty(litProperties.reflections, LitGUI.Styles.reflectionsText);
+ }
+
+ base.DrawAdvancedOptions(material);
+ }
+
+ public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader)
+ {
+ if (material == null)
+ throw new ArgumentNullException("material");
+
+ // _Emission property is lost after assigning Standard shader to the material
+ // thus transfer it before assigning the new shader
+ if (material.HasProperty("_Emission"))
+ {
+ material.SetColor("_EmissionColor", material.GetColor("_Emission"));
+ }
+
+ base.AssignNewShaderToMaterial(material, oldShader, newShader);
+
+ if (oldShader == null || !oldShader.name.Contains("Legacy Shaders/"))
+ {
+ SetupMaterialBlendMode(material);
+ return;
+ }
+
+ SurfaceType surfaceType = SurfaceType.Opaque;
+ BlendMode blendMode = BlendMode.Alpha;
+ if (oldShader.name.Contains("/Transparent/Cutout/"))
+ {
+ surfaceType = SurfaceType.Opaque;
+ material.SetFloat("_AlphaClip", 1);
+ }
+ else if (oldShader.name.Contains("/Transparent/"))
+ {
+ // NOTE: legacy shaders did not provide physically based transparency
+ // therefore Fade mode
+ surfaceType = SurfaceType.Transparent;
+ blendMode = BlendMode.Alpha;
+ }
+ material.SetFloat("_Blend", (float)blendMode);
+
+ material.SetFloat("_Surface", (float)surfaceType);
+ if (surfaceType == SurfaceType.Opaque)
+ {
+ material.DisableKeyword("_SURFACE_TYPE_TRANSPARENT");
+ }
+ else
+ {
+ material.EnableKeyword("_SURFACE_TYPE_TRANSPARENT");
+ }
+
+ if (oldShader.name.Equals("Standard (Specular setup)"))
+ {
+ material.SetFloat("_WorkflowMode", (float)LitGUI.WorkflowMode.Specular);
+ Texture texture = material.GetTexture("_SpecGlossMap");
+ if (texture != null)
+ material.SetTexture("_MetallicSpecGlossMap", texture);
+ }
+ else
+ {
+ material.SetFloat("_WorkflowMode", (float)LitGUI.WorkflowMode.Metallic);
+ Texture texture = material.GetTexture("_MetallicGlossMap");
+ if (texture != null)
+ material.SetTexture("_MetallicSpecGlossMap", texture);
+ }
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity GUI.cs.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity GUI.cs.meta
new file mode 100755
index 000000000..8c22f8ee4
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity GUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 66eeaf301cf20bb4cb620f76313aec52
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity.shader b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity.shader
new file mode 100755
index 000000000..404072565
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity.shader
@@ -0,0 +1,345 @@
+Shader "Universal Render Pipeline/Lit + Cavity"
+{
+ Properties
+ {
+ // Specular vs Metallic workflow
+ _WorkflowMode("WorkflowMode", Float) = 1.0
+
+ [MainTexture] _BaseMap("Albedo", 2D) = "white" {}
+ [MainColor] _BaseColor("Color", Color) = (1,1,1,1)
+
+ _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
+
+ _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5
+ _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0
+
+ _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
+ _MetallicGlossMap("Metallic", 2D) = "white" {}
+
+ _SpecColor("Specular", Color) = (0.2, 0.2, 0.2)
+ _SpecGlossMap("Specular", 2D) = "white" {}
+
+ [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
+ [ToggleOff] _EnvironmentReflections("Environment Reflections", Float) = 1.0
+
+ _BumpScale("Scale", Float) = 1.0
+ _BumpMap("Normal Map", 2D) = "bump" {}
+
+ _Parallax("Scale", Range(0.005, 0.08)) = 0.005
+ _ParallaxMap("Height Map", 2D) = "black" {}
+
+ _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
+ _OcclusionMap("Occlusion", 2D) = "white" {}
+
+ [HDR] _EmissionColor("Color", Color) = (0,0,0)
+ _EmissionMap("Emission", 2D) = "white" {}
+
+ _DetailMask("Detail Mask", 2D) = "white" {}
+ _DetailAlbedoMapScale("Scale", Range(0.0, 2.0)) = 1.0
+ _DetailAlbedoMap("Detail Albedo x2", 2D) = "linearGrey" {}
+ _DetailNormalMapScale("Scale", Range(0.0, 2.0)) = 1.0
+ [Normal] _DetailNormalMap("Normal Map", 2D) = "bump" {}
+
+ // SRP batching compatibility for Clear Coat (Not used in Lit)
+ [HideInInspector] _ClearCoatMask("_ClearCoatMask", Float) = 0.0
+ [HideInInspector] _ClearCoatSmoothness("_ClearCoatSmoothness", Float) = 0.0
+
+ // Blending state
+ _Surface("__surface", Float) = 0.0
+ _Blend("__blend", Float) = 0.0
+ _Cull("__cull", Float) = 2.0
+ [ToggleUI] _AlphaClip("__clip", Float) = 0.0
+ [HideInInspector] _SrcBlend("__src", Float) = 1.0
+ [HideInInspector] _DstBlend("__dst", Float) = 0.0
+ [HideInInspector] _ZWrite("__zw", Float) = 1.0
+
+ [ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0
+ // Editmode props
+ _QueueOffset("Queue offset", Float) = 0.0
+
+ // ObsoleteProperties
+ [HideInInspector] _MainTex("BaseMap", 2D) = "white" {}
+ [HideInInspector] _Color("Base Color", Color) = (1, 1, 1, 1)
+ [HideInInspector] _GlossMapScale("Smoothness", Float) = 0.0
+ [HideInInspector] _Glossiness("Smoothness", Float) = 0.0
+ [HideInInspector] _GlossyReflections("EnvironmentReflections", Float) = 0.0
+
+ [HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {}
+ [HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {}
+ [HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {}
+
+ //V
+ _CurvatureMultiplier("Curvature Multiplier", Range(0,1.5)) = 1.0
+ _CavityMultiplier("Cavity Multiplier", Range(0,1.5)) = 1.0
+ //^
+ }
+
+ SubShader
+ {
+ Tags{"RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "Lit" "IgnoreProjector" = "True" "ShaderModel" = "4.5"}
+ LOD 300
+
+ Pass
+ {
+ Name "ForwardLit"
+ Tags{"LightMode" = "UniversalForward"}
+
+ Blend[_SrcBlend][_DstBlend]
+ ZWrite[_ZWrite]
+ Cull[_Cull]
+
+ HLSLPROGRAM
+ #pragma exclude_renderers gles gles3 glcore
+ #pragma target 4.5
+
+ #pragma shader_feature_local _NORMALMAP
+ #pragma shader_feature_local _PARALLAXMAP
+ #pragma shader_feature_local _RECEIVE_SHADOWS_OFF
+ #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
+ #pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
+ #pragma shader_feature_local_fragment _ALPHATEST_ON
+ #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature_local_fragment _EMISSION
+ #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
+ #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature_local_fragment _OCCLUSIONMAP
+ #pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
+ #pragma shader_feature_local_fragment _SPECULAR_SETUP
+ #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
+ #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
+ #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
+ #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
+ #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION
+ #pragma multi_compile_fragment _ _SHADOWS_SOFT
+ #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
+ #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
+ #pragma multi_compile_fragment _ _LIGHT_LAYERS
+ #pragma multi_compile_fragment _ _LIGHT_COOKIES
+ #pragma multi_compile _ _CLUSTERED_RENDERING
+ #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
+ #pragma multi_compile _ SHADOWS_SHADOWMASK
+ #pragma multi_compile _ DIRLIGHTMAP_COMBINED
+ #pragma multi_compile _ LIGHTMAP_ON
+ #pragma multi_compile _ DYNAMICLIGHTMAP_ON
+ #pragma multi_compile_fog
+ #pragma multi_compile_fragment _ DEBUG_DISPLAY
+ #pragma multi_compile_instancing
+ #pragma instancing_options renderinglayer
+ #pragma multi_compile _ DOTS_INSTANCING_ON
+
+ #pragma vertex LitPassVertex
+ #pragma fragment LitPassFragmentCavity //<
+
+ #include "Urp2021 LitInputCavity.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl"
+
+ //TEXTURE2D(_SSCCTexture); //Declared in LitInputCavity.hlsl to support batching
+ //SAMPLER(sampler_SSCCTexture); //Declared in LitInputCavity.hlsl to support batching
+ //float _CurvatureMultiplier; //Declared in LitInputCavity.hlsl to support batching
+ //float _CavityMultiplier; //Declared in LitInputCavity.hlsl to support batching
+
+ half4 LitPassFragmentCavity(Varyings input) : SV_Target
+ {
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
+
+ #if defined(_PARALLAXMAP)
+ #if defined(REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR)
+ half3 viewDirTS = input.viewDirTS;
+ #else
+ half3 viewDirWS = GetWorldSpaceNormalizeViewDir(input.positionWS);
+ half3 viewDirTS = GetViewDirectionTangentSpace(input.tangentWS, input.normalWS, viewDirWS);
+ #endif
+ ApplyPerPixelDisplacement(viewDirTS, input.uv);
+ #endif
+
+ SurfaceData surfaceData;
+ InitializeStandardLitSurfaceData(input.uv, surfaceData);
+
+ InputData inputData;
+ InitializeInputData(input, surfaceData.normalTS, inputData);
+ SETUP_DEBUG_TEXTURE_DATA(inputData, input.uv, _BaseMap);
+
+ #ifdef _DBUFFER
+ ApplyDecalToSurfaceData(input.positionCS, surfaceData, inputData);
+ #endif
+
+ half4 color = UniversalFragmentPBR(inputData, surfaceData);
+
+ //V
+ float2 screenUV = GetNormalizedScreenSpaceUV(input.positionCS);
+ float4 sscc = SAMPLE_TEXTURE2D_X(_SSCCTexture, sampler_SSCCTexture, screenUV);
+ if (sscc.b == 1.0) //This is how you can detect if 'screen' output mode is on and avoid reading the texture, this is just for housekeeping, as _SSCCTexture will be 0.5 grey in 'screen' mode
+ {
+ float curvature = sscc.r;
+ float cavity = sscc.g;
+
+ //You could totally for example split curvature or cavity by <0 and >0, isolating the dark/bright parts and, for example, coloring them separately.
+ color.rgb += (curvature * _CurvatureMultiplier) + (cavity * _CavityMultiplier); //exactly matches screen mode with 'saturate cavity' off
+ }
+ //^
+
+ color.rgb = MixFog(color.rgb, inputData.fogCoord);
+ color.a = OutputAlpha(color.a, _Surface);
+
+ return color;
+ }
+ ENDHLSL
+ }
+
+ //-----------------------------------------------------------------------------------------------------------
+ //The rest is unchanged exact copy of Packages/com.unity.render-pipelines.universal/Shaders/Lit.shader:
+ Pass
+ {
+ Name "ShadowCaster"
+ Tags{"LightMode" = "ShadowCaster"}
+ ZWrite On
+ ZTest LEqual
+ ColorMask 0
+ Cull[_Cull]
+ HLSLPROGRAM
+ #pragma exclude_renderers gles gles3 glcore
+ #pragma target 4.5
+ #pragma shader_feature_local_fragment _ALPHATEST_ON
+ #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma multi_compile_instancing
+ #pragma multi_compile _ DOTS_INSTANCING_ON
+ #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW
+ #pragma vertex ShadowPassVertex
+ #pragma fragment ShadowPassFragment
+ #include "Urp2021 LitInputCavity.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl"
+ ENDHLSL
+ }
+ Pass
+ {
+ Name "GBuffer"
+ Tags{"LightMode" = "UniversalGBuffer"}
+ ZWrite[_ZWrite]
+ ZTest LEqual
+ Cull[_Cull]
+ HLSLPROGRAM
+ #pragma exclude_renderers gles gles3 glcore
+ #pragma target 4.5
+ #pragma shader_feature_local _NORMALMAP
+ #pragma shader_feature_local_fragment _ALPHATEST_ON
+ #pragma shader_feature_local_fragment _EMISSION
+ #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
+ #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature_local_fragment _OCCLUSIONMAP
+ #pragma shader_feature_local _PARALLAXMAP
+ #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
+ #pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
+ #pragma shader_feature_local_fragment _SPECULAR_SETUP
+ #pragma shader_feature_local _RECEIVE_SHADOWS_OFF
+ #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
+ #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
+ #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION
+ #pragma multi_compile_fragment _ _SHADOWS_SOFT
+ #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
+ #pragma multi_compile_fragment _ _LIGHT_LAYERS
+ #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
+ #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
+ #pragma multi_compile _ SHADOWS_SHADOWMASK
+ #pragma multi_compile _ DIRLIGHTMAP_COMBINED
+ #pragma multi_compile _ LIGHTMAP_ON
+ #pragma multi_compile _ DYNAMICLIGHTMAP_ON
+ #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
+ #pragma multi_compile_instancing
+ #pragma instancing_options renderinglayer
+ #pragma multi_compile _ DOTS_INSTANCING_ON
+ #pragma vertex LitGBufferPassVertex
+ #pragma fragment LitGBufferPassFragment
+ #include "Urp2021 LitInputCavity.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/Shaders/LitGBufferPass.hlsl"
+ ENDHLSL
+ }
+ Pass
+ {
+ Name "DepthOnly"
+ Tags{"LightMode" = "DepthOnly"}
+ ZWrite On
+ ColorMask 0
+ Cull[_Cull]
+ HLSLPROGRAM
+ #pragma exclude_renderers gles gles3 glcore
+ #pragma target 4.5
+ #pragma vertex DepthOnlyVertex
+ #pragma fragment DepthOnlyFragment
+ #pragma shader_feature_local_fragment _ALPHATEST_ON
+ #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma multi_compile_instancing
+ #pragma multi_compile _ DOTS_INSTANCING_ON
+ #include "Urp2021 LitInputCavity.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl"
+ ENDHLSL
+ }
+ Pass
+ {
+ Name "DepthNormals"
+ Tags{"LightMode" = "DepthNormals"}
+ ZWrite On
+ Cull[_Cull]
+ HLSLPROGRAM
+ #pragma exclude_renderers gles gles3 glcore
+ #pragma target 4.5
+ #pragma vertex DepthNormalsVertex
+ #pragma fragment DepthNormalsFragment
+ #pragma shader_feature_local _NORMALMAP
+ #pragma shader_feature_local _PARALLAXMAP
+ #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
+ #pragma shader_feature_local_fragment _ALPHATEST_ON
+ #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma multi_compile_instancing
+ #pragma multi_compile _ DOTS_INSTANCING_ON
+ #include "Urp2021 LitInputCavity.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl"
+ ENDHLSL
+ }
+ Pass
+ {
+ Name "Meta"
+ Tags{"LightMode" = "Meta"}
+ Cull Off
+ HLSLPROGRAM
+ #pragma exclude_renderers gles gles3 glcore
+ #pragma target 4.5
+ #pragma vertex UniversalVertexMeta
+ #pragma fragment UniversalFragmentMetaLit
+ #pragma shader_feature EDITOR_VISUALIZATION
+ #pragma shader_feature_local_fragment _SPECULAR_SETUP
+ #pragma shader_feature_local_fragment _EMISSION
+ #pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
+ #pragma shader_feature_local_fragment _ALPHATEST_ON
+ #pragma shader_feature_local_fragment _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
+ #pragma shader_feature_local_fragment _SPECGLOSSMAP
+ #include "Urp2021 LitInputCavity.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/Shaders/LitMetaPass.hlsl"
+ ENDHLSL
+ }
+ Pass
+ {
+ Name "Universal2D"
+ Tags{ "LightMode" = "Universal2D" }
+ Blend[_SrcBlend][_DstBlend]
+ ZWrite[_ZWrite]
+ Cull[_Cull]
+ HLSLPROGRAM
+ #pragma exclude_renderers gles gles3 glcore
+ #pragma target 4.5
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma shader_feature_local_fragment _ALPHATEST_ON
+ #pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON
+ #include "Urp2021 LitInputCavity.hlsl"
+ #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Universal2D.hlsl"
+ ENDHLSL
+ }
+ }
+
+ FallBack "Hidden/Universal Render Pipeline/FallbackError"
+ CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.LitShaderCavity2021"
+}
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity.shader.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity.shader.meta
new file mode 100755
index 000000000..2af22923f
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 Lit+Cavity.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2bb0db0105bcf1d44bbf93d452a6a50f
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ preprocessorOverride: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 LitInputCavity.hlsl b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 LitInputCavity.hlsl
new file mode 100755
index 000000000..559977dd2
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 LitInputCavity.hlsl
@@ -0,0 +1,248 @@
+#ifndef UNIVERSAL_LIT_INPUT_INCLUDED
+#define UNIVERSAL_LIT_INPUT_INCLUDED
+
+#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
+#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
+#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"
+#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/ParallaxMapping.hlsl"
+#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
+
+#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
+#define _DETAIL
+#endif
+
+// NOTE: Do not ifdef the properties here as SRP batcher can not handle different layouts.
+CBUFFER_START(UnityPerMaterial)
+float4 _BaseMap_ST;
+float4 _DetailAlbedoMap_ST;
+half4 _BaseColor;
+half4 _SpecColor;
+half4 _EmissionColor;
+half _Cutoff;
+half _Smoothness;
+half _Metallic;
+half _BumpScale;
+half _Parallax;
+half _OcclusionStrength;
+half _ClearCoatMask;
+half _ClearCoatSmoothness;
+half _DetailAlbedoMapScale;
+half _DetailNormalMapScale;
+half _Surface;
+TEXTURE2D(_SSCCTexture); //<
+SAMPLER(sampler_SSCCTexture); //<
+float _CurvatureMultiplier; //<
+float _CavityMultiplier; //<
+CBUFFER_END
+
+// NOTE: Do not ifdef the properties for dots instancing, but ifdef the actual usage.
+// Otherwise you might break CPU-side as property constant-buffer offsets change per variant.
+// NOTE: Dots instancing is orthogonal to the constant buffer above.
+#ifdef UNITY_DOTS_INSTANCING_ENABLED
+UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)
+ UNITY_DOTS_INSTANCED_PROP(float4, _BaseColor)
+ UNITY_DOTS_INSTANCED_PROP(float4, _SpecColor)
+ UNITY_DOTS_INSTANCED_PROP(float4, _EmissionColor)
+ UNITY_DOTS_INSTANCED_PROP(float , _Cutoff)
+ UNITY_DOTS_INSTANCED_PROP(float , _Smoothness)
+ UNITY_DOTS_INSTANCED_PROP(float , _Metallic)
+ UNITY_DOTS_INSTANCED_PROP(float , _BumpScale)
+ UNITY_DOTS_INSTANCED_PROP(float , _Parallax)
+ UNITY_DOTS_INSTANCED_PROP(float , _OcclusionStrength)
+ UNITY_DOTS_INSTANCED_PROP(float , _ClearCoatMask)
+ UNITY_DOTS_INSTANCED_PROP(float , _ClearCoatSmoothness)
+ UNITY_DOTS_INSTANCED_PROP(float , _DetailAlbedoMapScale)
+ UNITY_DOTS_INSTANCED_PROP(float , _DetailNormalMapScale)
+ UNITY_DOTS_INSTANCED_PROP(float , _Surface)
+UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)
+
+#define _BaseColor UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float4 , Metadata_BaseColor)
+#define _SpecColor UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float4 , Metadata_SpecColor)
+#define _EmissionColor UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float4 , Metadata_EmissionColor)
+#define _Cutoff UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_Cutoff)
+#define _Smoothness UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_Smoothness)
+#define _Metallic UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_Metallic)
+#define _BumpScale UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_BumpScale)
+#define _Parallax UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_Parallax)
+#define _OcclusionStrength UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_OcclusionStrength)
+#define _ClearCoatMask UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_ClearCoatMask)
+#define _ClearCoatSmoothness UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_ClearCoatSmoothness)
+#define _DetailAlbedoMapScale UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_DetailAlbedoMapScale)
+#define _DetailNormalMapScale UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_DetailNormalMapScale)
+#define _Surface UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata_Surface)
+#endif
+
+TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
+TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
+TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
+TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
+TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
+TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
+TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
+TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
+
+#ifdef _SPECULAR_SETUP
+ #define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
+#else
+ #define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
+#endif
+
+half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
+{
+ half4 specGloss;
+
+#ifdef _METALLICSPECGLOSSMAP
+ specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
+ #ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ specGloss.a = albedoAlpha * _Smoothness;
+ #else
+ specGloss.a *= _Smoothness;
+ #endif
+#else // _METALLICSPECGLOSSMAP
+ #if _SPECULAR_SETUP
+ specGloss.rgb = _SpecColor.rgb;
+ #else
+ specGloss.rgb = _Metallic.rrr;
+ #endif
+
+ #ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ specGloss.a = albedoAlpha * _Smoothness;
+ #else
+ specGloss.a = _Smoothness;
+ #endif
+#endif
+
+ return specGloss;
+}
+
+half SampleOcclusion(float2 uv)
+{
+ #ifdef _OCCLUSIONMAP
+ // TODO: Controls things like these by exposing SHADER_QUALITY levels (low, medium, high)
+ #if defined(SHADER_API_GLES)
+ return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
+ #else
+ half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
+ return LerpWhiteTo(occ, _OcclusionStrength);
+ #endif
+ #else
+ return half(1.0);
+ #endif
+}
+
+
+// Returns clear coat parameters
+// .x/.r == mask
+// .y/.g == smoothness
+half2 SampleClearCoat(float2 uv)
+{
+#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
+ half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
+
+#if defined(_CLEARCOATMAP)
+ clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
+#endif
+
+ return clearCoatMaskSmoothness;
+#else
+ return half2(0.0, 1.0);
+#endif // _CLEARCOAT
+}
+
+void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
+{
+#if defined(_PARALLAXMAP)
+ uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
+#endif
+}
+
+// Used for scaling detail albedo. Main features:
+// - Depending if detailAlbedo brightens or darkens, scale magnifies effect.
+// - No effect is applied if detailAlbedo is 0.5.
+half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
+{
+ // detailAlbedo = detailAlbedo * 2.0h - 1.0h;
+ // detailAlbedo *= _DetailAlbedoMapScale;
+ // detailAlbedo = detailAlbedo * 0.5h + 0.5h;
+ // return detailAlbedo * 2.0f;
+
+ // A bit more optimized
+ return half(2.0) * detailAlbedo * scale - scale + half(1.0);
+}
+
+half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
+{
+#if defined(_DETAIL)
+ half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
+
+ // In order to have same performance as builtin, we do scaling only if scale is not 1.0 (Scaled version has 6 additional instructions)
+#if defined(_DETAIL_SCALED)
+ detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
+#else
+ detailAlbedo = half(2.0) * detailAlbedo;
+#endif
+
+ return albedo * LerpWhiteTo(detailAlbedo, detailMask);
+#else
+ return albedo;
+#endif
+}
+
+half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
+{
+#if defined(_DETAIL)
+#if BUMP_SCALE_NOT_SUPPORTED
+ half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
+#else
+ half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
+#endif
+
+ // With UNITY_NO_DXT5nm unpacked vector is not normalized for BlendNormalRNM
+ // For visual consistancy we going to do in all cases
+ detailNormalTS = normalize(detailNormalTS);
+
+ return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask); // todo: detailMask should lerp the angle of the quaternion rotation, not the normals
+#else
+ return normalTS;
+#endif
+}
+
+inline void InitializeStandardLitSurfaceData(float2 uv, out SurfaceData outSurfaceData)
+{
+ half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
+ outSurfaceData.alpha = Alpha(albedoAlpha.a, _BaseColor, _Cutoff);
+
+ half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
+ outSurfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb;
+
+#if _SPECULAR_SETUP
+ outSurfaceData.metallic = half(1.0);
+ outSurfaceData.specular = specGloss.rgb;
+#else
+ outSurfaceData.metallic = specGloss.r;
+ outSurfaceData.specular = half3(0.0, 0.0, 0.0);
+#endif
+
+ outSurfaceData.smoothness = specGloss.a;
+ outSurfaceData.normalTS = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
+ outSurfaceData.occlusion = SampleOcclusion(uv);
+ outSurfaceData.emission = SampleEmission(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
+
+#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
+ half2 clearCoat = SampleClearCoat(uv);
+ outSurfaceData.clearCoatMask = clearCoat.r;
+ outSurfaceData.clearCoatSmoothness = clearCoat.g;
+#else
+ outSurfaceData.clearCoatMask = half(0.0);
+ outSurfaceData.clearCoatSmoothness = half(0.0);
+#endif
+
+#if defined(_DETAIL)
+ half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
+ float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
+ outSurfaceData.albedo = ApplyDetailAlbedo(detailUv, outSurfaceData.albedo, detailMask);
+ outSurfaceData.normalTS = ApplyDetailNormal(detailUv, outSurfaceData.normalTS, detailMask);
+#endif
+}
+
+#endif // UNIVERSAL_INPUT_SURFACE_PBR_INCLUDED
diff --git a/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 LitInputCavity.hlsl.meta b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 LitInputCavity.hlsl.meta
new file mode 100755
index 000000000..3cf83e5b5
--- /dev/null
+++ b/BlueWater/Assets/Screen Space Cavity Curvature/_SSCCTexture Examples/Urp2021 LitInputCavity.hlsl.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9acd220f8e45cb440811034109d52c6c
+ShaderIncludeImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: