Exemplo n.º 1
0
        protected void UpdateDownsamplerCommandBuffer()
        {
            RtDownsampler.Release();

#if UNITY_2017_2_OR_NEWER
            if (UnityEngine.XR.XRSettings.eyeTextureWidth > 0 && UnityEngine.XR.XRSettings.eyeTextureHeight != 0)
            {
                if (RtDownsampler.width != UnityEngine.XR.XRSettings.eyeTextureWidth * 2 ||
                    RtDownsampler.height != UnityEngine.XR.XRSettings.eyeTextureHeight)
                {
                    RtDownsampler.Release();
                    RtDownsampler.width  = UnityEngine.XR.XRSettings.eyeTextureWidth * 2;
                    RtDownsampler.height = UnityEngine.XR.XRSettings.eyeTextureHeight;
                    RtDownsampler.Create();
                }
            }
#else
            if (UnityEngine.XR.XRSettings.eyeTextureWidth > 0 && UnityEngine.XR.XRSettings.eyeTextureHeight > 0)
            {
                if (RtDownsampler.width != UnityEngine.VR.VRSettings.eyeTextureWidth ||
                    RtDownsampler.height != UnityEngine.VR.VRSettings.eyeTextureHeight)
                {
                    RtDownsampler.Release();
                    RtDownsampler.width  = UnityEngine.VR.VRSettings.eyeTextureWidth;
                    RtDownsampler.height = UnityEngine.VR.VRSettings.eyeTextureHeight;
                    RtDownsampler.Create();
                }
            }
#endif

            // fix for VR black screen
            MaterialCurrent.SetOverrideTag("RenderType", "Opaque");
            MaterialCurrent.SetInt("_SrcBlend", (int)BlendMode.One);
            MaterialCurrent.SetInt("_DstBlend", (int)BlendMode.Zero);
            MaterialCurrent.SetInt("_ZWrite", 1);
            MaterialCurrent.renderQueue = -1;

            MaterialDefault.SetOverrideTag("RenderType", "Opaque");
            MaterialDefault.SetInt("_SrcBlend", (int)BlendMode.One);
            MaterialDefault.SetInt("_DstBlend", (int)BlendMode.Zero);
            MaterialDefault.SetInt("_ZWrite", 1);
            MaterialDefault.renderQueue = -1;

#if UNITY_2017_2_OR_NEWER
            MaterialCurrent.SetFloat("_ResizeWidth", UnityEngine.XR.XRSettings.eyeTextureWidth);
            MaterialCurrent.SetFloat("_ResizeHeight", UnityEngine.XR.XRSettings.eyeTextureHeight);
#else
            MaterialCurrent.SetFloat("_ResizeWidth", UnityEngine.VR.VRSettings.eyeTextureWidth);
            MaterialCurrent.SetFloat("_ResizeHeight", UnityEngine.VR.VRSettings.eyeTextureHeight);
#endif
            MaterialCurrent.SetFloat("_Sharpness", DownsamplerSharpness);
            MaterialCurrent.SetFloat("_SampleDistance", DownsamplerDistance);

            MaterialFXAA.SetVector("_QualitySettings", new Vector3(1.0f, 0.063f, 0.0312f));
            MaterialFXAA.SetVector("_ConsoleSettings", new Vector4(0.5f, 2.0f, 0.125f, 0.04f));
            MaterialFXAA.SetFloat("_Intensity", 1);
        }
Exemplo n.º 2
0
        protected void SetupDownsamplerCommandBuffer()
        {
            if (CbDownsampler == null)
            {
                CbDownsampler = new CommandBuffer();
            }

            // avoid updating for invalid VR
            if (!VRDeviceAnyActive())
            {
                return;
            }

            if ((new List <CommandBuffer>(currentCamera.GetCommandBuffers(constCamEventDownsampler))).Find(x => x.name == "SSAA_VR_APPLY") == null)
            {
                // set up buffer rt
                if (RtDownsampler)
                {
                    RtDownsampler.Release();
                }
                RtDownsampler = new RenderTexture(1024, 1024, 24, InternalTextureFormat);
                RenderTargetIdentifier ssaaCommandBufferTargetId = new RenderTargetIdentifier(RtDownsampler);

                // Fix for singlepass issue in u2018 and newer
#if UNITY_2017_2_OR_NEWER
                RtDownsampler.vrUsage = UnityEngine.XR.XRSettings.eyeTextureDesc.vrUsage;
#endif

                // Command buffer setup
                CbDownsampler.Clear();
                CbDownsampler.name = "SSAA_VR_APPLY";
                CbDownsampler.SetRenderTarget(BuiltinRenderTextureType.CameraTarget);

                // Blits for doownsampling and apply to camera target
                CbDownsampler.Blit(BuiltinRenderTextureType.CameraTarget, ssaaCommandBufferTargetId, MaterialCurrent, 0);
                CbDownsampler.Blit(ssaaCommandBufferTargetId, BuiltinRenderTextureType.CameraTarget, InternalRenderMultiplier > 1 && PostAntiAliasing == PostAntiAliasingMode.FSSAA && InternalRenderMode != RenderMode.AdaptiveResolution ? MaterialFXAA : MaterialDefault, 0);

                // Register cb to camera
                currentCamera.AddCommandBuffer(constCamEventDownsampler, CbDownsampler);
            }
        }