render stencil portals (transparent)

This commit is contained in:
2023-03-08 15:39:58 +01:00
parent 02bb0727b7
commit 4be8380a40
14 changed files with 475 additions and 60 deletions

View File

@@ -7,17 +7,19 @@ namespace EscapeRoomEngine.Portal.Runtime
{
public class RenderPortals : ScriptableRendererFeature
{
private class PortalRenderPass : ScriptableRenderPass
private class RenderPass : ScriptableRenderPass
{
private RenderStateBlock _renderStateBlock;
private readonly LayerMask _layers;
private readonly LayerMask _layer;
private readonly Material _overwriteMaterial;
public PortalRenderPass(LayerMask layers)
public RenderPass(LayerMask layer, Material overwriteMaterial, RenderPassEvent renderPassEvent)
{
_layers = layers;
_layer = layer;
_overwriteMaterial = overwriteMaterial;
renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
this.renderPassEvent = renderPassEvent;
_renderStateBlock = new RenderStateBlock(RenderStateMask.Nothing);
}
@@ -31,24 +33,30 @@ namespace EscapeRoomEngine.Portal.Runtime
new("SRPDefaultUnlit"), new("UniversalForward"), new("UniversalForwardOnly")
},
ref renderingData, sortingCriteria);
if (_overwriteMaterial)
{
drawingSettings.overrideMaterial = _overwriteMaterial;
}
var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, _layers);
var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, _layer);
context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, ref _renderStateBlock);
}
}
private PortalRenderPass _portalPass;
private RenderPass _renderPass;
public LayerMask layers;
public LayerMask layer;
public Material overwriteMaterial;
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
public override void Create()
{
_portalPass = new PortalRenderPass(layers);
_renderPass = new RenderPass(layer, overwriteMaterial, renderPassEvent);
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(_portalPass);
renderer.EnqueuePass(_renderPass);
}
}
}