Exemple #1
0
            // Here you can implement the rendering logic.
            // Use <c>ScriptableRenderContext</c> to issue drawing commands or execute command buffers
            // https://docs.unity3d.com/ScriptReference/Rendering.ScriptableRenderContext.html
            // You don't have to call ScriptableRenderContext.submit, the render pipeline will call it at specific points in the pipeline.
            public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
            {
                var RangeDrawCommand = GroundEffectsManagerV2.Get().RangeDrawCommand;

                if (RangeDrawCommand != null)
                {
                    context.ExecuteCommandBuffer(RangeDrawCommand);
                }
            }
Exemple #2
0
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            Camera camera = renderingData.cameraData.camera;

            var cmd = CommandBufferPool.Get(m_ProfilerTag);

            cmd.SetViewProjectionMatrices(Matrix4x4.identity, Matrix4x4.identity);
            cmd.DrawMesh(UnityEngine.Rendering.Universal.RenderingUtils.fullscreenMesh, Matrix4x4.identity, m_Settings.material);
            cmd.SetViewProjectionMatrices(camera.worldToCameraMatrix, camera.projectionMatrix);
            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
        }
Exemple #3
0
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);

            using (new ProfilingSample(cmd, m_ProfilerTag))
            {
                cmd.SetRandomWriteTarget(1, portalRenderContext.computeBuffer);
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
        }
Exemple #4
0
            // Here you can implement the rendering logic.
            // Use <c>ScriptableRenderContext</c> to issue drawing commands or execute command buffers
            // https://docs.unity3d.com/ScriptReference/Rendering.ScriptableRenderContext.html
            // You don't have to call ScriptableRenderContext.submit, the render pipeline will call it at specific points in the pipeline.
            public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
            {
                var levelManager = LevelManager.Get();

                if (levelManager != null && levelManager.CurrentLevelType != LevelType.STARTMENU)
                {
                    var selectableObjectManagerV2 = SelectableObjectManagerV2.Get();
                    if (selectableObjectManagerV2.SelectableObjectRendererManager != null &&
                        selectableObjectManagerV2.SelectableObjectRendererManager.CommandBufer != null)
                    {
                        context.ExecuteCommandBuffer(selectableObjectManagerV2.SelectableObjectRendererManager.CommandBufer);
                    }
                }
            }
Exemple #5
0
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            CommandBuffer cmd = CommandBufferPool.Get(k_RenderWaterFXTag);

            using (new ProfilingSample(cmd, k_RenderWaterFXTag))
            {
                context.ExecuteCommandBuffer(cmd);
                cmd.Clear();

                var drawSettings      = CreateDrawingSettings(m_WaterFXShaderTag, ref renderingData, SortingCriteria.CommonTransparent);
                var filteringSettings = transparentFilterSettings;

                context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref filteringSettings);
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
        }
Exemple #6
0
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            if (m_WaterCausticMaterial == null)
            {
                Debug.LogErrorFormat(
                    "Missing caustic material. {0} render pass will not execute. Check for missing reference in the renderer resources.",
                    GetType().Name);
                return;
            }

            CommandBuffer cmd = CommandBufferPool.Get(k_RenderWaterCausticsTag);

            cmd.SetViewProjectionMatrices(Matrix4x4.identity, Matrix4x4.identity);
            cmd.DrawMesh(UnityEngine.Rendering.Universal.RenderingUtils.fullscreenMesh, Matrix4x4.identity, m_WaterCausticMaterial, 0, 0);
            cmd.SetViewProjectionMatrices(renderingData.cameraData.camera.worldToCameraMatrix, renderingData.cameraData.camera.projectionMatrix);

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
        }
        /// <inheritdoc/>
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);

            RenderTextureDescriptor opaqueDesc = renderingData.cameraData.cameraTargetDescriptor;

            opaqueDesc.depthBufferBits = 0;

            // Can't read and write to same color target, create a temp render target to blit.
            if (destination == UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget)
            {
                cmd.GetTemporaryRT(m_TemporaryColorTexture.id, opaqueDesc, filterMode);

                RenderTargetIdentifier mainID;

                if (setMainTexTo != null)
                {
                    mainID = new RenderTargetIdentifier(setMainTexTo);

                    Blit(cmd, mainID, m_TemporaryColorTexture.Identifier(), blitMaterial, blitShaderPassIndex);
                }
                else
                {
                    Blit(cmd, source, m_TemporaryColorTexture.Identifier(), blitMaterial, blitShaderPassIndex);
                }


                Blit(cmd, m_TemporaryColorTexture.Identifier(), source);
            }
            else
            {
                Blit(cmd, source, destination.Identifier(), blitMaterial, blitShaderPassIndex);
            }

            context.ExecuteCommandBuffer(cmd);

            CommandBufferPool.Release(cmd);
        }
Exemple #8
0
 public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
 {
     renderer.EnqueuePass(m_WaterFXPass);
 }
Exemple #9
0
        public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            if (EnviroSkyMgr.instance != null && EnviroSky.instance != null && EnviroSkyMgr.instance.useVolumeClouds && EnviroSky.instance.PlayerCamera != null)
            {
                if (renderingData.cameraData.camera.cameraType == CameraType.Preview)
                {
                    return;
                }

                myCam = renderingData.cameraData.camera;

                var src  = renderer.cameraColorTarget;
                var dest = UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget;

                if (currentReprojectionPixelSize != EnviroSky.instance.cloudsSettings.cloudsQualitySettings.reprojectionPixelSize)
                {
                    currentReprojectionPixelSize = EnviroSky.instance.cloudsSettings.cloudsQualitySettings.reprojectionPixelSize;
                    SetReprojectionPixelSize(EnviroSky.instance.cloudsSettings.cloudsQualitySettings.reprojectionPixelSize);
                }

                if (renderingData.cameraData.isSceneViewCamera && !EnviroSky.instance.showVolumeCloudsInEditor)
                {
                    return;
                }

                RenderVolumeClouds(renderingData.cameraData.cameraTargetDescriptor);

                if (blitPass == null)
                {
                    Create();
                }

                blitPass.Setup(src, dest);

                renderer.EnqueuePass(blitPass);
            }
        }
Exemple #10
0
        public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            if (renderingData.cameraData.camera.cameraType == CameraType.Preview || renderingData.cameraData.camera.cameraType == CameraType.SceneView || renderingData.cameraData.camera.cameraType == CameraType.Reflection)
            {
                return;
            }

            if (EnviroSkyMgr.instance != null && EnviroSkyMgr.instance.useMoonShafts && EnviroSkyMgr.instance.Camera != null)
            {
                var src  = renderer.cameraColorTarget;
                var dest = UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget;

                if (myCam == null)
                {
                    myCam = EnviroSkyMgr.instance.Camera;
                }

                RenderTextureDescriptor descriptor = renderingData.cameraData.cameraTargetDescriptor;
                descriptor.graphicsFormat = Experimental.Rendering.GraphicsFormat.R32G32B32A32_SFloat;
                RenderTexture newSource = RenderTexture.GetTemporary(descriptor);

                RenderTargetIdentifier newSourceID = new RenderTargetIdentifier(newSource);

                if (getSouceTexture == null || blitPassFinal == null)
                {
                    Create();
                }

                getSouceTexture.Setup(src, newSourceID);
                renderer.EnqueuePass(getSouceTexture);

                RenderLightShaft(renderer, newSource, src, dest, sunShaftsMaterial, simpleSunClearMaterial, EnviroSkyMgr.instance.Components.Moon.transform, EnviroSkyMgr.instance.LightShaftsSettings.thresholdColorMoon.Evaluate(EnviroSkyMgr.instance.Time.solarTime), EnviroSkyMgr.instance.LightShaftsSettings.lightShaftsColorMoon.Evaluate(EnviroSkyMgr.instance.Time.solarTime));

                RenderTexture.ReleaseTemporary(newSource);
            }
        }
Exemple #11
0
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            CommandBuffer cmd = CommandBufferPool.Get(k_RenderGrassDisplacementFXTag);

            using (new ProfilingSample(cmd, k_RenderGrassDisplacementFXTag))
            {
                context.ExecuteCommandBuffer(cmd);
                cmd.Clear();

                var drawSettings      = CreateDrawingSettings(m_GrassDisplacementFXShaderTag, ref renderingData, SortingCriteria.CommonTransparent);
                var filteringSettings = transparentFilterSettings;

                var camera          = renderingData.cameraData.camera;
                var cameraTransform = camera.transform;
                var cameraPos       = cameraTransform.position;

                var isStereoEnabled = renderingData.cameraData.isStereoEnabled;
                if (isStereoEnabled)
                {
                    cmd.SetSinglePassStereo(SinglePassStereoMode.None);
                }

                //  Push cameraPos forward – if enabled
                var camForward = cameraTransform.forward;
                // unstable
                // cameraPos.x += camForward.x * m_Size * 0.5f;
                // cameraPos.z += camForward.z * m_Size * 0.5f;
                if (m_ShiftRenderTex)
                {
                    var t_camForward = new Vector2(camForward.x, camForward.z);
                    t_camForward.Normalize();
                    //  still rather unstable...
                    cameraPos.x += t_camForward.x * m_Size * 0.33f;
                    cameraPos.z += t_camForward.y * m_Size * 0.33f;
                }

                //  Store original Camera matrices
                var worldToCameraMatrixOrig = camera.worldToCameraMatrix;
                var projectionMatrixOrig    = camera.projectionMatrix;

                //  Quantize movement to fit texel size of RT – this stabilzes the final visual result
                Vector2 positionRT = Vector2.zero; // bad
                positionRT.x = Mathf.Floor(cameraPos.x * oneOverStepSize) * stepSize;
                positionRT.y = Mathf.Floor(cameraPos.z * oneOverStepSize) * stepSize;

                //  Update the custom worldToCameraMatrix – we only have to update the translation/position
                worldToCameraMatrix.SetColumn(3, new Vector4(-positionRT.x, -positionRT.y, -cameraPos.y - 40.0f, 1));
                cmd.SetViewProjectionMatrices(worldToCameraMatrix, projectionMatrix);

                //  ---------------------------------------------------------
                //  Calc and set grass shader params
                posSize.x = positionRT.x - m_Size * 0.5f;
                posSize.y = positionRT.y - m_Size * 0.5f;
                posSize.z = 1.0f / m_Size;
                cmd.SetGlobalVector(DisplacementTexPosSizePID, posSize);

                //  ---------------------------------------------------------
                //  Call execute
                context.ExecuteCommandBuffer(cmd);
                context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref filteringSettings);

                //  ---------------------------------------------------------
                //  Restore Camera matrices
                cmd.Clear();
                cmd.SetViewProjectionMatrices(worldToCameraMatrixOrig, projectionMatrixOrig);
                if (isStereoEnabled)
                {
                    //if (m_SinglePassInstancing) {
                    //    cmd.SetSinglePassStereo(SinglePassStereoMode.Instancing);
//cmd.SetGlobalTexture("_Lux_DisplacementRT", m_GrassDisplacementFX.id);
//cmd.SetGlobalTexture("_Lux_DisplacementRT", m_GrassDisplacementFX.Identifier() );
                    //}
                    //else {
                    cmd.SetSinglePassStereo(SinglePassStereoMode.SideBySide);
                    //}
                }
            }

            //  ---------------------------------------------------------
            //  Call execute a 2nd time
            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
        }
Exemple #12
0
        public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            if (renderingData.cameraData.camera.cameraType == CameraType.Preview || renderingData.cameraData.camera.cameraType == CameraType.SceneView || renderingData.cameraData.camera.cameraType == CameraType.Reflection)
            {
                return;
            }

            myCam = renderingData.cameraData.camera;

            if (EnviroSkyMgr.instance != null && EnviroSkyMgr.instance.HasInstance() && EnviroSkyMgr.instance.useMoonShafts)
            {
                if (renderingData.cameraData.isSceneViewCamera)
                {
                    return;
                }

                var src  = renderer.cameraColorTarget;
                var dest = UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget;

                blitPass.Setup(myCam, src, dest, EnviroSkyMgr.instance.Components.Moon.transform, EnviroSkyMgr.instance.LightShaftsSettings.thresholdColorMoon.Evaluate(EnviroSkyMgr.instance.Time.solarTime), EnviroSkyMgr.instance.LightShaftsSettings.lightShaftsColorMoon.Evaluate(EnviroSkyMgr.instance.Time.solarTime));
                renderer.EnqueuePass(blitPass);
            }
        }
Exemple #13
0
        /// <inheritdoc/>
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            CommandBuffer cmd = CommandBufferPool.Get("Light Shafts");

            int divider = 4;

            if (EnviroSkyMgr.instance.LightShaftsSettings.resolution == EnviroPostProcessing.SunShaftsResolution.Normal)
            {
                divider = 2;
            }
            else if (EnviroSkyMgr.instance.LightShaftsSettings.resolution == EnviroPostProcessing.SunShaftsResolution.High)
            {
                divider = 1;
            }

            Vector3 v = Vector3.one * 0.5f;

            if (lightSource)
            {
                v = myCam.WorldToViewportPoint(lightSource.position);
            }
            else
            {
                v = new Vector3(0.5f, 0.5f, 0.0f);
            }

            int rtW = renderingData.cameraData.cameraTargetDescriptor.width / divider;
            int rtH = renderingData.cameraData.cameraTargetDescriptor.height / divider;

            RenderTextureDescriptor textureDescriptor = renderingData.cameraData.cameraTargetDescriptor;

            textureDescriptor.width           = rtW;
            textureDescriptor.height          = rtH;
            textureDescriptor.depthBufferBits = 0;
            textureDescriptor.colorFormat     = RenderTextureFormat.Default;

            if (lrDepthBuffer == null)
            {
                lrDepthBuffer = new RenderTexture(textureDescriptor);
            }

            if (lrColorB == null)
            {
                lrColorB = new RenderTexture(textureDescriptor);
            }

            //   lrDepthBuffer = RenderTexture.GetTemporary(textureDescriptor);

            cmd.SetGlobalVector("_BlurRadius4", new Vector4(1.0f, 1.0f, 0.0f, 0.0f) * EnviroSkyMgr.instance.LightShaftsSettings.blurRadius);
            cmd.SetGlobalVector("_SunPosition", new Vector4(v.x, v.y, v.z, EnviroSkyMgr.instance.LightShaftsSettings.maxRadius));
            cmd.SetGlobalVector("_SunThreshold", treshold);

            blitMaterial.SetVector("_BlurRadius4", new Vector4(1.0f, 1.0f, 0.0f, 0.0f) * EnviroSkyMgr.instance.LightShaftsSettings.blurRadius);
            blitMaterial.SetVector("_SunPosition", new Vector4(v.x, v.y, v.z, EnviroSkyMgr.instance.LightShaftsSettings.maxRadius));
            blitMaterial.SetVector("_SunThreshold", treshold);

            RenderTextureDescriptor textureDescriptorSource = renderingData.cameraData.cameraTargetDescriptor;

            textureDescriptorSource.graphicsFormat  = Experimental.Rendering.GraphicsFormat.R32G32B32A32_SFloat;
            textureDescriptorSource.depthBufferBits = 0;
            RenderTexture sourceRT = RenderTexture.GetTemporary(textureDescriptorSource);

            Blit(cmd, source, sourceRT);


            Graphics.Blit(sourceRT, lrDepthBuffer, blitMaterial, 2);
            //Blit(cmd, source, lrDepthBuffer, blitMaterial, 2);

            // paint a small black small border to get rid of clamping problems
            if (myCam.stereoActiveEye == Camera.MonoOrStereoscopicEye.Mono)
            {
                DrawBorder(lrDepthBuffer, clearMaterial);
            }

            // radial blur:
            radialBlurIterations = Mathf.Clamp(radialBlurIterations, 1, 4);
            float ofs = EnviroSkyMgr.instance.LightShaftsSettings.blurRadius * (1.0f / 768.0f);

            cmd.SetGlobalVector("_BlurRadius4", new Vector4(ofs, ofs, 0.0f, 0.0f));
            cmd.SetGlobalVector("_SunPosition", new Vector4(v.x, v.y, v.z, EnviroSkyMgr.instance.LightShaftsSettings.maxRadius));

            blitMaterial.SetVector("_BlurRadius4", new Vector4(ofs, ofs, 0.0f, 0.0f));
            blitMaterial.SetVector("_SunPosition", new Vector4(v.x, v.y, v.z, EnviroSkyMgr.instance.LightShaftsSettings.maxRadius));

            for (int it2 = 0; it2 < radialBlurIterations; it2++)
            {
                Graphics.Blit(lrDepthBuffer, lrColorB, blitMaterial, 1);
                //Blit(cmd, lrDepthBuffer, lrColorB, blitMaterial, 1);
                // RenderTexture.ReleaseTemporary(lrDepthBuffer);
                ofs = EnviroSkyMgr.instance.LightShaftsSettings.blurRadius * (((it2 * 2.0f + 1.0f) * 6.0f)) / 768.0f;
                cmd.SetGlobalVector("_BlurRadius4", new Vector4(ofs, ofs, 0.0f, 0.0f));
                blitMaterial.SetVector("_BlurRadius4", new Vector4(ofs, ofs, 0.0f, 0.0f));
                //lrDepthBuffer = RenderTexture.GetTemporary(textureDescriptor);

                Graphics.Blit(lrColorB, lrDepthBuffer, blitMaterial, 1);
                //Blit(cmd, lrColorB, lrDepthBuffer, blitMaterial, 1);
                //RenderTexture.ReleaseTemporary(lrColorB);
                ofs = EnviroSkyMgr.instance.LightShaftsSettings.blurRadius * (((it2 * 2.0f + 2.0f) * 6.0f)) / 768.0f;
                cmd.SetGlobalVector("_BlurRadius4", new Vector4(ofs, ofs, 0.0f, 0.0f));
                blitMaterial.SetVector("_BlurRadius4", new Vector4(ofs, ofs, 0.0f, 0.0f));
            }

            // put together:

            if (v.z >= 0.0f)
            {
                cmd.SetGlobalVector("_SunColor", new Vector4(clr.r, clr.g, clr.b, clr.a) * EnviroSkyMgr.instance.LightShaftsSettings.intensity);
            }
            else
            {
                cmd.SetGlobalVector("_SunColor", Vector4.zero); // no backprojection !
            }
            //FINAL
            // blitMaterial.SetTexture("_ColorBuffer", lrDepthBuffer);


            cmd.SetGlobalTexture("_ColorBuffer", lrDepthBuffer);
            Blit(cmd, sourceRT, source, blitMaterial, (EnviroSkyMgr.instance.LightShaftsSettings.screenBlendMode == EnviroPostProcessing.ShaftsScreenBlendMode.Screen) ? 0 : 4);

            //  RenderTexture.ReleaseTemporary(lrDepthBuffer);
            RenderTexture.ReleaseTemporary(sourceRT);

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
        }
        public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            if (renderingData.cameraData.camera.cameraType == CameraType.Preview || renderingData.cameraData.camera.cameraType == CameraType.Reflection)
            {
                return;
            }

            myCam = renderingData.cameraData.camera;

            if (EnviroSkyMgr.instance != null && EnviroSky.instance != null && EnviroSkyMgr.instance.useDistanceBlur)
            {
                if (renderingData.cameraData.isSceneViewCamera && !EnviroSky.instance.showDistanceBlurInEditor)
                {
                    return;
                }

                var src  = renderer.cameraColorTarget;
                var dest = UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget;

                if (blitPass == null)
                {
                    blitPass = new EnviroDistanceBlurPass(UnityEngine.Rendering.Universal.RenderPassEvent.BeforeRenderingTransparents, postProcessMat, distributionTexture);
                }

                blitPass.Setup(myCam, src, dest);
                renderer.EnqueuePass(blitPass);
            }
        }
 public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
 {
     if (m_Settings.material != null)
     {
         renderer.EnqueuePass(m_RenderQuadPass);
     }
 }
Exemple #16
0
        public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            var src  = renderer.cameraColorTarget;
            var dest = (settings.destination == Target.Color) ? UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget : m_RenderTextureHandle;

            if (settings.blitMaterial == null)
            {
                Debug.LogWarningFormat("Missing Blit Material. {0} blit pass will not execute. Check for missing reference in the assigned renderer.", GetType().Name);
                return;
            }

            blitPass.Setup(src, dest);
            renderer.EnqueuePass(blitPass);
        }
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            SortingCriteria sortingCriteria = (renderQueueType == RenderQueueType.Transparent)
                ? SortingCriteria.CommonTransparent
                : renderingData.cameraData.defaultOpaqueSortFlags;

            DrawingSettings drawingSettings =
                CreateDrawingSettings(m_ShaderTagIdList, ref renderingData, sortingCriteria);

            drawingSettings.overrideMaterial          = overrideMaterial;
            drawingSettings.overrideMaterialPassIndex = overrideMaterialPassIndex;

            GraphicsFence portalsRenderedFence;

            Camera        camera       = renderingData.cameraData.camera;
            float         cameraAspect = (float)camera.pixelWidth / (float)camera.pixelHeight;
            CommandBuffer cmd          = CommandBufferPool.Get(m_ProfilerTag);

            using (new ProfilingSample(cmd, m_ProfilerTag))
            {
                context.ExecuteCommandBuffer(cmd);
                cmd.Clear();
                cmd.SetRandomWriteTarget(1, portalRenderContext.computeBuffer);


                if (m_CameraSettings.overrideCamera)
                {
                    //Matrix4x4 projectionMatrix = Matrix4x4.Perspective(m_CameraSettings.cameraFieldOfView, cameraAspect,
                    //    camera.nearClipPlane, camera.farClipPlane);

                    //Matrix4x4 viewMatrix = camera.worldToCameraMatrix;
                    //Vector4 cameraTranslation = viewMatrix.GetColumn(3);
                    //viewMatrix.SetColumn(3, cameraTranslation + m_CameraSettings.offset);

                    //cmd.SetViewProjectionMatrices(viewMatrix, projectionMatrix);
                    portalRenderContext.exitPortal = GameObject.FindGameObjectWithTag("ExitPortal");
                    Camera     exitCam = portalRenderContext.exitPortal.GetComponentInChildren <Camera>();
                    GameObject entryGO = GameObject.FindGameObjectWithTag("EntryPortal");

                    //Vector3 normal = exitCam.transform.forward;
                    //Vector3 pos = exitCam.transform.position;

                    //Vector4 clipPlaneWorldSpace = new Vector4(normal.x, normal.y, normal.z, -Vector3.Dot(normal, pos));
                    //Vector4 clipPlaneCameraSpace = exitCam.worldToCameraMatrix * clipPlaneWorldSpace;

                    Matrix4x4 projectionMatrix = camera.projectionMatrix;//exitCam.CalculateObliqueMatrix(clipPlaneCameraSpace);

                    Matrix4x4 destView = camera.worldToCameraMatrix * entryGO.transform.localToWorldMatrix
                                         * Matrix4x4.Rotate(entryGO.transform.rotation)
                                         * exitCam.transform.localToWorldMatrix.inverse;
                    //* glm::rotate(glm::mat4(1.0f), 180.0f, glm::vec3(0.0f, 1.0f, 0.0f) * portal.orientation())
                    //* glm::inverse(portal.destination()->modelMat());

                    projectionMatrix = clippedProjMat(destView, projectionMatrix, entryGO.transform.position, entryGO.transform.rotation);


                    //cmd.Clear();
                    cmd.SetViewProjectionMatrices(destView, projectionMatrix);
                    context.ExecuteCommandBuffer(cmd);
                    cmd.Clear();
                }



                context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref m_FilteringSettings,
                                      ref m_RenderStateBlock);

                //ScriptableCullingParameters param;

                //context.Cull()

                if (m_CameraSettings.overrideCamera && m_CameraSettings.restoreCamera)
                {
                    Matrix4x4 projectionMatrix = Matrix4x4.Perspective(camera.fieldOfView, cameraAspect,
                                                                       camera.nearClipPlane, camera.farClipPlane);

                    cmd.Clear();
                    cmd.SetViewProjectionMatrices(camera.worldToCameraMatrix, projectionMatrix);
                }
                //portalsRenderedFence = cmd.CreateGraphicsFence(GraphicsFenceType.CPUSynchronisation,
                //    SynchronisationStageFlags.PixelProcessing);
                //if (PortalDebugRenderOverlay.Instance?.renderTarget)
                //{
                //    PortalDebugRenderOverlay.Instance?.renderTarget = new RenderTexture(depthAttachment)
                //}
                //PortalDebugRenderOverlay.Instance?.fullscreenOverlay?.mainTexture = this.depthAttachment;
            }

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);

            context.Submit();

            //Debug.Log("Fence support:"+ SystemInfo.supportsGraphicsFence);
            //while (!portalsRenderedFence.passed) ;

            //Int32[] perPortalPixelCount = new Int32[255];
            //portalRenderContext.computeBuffer.GetData(perPortalPixelCount, 0, 0, 255);
            //for (int i = 0; i < 5; i++)
            //{
            //    Debug.Log(i + "Portal count: " + perPortalPixelCount[i]);
            //}
            //portalRenderContext.computeBuffer.SetData(new Int32[255]);
        }
Exemple #18
0
 public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
 {
     // Enqueues the render pass for execution. Here you can inject one or more render passes in the renderer
     // AddRenderPasses is called everyframe.
     if (m_Settings.material != null)
     {
         renderer.EnqueuePass(m_RenderQuadPass);
     }
 }
Exemple #19
0
 public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
 {
     renderer.EnqueuePass(m_GrassDisplacementPass);
 }
Exemple #20
0
        public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            if (renderingData.cameraData.camera.cameraType == CameraType.Preview)
            {
                return;
            }

            myCam = renderingData.cameraData.camera;

            if (EnviroSky.instance != null && EnviroSky.instance.useFog && EnviroSky.instance.PlayerCamera != null)
            {
                var src  = renderer.cameraColorTarget;
                var dest = UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget;

                if (renderingData.cameraData.isSceneViewCamera && !EnviroSky.instance.showFogInEditor)
                {
                    return;
                }

                UpdateMatrix();

                RenderFog();

                if (blitPass == null)
                {
                    Create();
                }

                blitPass.Setup(src, dest);

                renderer.EnqueuePass(blitPass);
            }
        }
        ///
        public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            CommandBuffer cmd = CommandBufferPool.Get("Distance Blur");

            UpdateMatrix();

            // source texture size
            var tw = renderingData.cameraData.cameraTargetDescriptor.width;
            var th = renderingData.cameraData.cameraTargetDescriptor.height;

            // halve the texture size for the low quality mode
            if (!EnviroSky.instance.distanceBlurSettings.highQuality)
            {
                tw /= 2;
                th /= 2;
            }

            blitMaterial.SetTexture("_DistTex", distributionTexture);
            blitMaterial.SetFloat("_Distance", EnviroSky.instance.blurDistance);
            blitMaterial.SetFloat("_Radius", EnviroSky.instance.distanceBlurSettings.radius);

            // determine the iteration count
            var logh       = Mathf.Log(th, 2) + EnviroSky.instance.distanceBlurSettings.radius - 8;
            var logh_i     = (int)logh;
            var iterations = Mathf.Clamp(logh_i, 1, kMaxIterations);

            // update the shader properties
            var lthresh = thresholdLinear;

            blitMaterial.SetFloat("_Threshold", lthresh);

            var knee  = lthresh * 0.5f + 1e-5f;
            var curve = new Vector3(lthresh - knee, knee * 2, 0.25f / knee);

            blitMaterial.SetVector("_Curve", curve);

            var pfo = !EnviroSky.instance.distanceBlurSettings.highQuality && EnviroSky.instance.distanceBlurSettings.antiFlicker;

            blitMaterial.SetFloat("_PrefilterOffs", pfo ? -0.5f : 0.0f);

            blitMaterial.SetFloat("_SampleScale", 0.5f + logh - logh_i);
            blitMaterial.SetFloat("_Intensity", EnviroSky.instance.blurIntensity);
            blitMaterial.SetFloat("_SkyBlurring", EnviroSky.instance.blurSkyIntensity);

            // prefilter pass
            RenderTextureDescriptor renderDescriptor = renderingData.cameraData.cameraTargetDescriptor;

            renderDescriptor.width           = tw;
            renderDescriptor.height          = th;
            renderDescriptor.graphicsFormat  = Experimental.Rendering.GraphicsFormat.R32G32B32A32_SFloat;
            renderDescriptor.depthBufferBits = 0;

            //if (!EnviroSky.instance.singlePassInstancedVR)
            //    renderDescriptor.vrUsage = VRTextureUsage.None;


            var prefiltered = RenderTexture.GetTemporary(renderDescriptor);

            var pass = EnviroSky.instance.distanceBlurSettings.antiFlicker ? 1 : 0;

            Blit(cmd, source, prefiltered, blitMaterial, pass);

            // construct a mip pyramid
            var last = prefiltered;

            for (var level = 0; level < iterations; level++)
            {
                RenderTextureDescriptor lastDescriptor = last.descriptor;
                lastDescriptor.width  = lastDescriptor.width / 2;
                lastDescriptor.height = lastDescriptor.height / 2;
                _blurBuffer1[level]   = RenderTexture.GetTemporary(lastDescriptor);

                pass = (level == 0) ? (EnviroSky.instance.distanceBlurSettings.antiFlicker ? 3 : 2) : 4;
                Blit(cmd, last, _blurBuffer1[level], blitMaterial, pass);
                last = _blurBuffer1[level];
            }

            // upsample and combine loop
            for (var level = iterations - 2; level >= 0; level--)
            {
                var basetex = _blurBuffer1[level];
                blitMaterial.SetTexture("_BaseTex", basetex);
                RenderTextureDescriptor baseDescriptor = basetex.descriptor;
                _blurBuffer2[level] = RenderTexture.GetTemporary(baseDescriptor);

                pass = EnviroSky.instance.distanceBlurSettings.highQuality ? 6 : 5;
                Blit(cmd, last, _blurBuffer2[level], blitMaterial, pass);
                last = _blurBuffer2[level];
            }

            // finish process
            RenderTexture sourceRT = RenderTexture.GetTemporary(renderDescriptor);

            Blit(cmd, source, sourceRT);
            blitMaterial.SetTexture("_BaseTex", sourceRT);
            cmd.SetGlobalTexture("_BaseTex", sourceRT);

            pass = EnviroSky.instance.distanceBlurSettings.highQuality ? 8 : 7;
            Blit(cmd, last, source, blitMaterial, pass);

            // release the temporary buffers
            for (var i = 0; i < kMaxIterations; i++)
            {
                if (_blurBuffer1[i] != null)
                {
                    RenderTexture.ReleaseTemporary(_blurBuffer1[i]);
                }

                if (_blurBuffer2[i] != null)
                {
                    RenderTexture.ReleaseTemporary(_blurBuffer2[i]);
                }

                _blurBuffer1[i] = null;
                _blurBuffer2[i] = null;
            }

            RenderTexture.ReleaseTemporary(prefiltered);
            RenderTexture.ReleaseTemporary(sourceRT);

            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
        }
Exemple #22
0
        public override void AddRenderPasses(UnityEngine.Rendering.Universal.ScriptableRenderer renderer, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
        {
            if (renderingData.cameraData.camera.cameraType == CameraType.Preview)
            {
                return;
            }

            myCam = renderingData.cameraData.camera;

            if (EnviroSkyLite.instance != null && EnviroSkyLite.instance.usePostEffectFog)
            {
                var src  = renderer.cameraColorTarget;
                var dest = UnityEngine.Rendering.Universal.RenderTargetHandle.CameraTarget;

                if (!renderingData.cameraData.isSceneViewCamera && renderingData.cameraData.camera == EnviroSkyLite.instance.PlayerCamera)
                {
                    UpdateMatrix();

                    if (currentSimpleFog != EnviroSkyLite.instance.fogSettings.useSimpleFog)
                    {
                        CreateFogMaterial();
                        blitPass         = new EnviroBlitPass(UnityEngine.Rendering.Universal.RenderPassEvent.BeforeRenderingTransparents, material, 0, name);
                        currentSimpleFog = EnviroSkyLite.instance.fogSettings.useSimpleFog;
                    }

                    RenderFog();

                    if (blitPass == null)
                    {
                        Create();
                    }

                    blitPass.Setup(src, dest);

                    renderer.EnqueuePass(blitPass);
                }
            }
        }