public StencilRenderPass(ScreenSpacePlanarReflectionsSettings settings) { m_Settings = settings; m_RenderStateBlock = new RenderStateBlock(); m_RenderStateBlock.mask |= RenderStateMask.Depth; m_RenderStateBlock.depthState = new DepthState(false, CompareFunction.Always); m_RenderStateBlock.mask |= RenderStateMask.Stencil; StencilState stencilState = StencilState.defaultValue; stencilState.enabled = true; stencilState.SetCompareFunction(CompareFunction.Always); stencilState.SetPassOperation(StencilOp.Replace); stencilState.SetFailOperation(StencilOp.Zero); stencilState.SetZFailOperation(StencilOp.Keep); m_RenderStateBlock.stencilReference = settings.StencilValue; m_RenderStateBlock.stencilState = stencilState; m_FilteringSettings = new FilteringSettings(RenderQueueRange.opaque, settings.ReflectiveSurfaceLayer); m_ShaderTagIdList.Add(new ShaderTagId("DepthOnly")); m_DepthTexture.Init("_CameraDepthTexture"); }
public DrawReflectiveLayerRenderPass(ScreenSpacePlanarReflectionsSettings settings) { m_Settings = settings; m_ShaderTagIdList.Add(new ShaderTagId("UniversalForward")); m_ShaderTagIdList.Add(new ShaderTagId("LightweightForward")); m_ShaderTagIdList.Add(new ShaderTagId("SRPDefaultUnlit")); m_FilteringSettings = new FilteringSettings(RenderQueueRange.opaque, m_Settings.ReflectiveSurfaceLayer); m_RenderStateBlock = new RenderStateBlock(RenderStateMask.Nothing); }
public ReflectionsRenderPass(ScreenSpacePlanarReflectionsSettings settings) { renderPassEvent = RenderPassEvent.AfterRenderingSkybox; m_Settings = settings; m_ScreenSpacePlanarReflection.Init("_ScreenSpacePlanarReflectionTexture"); m_ScreenSpacePlanarReflectionBuffer.Init("_ScreenSpacePlanarReflectionBuffer"); m_Temp[0].Init("_SSPRTempA"); m_Temp[1].Init("_SSPRTempB"); m_RenderTextureBufferDescriptor = new RenderTextureDescriptor(512, 512, RenderTextureFormat.RInt, 0); m_RenderTextureBufferDescriptor.enableRandomWrite = true; m_DebugBufferDescriptor = new RenderTextureDescriptor(512, 512, RenderTextureFormat.ARGBFloat, 0); m_DebugBufferDescriptor.enableRandomWrite = true; m_RenderTextureDescriptor = new RenderTextureDescriptor(512, 512, RenderTextureFormat.ARGB32, 0); m_DepthTexture.Init("_CameraDepthTexture"); m_RenderTextureDescriptor.msaaSamples = 1; m_RenderTextureDescriptor.bindMS = false; m_Size = new Vector2Int(512, 512); m_ThreadSize = new Vector2Int(1, 1); m_ReflectionShaderCS = settings.reflectionCS; m_ReflectionShader = settings.reflectionShader; if (m_ReflectionShaderCS != null) { m_ClearKernal = m_ReflectionShaderCS.FindKernel("CSClear"); m_RenderKernal = m_ReflectionShaderCS.FindKernel("CSMain"); m_RenderStretchKernal = m_ReflectionShaderCS.FindKernel("CSMain_Stretch"); m_DebugKernal = m_ReflectionShaderCS.FindKernel("CSDebug"); m_MSSA2Kernal = m_ReflectionShaderCS.FindKernel("CSMain_MS2"); m_MSSA4Kernal = m_ReflectionShaderCS.FindKernel("CSMain_MS4"); m_MSSA8Kernal = m_ReflectionShaderCS.FindKernel("CSMain_MS8"); } if (m_ReflectionShader != null) { m_ReflectionMaterial = new Material(m_ReflectionShader); } m_PropertyResult = Shader.PropertyToID("Result"); m_PropertyResultSize = Shader.PropertyToID("ResultSize"); m_PropertyDepth = Shader.PropertyToID("_CameraDepthTexture"); m_PropertyDepth_MSAA2 = Shader.PropertyToID("CameraDepth_MSAA2"); m_PropertyDepth_MSAA4 = Shader.PropertyToID("CameraDepth_MSAA4"); m_PropertyDepth_MSAA8 = Shader.PropertyToID("CameraDepth_MSAA8"); m_PropertyInvVP = Shader.PropertyToID("InverseViewProjection"); m_PropertyVP = Shader.PropertyToID("ViewProjection"); m_PropertyReflectionData = Shader.PropertyToID("ReflectionData"); m_PropertySSPRBufferRange = Shader.PropertyToID("_SSPRBufferRange"); m_PropertyMainTex = Shader.PropertyToID("_MainTex"); m_PropertyDebugTex = Shader.PropertyToID("WorldPositionAndPlaneDistance"); m_PropertyBufferStep = Shader.PropertyToID("_SSPRBufferStride"); m_PropertyStencil = Shader.PropertyToID("_StencilRef"); m_InvVP = new Matrix4x4(); m_VP = new Matrix4x4(); m_ReflectionData = new Vector4[3] { new Vector4(), new Vector4(), new Vector4() }; m_MSAA = false; m_MSAACount = 1; }