diff --git a/Assets/Portal/Assets/Materials/FullScreenDepth.shader b/Assets/Portal/Assets/Materials/FullScreenDepth.shader index ebe3d2e..7ea6dcf 100644 --- a/Assets/Portal/Assets/Materials/FullScreenDepth.shader +++ b/Assets/Portal/Assets/Materials/FullScreenDepth.shader @@ -1,21 +1,16 @@ Shader "Escape Room Engine/FullScreenDepth" { - Properties { - _PortalNumber ("Portal Number", Int) = 1 - } + Properties {} + SubShader { - Pass - { + Pass { ColorMask 0 Cull Off ZWrite On ZTest Always - Stencil - { - Ref [_PortalNumber] - Comp Equal // pass if equal - Pass Keep // keep stencil value - Fail Keep // keep stencil if depth fails + Stencil { + Ref 1 + Comp LEqual } CGPROGRAM @@ -23,18 +18,16 @@ #pragma fragment frag #include "UnityCG.cginc" - void vert(appdata_img v, out float4 pos : SV_POSITION) - { - #ifdef UNITY_REVERSED_Z + void vert(appdata_img v, out float4 pos : SV_POSITION) { + #ifdef UNITY_REVERSED_Z // clip space [near 1, 0 far] float far = 0.00001; - #else + #else // clip space [near -1, 1 far] float far = 0.99999; #endif pos = float4(v.vertex.xy * 2.0, far, 1); // quad xy goes from -0.5 to 0.5, clip space from -1 to 1 } - fixed4 frag() : SV_Target - { + fixed4 frag() : SV_Target { return 0; } ENDCG diff --git a/Assets/Portal/Assets/Materials/PortalStencil.mat b/Assets/Portal/Assets/Materials/PortalStencil.mat index 66fde27..4ae3ad0 100644 --- a/Assets/Portal/Assets/Materials/PortalStencil.mat +++ b/Assets/Portal/Assets/Materials/PortalStencil.mat @@ -25,6 +25,6 @@ Material: m_TexEnvs: [] m_Ints: [] m_Floats: - - _PortalNumber: 1 + - _PortalNumber: 0 m_Colors: [] m_BuildTextureStacks: [] diff --git a/Assets/Portal/Assets/Materials/PortalStencil.shader b/Assets/Portal/Assets/Materials/PortalStencil.shader index 20d207f..398d836 100644 --- a/Assets/Portal/Assets/Materials/PortalStencil.shader +++ b/Assets/Portal/Assets/Materials/PortalStencil.shader @@ -1,23 +1,13 @@ -Shader "Escape Room Engine/PortalStencil" -{ - Properties - { - _PortalNumber ("Portal Number", Int) = 1 +Shader "Escape Room Engine/PortalStencil" { + Properties { + _PortalNumber ("Portal Number", Int) = 0 } - SubShader - { - Tags - { - "RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline" - } + SubShader { + Pass { + ColorMask 0 // don't draw this to the main framebuffer - Pass - { - ColorMask 0 - - Stencil - { + Stencil { Ref [_PortalNumber] Comp Always // always pass Pass Replace // set stencil value diff --git a/Assets/Portal/Assets/Prefabs/Portal.prefab b/Assets/Portal/Assets/Prefabs/Portal.prefab index 2092d99..8ca7ded 100644 --- a/Assets/Portal/Assets/Prefabs/Portal.prefab +++ b/Assets/Portal/Assets/Prefabs/Portal.prefab @@ -1,5 +1,51 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &2713893991261817724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2582669991302867501} + - component: {fileID: 7726674486241786965} + m_Layer: 0 + m_Name: Camera Transform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2582669991302867501 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2713893991261817724} + 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: [] + m_Father: {fileID: 2246995198243242195} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7726674486241786965 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2713893991261817724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ad60e3973ab83f3468637a06970d7f1f, type: 3} + m_Name: + m_EditorClassIdentifier: + minNearClipPlane: 0.0001 + portal: {fileID: 1249363658} --- !u!1 &5366957160841664999 GameObject: m_ObjectHideFlags: 0 @@ -61,7 +107,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 603cda73335499d4980d9b171eaffe0d, type: 2} + - {fileID: 2100000, guid: f6db0041cc34fe9439de56d5d92c8b8d, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -116,6 +162,7 @@ Transform: - {fileID: 4697416823958963037} - {fileID: 9135323956734471646} - {fileID: 2398425302420252226} + - {fileID: 2582669991302867501} m_Father: {fileID: 0} m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -133,7 +180,8 @@ MonoBehaviour: m_EditorClassIdentifier: size: {x: 1, y: 1} linkedPortal: {fileID: 0} - portalCamera: {fileID: 17691322601746172} + screen: {fileID: 5871497001431693362} + cameraTransform: {fileID: 7726674486241786965} portalTransform: {fileID: 2246995198243242195} --- !u!65 &7604291350124895408 BoxCollider: @@ -174,7 +222,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &2398425302420252226 Transform: m_ObjectHideFlags: 0 @@ -298,7 +346,6 @@ MonoBehaviour: m_EditorClassIdentifier: minNearClipPlane: 0.0001 portal: {fileID: 1249363658} - screen: {fileID: 5871497001431693362} --- !u!1 &8470391359842711396 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Portal/Runtime/Portal.cs b/Assets/Portal/Runtime/Portal.cs index 58ad331..61c88e9 100644 --- a/Assets/Portal/Runtime/Portal.cs +++ b/Assets/Portal/Runtime/Portal.cs @@ -4,6 +4,7 @@ using EscapeRoomEngine.Engine.Runtime.Modules; using EscapeRoomEngine.Engine.Runtime.Utilities; using NaughtyAttributes; using UnityEngine; +using UnityEngine.Serialization; namespace EscapeRoomEngine.Portal.Runtime { @@ -12,9 +13,10 @@ namespace EscapeRoomEngine.Portal.Runtime /// public class Portal : DoorState { + private static readonly int PortalNumberProperty = Shader.PropertyToID("_PortalNumber"); public static readonly Matrix4x4 HalfRotation = Matrix4x4.Rotate(Quaternion.Euler(0, 180, 0)); - private static int _portalCounter; + private static int _portalCounter = 1; /// /// The portal that is connected with this one. @@ -40,6 +42,7 @@ namespace EscapeRoomEngine.Portal.Runtime protected virtual void Awake() { PortalNumber = _portalCounter++; + screen.material.SetInt(PortalNumberProperty, PortalNumber); DoorEvent += (_, type) => { diff --git a/Assets/Portal/Runtime/RenderPortals.cs b/Assets/Portal/Runtime/RenderPortals.cs index 4c68077..d595b9f 100644 --- a/Assets/Portal/Runtime/RenderPortals.cs +++ b/Assets/Portal/Runtime/RenderPortals.cs @@ -33,9 +33,7 @@ namespace EscapeRoomEngine.Portal.Runtime }, ref renderingData, sortingCriteria); - // set stencil to portal var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, _settings.layer); - drawingSettings.overrideMaterial = _settings.material; context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, ref _renderStateBlock); } } @@ -46,7 +44,6 @@ namespace EscapeRoomEngine.Portal.Runtime public class Settings { public LayerMask layer; - public Material material; } public Settings settings = new(); @@ -56,8 +53,6 @@ namespace EscapeRoomEngine.Portal.Runtime _portalPass = new PortalRenderPass(settings); } - // Here you can inject one or multiple render passes in the renderer. - // This method is called when setting up the renderer once per-camera. public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { renderer.EnqueuePass(_portalPass); diff --git a/Assets/Scenes/StencilPortalScene.unity b/Assets/Scenes/StencilPortalScene.unity index 675d945..6d1ee7f 100644 --- a/Assets/Scenes/StencilPortalScene.unity +++ b/Assets/Scenes/StencilPortalScene.unity @@ -518,14 +518,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 259858787} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0.1297753, y: -0, z: -0, w: 0.9915434} m_LocalPosition: {x: 0.118, y: 0.559, z: -0.185} - m_LocalScale: {x: 0.13379, y: 0.13379, z: 0.13379} + m_LocalScale: {x: 0.13379, y: 0.28, z: 0.13379} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1453220877} m_RootOrder: -1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 14.913, y: 0, z: 0} --- !u!23 &259858790 MeshRenderer: m_ObjectHideFlags: 0 @@ -662,12 +662,12 @@ PrefabInstance: - target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562, type: 3} propertyPath: m_LocalPosition.y - value: 1 + value: 1.0000001 objectReference: {fileID: 0} - target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562, type: 3} propertyPath: m_LocalPosition.z - value: -1 + value: -1.1 objectReference: {fileID: 0} - target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562, type: 3} @@ -1893,17 +1893,17 @@ PrefabInstance: - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalPosition.x - value: 0 + value: 0.4 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalPosition.y - value: 0 + value: -1.778 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalPosition.z - value: 0 + value: -0.2 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} @@ -1945,16 +1945,6 @@ PrefabInstance: propertyPath: m_Name value: Portal In objectReference: {fileID: 0} - - target: {fileID: 5635962022185625128, guid: c50e7df1078c96f46bc6825f7e422fb7, - type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7398326895463990628, guid: c50e7df1078c96f46bc6825f7e422fb7, - type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -2158,7 +2148,7 @@ PrefabInstance: - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalPosition.x - value: 0 + value: -0.3999997 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} @@ -2168,12 +2158,12 @@ PrefabInstance: - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalPosition.z - value: 0.14 + value: 1.1400003 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalRotation.w - value: 0.00000058114523 + value: -1 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} @@ -2183,7 +2173,7 @@ PrefabInstance: - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalRotation.y - value: -1 + value: -0.0000001490116 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} @@ -2198,7 +2188,7 @@ PrefabInstance: - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: -180 + value: -360 objectReference: {fileID: 0} - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, type: 3} @@ -2210,11 +2200,6 @@ PrefabInstance: propertyPath: m_Name value: Portal Out objectReference: {fileID: 0} - - target: {fileID: 5635962022185625128, guid: c50e7df1078c96f46bc6825f7e422fb7, - type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] diff --git a/Assets/URP/URP-HighFidelity-Renderer.asset b/Assets/URP/URP-HighFidelity-Renderer.asset index 04994aa..e505c24 100644 --- a/Assets/URP/URP-HighFidelity-Renderer.asset +++ b/Assets/URP/URP-HighFidelity-Renderer.asset @@ -52,7 +52,6 @@ MonoBehaviour: layer: serializedVersion: 2 m_Bits: 128 - material: {fileID: 2100000, guid: f6db0041cc34fe9439de56d5d92c8b8d, type: 2} --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -129,4 +128,3 @@ MonoBehaviour: layer: serializedVersion: 2 m_Bits: 256 - material: {fileID: 2100000, guid: 782cb59e6f5f438478bdd855cf549ff3, type: 2}