From e6fa33897dde397ea190fbd7292c1356c43f41ce Mon Sep 17 00:00:00 2001 From: Seteron <38957910+Seteron@users.noreply.github.com> Date: Mon, 7 Apr 2025 13:48:15 -0500 Subject: [PATCH 1/5] Initial port Mid refactor version, not fully working --- .../AddressableAssetSettings.asset | 1 + Assets/Content/Resources/Vision.meta | 8 + .../Resources/Vision/SpacePlane.shader | 51 +++ .../Resources/Vision/SpacePlane.shader.meta | 10 + .../Content/Resources/Vision/Spaceplane.mat | 80 +++++ .../Resources/Vision/Spaceplane.mat.meta | 8 + .../Content/Resources/Vision/VisionCG.cginc | 129 ++++++++ .../Resources/Vision/VisionCG.cginc.meta | 7 + .../Resources/Vision/VisionMask.shader | 48 +++ .../Resources/Vision/VisionMask.shader.meta | 10 + .../Resources/Vision/VisionMaskBlur.shader | 76 +++++ .../Vision/VisionMaskBlur.shader.meta | 10 + Assets/Content/Scenes/Game.unity | 291 +++++++++++++----- .../Scenes/PostProcessingProfiles/Lobby.asset | 101 ++++++ .../EngineeringBorg/EngineeringBorg.prefab | 12 +- .../Structures/Walls/SteelWall.prefab | 28 +- .../Walls/SteelWallReinforced.prefab | 33 +- Assets/DefaultPrefabObjects.asset | 2 +- .../Runtime/Object/NetworkObject.cs.meta | 2 +- .../Scripts/SS3D/Systems/SS3D.Systems.asmdef | 4 +- Assets/Scripts/SS3D/Systems/Vision.meta | 8 + .../Scripts/SS3D/Systems/Vision/Editor.meta | 8 + .../Vision/Editor/VisionSystemEditor.cs | 64 ++++ .../Vision/Editor/VisionSystemEditor.cs.meta | 11 + .../SS3D/Systems/Vision/VisionMaskEffect.cs | 58 ++++ .../Systems/Vision/VisionMaskEffect.cs.meta | 11 + .../SS3D/Systems/Vision/VisionSystem.cs | 259 ++++++++++++++++ .../SS3D/Systems/Vision/VisionSystem.cs.meta | 11 + Assets/Settings/NetworkSettings.asset | 2 +- Builds/Game/Config/permissions.txt | 1 + ProjectSettings/TagManager.asset | 4 +- 31 files changed, 1237 insertions(+), 111 deletions(-) create mode 100644 Assets/Content/Resources/Vision.meta create mode 100644 Assets/Content/Resources/Vision/SpacePlane.shader create mode 100644 Assets/Content/Resources/Vision/SpacePlane.shader.meta create mode 100644 Assets/Content/Resources/Vision/Spaceplane.mat create mode 100644 Assets/Content/Resources/Vision/Spaceplane.mat.meta create mode 100644 Assets/Content/Resources/Vision/VisionCG.cginc create mode 100644 Assets/Content/Resources/Vision/VisionCG.cginc.meta create mode 100644 Assets/Content/Resources/Vision/VisionMask.shader create mode 100644 Assets/Content/Resources/Vision/VisionMask.shader.meta create mode 100644 Assets/Content/Resources/Vision/VisionMaskBlur.shader create mode 100644 Assets/Content/Resources/Vision/VisionMaskBlur.shader.meta create mode 100644 Assets/Scripts/SS3D/Systems/Vision.meta create mode 100644 Assets/Scripts/SS3D/Systems/Vision/Editor.meta create mode 100644 Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs create mode 100644 Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs.meta create mode 100644 Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs create mode 100644 Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs.meta create mode 100644 Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs create mode 100644 Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs.meta diff --git a/Assets/Content/Addressables/AddressableAssetSettings.asset b/Assets/Content/Addressables/AddressableAssetSettings.asset index 4917a38776..ae11cb5e59 100644 --- a/Assets/Content/Addressables/AddressableAssetSettings.asset +++ b/Assets/Content/Addressables/AddressableAssetSettings.asset @@ -63,6 +63,7 @@ MonoBehaviour: - {fileID: 11400000, guid: 46b9ed05a1b2cc7489177bea7080db40, type: 2} - {fileID: 11400000, guid: 1dd6dd18af88a7f48a541271e8169fbf, type: 2} - {fileID: 11400000, guid: 1af7b985abde02a47bd3e464bb8f8433, type: 2} + - {fileID: 11400000, guid: 2caa591261a883b4183d04829ce705fd, type: 2} m_BuildSettings: m_CompileScriptsInVirtualMode: 0 m_CleanupStreamingAssetsAfterBuilds: 1 diff --git a/Assets/Content/Resources/Vision.meta b/Assets/Content/Resources/Vision.meta new file mode 100644 index 0000000000..d8755833ec --- /dev/null +++ b/Assets/Content/Resources/Vision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 579cd7dcc5246ffc2a0742671f3fc104 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Resources/Vision/SpacePlane.shader b/Assets/Content/Resources/Vision/SpacePlane.shader new file mode 100644 index 0000000000..599b000606 --- /dev/null +++ b/Assets/Content/Resources/Vision/SpacePlane.shader @@ -0,0 +1,51 @@ +Shader "Custom/SpacePlane" +{ + Properties + { + _Color ("Color", Color) = (1,1,1,1) + _MainTex ("Albedo (RGB)", 2D) = "black" {} + _Glossiness ("Smoothness", Range(0,1)) = 0.5 + _Metallic ("Metallic", Range(0,1)) = 0.0 + } + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 200 + CGPROGRAM + #include "VisionCG.cginc" + #pragma surface surf Standard fullforwardshadows + + // Use shader model 3.0 target, to get nicer looking lighting + #pragma target 3.0 + + sampler2D _MainTex; + + struct Input + { + float2 uv_MainTex; + float3 worldPos; + }; + + half _Glossiness; + half _Metallic; + fixed4 _Color; + + void surf (Input IN, inout SurfaceOutputStandard o) + { + if(IsVisible(IN.worldPos)) + { + discard; + } + + float4 c = float4(0,0,0,1); + o.Albedo = c.rgb; + // Metallic and smoothness come from slider variables + o.Metallic = _Metallic; + o.Smoothness = _Glossiness; + o.Alpha = c.a; + + } + ENDCG + } + Fallback "Diffuse" +} diff --git a/Assets/Content/Resources/Vision/SpacePlane.shader.meta b/Assets/Content/Resources/Vision/SpacePlane.shader.meta new file mode 100644 index 0000000000..7d772120b3 --- /dev/null +++ b/Assets/Content/Resources/Vision/SpacePlane.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d7a3002ca6faa3b588f87113808c11bd +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Resources/Vision/Spaceplane.mat b/Assets/Content/Resources/Vision/Spaceplane.mat new file mode 100644 index 0000000000..b87d399479 --- /dev/null +++ b/Assets/Content/Resources/Vision/Spaceplane.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Spaceplane + m_Shader: {fileID: 4800000, guid: d7a3002ca6faa3b588f87113808c11bd, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Content/Resources/Vision/Spaceplane.mat.meta b/Assets/Content/Resources/Vision/Spaceplane.mat.meta new file mode 100644 index 0000000000..b376ffa733 --- /dev/null +++ b/Assets/Content/Resources/Vision/Spaceplane.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6eca9036976e09e19a4246b4f85d04ce +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Resources/Vision/VisionCG.cginc b/Assets/Content/Resources/Vision/VisionCG.cginc new file mode 100644 index 0000000000..7d6e1ba541 --- /dev/null +++ b/Assets/Content/Resources/Vision/VisionCG.cginc @@ -0,0 +1,129 @@ +#ifndef VISION_CG_INCLUDED +#define VISION_CG_INCLUDED + + +UNITY_DECLARE_TEX2D(_CameraDepthTexture); +UNITY_DECLARE_TEX2D(_VisionMap); +float4x4 _PlayerCameraInvViewProj; +float4 _PlayerPos; +float _PlayerAngle; +float _ViewConeWidth; +float _ViewRange; +//TODO setup for multiplatform + +inline bool IsVisible(float2 screenUV); +inline bool IsVisible(float3 posWorld); + +inline float2 WorldToFov(float3 posWorld); +inline float4 FragToClip(float4 frag); +inline float3 ClipToWorld(float2 posClip); +inline bool depthIsSky(float depth); +inline float modulo(float x, float y); + + +//Returns true if the point should be visible to the player +//Prefer posWorld version where possible + +//Use with fragment position in any normal fragment shader +inline bool IsVisible(float4 posFrag) +{ + float4 posClip = FragToClip(posFrag); + return IsVisible(posClip.xy); +} +//Use with UVs in postprocessing shaders +inline bool IsVisible(float2 screenUV) +{ + float3 posWorld = ClipToWorld(screenUV); + return IsVisible(posWorld); +} +//Checks world coordinates against polar depth texture +//Use with world positions in shaders that supply them +inline bool IsVisible(float3 posWorld) +{ + float2 polarCoords = WorldToFov(posWorld); + + float centerAngle = _ViewConeWidth / 2; + float centerAngleWorld = _PlayerAngle; + float rawOffset = polarCoords.y - centerAngleWorld; + float clampedOffset = modulo(rawOffset, UNITY_TWO_PI) - UNITY_PI; + + //return early if angle is outside the view cone + if ((abs(clampedOffset) > centerAngle) && (polarCoords.x > 1)) return false; + + float currentAngle = centerAngle + clampedOffset; + float2 viewUV = float2(currentAngle / _ViewConeWidth, 0); + + float currentDepth = polarCoords.x; + float wallDepth = UNITY_SAMPLE_TEX2D(_VisionMap, viewUV).r * _ViewRange; + + return currentDepth < wallDepth; +} + +// Inputs fragment position (pixelX, pixelY, depth, perspective) +// Outputs clip position([-1,1],[-1,1], depth, perspective) +inline float4 FragToClip(float4 frag) +{ + frag.xy /= _ScreenParams.xy; + frag.xy = frag.xy * 2 - 1; + return frag; +} + +//Converts clip position ([-1,1][-1,1]) to world position +inline float3 ClipToWorld(float2 posClip) +{ + float2 screenUV = posClip * 0.5 + 0.5; + float rawDepth = UNITY_SAMPLE_TEX2D(_CameraDepthTexture, screenUV).r; + + #if !defined(UNITY_REVERSED_Z) + rawDepth = lerp(UNITY_NEAR_CLIP_VALUE, 1, rawDepth); + #endif + + float4 adjClip = float4(posClip, rawDepth, 1); + + float4 worldspace = mul(_PlayerCameraInvViewProj, adjClip); + + if(depthIsSky(rawDepth)) + { + //Ensures skybox is always visible + //Skybox should have dedicated handling in the future + return _PlayerPos; + } + return worldspace.xyz / worldspace.w; + +} + +//Converts world position to polar coordinates (distance, radians) relative to player +inline float2 WorldToFov(float3 posWorld) +{ + float2 posFov = (posWorld - _PlayerPos).xz; + float rawAngle; + + if (posFov.x == 0) rawAngle = 0; + else rawAngle = atan2(posFov.x, -posFov.y); + + float adjAngle = -rawAngle; + float clampedAngle = modulo(adjAngle, UNITY_TWO_PI); + + float worldDepth = length(posFov); + float2 polarCoords = float2(worldDepth, clampedAngle); + + return polarCoords; +} + +//Detect if skybox, requires special handling +inline bool depthIsSky(float depth) +{ + #if defined(UNITY_REVERSED_Z) + return (depth <= 0.0); + #else + return (depth >= 1.0); + #endif +} + +inline float modulo(float x, float y) +{ + return x - y * floor(x/y); +} + + +#endif diff --git a/Assets/Content/Resources/Vision/VisionCG.cginc.meta b/Assets/Content/Resources/Vision/VisionCG.cginc.meta new file mode 100644 index 0000000000..056fe0ef3f --- /dev/null +++ b/Assets/Content/Resources/Vision/VisionCG.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5c2d108105f6ec69e8ddc2b1ba7082e4 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Resources/Vision/VisionMask.shader b/Assets/Content/Resources/Vision/VisionMask.shader new file mode 100644 index 0000000000..47fec69c80 --- /dev/null +++ b/Assets/Content/Resources/Vision/VisionMask.shader @@ -0,0 +1,48 @@ +Shader "Hidden/Custom/VisionMask" +{ + //TODO Clean this up for multiplatform and add comments + SubShader + { + Cull Off ZWrite Off ZTest Always + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + #include "VisionCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + UNITY_DECLARE_TEX2D(_MainTex); + v2f vert(appdata v) + { + v2f o; + o.vertex = float4(v.vertex.xy, 0, 1); + o.uv = v.vertex.xy; + + if (_ProjectionParams.x < 0) o.uv.y = 1 - o.uv.y; + + return o; + } + float4 frag(v2f i) : SV_Target + { + if(IsVisible(i.uv)) return float4(1,1,1,1); + else return float4(0,0,0,0); + } + + ENDCG + } + } +} diff --git a/Assets/Content/Resources/Vision/VisionMask.shader.meta b/Assets/Content/Resources/Vision/VisionMask.shader.meta new file mode 100644 index 0000000000..97fe0a1e75 --- /dev/null +++ b/Assets/Content/Resources/Vision/VisionMask.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 15369a85bf338fdb7af4340cb5d185ec +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Resources/Vision/VisionMaskBlur.shader b/Assets/Content/Resources/Vision/VisionMaskBlur.shader new file mode 100644 index 0000000000..ad3251b586 --- /dev/null +++ b/Assets/Content/Resources/Vision/VisionMaskBlur.shader @@ -0,0 +1,76 @@ +Shader "Hidden/Custom/VisionMaskBlur" +{ + //TODO Clean this up for multiplatform and add comments + SubShader + { + Cull Off ZWrite Off ZTest Always + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + UNITY_DECLARE_TEX2D(_MainTex); + v2f vert(appdata v) + { + v2f o; + o.vertex = float4(v.vertex.xy, 0, 1); + o.uv = (v.vertex.xy + 1) * 0.5; + #if UNITY_UV_STARTS_AT_TOP + o.uv = o.uv * float2(1.0, -1.0) + float2(0.0, 1.0); + #endif + return o; + } + + float _FovBlurQuality; //Angular samples + float _FovBlurDirections; //Linear samples + float2 _FovBlurSize; + UNITY_DECLARE_TEX2D(_FovTex); + float4 frag(v2f IN) : SV_Target + { + float2 diameter = (_FovBlurSize / _ScreenParams.xy) * 2; + float average; + for(float angle = 0; angle < UNITY_TWO_PI; angle += UNITY_TWO_PI / _FovBlurDirections) + { + for(float sample = 1; sample <= _FovBlurQuality; sample++) + { + float2 offset = float2(cos(angle),sin(angle)) * diameter * (sample / _FovBlurQuality); + float2 sampleUV = IN.uv + offset; + average += length(UNITY_SAMPLE_TEX2D(_FovTex, sampleUV)) < 0.5; + } + } + average /= _FovBlurQuality * _FovBlurDirections; + + float4 col = UNITY_SAMPLE_TEX2D(_MainTex, IN.uv); + + if(length(UNITY_SAMPLE_TEX2D(_FovTex, IN.uv)) < 0.5) //Check if location is masked + { + col = float4(0, 0, 0, 1); + } + + if(average > 0) + { + average = average * 4; + col = float4(0,0,0,1) * average + col * (1 - average); + } + return col; + } + + ENDCG + } + } +} diff --git a/Assets/Content/Resources/Vision/VisionMaskBlur.shader.meta b/Assets/Content/Resources/Vision/VisionMaskBlur.shader.meta new file mode 100644 index 0000000000..3fafbe34ff --- /dev/null +++ b/Assets/Content/Resources/Vision/VisionMaskBlur.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a2c58fdd58bc3e1a9a6970b779eebb57 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Scenes/Game.unity b/Assets/Content/Scenes/Game.unity index eb5d9d9459..62ff5ad438 100644 --- a/Assets/Content/Scenes/Game.unity +++ b/Assets/Content/Scenes/Game.unity @@ -234,6 +234,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852762468231620 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 3 k__BackingField: {fileID: 0} @@ -249,12 +255,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852762468231620 - k__BackingField: 0 --- !u!1 &274660130 GameObject: m_ObjectHideFlags: 0 @@ -434,6 +434,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852762014670918 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 6 k__BackingField: {fileID: 0} @@ -449,12 +455,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852762014670918 - k__BackingField: 0 --- !u!1 &478499394 GameObject: m_ObjectHideFlags: 0 @@ -563,6 +563,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 0 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852762399064293 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 10 k__BackingField: {fileID: 0} @@ -578,12 +584,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 0 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852762399064293 - k__BackingField: 0 --- !u!1 &516802433 GameObject: m_ObjectHideFlags: 0 @@ -629,6 +629,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852762495497741 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 1 k__BackingField: {fileID: 0} @@ -644,12 +650,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852762495497741 - k__BackingField: 0 --- !u!4 &516802436 Transform: m_ObjectHideFlags: 0 @@ -830,6 +830,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852761210609344 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 2 k__BackingField: {fileID: 0} @@ -845,12 +851,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852761210609344 - k__BackingField: 0 --- !u!1 &661652615 GameObject: m_ObjectHideFlags: 0 @@ -915,6 +915,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852759222350558 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 7 k__BackingField: {fileID: 0} @@ -930,12 +936,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852759222350558 - k__BackingField: 0 --- !u!224 &669009801 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 7839063151111624133, guid: ef47552bb578a784f8ef9916b369b6fb, type: 3} @@ -1284,6 +1284,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852761931311011 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 1 k__BackingField: {fileID: 0} @@ -1299,12 +1305,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852761931311011 - k__BackingField: 0 --- !u!114 &914529552 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 4302234173120300195, guid: 313c7a6f7eaaf4f4cb80cbe0fe77005d, type: 3} @@ -1418,6 +1418,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852758797354380 + k__BackingField: 0 k__BackingField: 0 k__BackingField: 0 k__BackingField: {fileID: 0} @@ -1433,12 +1439,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852758797354380 - k__BackingField: 0 --- !u!1 &1000564555 GameObject: m_ObjectHideFlags: 0 @@ -1502,6 +1502,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852761472596133 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 8 k__BackingField: {fileID: 0} @@ -1518,12 +1524,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852761472596133 - k__BackingField: 0 --- !u!1001 &1002102147 PrefabInstance: m_ObjectHideFlags: 0 @@ -1633,7 +1633,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4468402021075485018, guid: cc5383d385556f443b2a7d3202f2b2c1, type: 3} propertyPath: m_AnchoredPosition.y - value: -230.00005 + value: -230 objectReference: {fileID: 0} - target: {fileID: 4468402021449001342, guid: cc5383d385556f443b2a7d3202f2b2c1, type: 3} propertyPath: m_AnchoredPosition.x @@ -2084,6 +2084,89 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1264356887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1264356888} + - component: {fileID: 1264356890} + - component: {fileID: 1264356889} + m_Layer: 0 + m_Name: SpacePlane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1264356888 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264356887} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1.01, z: 0} + m_LocalScale: {x: 10, y: 1, z: 10} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1756968541} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1264356889 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264356887} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + 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: 6eca9036976e09e19a4246b4f85d04ce, 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 &1264356890 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1264356887} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1448301644 GameObject: m_ObjectHideFlags: 0 @@ -2203,6 +2286,7 @@ Transform: - {fileID: 274660131} - {fileID: 478499395} - {fileID: 478615867} + - {fileID: 1756968541} m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2218,6 +2302,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852761335889925 + k__BackingField: 0 k__BackingField: 0 k__BackingField: 0 k__BackingField: {fileID: 0} @@ -2249,12 +2339,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852761335889925 - k__BackingField: 0 --- !u!114 &1509603938 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 7356885341650864201, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} @@ -2343,6 +2427,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852762284701941 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 5 k__BackingField: {fileID: 0} @@ -2358,12 +2448,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852762284701941 - k__BackingField: 0 --- !u!1 &1679380531 GameObject: m_ObjectHideFlags: 0 @@ -2395,6 +2479,63 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1756968540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1756968541} + - component: {fileID: 1756968542} + m_Layer: 0 + m_Name: VisionSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1756968541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1756968540} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1264356888} + m_Father: {fileID: 1506918115} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1756968542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1756968540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: af299b0e71ae82ed3982954cf49b476c, type: 3} + m_Name: + m_EditorClassIdentifier: + showDebug: 0 + radialDepthTex: {fileID: 0} + target: {fileID: 0} + viewRange: 35 + viewConeWidth: 360 + obstacleMask: + serializedVersion: 2 + m_Bits: 65536 + meshResolution: 3 + edgeResolveIterations: 0 + edgeDistanceThreshold: 0 + detectionOffset: {x: 0, y: 0, z: 0} --- !u!4 &1820032161 stripped Transform: m_CorrespondingSourceObject: {fileID: 7939122254879796211, guid: 2dff3e99d61d74c4282d2983e482289c, type: 3} @@ -2445,6 +2586,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 65535 + k__BackingField: 0 + _scenePathHash: 2499635508 + k__BackingField: 10735852761315043637 + k__BackingField: 0 k__BackingField: 1 k__BackingField: 4 k__BackingField: {fileID: 0} @@ -2460,12 +2607,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 65535 - k__BackingField: 0 - _scenePathHash: 2499635508 - k__BackingField: 10735852761315043637 - k__BackingField: 0 --- !u!114 &1927660779 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4112,6 +4253,10 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 8350229863795259186, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8522562115269630352, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 diff --git a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset index e8488548bd..b83b851854 100644 --- a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset +++ b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset @@ -103,6 +103,31 @@ MonoBehaviour: dirtIntensity: overrideState: 0 value: 0 +--- !u!114 &-5967831594084810270 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 1 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 0 + value: 3 + Directions: + overrideState: 0 + value: 16 + Size: + overrideState: 0 + value: {x: 3, y: 3} --- !u!114 &-4984722078144235035 MonoBehaviour: m_ObjectHideFlags: 3 @@ -157,6 +182,31 @@ MonoBehaviour: fastMode: overrideState: 0 value: 0 +--- !u!114 &-3474480085703392108 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 1 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 0 + value: 3 + Directions: + overrideState: 0 + value: 16 + Size: + overrideState: 0 + value: {x: 3, y: 3} --- !u!114 &-2400775673892574313 MonoBehaviour: m_ObjectHideFlags: 3 @@ -1468,6 +1518,31 @@ MonoBehaviour: - 0.5 - 0.5 - 0.5 +--- !u!114 &-1513921829866023847 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 1 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 0 + value: 12.71 + Directions: + overrideState: 0 + value: 22.13 + Size: + overrideState: 0 + value: {x: 6.53, y: 9.87} --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1489,6 +1564,32 @@ MonoBehaviour: - {fileID: -4984722078144235035} - {fileID: -2400775673892574313} - {fileID: -9132564074991082903} + - {fileID: -3474480085703392108} +--- !u!114 &1043265621962283185 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 1 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 1 + value: 3 + Directions: + overrideState: 1 + value: 16 + Size: + overrideState: 1 + value: {x: 3, y: 3} --- !u!114 &4662285201658728894 MonoBehaviour: m_ObjectHideFlags: 3 diff --git a/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab b/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab index 3800fdd8b8..9e6305c7ca 100644 --- a/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab +++ b/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab @@ -1341,6 +1341,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 92 + k__BackingField: 0 + _scenePathHash: 0 + k__BackingField: 0 + k__BackingField: 7822834359831465168 k__BackingField: 0 k__BackingField: 0 k__BackingField: {fileID: 0} @@ -1359,12 +1365,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 91 - k__BackingField: 0 - _scenePathHash: 0 - k__BackingField: 0 - k__BackingField: 7822834359831465168 --- !u!114 &9083373980788225397 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab index cde92f0411..a690061477 100644 --- a/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab @@ -10,7 +10,7 @@ GameObject: m_Component: - component: {fileID: 5022873095643711340} - component: {fileID: 7691160284830400485} - m_Layer: 8 + m_Layer: 16 m_Name: RightViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} @@ -55,7 +55,7 @@ GameObject: m_Component: - component: {fileID: 6491318275190557950} - component: {fileID: 3247630703720011440} - m_Layer: 8 + m_Layer: 16 m_Name: BackViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} @@ -100,7 +100,7 @@ GameObject: m_Component: - component: {fileID: 4770819067178016503} - component: {fileID: 3843643310579965483} - m_Layer: 8 + m_Layer: 16 m_Name: LeftViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} @@ -255,6 +255,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 139 + k__BackingField: 0 + _scenePathHash: 0 + k__BackingField: 0 + k__BackingField: 11535764229462028423 k__BackingField: 0 k__BackingField: 0 k__BackingField: {fileID: 0} @@ -271,12 +277,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 120 - k__BackingField: 0 - _scenePathHash: 0 - k__BackingField: 0 - k__BackingField: 11535764229462028423 --- !u!114 &3395800597640737248 MonoBehaviour: m_ObjectHideFlags: 0 @@ -309,8 +309,12 @@ MonoBehaviour: xOpposite: {fileID: 2858846960137979044, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} xTriple: {fileID: -9073621571367689160, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} xQuad: {fileID: 4199670461815796357, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - viewObstacles: [] - opaque: 0 + viewObstacles: + - {fileID: 3334414246056966601} + - {fileID: 1361261120174024331} + - {fileID: 7790124558541205835} + - {fileID: 1437294527526757322} + opaque: 1 --- !u!114 &9201248993357086619 MonoBehaviour: m_ObjectHideFlags: 0 @@ -377,7 +381,7 @@ GameObject: m_Component: - component: {fileID: 1313969126098040064} - component: {fileID: 5971711339440298923} - m_Layer: 8 + m_Layer: 16 m_Name: ForwardViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab index b65bcc548c..cbe1aacded 100644 --- a/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab @@ -10,7 +10,7 @@ GameObject: m_Component: - component: {fileID: 5022873095643711340} - component: {fileID: 7691160284830400485} - m_Layer: 8 + m_Layer: 16 m_Name: RightViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} @@ -55,7 +55,7 @@ GameObject: m_Component: - component: {fileID: 6491318275190557950} - component: {fileID: 3247630703720011440} - m_Layer: 8 + m_Layer: 16 m_Name: BackViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} @@ -100,7 +100,7 @@ GameObject: m_Component: - component: {fileID: 4770819067178016503} - component: {fileID: 3843643310579965483} - m_Layer: 8 + m_Layer: 16 m_Name: LeftViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} @@ -253,11 +253,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} m_Name: m_EditorClassIdentifier: + NetworkObserver: {fileID: 0} + k__BackingField: 174 + k__BackingField: 0 + _scenePathHash: 0 + k__BackingField: 0 + k__BackingField: 15843822419293565003 k__BackingField: 0 k__BackingField: 0 k__BackingField: {fileID: 0} _networkBehaviours: - {fileID: 3011383631706744183} + - {fileID: -6351445020948675988} k__BackingField: {fileID: 0} k__BackingField: [] SerializedTransformProperties: @@ -268,12 +275,6 @@ MonoBehaviour: _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 - NetworkObserver: {fileID: 0} - k__BackingField: 174 - k__BackingField: 0 - _scenePathHash: 0 - k__BackingField: 0 - k__BackingField: 15843822419293565003 --- !u!114 &3011383631706744183 MonoBehaviour: m_ObjectHideFlags: 0 @@ -306,8 +307,12 @@ MonoBehaviour: xOpposite: {fileID: -7744038958267161825, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} xTriple: {fileID: 5869884649093938551, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} xQuad: {fileID: 4199670461815796357, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - viewObstacles: [] - opaque: 0 + viewObstacles: + - {fileID: 3334414246056966601} + - {fileID: 1361261120174024331} + - {fileID: 7790124558541205835} + - {fileID: 1437294527526757322} + opaque: 1 --- !u!114 &6332977986281627431 MonoBehaviour: m_ObjectHideFlags: 0 @@ -334,9 +339,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ff65a9dda1ef18f4cbc16ee4d1aee066, type: 3} m_Name: m_EditorClassIdentifier: - _componentIndexCache: 255 + _componentIndexCache: 1 _addedNetworkObject: {fileID: -2900075557854325373} - _networkObjectCache: {fileID: 0} + _networkObjectCache: {fileID: -2900075557854325373} _asset: {fileID: 11400000, guid: 9b16536c8b6953b459e5906389bc4cdd, type: 2} _tileObjectSo: {fileID: 11400000, guid: 8723b9e3524165d4abbbb6e295e85330, type: 2} --- !u!1 &7790124558541205835 @@ -349,7 +354,7 @@ GameObject: m_Component: - component: {fileID: 1313969126098040064} - component: {fileID: 5971711339440298923} - m_Layer: 8 + m_Layer: 16 m_Name: ForwardViewObstacle m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/DefaultPrefabObjects.asset b/Assets/DefaultPrefabObjects.asset index 9e62d4fee5..7e0d4ba793 100644 --- a/Assets/DefaultPrefabObjects.asset +++ b/Assets/DefaultPrefabObjects.asset @@ -52,8 +52,8 @@ MonoBehaviour: - {fileID: -4994790824565799921, guid: a28267798293970468ab30803632a3f7, type: 3} - {fileID: 7823849392942818498, guid: 854451834f026fb4f860bf0e977a104c, type: 3} - {fileID: 7564222845035831833, guid: 3b33b5cf16a677a4e85a110679cde32a, type: 3} - - {fileID: -752502555905215929, guid: 11a2276338ebc64429dfc565b491e437, type: 3} - {fileID: -5633820156739102180, guid: 4c966398d6624164c910cd29c1faa980, type: 3} + - {fileID: -752502555905215929, guid: 11a2276338ebc64429dfc565b491e437, type: 3} - {fileID: -7828078595381397262, guid: 50dd6be959d44844ab1abf8a3f2adb01, type: 3} - {fileID: -7828078595381397262, guid: d07b5fba3896ff448855d6e54356c365, type: 3} - {fileID: -7828078595381397262, guid: a777a6da30f0704478e25312963a8151, type: 3} diff --git a/Assets/FishNet/Runtime/Object/NetworkObject.cs.meta b/Assets/FishNet/Runtime/Object/NetworkObject.cs.meta index 228ed52d63..693a5ce037 100644 --- a/Assets/FishNet/Runtime/Object/NetworkObject.cs.meta +++ b/Assets/FishNet/Runtime/Object/NetworkObject.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: bf9191e2e07d29749bca3a1ae44e4bc8, type: 3} + icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef b/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef index 461b3792aa..66baca2bb9 100644 --- a/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef +++ b/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef @@ -26,7 +26,9 @@ "GUID:493bb11add906094faa30425cab7ce2e", "GUID:eec0964c48f6f4e40bc3ec2257ccf8c5", "GUID:776d03a35f1b52c4a9aed9f56d7b4229", - "GUID:84651a3751eca9349aac36a66bba901b" + "GUID:84651a3751eca9349aac36a66bba901b", + "GUID:d60799ab2a985554ea1a39cd38695018", + "GUID:a35efad8797223d499f8c68b1f545dbc" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Scripts/SS3D/Systems/Vision.meta b/Assets/Scripts/SS3D/Systems/Vision.meta new file mode 100644 index 0000000000..9094c57c4c --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d0ad4fddcfdc3bc3a7e96be342ec619 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Vision/Editor.meta b/Assets/Scripts/SS3D/Systems/Vision/Editor.meta new file mode 100644 index 0000000000..abd6a4e408 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f60855b57f968a8e2a70dc7803dc6d5b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs new file mode 100644 index 0000000000..92997e9025 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs @@ -0,0 +1,64 @@ +using UnityEditor; +using UnityEngine; + +namespace SS3D.Systems.Vision.Editor +{ + [CustomEditor(typeof(VisionSystem))] + public class VisionEditor : UnityEditor.Editor + { + private VisionSystem vision; + + private SerializedProperty detectionOffsetProp; + private SerializedProperty viewConeWidthProp; + private SerializedProperty viewRangeProp; + + private void OnEnable() + { + vision = (VisionSystem) target; + + detectionOffsetProp = serializedObject.FindProperty("detectionOffset"); + viewConeWidthProp = serializedObject.FindProperty("viewConeWidth"); + viewRangeProp = serializedObject.FindProperty("viewRange"); + } + + private void OnSceneGUI() + { + if (!vision.showDebug) return; + serializedObject.Update(); + + GUIStyle labelStyle = new GUIStyle {fontSize = 14}; + var viewPoints = vision.viewPoints; + + Vector3 viewAngleA = vision.DirectionFromAngle(-viewConeWidthProp.floatValue / 2, false); + Vector3 viewAngleB = vision.DirectionFromAngle(viewConeWidthProp.floatValue / 2, false); + + var center = vision.target.position + detectionOffsetProp.vector3Value; + + Handles.color = Color.green; + Handles.Label(center, "center"); + + labelStyle.normal.textColor = Color.green; + Handles.DrawWireArc(center, Vector3.up, Vector3.forward, + 360, + viewRangeProp.floatValue); + + Handles.DrawLine(center, center + viewAngleA * viewRangeProp.floatValue); + Handles.DrawLine(center, center + viewAngleB * viewRangeProp.floatValue); + + // Draw Visual Vision outline; + Handles.color = Color.yellow; + GUIStyle style = new GUIStyle(); + style.normal.textColor = Color.red; + + Handles.Label(viewPoints[0], "0", style); + for (int i = 1; i <= vision.stepCount; i++) + { + Handles.Label(viewPoints[i % vision.stepCount], i.ToString(), style); + Handles.color = Color.yellow; + Handles.DrawLine(viewPoints[i % vision.stepCount], center); + Handles.color = Color.cyan; + Handles.DrawLine(viewPoints[i % vision.stepCount], viewPoints[(i + 1) % vision.stepCount]); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs.meta b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs.meta new file mode 100644 index 0000000000..c6f0e1393b --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 605fdba6734adb5d7b4de429fbf5b283 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs new file mode 100644 index 0000000000..dd07a3e819 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; +using UnityEngine.Rendering; + +[Serializable] +[PostProcess(typeof(VisionRenderer), PostProcessEvent.AfterStack, "Custom/Vision")] +public sealed class VisionFilter : PostProcessEffectSettings +{ + public FloatParameter Quality = new FloatParameter {value = 3}; + public FloatParameter Directions = new FloatParameter {value = 16}; + public Vector2Parameter Size = new Vector2Parameter {value = new Vector2(3,3)}; + + public override bool IsEnabledAndSupported(PostProcessRenderContext context) + { + return enabled.value + && Quality.value > 0f + && Directions.value > 0f + && Size.value.x >0f + && Size.value.y >0f; + } +} +public sealed class VisionRenderer : PostProcessEffectRenderer +{ + public override void Render(PostProcessRenderContext context) + { + var camera = context.camera; + if((int)camera.depthTextureMode < 1) + { + camera.depthTextureMode += 1; + } + var worldToCameraMatrix = context.camera.worldToCameraMatrix; + var projectionMatrix = GL.GetGPUProjectionMatrix(context.camera.projectionMatrix, false); + var viewProjectionMatrix = projectionMatrix * (worldToCameraMatrix); + var fovTexture = RenderTexture.GetTemporary(Screen.width,Screen.height); + + var sheet = context.propertySheets.Get(Shader.Find("Hidden/Custom/VisionMask")); + + sheet.properties.SetMatrix("_PlayerCameraInvViewProj", viewProjectionMatrix.inverse); + + context.command.BlitFullscreenTriangle(context.source, fovTexture, sheet, 0,false,null,true); + + + sheet = context.propertySheets.Get(Shader.Find("Hidden/Custom/VisionMaskBlur")); + + sheet.properties.SetFloat("_FovBlurQuality", settings.Quality); + sheet.properties.SetFloat("_FovBlurDirections", settings.Directions); + sheet.properties.SetVector("_FovBlurSize", settings.Size); + sheet.properties.SetMatrix("_PlayerCameraInvViewProj", viewProjectionMatrix.inverse); + sheet.properties.SetTexture("_FovTex", fovTexture); + + context.command.BlitFullscreenTriangle(context.source, context.destination, sheet, 0,false,null,true); + + RenderTexture.ReleaseTemporary(fovTexture); + } +} diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs.meta b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs.meta new file mode 100644 index 0000000000..87f086db8f --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9788bbdb5ef1f158d9c84116721f0a30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs b/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs new file mode 100644 index 0000000000..3b0da2987a --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs @@ -0,0 +1,259 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Unity.Collections; +using Unity.Jobs; +using Unity.Profiling; +using UnityEngine; +using UnityEngine.Rendering; +using SS3D.Core; +using SS3D.Systems.Screens; +using SS3D.Systems.Entities.Events; +using Coimbra; +using Coimbra.Services.Events; +using SS3D.Systems.Tile.Connections.AdjacencyTypes; +using SS3D.Systems.Tile.Connections; +using FishNet.Utility.Performance; +using DG.Tweening; +using FishNet.Configuring; + +namespace SS3D.Systems.Vision +{ + public class VisionSystem : Core.Behaviours.System + { + [SerializeField] + public bool showDebug; + [SerializeField] + private Texture2D visionMap; + + [SerializeField] + public Transform target = null; + + [Space] + [SerializeField] + private float viewRange = 35; + + [Range(0, 360)] + [SerializeField] + [Tooltip("The field of view width")] + private float viewConeWidth = 360; + + [SerializeField] + [Tooltip("Which layers this can't see through")] + private LayerMask obstacleMask = 0; + + [SerializeField] + [Tooltip("Raycasts per degree")] + private float resolution = 1f; + + [SerializeField] + [Tooltip("The center of the field of view's actual wall detection")] + private Vector3 detectionOffset = Vector3.zero; + + [NonSerialized] + public NativeArray viewPoints; + [NonSerialized] + public int stepCount; + + // Buffer for view cast batching + private ViewCastInfo[] viewCastResults; + // Buffer for view cast angles + private float[] angleBuffer; + + static ProfilerMarker MapPerformanceMarker = new ProfilerMarker("Vision.VisionMap"); + static ProfilerMarker PointsPerformanceMarker = new ProfilerMarker("Vision.ViewPoints"); + + protected override void OnAwake() + { + base.OnAwake(); + + AddHandle(LocalPlayerObjectChanged.AddListener(HandlePlayerObjectChanged)); + } + + protected override void OnEnabled() + { + // Only run when graphics are present + // TODO: Only run on client + if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null) + { + gameObject.Dispose(gameObject); + } + + visionMap = new Texture2D(Mathf.RoundToInt(viewConeWidth * resolution), 1, TextureFormat.R16, false); + visionMap.wrapMode = TextureWrapMode.Repeat; + visionMap.filterMode = FilterMode.Bilinear; + Shader.SetGlobalTexture("_VisionMap", visionMap); + + stepCount = Mathf.CeilToInt(viewConeWidth * resolution); + viewPoints = new NativeArray(stepCount + 1, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); + + viewCastResults = new ViewCastInfo[stepCount + 1]; + angleBuffer = new float[viewCastResults.Length]; + } + + protected override void OnDisabled() + { + viewPoints.Dispose(); + } + + private void HandlePlayerObjectChanged(ref EventContext context, in LocalPlayerObjectChanged e) + { + target = e.PlayerObject.transform; + } + + private void LateUpdate() + { + if (!target) + { + return; + } + + transform.position = target.transform.position; + float angle = target.transform.rotation.eulerAngles.y * Mathf.Deg2Rad; + + Shader.SetGlobalVector("_PlayerPos", target.transform.position); + Shader.SetGlobalFloat("_PlayerAngle", angle); + Shader.SetGlobalFloat("_ViewConeWidth", viewConeWidth * Mathf.Deg2Rad); + Shader.SetGlobalFloat("_ViewRange", viewRange); + + DrawVisionMap(); + } + + public Vector3 DirectionFromAngle(float angleInDegrees, bool angleIsGlobal) + { + if (!angleIsGlobal) + { + angleInDegrees += target.transform.eulerAngles.y; + } + + Quaternion rotation = Quaternion.AngleAxis(angleInDegrees, Vector3.up); + return rotation * Vector3.forward; + } + + private void DrawVisionMap() + { + PointsPerformanceMarker.Begin(); + CalculateViewPoints(); + PointsPerformanceMarker.End(); + + MapPerformanceMarker.Begin(); + + if (visionMap.width != stepCount) + { + visionMap.Reinitialize(stepCount, 1); + } + + Color[] depths = new Color[stepCount + 1]; + for (int i = 0; i < stepCount; i++) + { + Vector3 positionOS = viewPoints[i % stepCount] - target.transform.position; + positionOS.y = 0; + depths[i] = new Color(positionOS.magnitude / viewRange, 0, 0); + } + +#pragma warning disable UNT0017 // SetPixels invocation is slow + visionMap.SetPixels(depths); +#pragma warning restore UNT0017 // SetPixels invocation is slow + visionMap.Apply(); + + MapPerformanceMarker.End(); + } + + private void CalculateViewPoints() + { + stepCount = Mathf.CeilToInt(viewConeWidth * resolution); + float stepAngleSize = viewConeWidth / stepCount; + float halfCone = viewConeWidth / 2; + + if (viewCastResults.Length < stepCount) + { + Array.Resize(ref viewCastResults, stepCount + 1); + Array.Resize(ref angleBuffer, stepCount + 1); + viewPoints.Dispose(); + viewPoints = new NativeArray(stepCount + 1, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); + } + + for (int i = 0; i < stepCount; i++) + { + angleBuffer[i] = (target.transform.rotation.eulerAngles.y - halfCone) + (stepAngleSize * i); + } + + ViewCastBatch(angleBuffer, viewCastResults); + for (int i = 0; i < stepCount; i++) + { + ViewCastInfo newViewCast = viewCastResults[i]; + + viewPoints[i] = viewCastResults[i].Point; + } + } + + private void ViewCastBatch(float[] angles, ViewCastInfo[] resultArray) + { + if (resultArray.Length < angles.Length) + { + throw new ArgumentException("Results can't be smaller than angles", nameof(resultArray)); + } + + // Allocate arrays for raycast data + NativeArray hits = new NativeArray(angles.Length, Allocator.TempJob); + NativeArray commands = new NativeArray(angles.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); + + Vector3 origin = target.transform.position; + + // Create raycast commands + for (int i = 0; i < angles.Length; i++) + { + commands[i] = new RaycastCommand(origin, DirectionFromAngle(angles[i], true), viewRange, obstacleMask); + } + + // Schedule raycasts + JobHandle handle = RaycastCommand.ScheduleBatch(commands, hits, 1); + + // Wait for the raycasting to complete + handle.Complete(); + + // Fill results array + for (int i = 0; i < hits.Length; i++) + { + RaycastHit hit = hits[i]; + + // Collider is only valid if hit (yes, this is in the docs) + if (hit.collider) + { + resultArray[i] = new ViewCastInfo(true, hit.point, hit.distance, angles[i], hit.normal); + } + else + { + resultArray[i] = new ViewCastInfo( + false, + origin + (DirectionFromAngle(angles[i], true) * viewRange), + viewRange, + angles[i], + hit.normal); + } + } + + // Dispose raycast data + hits.Dispose(); + commands.Dispose(); + } + + public struct ViewCastInfo + { + public bool Hit; + public Vector3 Point; + public float Distance; + public float Angle; + public Vector3 Normal; + + public ViewCastInfo(bool hit, Vector3 point, float distance, float angle, Vector3 normal) + { + Hit = hit; + Point = point; + Distance = distance; + Angle = angle; + Normal = normal; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs.meta b/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs.meta new file mode 100644 index 0000000000..5c051e173c --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af299b0e71ae82ed3982954cf49b476c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/NetworkSettings.asset b/Assets/Settings/NetworkSettings.asset index 9f05d2ccfd..f15a302c0d 100644 --- a/Assets/Settings/NetworkSettings.asset +++ b/Assets/Settings/NetworkSettings.asset @@ -17,5 +17,5 @@ MonoBehaviour: NetworkType: 2 _ckey: unknown ServerAddress: 127.0.0.1 - ServerPort: 8616 + ServerPort: 7412 EnableNetworkBandwidthUsageStats: 1 diff --git a/Builds/Game/Config/permissions.txt b/Builds/Game/Config/permissions.txt index b747f028aa..1b9faec811 100644 --- a/Builds/Game/Config/permissions.txt +++ b/Builds/Game/Config/permissions.txt @@ -1,3 +1,4 @@ john ServerOwner editorUser ServerOwner hostingUser Administrator +unknown ServerOwner diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 6d68af32ea..4c367b5587 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -21,8 +21,8 @@ TagManager: - - - - - - - + - VisionObstacles + - VisionMask - - - From ac5f8f8b1972eb054182fff28b0a21102bcd34a9 Mon Sep 17 00:00:00 2001 From: Seteron <38957910+Seteron@users.noreply.github.com> Date: Sun, 15 Feb 2026 05:53:54 -0600 Subject: [PATCH 2/5] Fix build problems --- Assets/Content/Addressables/Linux.meta | 8 ++ .../Linux/addressables_content_state.bin | Bin 0 -> 6948 bytes .../Linux/addressables_content_state.bin.meta | 7 ++ .../Resources/Vision/VisionMask.shader | 2 +- .../Resources/Vision/VisionMaskBlur.shader | 2 +- Assets/Content/Scenes/Game.unity | 8 +- .../Scenes/PostProcessingProfiles/Lobby.asset | 77 +++++++++++++++++- .../Scripts/SS3D/Systems/SS3D.Systems.asmdef | 3 +- .../Systems/Vision/Editor/VisionEditor.asmdef | 23 ++++++ .../Vision/Editor/VisionEditor.asmdef.meta | 7 ++ .../Vision/Editor/VisionSystemEditor.cs | 65 ++++++++------- .../SS3D/Systems/Vision/VisionMaskEffect.cs | 10 +-- .../SS3D/Systems/Vision/VisionSystem.cs | 1 - 13 files changed, 168 insertions(+), 45 deletions(-) create mode 100644 Assets/Content/Addressables/Linux.meta create mode 100644 Assets/Content/Addressables/Linux/addressables_content_state.bin create mode 100644 Assets/Content/Addressables/Linux/addressables_content_state.bin.meta create mode 100644 Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef create mode 100644 Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef.meta diff --git a/Assets/Content/Addressables/Linux.meta b/Assets/Content/Addressables/Linux.meta new file mode 100644 index 0000000000..ef646b35fc --- /dev/null +++ b/Assets/Content/Addressables/Linux.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c169d7005a1f18119bd7265a86fb4d47 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Addressables/Linux/addressables_content_state.bin b/Assets/Content/Addressables/Linux/addressables_content_state.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd58c00628cae1bd6708c93cbd6e66bed2f73a45 GIT binary patch literal 6948 zcmcgwU5s5-6`oVtX~(u!Km`23s~}9ZbG!fdK1zWyK&Ty{Ev*F!j{A4!%AIqEbI%1@ zKrJPx@gHL(F=|YVL=&UY1Tnt&p2NRz(J`(ZGNMfRE?K{JqNt#ZrQ%;+8)|tE4 z{=U8U+H0@1CyI%QiT}WZZ+v!b0deF+)oV_54~9_3;n2E%9Cq&vy=GAF>wF^C!``4e zK)U(gzRv8Z-;C;bpo*iWw*7sbBO}-E`NQ$l@xddpI#7-J{cYI&&AHccKkdE`4u`QB zc5ff``l0>z;q0JlV%6N=*d}g+4t6j1?WtI=FxVY4qm{3n-ulHD4pnI|ysC~%gC@?} z#`Xsba|0WW*k*C}xW(`+KknYU>-= zbUi<)hVwS>mwDUo&x_!lq&zZfnHSVq8%s}0V}(nEIME%moVpH36}Un;=*jnkIJ>D7 zo4B-&m$cCu6S-i~F+!6uDsTs6c}T`5y~?WtObT?G%Ev{-2}>4H&Wp^B+aArCO8wL zN~W|hp=HU8WRba5avw%=7)mp_kASkNk!IP}P0z#O7*mRVJw+-E4^mp#O|X$@gq@%m z>}Ac3ahASGaUW8|K%Xhjfb!@j#=`!<+kWq~#b7v-Kh~}C>O6Ik1RgY*#C}j7zf>f~ z!FUFOM;${eG_O)2NCl6(Oof87sgZZxgbbS+oPVat3ENDp7W%#6;&iO`o`V-dUU&j$ zUL2HXHq+0~!zgv?M6se2Zu;59(&LFaqbFcC|g->+hXjZf4v$ zSt?|SNlRv_LD|%Oc%I3tN5f&yR@3A6UU<*cqjOE9L5i4CWr`&zmu`LY9=I^K`zX@F zBrntY7$|2h+4`=dbzZN#8ChZ0nOPkGTzV*s=I1M6Bk% zWjqjvnDb38&EIW@i`$mwXKO#TG=Cf_i@~V59KIJv)gv(+uWdCzy@g7`K{6y&l0ibwW_{_bQrmt5 zcPalTSseWK$83KT=jSJOAZ2{w*_BBFpYFgn`p)FtAUYcrTi14{e-G_iLpg+I1afn& zf~SP&(lSb1U?rr*-ZLVdki|S&uwHV!pW|Cr=sJw$Znn1}%RSBgk zgVm0SCK`%gw9sGvH3s1Ed|*+N(T{@C*{BpcyyaHB`e~sbL$f3tlRWw|5EeL1Bqou( zl7Wy8{tl>d)tVlBYNl-c))iIC%;Iik@a?KYWKr`i(ph0L8LKLvW9L$BV z0xEFobSXsfVhjBYR*mo=Iu;ul{ga?{HY!ohJb2?9Xt{>|5Sl>+O%)VbB_K&6CDi#Q zsZ^FhL{$=7{HTTg>@RZ<86B&PjQ%ioLv7&Jh)5WR!0)wW&XhQvr75W`$?MH)=qN4p zPobHY#KOgd;4)~q${||m(#Hq|sFGHO?ON#g*-;8YSK>xe0mYq{nnT%6VffaTP~qv~`z`c;Hh6|V?O*Ts$+ysQZRP`-dE($mgi%YyVfh^t zy(&cl0o6yFVl2MfLcap*UU+cqSS4ii1WJdMDp{!JlYwcYICkR&%p)AbNg6```0u@c zL(4Vv1vJxw1>%VmB&wj2_R%m+IMH60(HT*^&_Z8sp=0)+(Ra7j1=;%$xIxToQdfn^afp#tQB{Z{9r$nPH8MvBeaG4ZRq#OhbxLgP(dS9mE>n-#LTRx9@dPc9Y8;*p7l3YonlvNy7&}$nM z1OiVyedWx{uRyyN`Vh^iF0-4Jlv*MJH{kjrQptF7j0sYFrG?I0=(m7%Mjv4}!Eyp~ z&7;960oyln?YyIbQSBl(*Y6CtH(KbAp&5g%MN$YnQAv17Nve|&OF?gD&%=YIi1peXVH literal 0 HcmV?d00001 diff --git a/Assets/Content/Addressables/Linux/addressables_content_state.bin.meta b/Assets/Content/Addressables/Linux/addressables_content_state.bin.meta new file mode 100644 index 0000000000..2a24b30aee --- /dev/null +++ b/Assets/Content/Addressables/Linux/addressables_content_state.bin.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 89a05f89afcc7e68aa6eed036a03021e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Resources/Vision/VisionMask.shader b/Assets/Content/Resources/Vision/VisionMask.shader index 47fec69c80..e5903f7c53 100644 --- a/Assets/Content/Resources/Vision/VisionMask.shader +++ b/Assets/Content/Resources/Vision/VisionMask.shader @@ -1,4 +1,4 @@ -Shader "Hidden/Custom/VisionMask" +Shader "Vision/VisionMask" { //TODO Clean this up for multiplatform and add comments SubShader diff --git a/Assets/Content/Resources/Vision/VisionMaskBlur.shader b/Assets/Content/Resources/Vision/VisionMaskBlur.shader index ad3251b586..e74978ec08 100644 --- a/Assets/Content/Resources/Vision/VisionMaskBlur.shader +++ b/Assets/Content/Resources/Vision/VisionMaskBlur.shader @@ -1,4 +1,4 @@ -Shader "Hidden/Custom/VisionMaskBlur" +Shader "Hidden/Vision/VisionMaskBlur" { //TODO Clean this up for multiplatform and add comments SubShader diff --git a/Assets/Content/Scenes/Game.unity b/Assets/Content/Scenes/Game.unity index 62ff5ad438..f846fc4c2d 100644 --- a/Assets/Content/Scenes/Game.unity +++ b/Assets/Content/Scenes/Game.unity @@ -1633,7 +1633,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4468402021075485018, guid: cc5383d385556f443b2a7d3202f2b2c1, type: 3} propertyPath: m_AnchoredPosition.y - value: -230 + value: -229.99997 objectReference: {fileID: 0} - target: {fileID: 4468402021449001342, guid: cc5383d385556f443b2a7d3202f2b2c1, type: 3} propertyPath: m_AnchoredPosition.x @@ -2525,16 +2525,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: showDebug: 0 - radialDepthTex: {fileID: 0} + visionMap: {fileID: 0} target: {fileID: 0} viewRange: 35 viewConeWidth: 360 obstacleMask: serializedVersion: 2 m_Bits: 65536 - meshResolution: 3 - edgeResolveIterations: 0 - edgeDistanceThreshold: 0 + resolution: 5 detectionOffset: {x: 0, y: 0, z: 0} --- !u!4 &1820032161 stripped Transform: diff --git a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset index b83b851854..b9e0d4564d 100644 --- a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset +++ b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset @@ -1543,6 +1543,31 @@ MonoBehaviour: Size: overrideState: 0 value: {x: 6.53, y: 9.87} +--- !u!114 &-49764144089175348 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 0 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 0 + value: 5 + Directions: + overrideState: 0 + value: 25 + Size: + overrideState: 0 + value: {x: 5, y: 5} --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1564,7 +1589,7 @@ MonoBehaviour: - {fileID: -4984722078144235035} - {fileID: -2400775673892574313} - {fileID: -9132564074991082903} - - {fileID: -3474480085703392108} + - {fileID: 1971999996643561787} --- !u!114 &1043265621962283185 MonoBehaviour: m_ObjectHideFlags: 3 @@ -1590,6 +1615,31 @@ MonoBehaviour: Size: overrideState: 1 value: {x: 3, y: 3} +--- !u!114 &1971999996643561787 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 1 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 0 + value: 5 + Directions: + overrideState: 0 + value: 25 + Size: + overrideState: 0 + value: {x: 5, y: 5} --- !u!114 &4662285201658728894 MonoBehaviour: m_ObjectHideFlags: 3 @@ -1634,6 +1684,31 @@ MonoBehaviour: opacity: overrideState: 0 value: 1 +--- !u!114 &6523417069567221237 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 1 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 0 + value: 5 + Directions: + overrideState: 0 + value: 25 + Size: + overrideState: 0 + value: {x: 5, y: 5} --- !u!114 &7149465766786482175 MonoBehaviour: m_ObjectHideFlags: 3 diff --git a/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef b/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef index 66baca2bb9..4a2e08bb8e 100644 --- a/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef +++ b/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef @@ -28,7 +28,8 @@ "GUID:776d03a35f1b52c4a9aed9f56d7b4229", "GUID:84651a3751eca9349aac36a66bba901b", "GUID:d60799ab2a985554ea1a39cd38695018", - "GUID:a35efad8797223d499f8c68b1f545dbc" + "GUID:a35efad8797223d499f8c68b1f545dbc", + "GUID:f851af5d86c208af09cd265d08e3b3e2" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef new file mode 100644 index 0000000000..05f6097cf4 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef @@ -0,0 +1,23 @@ +{ + "name": "VisionSystemEditor", + "rootNamespace": "", + "references": [ + "GUID:ca7dfa56d1d490249a5fe56aee92a13c", + "GUID:92a1e40b8cccf8645adbdd275ac6371a", + "GUID:478a2357cc57436488a56e564b08d223", + "GUID:6e00473804df0f0468c07310fbce5737", + "GUID:9e24947de15b9834991c9d8411ea37cf", + "GUID:eb242eaf9f292954eb8c6fbd63c46deb" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef.meta b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef.meta new file mode 100644 index 0000000000..e4b2f07be3 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 54f72d63edc373a4294f5967a9b6f5f6 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs index 92997e9025..72ec56e20b 100644 --- a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs +++ b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs @@ -1,64 +1,69 @@ using UnityEditor; using UnityEngine; -namespace SS3D.Systems.Vision.Editor +namespace SS3D.Systems.Vision { [CustomEditor(typeof(VisionSystem))] - public class VisionEditor : UnityEditor.Editor + public class VisionSystemEditor : UnityEditor.Editor { - private VisionSystem vision; + private VisionSystem _vision; - private SerializedProperty detectionOffsetProp; - private SerializedProperty viewConeWidthProp; - private SerializedProperty viewRangeProp; + private SerializedProperty _detectionOffsetProp; + private SerializedProperty _viewConeWidthProp; + private SerializedProperty _viewRangeProp; - private void OnEnable() + protected void OnEnable() { - vision = (VisionSystem) target; + _vision = (VisionSystem)target; - detectionOffsetProp = serializedObject.FindProperty("detectionOffset"); - viewConeWidthProp = serializedObject.FindProperty("viewConeWidth"); - viewRangeProp = serializedObject.FindProperty("viewRange"); + _detectionOffsetProp = serializedObject.FindProperty("detectionOffset"); + _viewConeWidthProp = serializedObject.FindProperty("viewConeWidth"); + _viewRangeProp = serializedObject.FindProperty("viewRange"); } - private void OnSceneGUI() + protected void OnSceneGUI() { - if (!vision.showDebug) return; + if (!_vision.showDebug) + { + return; + } + serializedObject.Update(); - GUIStyle labelStyle = new GUIStyle {fontSize = 14}; - var viewPoints = vision.viewPoints; + GUIStyle labelStyle = new GUIStyle + { + fontSize = 14, + }; + Unity.Collections.NativeArray viewPoints = _vision.viewPoints; - Vector3 viewAngleA = vision.DirectionFromAngle(-viewConeWidthProp.floatValue / 2, false); - Vector3 viewAngleB = vision.DirectionFromAngle(viewConeWidthProp.floatValue / 2, false); + Vector3 viewAngleA = _vision.DirectionFromAngle(-_viewConeWidthProp.floatValue / 2, false); + Vector3 viewAngleB = _vision.DirectionFromAngle(_viewConeWidthProp.floatValue / 2, false); - var center = vision.target.position + detectionOffsetProp.vector3Value; + Vector3 center = _vision.target.position + _detectionOffsetProp.vector3Value; Handles.color = Color.green; Handles.Label(center, "center"); labelStyle.normal.textColor = Color.green; - Handles.DrawWireArc(center, Vector3.up, Vector3.forward, - 360, - viewRangeProp.floatValue); + Handles.DrawWireArc(center, Vector3.up, Vector3.forward, 360, _viewRangeProp.floatValue); - Handles.DrawLine(center, center + viewAngleA * viewRangeProp.floatValue); - Handles.DrawLine(center, center + viewAngleB * viewRangeProp.floatValue); + Handles.DrawLine(center, center + (viewAngleA * _viewRangeProp.floatValue)); + Handles.DrawLine(center, center + (viewAngleB * _viewRangeProp.floatValue)); // Draw Visual Vision outline; Handles.color = Color.yellow; GUIStyle style = new GUIStyle(); style.normal.textColor = Color.red; - + Handles.Label(viewPoints[0], "0", style); - for (int i = 1; i <= vision.stepCount; i++) + for (int i = 1; i <= _vision.stepCount; i++) { - Handles.Label(viewPoints[i % vision.stepCount], i.ToString(), style); - Handles.color = Color.yellow; - Handles.DrawLine(viewPoints[i % vision.stepCount], center); + Handles.Label(viewPoints[i % _vision.stepCount], i.ToString(), style); + Handles.color = Color.yellow; + Handles.DrawLine(viewPoints[i % _vision.stepCount], center); Handles.color = Color.cyan; - Handles.DrawLine(viewPoints[i % vision.stepCount], viewPoints[(i + 1) % vision.stepCount]); + Handles.DrawLine(viewPoints[i % _vision.stepCount], viewPoints[(i + 1) % _vision.stepCount]); } } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs index dd07a3e819..343ce397ce 100644 --- a/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs @@ -9,9 +9,9 @@ [PostProcess(typeof(VisionRenderer), PostProcessEvent.AfterStack, "Custom/Vision")] public sealed class VisionFilter : PostProcessEffectSettings { - public FloatParameter Quality = new FloatParameter {value = 3}; - public FloatParameter Directions = new FloatParameter {value = 16}; - public Vector2Parameter Size = new Vector2Parameter {value = new Vector2(3,3)}; + public FloatParameter Quality = new FloatParameter {value = 5}; + public FloatParameter Directions = new FloatParameter {value = 25}; + public Vector2Parameter Size = new Vector2Parameter {value = new Vector2(5,5)}; public override bool IsEnabledAndSupported(PostProcessRenderContext context) { @@ -36,14 +36,14 @@ public override void Render(PostProcessRenderContext context) var viewProjectionMatrix = projectionMatrix * (worldToCameraMatrix); var fovTexture = RenderTexture.GetTemporary(Screen.width,Screen.height); - var sheet = context.propertySheets.Get(Shader.Find("Hidden/Custom/VisionMask")); + var sheet = context.propertySheets.Get(Shader.Find("Vision/VisionMask")); sheet.properties.SetMatrix("_PlayerCameraInvViewProj", viewProjectionMatrix.inverse); context.command.BlitFullscreenTriangle(context.source, fovTexture, sheet, 0,false,null,true); - sheet = context.propertySheets.Get(Shader.Find("Hidden/Custom/VisionMaskBlur")); + sheet = context.propertySheets.Get(Shader.Find("Vision/VisionMaskBlur")); sheet.properties.SetFloat("_FovBlurQuality", settings.Quality); sheet.properties.SetFloat("_FovBlurDirections", settings.Directions); diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs b/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs index 3b0da2987a..af64b674a8 100644 --- a/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs @@ -15,7 +15,6 @@ using SS3D.Systems.Tile.Connections; using FishNet.Utility.Performance; using DG.Tweening; -using FishNet.Configuring; namespace SS3D.Systems.Vision { From bc9c4a7d217af41d966360e4e2508cd504cc436f Mon Sep 17 00:00:00 2001 From: Seteron <38957910+Seteron@users.noreply.github.com> Date: Sun, 15 Feb 2026 06:38:55 -0600 Subject: [PATCH 3/5] Fix update issues --- .../Resources/Vision/VisionMaskBlur.shader | 2 +- Assets/Content/Scenes/Game.unity | 2 +- .../Scenes/PostProcessingProfiles/Lobby.asset | 27 ++++++++++++++++++- Assets/DefaultPrefabObjects.asset | 15 ++++------- .../Vision/Editor/VisionSystemEditor.cs | 6 ++--- .../{VisionSystem.cs => VisionSubSystem.cs} | 10 +------ ...System.cs.meta => VisionSubSystem.cs.meta} | 0 Builds/Game/Config/permissions.txt | 2 +- 8 files changed, 38 insertions(+), 26 deletions(-) rename Assets/Scripts/SS3D/Systems/Vision/{VisionSystem.cs => VisionSubSystem.cs} (96%) rename Assets/Scripts/SS3D/Systems/Vision/{VisionSystem.cs.meta => VisionSubSystem.cs.meta} (100%) diff --git a/Assets/Content/Resources/Vision/VisionMaskBlur.shader b/Assets/Content/Resources/Vision/VisionMaskBlur.shader index e74978ec08..77dcaa64c6 100644 --- a/Assets/Content/Resources/Vision/VisionMaskBlur.shader +++ b/Assets/Content/Resources/Vision/VisionMaskBlur.shader @@ -1,4 +1,4 @@ -Shader "Hidden/Vision/VisionMaskBlur" +Shader "Vision/VisionMaskBlur" { //TODO Clean this up for multiplatform and add comments SubShader diff --git a/Assets/Content/Scenes/Game.unity b/Assets/Content/Scenes/Game.unity index f846fc4c2d..69f06f6b39 100644 --- a/Assets/Content/Scenes/Game.unity +++ b/Assets/Content/Scenes/Game.unity @@ -1633,7 +1633,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4468402021075485018, guid: cc5383d385556f443b2a7d3202f2b2c1, type: 3} propertyPath: m_AnchoredPosition.y - value: -229.99997 + value: -230 objectReference: {fileID: 0} - target: {fileID: 4468402021449001342, guid: cc5383d385556f443b2a7d3202f2b2c1, type: 3} propertyPath: m_AnchoredPosition.x diff --git a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset index b9e0d4564d..33e687a4e7 100644 --- a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset +++ b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset @@ -56,6 +56,31 @@ MonoBehaviour: scale: overrideState: 0 value: 1 +--- !u!114 &-6574777559651070848 +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: 0} + m_Name: VisionFilter + m_EditorClassIdentifier: SS3D.Systems::VisionFilter + active: 1 + enabled: + overrideState: 1 + value: 1 + Quality: + overrideState: 0 + value: 5 + Directions: + overrideState: 0 + value: 25 + Size: + overrideState: 0 + value: {x: 5, y: 5} --- !u!114 &-6454460764997554514 MonoBehaviour: m_ObjectHideFlags: 3 @@ -1589,7 +1614,7 @@ MonoBehaviour: - {fileID: -4984722078144235035} - {fileID: -2400775673892574313} - {fileID: -9132564074991082903} - - {fileID: 1971999996643561787} + - {fileID: -6574777559651070848} --- !u!114 &1043265621962283185 MonoBehaviour: m_ObjectHideFlags: 3 diff --git a/Assets/DefaultPrefabObjects.asset b/Assets/DefaultPrefabObjects.asset index 7e0d4ba793..d3abca490f 100644 --- a/Assets/DefaultPrefabObjects.asset +++ b/Assets/DefaultPrefabObjects.asset @@ -29,20 +29,15 @@ MonoBehaviour: - {fileID: 6453146791042422614, guid: bdeac5e9a27546348a584caa74f00ec7, type: 3} - {fileID: 2090837846029440516, guid: ddaa28fac1956b2428aff1dac1d89707, type: 3} - {fileID: 6115335805774105745, guid: bf177f8bab26bc84b87fd9a971004418, type: 3} - - {fileID: 6699414010407460003, guid: f1aeab0a35c29314a8a3f823de9815c1, type: 3} - - {fileID: 4692070367735979832, guid: 8725b7f8f45d28a4ba6063318904cc8a, type: 3} - - {fileID: 6270372984438359393, guid: f549f4153ef612c4586c46ea280e0e94, type: 3} - - {fileID: 3346295071430447723, guid: 1a2f912be4bc1b948a2b22ffde517cdc, type: 3} - - {fileID: 2957918649098045964, guid: 88d1ba1edb4ce5e4fa74c6a8d53e36e1, type: 3} - - {fileID: 5462163768199098969, guid: bc08055e4ec2e204f8f46a379b2b6603, type: 3} + - {fileID: 4692070367735979832, guid: 65679cf5a30d6dd458666804af7c3ca3, type: 3} + - {fileID: 3346295071430447723, guid: db15899bc1eb2794fb2b24129852a209, type: 3} + - {fileID: 1193101747660343740, guid: a38ee818c953a404787757d8d20d2851, type: 3} - {fileID: 6405064644360513769, guid: be3fcf1a74268ad49bfedb1edd9f5318, type: 3} - {fileID: 1248430174884186406, guid: 7436f4976849b994aaee40df1bca7d89, type: 3} - {fileID: 2527334834019670621, guid: 236b51ddc6f9aa94ca92579082370c06, type: 3} - {fileID: 8962699864590013468, guid: 93ad90421a3b2f64e8fdb9e95a42ba90, type: 3} - - {fileID: 8681604604373809337, guid: 5fa15d6fdef93dc4e80d798cefe8be0b, type: 3} - - {fileID: 8663352389375050187, guid: 317ec7dcff3b11d4eae3a47929200b93, type: 3} - - {fileID: 8657890218937463745, guid: 4b790b4ffedbe564dab49f896d71eaa6, type: 3} - - {fileID: 7421556062366613563, guid: d7d68992cbd3cda45bb11a35a1490dc3, type: 3} + - {fileID: 8663352389375050187, guid: 81faf4debf00a0a478b924176f48d011, type: 3} + - {fileID: 7421556062366613563, guid: 535ed7c02b5cbdc43ae2b234a963c5cc, type: 3} - {fileID: 3546473533537016869, guid: 9b9f6bd470226a74b903e74dbe9e423a, type: 3} - {fileID: 7384563213340008115, guid: 40d904629802fc942860ce878e78efef, type: 3} - {fileID: -1921154974467191097, guid: 1ef3c21a685ec2d4e9f0876719839d5f, type: 3} diff --git a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs index 72ec56e20b..5667be1f74 100644 --- a/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs +++ b/Assets/Scripts/SS3D/Systems/Vision/Editor/VisionSystemEditor.cs @@ -3,10 +3,10 @@ namespace SS3D.Systems.Vision { - [CustomEditor(typeof(VisionSystem))] + [CustomEditor(typeof(VisionSubSystem))] public class VisionSystemEditor : UnityEditor.Editor { - private VisionSystem _vision; + private VisionSubSystem _vision; private SerializedProperty _detectionOffsetProp; private SerializedProperty _viewConeWidthProp; @@ -14,7 +14,7 @@ public class VisionSystemEditor : UnityEditor.Editor protected void OnEnable() { - _vision = (VisionSystem)target; + _vision = (VisionSubSystem)target; _detectionOffsetProp = serializedObject.FindProperty("detectionOffset"); _viewConeWidthProp = serializedObject.FindProperty("viewConeWidth"); diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs b/Assets/Scripts/SS3D/Systems/Vision/VisionSubSystem.cs similarity index 96% rename from Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs rename to Assets/Scripts/SS3D/Systems/Vision/VisionSubSystem.cs index af64b674a8..c06947da2e 100644 --- a/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionSubSystem.cs @@ -1,24 +1,16 @@ using System; -using System.Collections.Generic; -using System.Linq; using Unity.Collections; using Unity.Jobs; using Unity.Profiling; using UnityEngine; using UnityEngine.Rendering; -using SS3D.Core; -using SS3D.Systems.Screens; using SS3D.Systems.Entities.Events; using Coimbra; using Coimbra.Services.Events; -using SS3D.Systems.Tile.Connections.AdjacencyTypes; -using SS3D.Systems.Tile.Connections; -using FishNet.Utility.Performance; -using DG.Tweening; namespace SS3D.Systems.Vision { - public class VisionSystem : Core.Behaviours.System + public class VisionSubSystem : Core.Behaviours.SubSystem { [SerializeField] public bool showDebug; diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs.meta b/Assets/Scripts/SS3D/Systems/Vision/VisionSubSystem.cs.meta similarity index 100% rename from Assets/Scripts/SS3D/Systems/Vision/VisionSystem.cs.meta rename to Assets/Scripts/SS3D/Systems/Vision/VisionSubSystem.cs.meta diff --git a/Builds/Game/Config/permissions.txt b/Builds/Game/Config/permissions.txt index 1b9faec811..bc9ca22702 100644 --- a/Builds/Game/Config/permissions.txt +++ b/Builds/Game/Config/permissions.txt @@ -1,4 +1,4 @@ john ServerOwner editorUser ServerOwner -hostingUser Administrator +hostingUser ServerOwner unknown ServerOwner From 1dfc094ba589641d307edd1e44d4a53ead857ff6 Mon Sep 17 00:00:00 2001 From: Seteron <38957910+Seteron@users.noreply.github.com> Date: Sun, 15 Feb 2026 12:49:04 -0600 Subject: [PATCH 4/5] Fix DirectX --- .../Resources/Vision/VisionMask.shader | 2 +- .../Resources/Vision/VisionMaskBlur.shader | 5 +- Assets/Content/Scenes/Game.unity | 8 + .../Scenes/PostProcessingProfiles/Lobby.asset | 189 +----------------- .../EngineeringBorg/EngineeringBorg.prefab | 2 +- .../SS3D/Systems/Vision/VisionMaskEffect.cs | 6 +- 6 files changed, 23 insertions(+), 189 deletions(-) diff --git a/Assets/Content/Resources/Vision/VisionMask.shader b/Assets/Content/Resources/Vision/VisionMask.shader index e5903f7c53..e1b9e4d53c 100644 --- a/Assets/Content/Resources/Vision/VisionMask.shader +++ b/Assets/Content/Resources/Vision/VisionMask.shader @@ -32,7 +32,7 @@ Shader "Vision/VisionMask" o.vertex = float4(v.vertex.xy, 0, 1); o.uv = v.vertex.xy; - if (_ProjectionParams.x < 0) o.uv.y = 1 - o.uv.y; + if (_ProjectionParams.x < 0) o.uv.y = (1 - o.uv.y) - 1; return o; } diff --git a/Assets/Content/Resources/Vision/VisionMaskBlur.shader b/Assets/Content/Resources/Vision/VisionMaskBlur.shader index 77dcaa64c6..3553f65a62 100644 --- a/Assets/Content/Resources/Vision/VisionMaskBlur.shader +++ b/Assets/Content/Resources/Vision/VisionMaskBlur.shader @@ -59,12 +59,13 @@ Shader "Vision/VisionMaskBlur" if(length(UNITY_SAMPLE_TEX2D(_FovTex, IN.uv)) < 0.5) //Check if location is masked { - col = float4(0, 0, 0, 1); + col = lerp (col, float4(0, 0, 0, 1), 0.5); } if(average > 0) { - average = average * 4; + average = average * 2 - 0.1; + average = max (average, 0); col = float4(0,0,0,1) * average + col * (1 - average); } return col; diff --git a/Assets/Content/Scenes/Game.unity b/Assets/Content/Scenes/Game.unity index 69f06f6b39..959c79c883 100644 --- a/Assets/Content/Scenes/Game.unity +++ b/Assets/Content/Scenes/Game.unity @@ -6414,6 +6414,14 @@ PrefabInstance: propertyPath: m_Name value: Player Camera objectReference: {fileID: 0} + - target: {fileID: 4559952172929818813, guid: b904697874e9a0445ad5e0c9cad35c19, type: 3} + propertyPath: m_AfterStackBundles.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4559952172929818813, guid: b904697874e9a0445ad5e0c9cad35c19, type: 3} + propertyPath: m_AfterStackBundles.Array.data[0].assemblyQualifiedName + value: VisionFilter, SS3D.Systems, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + objectReference: {fileID: 0} - target: {fileID: 4559952172929818815, guid: b904697874e9a0445ad5e0c9cad35c19, type: 3} propertyPath: m_RootOrder value: 15 diff --git a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset index 33e687a4e7..4369af75ca 100644 --- a/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset +++ b/Assets/Content/Scenes/PostProcessingProfiles/Lobby.asset @@ -56,31 +56,6 @@ MonoBehaviour: scale: overrideState: 0 value: 1 ---- !u!114 &-6574777559651070848 -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: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter - active: 1 - enabled: - overrideState: 1 - value: 1 - Quality: - overrideState: 0 - value: 5 - Directions: - overrideState: 0 - value: 25 - Size: - overrideState: 0 - value: {x: 5, y: 5} --- !u!114 &-6454460764997554514 MonoBehaviour: m_ObjectHideFlags: 3 @@ -128,31 +103,6 @@ MonoBehaviour: dirtIntensity: overrideState: 0 value: 0 ---- !u!114 &-5967831594084810270 -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: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter - active: 1 - enabled: - overrideState: 1 - value: 1 - Quality: - overrideState: 0 - value: 3 - Directions: - overrideState: 0 - value: 16 - Size: - overrideState: 0 - value: {x: 3, y: 3} --- !u!114 &-4984722078144235035 MonoBehaviour: m_ObjectHideFlags: 3 @@ -207,31 +157,6 @@ MonoBehaviour: fastMode: overrideState: 0 value: 0 ---- !u!114 &-3474480085703392108 -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: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter - active: 1 - enabled: - overrideState: 1 - value: 1 - Quality: - overrideState: 0 - value: 3 - Directions: - overrideState: 0 - value: 16 - Size: - overrideState: 0 - value: {x: 3, y: 3} --- !u!114 &-2400775673892574313 MonoBehaviour: m_ObjectHideFlags: 3 @@ -1543,7 +1468,7 @@ MonoBehaviour: - 0.5 - 0.5 - 0.5 ---- !u!114 &-1513921829866023847 +--- !u!114 &-544443839450707328 MonoBehaviour: m_ObjectHideFlags: 3 m_CorrespondingSourceObject: {fileID: 0} @@ -1552,46 +1477,21 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter + m_Script: {fileID: 11500000, guid: 9788bbdb5ef1f158d9c84116721f0a30, type: 3} + m_Name: VisionMaskEffect + m_EditorClassIdentifier: active: 1 enabled: overrideState: 1 value: 1 Quality: - overrideState: 0 - value: 12.71 - Directions: - overrideState: 0 - value: 22.13 - Size: - overrideState: 0 - value: {x: 6.53, y: 9.87} ---- !u!114 &-49764144089175348 -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: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter - active: 0 - enabled: overrideState: 1 - value: 1 - Quality: - overrideState: 0 value: 5 Directions: - overrideState: 0 + overrideState: 1 value: 25 Size: - overrideState: 0 + overrideState: 1 value: {x: 5, y: 5} --- !u!114 &11400000 MonoBehaviour: @@ -1614,57 +1514,7 @@ MonoBehaviour: - {fileID: -4984722078144235035} - {fileID: -2400775673892574313} - {fileID: -9132564074991082903} - - {fileID: -6574777559651070848} ---- !u!114 &1043265621962283185 -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: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter - active: 1 - enabled: - overrideState: 1 - value: 1 - Quality: - overrideState: 1 - value: 3 - Directions: - overrideState: 1 - value: 16 - Size: - overrideState: 1 - value: {x: 3, y: 3} ---- !u!114 &1971999996643561787 -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: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter - active: 1 - enabled: - overrideState: 1 - value: 1 - Quality: - overrideState: 0 - value: 5 - Directions: - overrideState: 0 - value: 25 - Size: - overrideState: 0 - value: {x: 5, y: 5} + - {fileID: -544443839450707328} --- !u!114 &4662285201658728894 MonoBehaviour: m_ObjectHideFlags: 3 @@ -1709,31 +1559,6 @@ MonoBehaviour: opacity: overrideState: 0 value: 1 ---- !u!114 &6523417069567221237 -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: 0} - m_Name: VisionFilter - m_EditorClassIdentifier: SS3D.Systems::VisionFilter - active: 1 - enabled: - overrideState: 1 - value: 1 - Quality: - overrideState: 0 - value: 5 - Directions: - overrideState: 0 - value: 25 - Size: - overrideState: 0 - value: {x: 5, y: 5} --- !u!114 &7149465766786482175 MonoBehaviour: m_ObjectHideFlags: 3 diff --git a/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab b/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab index 9e6305c7ca..5afb7a2315 100644 --- a/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab +++ b/Assets/Content/WorldObjects/Entities/Silicon/EngineeringBorg/EngineeringBorg.prefab @@ -1342,7 +1342,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: NetworkObserver: {fileID: 0} - k__BackingField: 92 + k__BackingField: 87 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 diff --git a/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs index 343ce397ce..d51628e390 100644 --- a/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs +++ b/Assets/Scripts/SS3D/Systems/Vision/VisionMaskEffect.cs @@ -6,8 +6,8 @@ using UnityEngine.Rendering; [Serializable] -[PostProcess(typeof(VisionRenderer), PostProcessEvent.AfterStack, "Custom/Vision")] -public sealed class VisionFilter : PostProcessEffectSettings +[PostProcess(typeof(VisionRenderer), PostProcessEvent.AfterStack, "Vision/VisionMask")] +public sealed class VisionMaskEffect : PostProcessEffectSettings { public FloatParameter Quality = new FloatParameter {value = 5}; public FloatParameter Directions = new FloatParameter {value = 25}; @@ -22,7 +22,7 @@ public override bool IsEnabledAndSupported(PostProcessRenderContext context) && Size.value.y >0f; } } -public sealed class VisionRenderer : PostProcessEffectRenderer +public sealed class VisionRenderer : PostProcessEffectRenderer { public override void Render(PostProcessRenderContext context) { From 09c3babbaefcff3e221e027e415e52540fa97264 Mon Sep 17 00:00:00 2001 From: Seteron <38957910+Seteron@users.noreply.github.com> Date: Tue, 17 Feb 2026 15:44:44 -0600 Subject: [PATCH 5/5] Reduce bleed --- .../Resources/Vision/SpacePlane.shader | 9 ++++--- .../Content/Resources/Vision/Spaceplane.mat | 2 +- .../Resources/Vision/VisionMaskBlur.shader | 26 ++++++++++++++----- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Assets/Content/Resources/Vision/SpacePlane.shader b/Assets/Content/Resources/Vision/SpacePlane.shader index 599b000606..733d3dd19a 100644 --- a/Assets/Content/Resources/Vision/SpacePlane.shader +++ b/Assets/Content/Resources/Vision/SpacePlane.shader @@ -9,11 +9,12 @@ Shader "Custom/SpacePlane" } SubShader { - Tags { "RenderType"="Opaque" } + ZWrite On + Tags {"Queue"="Transparent" "RenderType"="Transparent" } LOD 200 CGPROGRAM #include "VisionCG.cginc" - #pragma surface surf Standard fullforwardshadows + #pragma surface surf Standard fullforwardshadows alpha // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 @@ -37,8 +38,8 @@ Shader "Custom/SpacePlane" discard; } - float4 c = float4(0,0,0,1); - o.Albedo = c.rgb; + float4 c = tex2D(_MainTex, IN.uv_MainTex); + o.Albedo = c.rgba; // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; diff --git a/Assets/Content/Resources/Vision/Spaceplane.mat b/Assets/Content/Resources/Vision/Spaceplane.mat index b87d399479..45bc08b686 100644 --- a/Assets/Content/Resources/Vision/Spaceplane.mat +++ b/Assets/Content/Resources/Vision/Spaceplane.mat @@ -14,7 +14,7 @@ Material: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 + m_CustomRenderQueue: 2000 stringTagMap: {} disabledShaderPasses: [] m_SavedProperties: diff --git a/Assets/Content/Resources/Vision/VisionMaskBlur.shader b/Assets/Content/Resources/Vision/VisionMaskBlur.shader index 3553f65a62..fac654a512 100644 --- a/Assets/Content/Resources/Vision/VisionMaskBlur.shader +++ b/Assets/Content/Resources/Vision/VisionMaskBlur.shader @@ -11,6 +11,8 @@ Shader "Vision/VisionMaskBlur" #pragma fragment frag #include "UnityCG.cginc" + #include "VisionCG.cginc" + struct appdata { @@ -44,28 +46,38 @@ Shader "Vision/VisionMaskBlur" { float2 diameter = (_FovBlurSize / _ScreenParams.xy) * 2; float average; + float3 thisPos = ClipToWorld(IN.uv * 2 - 1); + float3 thisDepth = thisPos - _WorldSpaceCameraPos; + float thisVisible = length(UNITY_SAMPLE_TEX2D(_FovTex, IN.uv)) > 0.5; + float totalSamples = 0; for(float angle = 0; angle < UNITY_TWO_PI; angle += UNITY_TWO_PI / _FovBlurDirections) { for(float sample = 1; sample <= _FovBlurQuality; sample++) { float2 offset = float2(cos(angle),sin(angle)) * diameter * (sample / _FovBlurQuality); float2 sampleUV = IN.uv + offset; - average += length(UNITY_SAMPLE_TEX2D(_FovTex, sampleUV)) < 0.5; + float3 samplePos = ClipToWorld(sampleUV * 2 - 1); + float3 sampleDepth = samplePos - _WorldSpaceCameraPos; + if((!thisVisible || length(offset) < 0.006 || (length(thisDepth - sampleDepth) < 0.5))) + { + totalSamples += 1; + if(length(UNITY_SAMPLE_TEX2D(_FovTex, sampleUV)) < 0.5) + { + average += 1; + } + } } } - average /= _FovBlurQuality * _FovBlurDirections; - + average /= totalSamples; float4 col = UNITY_SAMPLE_TEX2D(_MainTex, IN.uv); - if(length(UNITY_SAMPLE_TEX2D(_FovTex, IN.uv)) < 0.5) //Check if location is masked + if(!thisVisible) //Check if location is masked { - col = lerp (col, float4(0, 0, 0, 1), 0.5); + col = lerp (col, float4(0, 0, 0, 1), 0.2); } if(average > 0) { - average = average * 2 - 0.1; - average = max (average, 0); col = float4(0,0,0,1) * average + col * (1 - average); } return col;