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" {
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

View File

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

View File

@@ -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

View File

@@ -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

View File

@@ -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
/// </summary>
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;
/// <summary>
/// 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) =>
{

View File

@@ -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);

View File

@@ -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: []

View File

@@ -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}