From a10eea6e4ce647061813519d5b0ea496f29495b9 Mon Sep 17 00:00:00 2001
From: leonard Wu <364452445@qq.com>
Date: 星期四, 09 八月 2018 09:47:08 +0800
Subject: [PATCH] 同步最新svn内容
---
Assets/Plugins/PostProcessing/Runtime/Components/DepthOfFieldComponent.cs | 330 +++++++++++++++++++++++++++---------------------------
1 files changed, 165 insertions(+), 165 deletions(-)
diff --git a/Assets/Plugins/PostProcessing/Runtime/Components/DepthOfFieldComponent.cs b/Assets/Plugins/PostProcessing/Runtime/Components/DepthOfFieldComponent.cs
index b8281ef..324ce3c 100644
--- a/Assets/Plugins/PostProcessing/Runtime/Components/DepthOfFieldComponent.cs
+++ b/Assets/Plugins/PostProcessing/Runtime/Components/DepthOfFieldComponent.cs
@@ -1,165 +1,165 @@
-using UnityEngine.Rendering;
-
-namespace UnityEngine.PostProcessing
-{
- using DebugMode = BuiltinDebugViewsModel.Mode;
-
- public sealed class DepthOfFieldComponent : PostProcessingComponentRenderTexture<DepthOfFieldModel>
- {
- static class Uniforms
- {
- internal static readonly int _DepthOfFieldTex = Shader.PropertyToID("_DepthOfFieldTex");
- internal static readonly int _DepthOfFieldCoCTex = Shader.PropertyToID("_DepthOfFieldCoCTex");
- internal static readonly int _Distance = Shader.PropertyToID("_Distance");
- internal static readonly int _LensCoeff = Shader.PropertyToID("_LensCoeff");
- internal static readonly int _MaxCoC = Shader.PropertyToID("_MaxCoC");
- internal static readonly int _RcpMaxCoC = Shader.PropertyToID("_RcpMaxCoC");
- internal static readonly int _RcpAspect = Shader.PropertyToID("_RcpAspect");
- internal static readonly int _MainTex = Shader.PropertyToID("_MainTex");
- internal static readonly int _CoCTex = Shader.PropertyToID("_CoCTex");
- internal static readonly int _TaaParams = Shader.PropertyToID("_TaaParams");
- internal static readonly int _DepthOfFieldParams = Shader.PropertyToID("_DepthOfFieldParams");
- }
-
- const string k_ShaderString = "Hidden/Post FX/Depth Of Field";
-
- public override bool active
- {
- get
- {
- return model != null && model.enabled
- && !context.interrupted;
- }
- }
-
- public override DepthTextureMode GetCameraFlags()
- {
- return DepthTextureMode.Depth;
- }
-
- RenderTexture m_CoCHistory;
-
- // Height of the 35mm full-frame format (36mm x 24mm)
- const float k_FilmHeight = 0.024f;
-
- float CalculateFocalLength()
- {
- var settings = model.settings;
-
- if (!settings.useCameraFov)
- return settings.focalLength / 1000f;
-
- float fov = context.camera.fieldOfView * Mathf.Deg2Rad;
- return 0.5f * k_FilmHeight / Mathf.Tan(0.5f * fov);
- }
-
- float CalculateMaxCoCRadius(int screenHeight)
- {
- // Estimate the allowable maximum radius of CoC from the kernel
- // size (the equation below was empirically derived).
- float radiusInPixels = (float)model.settings.kernelSize * 4f + 6f;
-
- // Applying a 5% limit to the CoC radius to keep the size of
- // TileMax/NeighborMax small enough.
- return Mathf.Min(0.05f, radiusInPixels / screenHeight);
- }
-
- bool CheckHistory(int width, int height)
- {
- return m_CoCHistory != null && m_CoCHistory.IsCreated() &&
- m_CoCHistory.width == width && m_CoCHistory.height == height;
- }
-
- RenderTextureFormat SelectFormat(RenderTextureFormat primary, RenderTextureFormat secondary)
- {
- if (SystemInfo.SupportsRenderTextureFormat(primary)) return primary;
- if (SystemInfo.SupportsRenderTextureFormat(secondary)) return secondary;
- return RenderTextureFormat.Default;
- }
-
- public void Prepare(RenderTexture source, Material uberMaterial, bool antialiasCoC, Vector2 taaJitter, float taaBlending)
- {
- var settings = model.settings;
- var colorFormat = RenderTextureFormat.DefaultHDR;
- var cocFormat = SelectFormat(RenderTextureFormat.R8, RenderTextureFormat.RHalf);
-
- // Avoid using R8 on OSX with Metal. #896121, https://goo.gl/MgKqu6
- #if (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX) && !UNITY_2017_1_OR_NEWER
- if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal)
- cocFormat = SelectFormat(RenderTextureFormat.RHalf, RenderTextureFormat.Default);
- #endif
-
- // Material setup
- var f = CalculateFocalLength();
- var s1 = Mathf.Max(settings.focusDistance, f);
- var aspect = (float)source.width / source.height;
- var coeff = f * f / (settings.aperture * (s1 - f) * k_FilmHeight * 2);
- var maxCoC = CalculateMaxCoCRadius(source.height);
-
- var material = context.materialFactory.Get(k_ShaderString);
- material.SetFloat(Uniforms._Distance, s1);
- material.SetFloat(Uniforms._LensCoeff, coeff);
- material.SetFloat(Uniforms._MaxCoC, maxCoC);
- material.SetFloat(Uniforms._RcpMaxCoC, 1f / maxCoC);
- material.SetFloat(Uniforms._RcpAspect, 1f / aspect);
-
- // CoC calculation pass
- var rtCoC = context.renderTextureFactory.Get(context.width, context.height, 0, cocFormat, RenderTextureReadWrite.Linear);
- Graphics.Blit(null, rtCoC, material, 0);
-
- if (antialiasCoC)
- {
- // CoC temporal filter pass
- material.SetTexture(Uniforms._CoCTex, rtCoC);
-
- var blend = CheckHistory(context.width, context.height) ? taaBlending : 0f;
- material.SetVector(Uniforms._TaaParams, new Vector3(taaJitter.x, taaJitter.y, blend));
-
- var rtFiltered = RenderTexture.GetTemporary(context.width, context.height, 0, cocFormat);
- Graphics.Blit(m_CoCHistory, rtFiltered, material, 1);
-
- context.renderTextureFactory.Release(rtCoC);
- if (m_CoCHistory != null) RenderTexture.ReleaseTemporary(m_CoCHistory);
-
- m_CoCHistory = rtCoC = rtFiltered;
- }
-
- // Downsampling and prefiltering pass
- var rt1 = context.renderTextureFactory.Get(context.width / 2, context.height / 2, 0, colorFormat);
- material.SetTexture(Uniforms._CoCTex, rtCoC);
- Graphics.Blit(source, rt1, material, 2);
-
- // Bokeh simulation pass
- var rt2 = context.renderTextureFactory.Get(context.width / 2, context.height / 2, 0, colorFormat);
- Graphics.Blit(rt1, rt2, material, 3 + (int)settings.kernelSize);
-
- // Postfilter pass
- Graphics.Blit(rt2, rt1, material, 7);
-
- // Give the results to the uber shader.
- uberMaterial.SetVector(Uniforms._DepthOfFieldParams, new Vector3(s1, coeff, maxCoC));
-
- if (context.profile.debugViews.IsModeActive(DebugMode.FocusPlane))
- {
- uberMaterial.EnableKeyword("DEPTH_OF_FIELD_COC_VIEW");
- context.Interrupt();
- }
- else
- {
- uberMaterial.SetTexture(Uniforms._DepthOfFieldTex, rt1);
- uberMaterial.SetTexture(Uniforms._DepthOfFieldCoCTex, rtCoC);
- uberMaterial.EnableKeyword("DEPTH_OF_FIELD");
- }
-
- context.renderTextureFactory.Release(rt2);
- }
-
- public override void OnDisable()
- {
- if (m_CoCHistory != null)
- RenderTexture.ReleaseTemporary(m_CoCHistory);
-
- m_CoCHistory = null;
- }
- }
-}
+using UnityEngine.Rendering;
+
+namespace UnityEngine.PostProcessing
+{
+ using DebugMode = BuiltinDebugViewsModel.Mode;
+
+ public sealed class DepthOfFieldComponent : PostProcessingComponentRenderTexture<DepthOfFieldModel>
+ {
+ static class Uniforms
+ {
+ internal static readonly int _DepthOfFieldTex = Shader.PropertyToID("_DepthOfFieldTex");
+ internal static readonly int _DepthOfFieldCoCTex = Shader.PropertyToID("_DepthOfFieldCoCTex");
+ internal static readonly int _Distance = Shader.PropertyToID("_Distance");
+ internal static readonly int _LensCoeff = Shader.PropertyToID("_LensCoeff");
+ internal static readonly int _MaxCoC = Shader.PropertyToID("_MaxCoC");
+ internal static readonly int _RcpMaxCoC = Shader.PropertyToID("_RcpMaxCoC");
+ internal static readonly int _RcpAspect = Shader.PropertyToID("_RcpAspect");
+ internal static readonly int _MainTex = Shader.PropertyToID("_MainTex");
+ internal static readonly int _CoCTex = Shader.PropertyToID("_CoCTex");
+ internal static readonly int _TaaParams = Shader.PropertyToID("_TaaParams");
+ internal static readonly int _DepthOfFieldParams = Shader.PropertyToID("_DepthOfFieldParams");
+ }
+
+ const string k_ShaderString = "Hidden/Post FX/Depth Of Field";
+
+ public override bool active
+ {
+ get
+ {
+ return model != null && model.enabled
+ && !context.interrupted;
+ }
+ }
+
+ public override DepthTextureMode GetCameraFlags()
+ {
+ return DepthTextureMode.Depth;
+ }
+
+ RenderTexture m_CoCHistory;
+
+ // Height of the 35mm full-frame format (36mm x 24mm)
+ const float k_FilmHeight = 0.024f;
+
+ float CalculateFocalLength()
+ {
+ var settings = model.settings;
+
+ if (!settings.useCameraFov)
+ return settings.focalLength / 1000f;
+
+ float fov = context.camera.fieldOfView * Mathf.Deg2Rad;
+ return 0.5f * k_FilmHeight / Mathf.Tan(0.5f * fov);
+ }
+
+ float CalculateMaxCoCRadius(int screenHeight)
+ {
+ // Estimate the allowable maximum radius of CoC from the kernel
+ // size (the equation below was empirically derived).
+ float radiusInPixels = (float)model.settings.kernelSize * 4f + 6f;
+
+ // Applying a 5% limit to the CoC radius to keep the size of
+ // TileMax/NeighborMax small enough.
+ return Mathf.Min(0.05f, radiusInPixels / screenHeight);
+ }
+
+ bool CheckHistory(int width, int height)
+ {
+ return m_CoCHistory != null && m_CoCHistory.IsCreated() &&
+ m_CoCHistory.width == width && m_CoCHistory.height == height;
+ }
+
+ RenderTextureFormat SelectFormat(RenderTextureFormat primary, RenderTextureFormat secondary)
+ {
+ if (SystemInfo.SupportsRenderTextureFormat(primary)) return primary;
+ if (SystemInfo.SupportsRenderTextureFormat(secondary)) return secondary;
+ return RenderTextureFormat.Default;
+ }
+
+ public void Prepare(RenderTexture source, Material uberMaterial, bool antialiasCoC, Vector2 taaJitter, float taaBlending)
+ {
+ var settings = model.settings;
+ var colorFormat = RenderTextureFormat.DefaultHDR;
+ var cocFormat = SelectFormat(RenderTextureFormat.R8, RenderTextureFormat.RHalf);
+
+ // Avoid using R8 on OSX with Metal. #896121, https://goo.gl/MgKqu6
+ #if (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX) && !UNITY_2017_1_OR_NEWER
+ if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal)
+ cocFormat = SelectFormat(RenderTextureFormat.RHalf, RenderTextureFormat.Default);
+ #endif
+
+ // Material setup
+ var f = CalculateFocalLength();
+ var s1 = Mathf.Max(settings.focusDistance, f);
+ var aspect = (float)source.width / source.height;
+ var coeff = f * f / (settings.aperture * (s1 - f) * k_FilmHeight * 2);
+ var maxCoC = CalculateMaxCoCRadius(source.height);
+
+ var material = context.materialFactory.Get(k_ShaderString);
+ material.SetFloat(Uniforms._Distance, s1);
+ material.SetFloat(Uniforms._LensCoeff, coeff);
+ material.SetFloat(Uniforms._MaxCoC, maxCoC);
+ material.SetFloat(Uniforms._RcpMaxCoC, 1f / maxCoC);
+ material.SetFloat(Uniforms._RcpAspect, 1f / aspect);
+
+ // CoC calculation pass
+ var rtCoC = context.renderTextureFactory.Get(context.width, context.height, 0, cocFormat, RenderTextureReadWrite.Linear);
+ Graphics.Blit(null, rtCoC, material, 0);
+
+ if (antialiasCoC)
+ {
+ // CoC temporal filter pass
+ material.SetTexture(Uniforms._CoCTex, rtCoC);
+
+ var blend = CheckHistory(context.width, context.height) ? taaBlending : 0f;
+ material.SetVector(Uniforms._TaaParams, new Vector3(taaJitter.x, taaJitter.y, blend));
+
+ var rtFiltered = RenderTexture.GetTemporary(context.width, context.height, 0, cocFormat);
+ Graphics.Blit(m_CoCHistory, rtFiltered, material, 1);
+
+ context.renderTextureFactory.Release(rtCoC);
+ if (m_CoCHistory != null) RenderTexture.ReleaseTemporary(m_CoCHistory);
+
+ m_CoCHistory = rtCoC = rtFiltered;
+ }
+
+ // Downsampling and prefiltering pass
+ var rt1 = context.renderTextureFactory.Get(context.width / 2, context.height / 2, 0, colorFormat);
+ material.SetTexture(Uniforms._CoCTex, rtCoC);
+ Graphics.Blit(source, rt1, material, 2);
+
+ // Bokeh simulation pass
+ var rt2 = context.renderTextureFactory.Get(context.width / 2, context.height / 2, 0, colorFormat);
+ Graphics.Blit(rt1, rt2, material, 3 + (int)settings.kernelSize);
+
+ // Postfilter pass
+ Graphics.Blit(rt2, rt1, material, 7);
+
+ // Give the results to the uber shader.
+ uberMaterial.SetVector(Uniforms._DepthOfFieldParams, new Vector3(s1, coeff, maxCoC));
+
+ if (context.profile.debugViews.IsModeActive(DebugMode.FocusPlane))
+ {
+ uberMaterial.EnableKeyword("DEPTH_OF_FIELD_COC_VIEW");
+ context.Interrupt();
+ }
+ else
+ {
+ uberMaterial.SetTexture(Uniforms._DepthOfFieldTex, rt1);
+ uberMaterial.SetTexture(Uniforms._DepthOfFieldCoCTex, rtCoC);
+ uberMaterial.EnableKeyword("DEPTH_OF_FIELD");
+ }
+
+ context.renderTextureFactory.Release(rt2);
+ }
+
+ public override void OnDisable()
+ {
+ if (m_CoCHistory != null)
+ RenderTexture.ReleaseTemporary(m_CoCHistory);
+
+ m_CoCHistory = null;
+ }
+ }
+}
--
Gitblit v1.8.0