Exemplo n.º 1
0
        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");
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
        }