fix stencil pass

This commit is contained in:
2023-02-14 17:03:12 +01:00
parent da1837f00c
commit dd080ef541
8 changed files with 86 additions and 75 deletions

View File

@@ -1,21 +1,16 @@
Shader "Escape Room Engine/FullScreenDepth" { Shader "Escape Room Engine/FullScreenDepth" {
Properties { Properties {}
_PortalNumber ("Portal Number", Int) = 1
}
SubShader { SubShader {
Pass Pass {
{
ColorMask 0 ColorMask 0
Cull Off Cull Off
ZWrite On ZWrite On
ZTest Always ZTest Always
Stencil Stencil {
{ Ref 1
Ref [_PortalNumber] Comp LEqual
Comp Equal // pass if equal
Pass Keep // keep stencil value
Fail Keep // keep stencil if depth fails
} }
CGPROGRAM CGPROGRAM
@@ -23,18 +18,16 @@
#pragma fragment frag #pragma fragment frag
#include "UnityCG.cginc" #include "UnityCG.cginc"
void vert(appdata_img v, out float4 pos : SV_POSITION) void vert(appdata_img v, out float4 pos : SV_POSITION) {
{ #ifdef UNITY_REVERSED_Z // clip space [near 1, 0 far]
#ifdef UNITY_REVERSED_Z
float far = 0.00001; float far = 0.00001;
#else #else // clip space [near -1, 1 far]
float far = 0.99999; float far = 0.99999;
#endif #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 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; return 0;
} }
ENDCG ENDCG

View File

@@ -25,6 +25,6 @@ Material:
m_TexEnvs: [] m_TexEnvs: []
m_Ints: [] m_Ints: []
m_Floats: m_Floats:
- _PortalNumber: 1 - _PortalNumber: 0
m_Colors: [] m_Colors: []
m_BuildTextureStacks: [] m_BuildTextureStacks: []

View File

@@ -1,23 +1,13 @@
Shader "Escape Room Engine/PortalStencil" Shader "Escape Room Engine/PortalStencil" {
{ Properties {
Properties _PortalNumber ("Portal Number", Int) = 0
{
_PortalNumber ("Portal Number", Int) = 1
} }
SubShader SubShader {
{ Pass {
Tags ColorMask 0 // don't draw this to the main framebuffer
{
"RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline"
}
Pass Stencil {
{
ColorMask 0
Stencil
{
Ref [_PortalNumber] Ref [_PortalNumber]
Comp Always // always pass Comp Always // always pass
Pass Replace // set stencil value Pass Replace // set stencil value

View File

@@ -1,5 +1,51 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %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 --- !u!1 &5366957160841664999
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -61,7 +107,7 @@ MeshRenderer:
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 603cda73335499d4980d9b171eaffe0d, type: 2} - {fileID: 2100000, guid: f6db0041cc34fe9439de56d5d92c8b8d, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
@@ -116,6 +162,7 @@ Transform:
- {fileID: 4697416823958963037} - {fileID: 4697416823958963037}
- {fileID: 9135323956734471646} - {fileID: 9135323956734471646}
- {fileID: 2398425302420252226} - {fileID: 2398425302420252226}
- {fileID: 2582669991302867501}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: -1 m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -133,7 +180,8 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
size: {x: 1, y: 1} size: {x: 1, y: 1}
linkedPortal: {fileID: 0} linkedPortal: {fileID: 0}
portalCamera: {fileID: 17691322601746172} screen: {fileID: 5871497001431693362}
cameraTransform: {fileID: 7726674486241786965}
portalTransform: {fileID: 2246995198243242195} portalTransform: {fileID: 2246995198243242195}
--- !u!65 &7604291350124895408 --- !u!65 &7604291350124895408
BoxCollider: BoxCollider:
@@ -174,7 +222,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!4 &2398425302420252226 --- !u!4 &2398425302420252226
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -298,7 +346,6 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
minNearClipPlane: 0.0001 minNearClipPlane: 0.0001
portal: {fileID: 1249363658} portal: {fileID: 1249363658}
screen: {fileID: 5871497001431693362}
--- !u!1 &8470391359842711396 --- !u!1 &8470391359842711396
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -4,6 +4,7 @@ using EscapeRoomEngine.Engine.Runtime.Modules;
using EscapeRoomEngine.Engine.Runtime.Utilities; using EscapeRoomEngine.Engine.Runtime.Utilities;
using NaughtyAttributes; using NaughtyAttributes;
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization;
namespace EscapeRoomEngine.Portal.Runtime namespace EscapeRoomEngine.Portal.Runtime
{ {
@@ -12,9 +13,10 @@ namespace EscapeRoomEngine.Portal.Runtime
/// </summary> /// </summary>
public class Portal : DoorState public class Portal : DoorState
{ {
private static readonly int PortalNumberProperty = Shader.PropertyToID("_PortalNumber");
public static readonly Matrix4x4 HalfRotation = Matrix4x4.Rotate(Quaternion.Euler(0, 180, 0)); public static readonly Matrix4x4 HalfRotation = Matrix4x4.Rotate(Quaternion.Euler(0, 180, 0));
private static int _portalCounter; private static int _portalCounter = 1;
/// <summary> /// <summary>
/// The portal that is connected with this one. /// The portal that is connected with this one.
@@ -40,6 +42,7 @@ namespace EscapeRoomEngine.Portal.Runtime
protected virtual void Awake() protected virtual void Awake()
{ {
PortalNumber = _portalCounter++; PortalNumber = _portalCounter++;
screen.material.SetInt(PortalNumberProperty, PortalNumber);
DoorEvent += (_, type) => DoorEvent += (_, type) =>
{ {

View File

@@ -33,9 +33,7 @@ namespace EscapeRoomEngine.Portal.Runtime
}, },
ref renderingData, sortingCriteria); ref renderingData, sortingCriteria);
// set stencil to portal
var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, _settings.layer); var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, _settings.layer);
drawingSettings.overrideMaterial = _settings.material;
context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, ref _renderStateBlock); context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, ref _renderStateBlock);
} }
} }
@@ -46,7 +44,6 @@ namespace EscapeRoomEngine.Portal.Runtime
public class Settings public class Settings
{ {
public LayerMask layer; public LayerMask layer;
public Material material;
} }
public Settings settings = new(); public Settings settings = new();
@@ -56,8 +53,6 @@ namespace EscapeRoomEngine.Portal.Runtime
_portalPass = new PortalRenderPass(settings); _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) public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{ {
renderer.EnqueuePass(_portalPass); renderer.EnqueuePass(_portalPass);

View File

@@ -518,14 +518,14 @@ Transform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 259858787} 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_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_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 1453220877} m_Father: {fileID: 1453220877}
m_RootOrder: -1 m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 14.913, y: 0, z: 0}
--- !u!23 &259858790 --- !u!23 &259858790
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -662,12 +662,12 @@ PrefabInstance:
- target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562, - target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 1 value: 1.0000001
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562, - target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: -1 value: -1.1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562, - target: {fileID: 6854256365667908692, guid: ecbf9ce952d5f38458b8237a4483c562,
type: 3} type: 3}
@@ -1893,17 +1893,17 @@ PrefabInstance:
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0 value: 0.4
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0 value: -1.778
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: 0 value: -0.2
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
@@ -1945,16 +1945,6 @@ PrefabInstance:
propertyPath: m_Name propertyPath: m_Name
value: Portal In value: Portal In
objectReference: {fileID: 0} 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_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []
@@ -2158,7 +2148,7 @@ PrefabInstance:
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0 value: -0.3999997
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
@@ -2168,12 +2158,12 @@ PrefabInstance:
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: 0.14 value: 1.1400003
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalRotation.w propertyPath: m_LocalRotation.w
value: 0.00000058114523 value: -1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
@@ -2183,7 +2173,7 @@ PrefabInstance:
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalRotation.y propertyPath: m_LocalRotation.y
value: -1 value: -0.0000001490116
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
@@ -2198,7 +2188,7 @@ PrefabInstance:
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
propertyPath: m_LocalEulerAnglesHint.y propertyPath: m_LocalEulerAnglesHint.y
value: -180 value: -360
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7, - target: {fileID: 2246995198243242195, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3} type: 3}
@@ -2210,11 +2200,6 @@ PrefabInstance:
propertyPath: m_Name propertyPath: m_Name
value: Portal Out value: Portal Out
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 5635962022185625128, guid: c50e7df1078c96f46bc6825f7e422fb7,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []

View File

@@ -52,7 +52,6 @@ MonoBehaviour:
layer: layer:
serializedVersion: 2 serializedVersion: 2
m_Bits: 128 m_Bits: 128
material: {fileID: 2100000, guid: f6db0041cc34fe9439de56d5d92c8b8d, type: 2}
--- !u!114 &11400000 --- !u!114 &11400000
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -129,4 +128,3 @@ MonoBehaviour:
layer: layer:
serializedVersion: 2 serializedVersion: 2
m_Bits: 256 m_Bits: 256
material: {fileID: 2100000, guid: 782cb59e6f5f438478bdd855cf549ff3, type: 2}