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); }
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); } }