Files
Dec2017-Script-Dump/Assembly-CSharp-firstpass/CinematicEffects/DepthOfField.cs
T
2026-06-04 11:42:34 +02:00

1106 lines
36 KiB
C#

using System;
using UnityEngine;
namespace UnityStandardAssets.CinematicEffects
{
// Token: 0x0200001F RID: 31
[ExecuteInEditMode]
[AddComponentMenu("Image Effects/Cinematic/Depth Of Field")]
[RequireComponent(typeof(Camera))]
public class DepthOfField : MonoBehaviour
{
// Token: 0x17000029 RID: 41
// (get) Token: 0x06000065 RID: 101 RVA: 0x00003EC8 File Offset: 0x000022C8
public Shader filmicDepthOfFieldShader
{
get
{
if (this.m_FilmicDepthOfFieldShader == null)
{
this.m_FilmicDepthOfFieldShader = Shader.Find("Hidden/DepthOfField/DepthOfField");
}
return this.m_FilmicDepthOfFieldShader;
}
}
// Token: 0x1700002A RID: 42
// (get) Token: 0x06000066 RID: 102 RVA: 0x00003EF1 File Offset: 0x000022F1
public Shader medianFilterShader
{
get
{
if (this.m_MedianFilterShader == null)
{
this.m_MedianFilterShader = Shader.Find("Hidden/DepthOfField/MedianFilter");
}
return this.m_MedianFilterShader;
}
}
// Token: 0x1700002B RID: 43
// (get) Token: 0x06000067 RID: 103 RVA: 0x00003F1A File Offset: 0x0000231A
public Shader textureBokehShader
{
get
{
if (this.m_TextureBokehShader == null)
{
this.m_TextureBokehShader = Shader.Find("Hidden/DepthOfField/BokehSplatting");
}
return this.m_TextureBokehShader;
}
}
// Token: 0x1700002C RID: 44
// (get) Token: 0x06000068 RID: 104 RVA: 0x00003F43 File Offset: 0x00002343
public Material filmicDepthOfFieldMaterial
{
get
{
if (this.m_FilmicDepthOfFieldMaterial == null)
{
this.m_FilmicDepthOfFieldMaterial = ImageEffectHelper.CheckShaderAndCreateMaterial(this.filmicDepthOfFieldShader);
}
return this.m_FilmicDepthOfFieldMaterial;
}
}
// Token: 0x1700002D RID: 45
// (get) Token: 0x06000069 RID: 105 RVA: 0x00003F6D File Offset: 0x0000236D
public Material medianFilterMaterial
{
get
{
if (this.m_MedianFilterMaterial == null)
{
this.m_MedianFilterMaterial = ImageEffectHelper.CheckShaderAndCreateMaterial(this.medianFilterShader);
}
return this.m_MedianFilterMaterial;
}
}
// Token: 0x1700002E RID: 46
// (get) Token: 0x0600006A RID: 106 RVA: 0x00003F97 File Offset: 0x00002397
public Material textureBokehMaterial
{
get
{
if (this.m_TextureBokehMaterial == null)
{
this.m_TextureBokehMaterial = ImageEffectHelper.CheckShaderAndCreateMaterial(this.textureBokehShader);
}
return this.m_TextureBokehMaterial;
}
}
// Token: 0x1700002F RID: 47
// (get) Token: 0x0600006B RID: 107 RVA: 0x00003FC4 File Offset: 0x000023C4
public ComputeBuffer computeBufferDrawArgs
{
get
{
if (this.m_ComputeBufferDrawArgs == null)
{
this.m_ComputeBufferDrawArgs = new ComputeBuffer(1, 16, ComputeBufferType.DrawIndirect);
this.m_ComputeBufferDrawArgs.SetData(new int[] { 0, 1, 0, 0 });
}
return this.m_ComputeBufferDrawArgs;
}
}
// Token: 0x17000030 RID: 48
// (get) Token: 0x0600006C RID: 108 RVA: 0x00004011 File Offset: 0x00002411
public ComputeBuffer computeBufferPoints
{
get
{
if (this.m_ComputeBufferPoints == null)
{
this.m_ComputeBufferPoints = new ComputeBuffer(90000, 28, ComputeBufferType.Append);
}
return this.m_ComputeBufferPoints;
}
}
// Token: 0x0600006D RID: 109 RVA: 0x00004038 File Offset: 0x00002438
private void OnEnable()
{
if (!ImageEffectHelper.IsSupported(this.filmicDepthOfFieldShader, true, true, this) || !ImageEffectHelper.IsSupported(this.medianFilterShader, true, true, this))
{
base.enabled = false;
return;
}
if (ImageEffectHelper.supportsDX11 && !ImageEffectHelper.IsSupported(this.textureBokehShader, true, true, this))
{
base.enabled = false;
return;
}
this.ComputeBlurDirections(true);
base.GetComponent<Camera>().depthTextureMode |= DepthTextureMode.Depth;
}
// Token: 0x0600006E RID: 110 RVA: 0x000040B4 File Offset: 0x000024B4
private void OnDisable()
{
this.ReleaseComputeResources();
if (this.m_FilmicDepthOfFieldMaterial != null)
{
global::UnityEngine.Object.DestroyImmediate(this.m_FilmicDepthOfFieldMaterial);
}
if (this.m_TextureBokehMaterial != null)
{
global::UnityEngine.Object.DestroyImmediate(this.m_TextureBokehMaterial);
}
if (this.m_MedianFilterMaterial != null)
{
global::UnityEngine.Object.DestroyImmediate(this.m_MedianFilterMaterial);
}
this.m_FilmicDepthOfFieldMaterial = null;
this.m_TextureBokehMaterial = null;
this.m_MedianFilterMaterial = null;
this.m_RTU.ReleaseAllTemporaryRenderTextures();
}
// Token: 0x0600006F RID: 111 RVA: 0x0000413C File Offset: 0x0000253C
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (this.medianFilterMaterial == null || this.filmicDepthOfFieldMaterial == null)
{
Graphics.Blit(source, destination);
return;
}
if (this.settings.visualizeBluriness)
{
Vector4 vector;
Vector4 vector2;
this.ComputeCocParameters(out vector, out vector2);
this.filmicDepthOfFieldMaterial.SetVector("_BlurParams", vector);
this.filmicDepthOfFieldMaterial.SetVector("_BlurCoe", vector2);
Graphics.Blit(null, destination, this.filmicDepthOfFieldMaterial, (this.settings.tweakMode != DepthOfField.TweakMode.Explicit) ? 6 : 7);
}
else
{
this.DoDepthOfField(source, destination);
}
this.m_RTU.ReleaseAllTemporaryRenderTextures();
}
// Token: 0x06000070 RID: 112 RVA: 0x000041EC File Offset: 0x000025EC
private void DoDepthOfField(RenderTexture source, RenderTexture destination)
{
this.m_CurrentQualitySettings = this.quality;
if (this.settings.quality != DepthOfField.QualityPreset.Custom)
{
this.m_CurrentQualitySettings = DepthOfField.QualitySettings.presetQualitySettings[(int)this.settings.quality];
}
float num = (float)source.height / 720f;
float num2 = num;
float num3 = Mathf.Max(this.blur.nearRadius, this.blur.farRadius) * num2 * 0.75f;
float num4 = this.blur.nearRadius * num;
float num5 = this.blur.farRadius * num;
float num6 = Mathf.Max(num4, num5);
DepthOfField.ApertureShape apertureShape = this.settings.apertureShape;
if (apertureShape != DepthOfField.ApertureShape.Hexagonal)
{
if (apertureShape == DepthOfField.ApertureShape.Octogonal)
{
num6 *= 1.15f;
}
}
else
{
num6 *= 1.2f;
}
if (num6 < 0.5f)
{
Graphics.Blit(source, destination);
return;
}
int num7 = source.width / 2;
int num8 = source.height / 2;
Vector4 vector = new Vector4(num4 * 0.5f, num5 * 0.5f, 0f, 0f);
RenderTexture temporaryRenderTexture = this.m_RTU.GetTemporaryRenderTexture(num7, num8, 0, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear);
RenderTexture temporaryRenderTexture2 = this.m_RTU.GetTemporaryRenderTexture(num7, num8, 0, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear);
if (this.m_CurrentQualitySettings.preventHaloing)
{
this.filmicDepthOfFieldMaterial.EnableKeyword("USE_SPECIAL_FETCH_FOR_COC");
}
else
{
this.filmicDepthOfFieldMaterial.DisableKeyword("USE_SPECIAL_FETCH_FOR_COC");
}
Vector4 vector2;
Vector4 vector3;
this.ComputeCocParameters(out vector2, out vector3);
this.filmicDepthOfFieldMaterial.SetVector("_BlurParams", vector2);
this.filmicDepthOfFieldMaterial.SetVector("_BlurCoe", vector3);
this.filmicDepthOfFieldMaterial.SetVector("_BoostParams", new Vector4(num4 * this.blur.nearBoostAmount * -0.5f, num5 * this.blur.farBoostAmount * 0.5f, this.blur.boostPoint, 0f));
Graphics.Blit(source, temporaryRenderTexture2, this.filmicDepthOfFieldMaterial, (this.settings.tweakMode != DepthOfField.TweakMode.Explicit) ? 4 : 5);
RenderTexture renderTexture = temporaryRenderTexture2;
RenderTexture renderTexture2 = temporaryRenderTexture;
if (this.shouldPerformBokeh)
{
RenderTexture temporaryRenderTexture3 = this.m_RTU.GetTemporaryRenderTexture(num7, num8, 0, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear);
Graphics.Blit(renderTexture, temporaryRenderTexture3, this.filmicDepthOfFieldMaterial, 1);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", new Vector4(0f, 1.5f, 0f, 1.5f));
Graphics.Blit(temporaryRenderTexture3, renderTexture2, this.filmicDepthOfFieldMaterial, 0);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", new Vector4(1.5f, 0f, 0f, 1.5f));
Graphics.Blit(renderTexture2, temporaryRenderTexture3, this.filmicDepthOfFieldMaterial, 0);
this.textureBokehMaterial.SetTexture("_BlurredColor", temporaryRenderTexture3);
this.textureBokehMaterial.SetFloat("_SpawnHeuristic", this.bokehTexture.spawnHeuristic);
this.textureBokehMaterial.SetVector("_BokehParams", new Vector4(this.bokehTexture.scale * num2, this.bokehTexture.intensity, this.bokehTexture.threshold, num3));
Graphics.SetRandomWriteTarget(1, this.computeBufferPoints);
Graphics.Blit(renderTexture, renderTexture2, this.textureBokehMaterial, 1);
Graphics.ClearRandomWriteTargets();
DepthOfField.SwapRenderTexture(ref renderTexture, ref renderTexture2);
this.m_RTU.ReleaseTemporaryRenderTexture(temporaryRenderTexture3);
}
this.filmicDepthOfFieldMaterial.SetVector("_BlurParams", vector2);
this.filmicDepthOfFieldMaterial.SetVector("_BlurCoe", vector);
this.filmicDepthOfFieldMaterial.SetVector("_BoostParams", new Vector4(num4 * this.blur.nearBoostAmount * -0.5f, num5 * this.blur.farBoostAmount * 0.5f, this.blur.boostPoint, 0f));
RenderTexture renderTexture3 = null;
if (this.m_CurrentQualitySettings.dilateNearBlur)
{
RenderTexture temporaryRenderTexture4 = this.m_RTU.GetTemporaryRenderTexture(num7, num8, 0, RenderTextureFormat.RGHalf, FilterMode.Bilinear);
renderTexture3 = this.m_RTU.GetTemporaryRenderTexture(num7, num8, 0, RenderTextureFormat.RGHalf, FilterMode.Bilinear);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", new Vector4(0f, num4 * 0.75f, 0f, 0f));
Graphics.Blit(renderTexture, temporaryRenderTexture4, this.filmicDepthOfFieldMaterial, 2);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", new Vector4(num4 * 0.75f, 0f, 0f, 0f));
Graphics.Blit(temporaryRenderTexture4, renderTexture3, this.filmicDepthOfFieldMaterial, 3);
this.m_RTU.ReleaseTemporaryRenderTexture(temporaryRenderTexture4);
renderTexture3.filterMode = FilterMode.Point;
}
if (this.m_CurrentQualitySettings.prefilterBlur)
{
Graphics.Blit(renderTexture, renderTexture2, this.filmicDepthOfFieldMaterial, 8);
DepthOfField.SwapRenderTexture(ref renderTexture, ref renderTexture2);
}
DepthOfField.ApertureShape apertureShape2 = this.settings.apertureShape;
if (apertureShape2 != DepthOfField.ApertureShape.Circular)
{
if (apertureShape2 != DepthOfField.ApertureShape.Hexagonal)
{
if (apertureShape2 == DepthOfField.ApertureShape.Octogonal)
{
this.DoOctogonalBlur(renderTexture3, ref renderTexture, ref renderTexture2, num6);
}
}
else
{
this.DoHexagonalBlur(renderTexture3, ref renderTexture, ref renderTexture2, num6);
}
}
else
{
this.DoCircularBlur(renderTexture3, ref renderTexture, ref renderTexture2, num6);
}
DepthOfField.FilterQuality medianFilter = this.m_CurrentQualitySettings.medianFilter;
if (medianFilter != DepthOfField.FilterQuality.Normal)
{
if (medianFilter == DepthOfField.FilterQuality.High)
{
Graphics.Blit(renderTexture, renderTexture2, this.medianFilterMaterial, 1);
DepthOfField.SwapRenderTexture(ref renderTexture, ref renderTexture2);
}
}
else
{
this.medianFilterMaterial.SetVector("_Offsets", new Vector4(1f, 0f, 0f, 0f));
Graphics.Blit(renderTexture, renderTexture2, this.medianFilterMaterial, 0);
DepthOfField.SwapRenderTexture(ref renderTexture, ref renderTexture2);
this.medianFilterMaterial.SetVector("_Offsets", new Vector4(0f, 1f, 0f, 0f));
Graphics.Blit(renderTexture, renderTexture2, this.medianFilterMaterial, 0);
DepthOfField.SwapRenderTexture(ref renderTexture, ref renderTexture2);
}
this.filmicDepthOfFieldMaterial.SetVector("_BlurCoe", vector);
this.filmicDepthOfFieldMaterial.SetVector("_Convolved_TexelSize", new Vector4((float)renderTexture.width, (float)renderTexture.height, 1f / (float)renderTexture.width, 1f / (float)renderTexture.height));
this.filmicDepthOfFieldMaterial.SetTexture("_SecondTex", renderTexture);
int num9 = ((this.settings.tweakMode != DepthOfField.TweakMode.Explicit) ? 13 : 14);
if (this.m_CurrentQualitySettings.highQualityUpsampling)
{
num9 = ((this.settings.tweakMode != DepthOfField.TweakMode.Explicit) ? 15 : 16);
}
if (this.shouldPerformBokeh)
{
RenderTexture temporaryRenderTexture5 = this.m_RTU.GetTemporaryRenderTexture(source.height, source.width, 0, source.format, FilterMode.Bilinear);
Graphics.Blit(source, temporaryRenderTexture5, this.filmicDepthOfFieldMaterial, num9);
Graphics.SetRenderTarget(temporaryRenderTexture5);
ComputeBuffer.CopyCount(this.computeBufferPoints, this.computeBufferDrawArgs, 0);
this.textureBokehMaterial.SetBuffer("pointBuffer", this.computeBufferPoints);
this.textureBokehMaterial.SetTexture("_MainTex", this.bokehTexture.texture);
this.textureBokehMaterial.SetVector("_Screen", new Vector3(1f / (1f * (float)source.width), 1f / (1f * (float)source.height), num3));
this.textureBokehMaterial.SetPass(0);
Graphics.DrawProceduralIndirect(MeshTopology.Points, this.computeBufferDrawArgs, 0);
Graphics.Blit(temporaryRenderTexture5, destination);
}
else
{
Graphics.Blit(source, destination, this.filmicDepthOfFieldMaterial, num9);
}
}
// Token: 0x06000071 RID: 113 RVA: 0x00004994 File Offset: 0x00002D94
private void DoHexagonalBlur(RenderTexture blurredFgCoc, ref RenderTexture src, ref RenderTexture dst, float maxRadius)
{
this.ComputeBlurDirections(false);
int num;
int num2;
DepthOfField.GetDirectionalBlurPassesFromRadius(blurredFgCoc, maxRadius, out num, out num2);
this.filmicDepthOfFieldMaterial.SetTexture("_SecondTex", blurredFgCoc);
RenderTexture temporaryRenderTexture = this.m_RTU.GetTemporaryRenderTexture(src.width, src.height, 0, src.format, FilterMode.Bilinear);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", this.m_HexagonalBokehDirection1);
Graphics.Blit(src, temporaryRenderTexture, this.filmicDepthOfFieldMaterial, num);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", this.m_HexagonalBokehDirection2);
Graphics.Blit(temporaryRenderTexture, src, this.filmicDepthOfFieldMaterial, num);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", this.m_HexagonalBokehDirection3);
this.filmicDepthOfFieldMaterial.SetTexture("_ThirdTex", src);
Graphics.Blit(temporaryRenderTexture, dst, this.filmicDepthOfFieldMaterial, num2);
this.m_RTU.ReleaseTemporaryRenderTexture(temporaryRenderTexture);
DepthOfField.SwapRenderTexture(ref src, ref dst);
}
// Token: 0x06000072 RID: 114 RVA: 0x00004A7C File Offset: 0x00002E7C
private void DoOctogonalBlur(RenderTexture blurredFgCoc, ref RenderTexture src, ref RenderTexture dst, float maxRadius)
{
this.ComputeBlurDirections(false);
int num;
int num2;
DepthOfField.GetDirectionalBlurPassesFromRadius(blurredFgCoc, maxRadius, out num, out num2);
this.filmicDepthOfFieldMaterial.SetTexture("_SecondTex", blurredFgCoc);
RenderTexture temporaryRenderTexture = this.m_RTU.GetTemporaryRenderTexture(src.width, src.height, 0, src.format, FilterMode.Bilinear);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", this.m_OctogonalBokehDirection1);
Graphics.Blit(src, temporaryRenderTexture, this.filmicDepthOfFieldMaterial, num);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", this.m_OctogonalBokehDirection2);
Graphics.Blit(temporaryRenderTexture, dst, this.filmicDepthOfFieldMaterial, num);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", this.m_OctogonalBokehDirection3);
Graphics.Blit(src, temporaryRenderTexture, this.filmicDepthOfFieldMaterial, num);
this.filmicDepthOfFieldMaterial.SetVector("_Offsets", this.m_OctogonalBokehDirection4);
this.filmicDepthOfFieldMaterial.SetTexture("_ThirdTex", dst);
Graphics.Blit(temporaryRenderTexture, src, this.filmicDepthOfFieldMaterial, num2);
this.m_RTU.ReleaseTemporaryRenderTexture(temporaryRenderTexture);
}
// Token: 0x06000073 RID: 115 RVA: 0x00004B84 File Offset: 0x00002F84
private void DoCircularBlur(RenderTexture blurredFgCoc, ref RenderTexture src, ref RenderTexture dst, float maxRadius)
{
int num;
if (blurredFgCoc != null)
{
this.filmicDepthOfFieldMaterial.SetTexture("_SecondTex", blurredFgCoc);
num = ((maxRadius <= 10f) ? 12 : 10);
}
else
{
num = ((maxRadius <= 10f) ? 11 : 9);
}
Graphics.Blit(src, dst, this.filmicDepthOfFieldMaterial, num);
DepthOfField.SwapRenderTexture(ref src, ref dst);
}
// Token: 0x06000074 RID: 116 RVA: 0x00004BF8 File Offset: 0x00002FF8
private void ComputeCocParameters(out Vector4 blurParams, out Vector4 blurCoe)
{
Camera component = base.GetComponent<Camera>();
float num = ((!this.focus.transform) ? (this.focus.plane * this.focus.plane * this.focus.plane * this.focus.plane) : (component.WorldToViewportPoint(this.focus.transform.position).z / component.farClipPlane));
if (this.settings.tweakMode == DepthOfField.TweakMode.Basic || this.settings.tweakMode == DepthOfField.TweakMode.Advanced)
{
float num2 = this.focus.rangeAdjustment * this.focus.rangeAdjustment * this.focus.rangeAdjustment * this.focus.rangeAdjustment;
float num3 = 4f / Mathf.Tan(0.5f * component.fieldOfView * 0.017453292f);
float num4 = num3 / this.focus.fStops;
blurCoe = new Vector4(0f, 0f, 1f, 1f);
blurParams = new Vector4(num4, num3, num, num2);
}
else
{
float num5 = this.focus.nearPlane * this.focus.nearPlane * this.focus.nearPlane * this.focus.nearPlane;
float num6 = this.focus.farPlane * this.focus.farPlane * this.focus.farPlane * this.focus.farPlane;
float num7 = this.focus.rangeAdjustment * this.focus.rangeAdjustment * this.focus.rangeAdjustment * this.focus.rangeAdjustment;
float num8 = num7;
if (num <= num5)
{
num = num5 + 1E-07f;
}
if (num >= num6)
{
num = num6 - 1E-07f;
}
if (num - num7 <= num5)
{
num7 = num - num5 - 1E-07f;
}
if (num + num8 >= num6)
{
num8 = num6 - num - 1E-07f;
}
float num9 = 1f / (num5 - num + num7);
float num10 = 1f / (num6 - num - num8);
float num11 = 1f - num9 * num5;
float num12 = 1f - num10 * num6;
blurParams = new Vector4(-1f * num9, -1f * num11, 1f * num10, 1f * num12);
blurCoe = new Vector4(0f, 0f, (num12 - num11) / (num9 - num10), 0f);
}
}
// Token: 0x06000075 RID: 117 RVA: 0x00004E8B File Offset: 0x0000328B
private void ReleaseComputeResources()
{
if (this.m_ComputeBufferDrawArgs != null)
{
this.m_ComputeBufferDrawArgs.Release();
}
if (this.m_ComputeBufferPoints != null)
{
this.m_ComputeBufferPoints.Release();
}
this.m_ComputeBufferDrawArgs = null;
this.m_ComputeBufferPoints = null;
}
// Token: 0x06000076 RID: 118 RVA: 0x00004EC8 File Offset: 0x000032C8
private void ComputeBlurDirections(bool force)
{
if (!force && Math.Abs(this.m_LastApertureOrientation - this.settings.apertureOrientation) < 1E-45f)
{
return;
}
this.m_LastApertureOrientation = this.settings.apertureOrientation;
float num = this.settings.apertureOrientation * 0.017453292f;
float num2 = Mathf.Cos(num);
float num3 = Mathf.Sin(num);
this.m_OctogonalBokehDirection1 = new Vector4(0.5f, 0f, 0f, 0f);
this.m_OctogonalBokehDirection2 = new Vector4(0f, 0.5f, 1f, 0f);
this.m_OctogonalBokehDirection3 = new Vector4(-0.353553f, 0.353553f, 1f, 0f);
this.m_OctogonalBokehDirection4 = new Vector4(0.353553f, 0.353553f, 1f, 0f);
this.m_HexagonalBokehDirection1 = new Vector4(0.5f, 0f, 0f, 0f);
this.m_HexagonalBokehDirection2 = new Vector4(0.25f, 0.433013f, 1f, 0f);
this.m_HexagonalBokehDirection3 = new Vector4(0.25f, -0.433013f, 1f, 0f);
if (num > 1E-45f)
{
DepthOfField.Rotate2D(ref this.m_OctogonalBokehDirection1, num2, num3);
DepthOfField.Rotate2D(ref this.m_OctogonalBokehDirection2, num2, num3);
DepthOfField.Rotate2D(ref this.m_OctogonalBokehDirection3, num2, num3);
DepthOfField.Rotate2D(ref this.m_OctogonalBokehDirection4, num2, num3);
DepthOfField.Rotate2D(ref this.m_HexagonalBokehDirection1, num2, num3);
DepthOfField.Rotate2D(ref this.m_HexagonalBokehDirection2, num2, num3);
DepthOfField.Rotate2D(ref this.m_HexagonalBokehDirection3, num2, num3);
}
}
// Token: 0x17000031 RID: 49
// (get) Token: 0x06000077 RID: 119 RVA: 0x00005070 File Offset: 0x00003470
private bool shouldPerformBokeh
{
get
{
return ImageEffectHelper.supportsDX11 && this.bokehTexture.texture != null && this.textureBokehMaterial && this.settings.tweakMode != DepthOfField.TweakMode.Basic;
}
}
// Token: 0x06000078 RID: 120 RVA: 0x000050C4 File Offset: 0x000034C4
private static void Rotate2D(ref Vector4 direction, float cosinus, float sinus)
{
Vector4 vector = direction;
direction.x = vector.x * cosinus - vector.y * sinus;
direction.y = vector.x * sinus + vector.y * cosinus;
}
// Token: 0x06000079 RID: 121 RVA: 0x0000510C File Offset: 0x0000350C
private static void SwapRenderTexture(ref RenderTexture src, ref RenderTexture dst)
{
RenderTexture renderTexture = dst;
dst = src;
src = renderTexture;
}
// Token: 0x0600007A RID: 122 RVA: 0x00005124 File Offset: 0x00003524
private static void GetDirectionalBlurPassesFromRadius(RenderTexture blurredFgCoc, float maxRadius, out int blurPass, out int blurAndMergePass)
{
if (blurredFgCoc == null)
{
if (maxRadius > 10f)
{
blurPass = 25;
blurAndMergePass = 27;
}
else if (maxRadius > 5f)
{
blurPass = 21;
blurAndMergePass = 23;
}
else
{
blurPass = 17;
blurAndMergePass = 19;
}
}
else if (maxRadius > 10f)
{
blurPass = 26;
blurAndMergePass = 28;
}
else if (maxRadius > 5f)
{
blurPass = 22;
blurAndMergePass = 24;
}
else
{
blurPass = 18;
blurAndMergePass = 20;
}
}
// Token: 0x04000072 RID: 114
private const float kMaxBlur = 35f;
// Token: 0x04000073 RID: 115
[DepthOfField.TopLevelSettings]
public DepthOfField.GlobalSettings settings = DepthOfField.GlobalSettings.defaultSettings;
// Token: 0x04000074 RID: 116
[DepthOfField.SettingsGroup]
[DepthOfField.AllTweakModes]
public DepthOfField.QualitySettings quality = DepthOfField.QualitySettings.presetQualitySettings[3];
// Token: 0x04000075 RID: 117
[DepthOfField.SettingsGroup]
public DepthOfField.FocusSettings focus = DepthOfField.FocusSettings.defaultSettings;
// Token: 0x04000076 RID: 118
[DepthOfField.SettingsGroup]
public DepthOfField.BokehTextureSettings bokehTexture = DepthOfField.BokehTextureSettings.defaultSettings;
// Token: 0x04000077 RID: 119
[DepthOfField.SettingsGroup]
public DepthOfField.BlurSettings blur = DepthOfField.BlurSettings.defaultSettings;
// Token: 0x04000078 RID: 120
[SerializeField]
private Shader m_FilmicDepthOfFieldShader;
// Token: 0x04000079 RID: 121
[SerializeField]
private Shader m_MedianFilterShader;
// Token: 0x0400007A RID: 122
[SerializeField]
private Shader m_TextureBokehShader;
// Token: 0x0400007B RID: 123
private RenderTextureUtility m_RTU = new RenderTextureUtility();
// Token: 0x0400007C RID: 124
private Material m_FilmicDepthOfFieldMaterial;
// Token: 0x0400007D RID: 125
private Material m_MedianFilterMaterial;
// Token: 0x0400007E RID: 126
private Material m_TextureBokehMaterial;
// Token: 0x0400007F RID: 127
private ComputeBuffer m_ComputeBufferDrawArgs;
// Token: 0x04000080 RID: 128
private ComputeBuffer m_ComputeBufferPoints;
// Token: 0x04000081 RID: 129
private DepthOfField.QualitySettings m_CurrentQualitySettings;
// Token: 0x04000082 RID: 130
private float m_LastApertureOrientation;
// Token: 0x04000083 RID: 131
private Vector4 m_OctogonalBokehDirection1;
// Token: 0x04000084 RID: 132
private Vector4 m_OctogonalBokehDirection2;
// Token: 0x04000085 RID: 133
private Vector4 m_OctogonalBokehDirection3;
// Token: 0x04000086 RID: 134
private Vector4 m_OctogonalBokehDirection4;
// Token: 0x04000087 RID: 135
private Vector4 m_HexagonalBokehDirection1;
// Token: 0x04000088 RID: 136
private Vector4 m_HexagonalBokehDirection2;
// Token: 0x04000089 RID: 137
private Vector4 m_HexagonalBokehDirection3;
// Token: 0x02000020 RID: 32
private enum Passes
{
// Token: 0x0400008B RID: 139
BlurAlphaWeighted,
// Token: 0x0400008C RID: 140
BoxBlur,
// Token: 0x0400008D RID: 141
DilateFgCocFromColor,
// Token: 0x0400008E RID: 142
DilateFgCoc,
// Token: 0x0400008F RID: 143
CaptureCoc,
// Token: 0x04000090 RID: 144
CaptureCocExplicit,
// Token: 0x04000091 RID: 145
VisualizeCoc,
// Token: 0x04000092 RID: 146
VisualizeCocExplicit,
// Token: 0x04000093 RID: 147
CocPrefilter,
// Token: 0x04000094 RID: 148
CircleBlur,
// Token: 0x04000095 RID: 149
CircleBlurWithDilatedFg,
// Token: 0x04000096 RID: 150
CircleBlurLowQuality,
// Token: 0x04000097 RID: 151
CircleBlowLowQualityWithDilatedFg,
// Token: 0x04000098 RID: 152
Merge,
// Token: 0x04000099 RID: 153
MergeExplicit,
// Token: 0x0400009A RID: 154
MergeBicubic,
// Token: 0x0400009B RID: 155
MergeExplicitBicubic,
// Token: 0x0400009C RID: 156
ShapeLowQuality,
// Token: 0x0400009D RID: 157
ShapeLowQualityDilateFg,
// Token: 0x0400009E RID: 158
ShapeLowQualityMerge,
// Token: 0x0400009F RID: 159
ShapeLowQualityMergeDilateFg,
// Token: 0x040000A0 RID: 160
ShapeMediumQuality,
// Token: 0x040000A1 RID: 161
ShapeMediumQualityDilateFg,
// Token: 0x040000A2 RID: 162
ShapeMediumQualityMerge,
// Token: 0x040000A3 RID: 163
ShapeMediumQualityMergeDilateFg,
// Token: 0x040000A4 RID: 164
ShapeHighQuality,
// Token: 0x040000A5 RID: 165
ShapeHighQualityDilateFg,
// Token: 0x040000A6 RID: 166
ShapeHighQualityMerge,
// Token: 0x040000A7 RID: 167
ShapeHighQualityMergeDilateFg
}
// Token: 0x02000021 RID: 33
private enum MedianPasses
{
// Token: 0x040000A9 RID: 169
Median3,
// Token: 0x040000AA RID: 170
Median3X3
}
// Token: 0x02000022 RID: 34
private enum BokehTexturesPasses
{
// Token: 0x040000AC RID: 172
Apply,
// Token: 0x040000AD RID: 173
Collect
}
// Token: 0x02000023 RID: 35
public enum TweakMode
{
// Token: 0x040000AF RID: 175
Basic,
// Token: 0x040000B0 RID: 176
Advanced,
// Token: 0x040000B1 RID: 177
Explicit
}
// Token: 0x02000024 RID: 36
public enum ApertureShape
{
// Token: 0x040000B3 RID: 179
Circular,
// Token: 0x040000B4 RID: 180
Hexagonal,
// Token: 0x040000B5 RID: 181
Octogonal
}
// Token: 0x02000025 RID: 37
public enum QualityPreset
{
// Token: 0x040000B7 RID: 183
Simple,
// Token: 0x040000B8 RID: 184
Low,
// Token: 0x040000B9 RID: 185
Medium,
// Token: 0x040000BA RID: 186
High,
// Token: 0x040000BB RID: 187
VeryHigh,
// Token: 0x040000BC RID: 188
Ultra,
// Token: 0x040000BD RID: 189
Custom
}
// Token: 0x02000026 RID: 38
public enum FilterQuality
{
// Token: 0x040000BF RID: 191
None,
// Token: 0x040000C0 RID: 192
Normal,
// Token: 0x040000C1 RID: 193
High
}
// Token: 0x02000027 RID: 39
[AttributeUsage(AttributeTargets.Field)]
public class TopLevelSettings : Attribute
{
}
// Token: 0x02000028 RID: 40
[AttributeUsage(AttributeTargets.Field)]
public class SettingsGroup : Attribute
{
}
// Token: 0x02000029 RID: 41
[AttributeUsage(AttributeTargets.Field)]
public class AllTweakModes : Attribute
{
}
// Token: 0x0200002A RID: 42
[AttributeUsage(AttributeTargets.Field)]
public class Basic : Attribute
{
}
// Token: 0x0200002B RID: 43
[AttributeUsage(AttributeTargets.Field)]
public class Advanced : Attribute
{
}
// Token: 0x0200002C RID: 44
[AttributeUsage(AttributeTargets.Field)]
public class Explicit : Attribute
{
}
// Token: 0x0200002D RID: 45
[Serializable]
public struct GlobalSettings
{
// Token: 0x17000032 RID: 50
// (get) Token: 0x06000081 RID: 129 RVA: 0x000051E4 File Offset: 0x000035E4
public static DepthOfField.GlobalSettings defaultSettings
{
get
{
return new DepthOfField.GlobalSettings
{
visualizeBluriness = false,
tweakMode = DepthOfField.TweakMode.Basic,
quality = DepthOfField.QualityPreset.High,
apertureShape = DepthOfField.ApertureShape.Circular,
apertureOrientation = 0f
};
}
}
// Token: 0x040000C2 RID: 194
[Tooltip("Allows to view where the blur will be applied. Yellow for near blur, blue for far blur.")]
public bool visualizeBluriness;
// Token: 0x040000C3 RID: 195
[Tooltip("Setup mode. Use \"Advanced\" if you need more control on blur settings and/or want to use a bokeh texture. \"Explicit\" is the same as \"Advanced\" but makes use of \"Near Plane\" and \"Far Plane\" values instead of \"F-Stop\".")]
public DepthOfField.TweakMode tweakMode;
// Token: 0x040000C4 RID: 196
[Tooltip("Quality presets. Use \"Custom\" for more advanced settings.")]
public DepthOfField.QualityPreset quality;
// Token: 0x040000C5 RID: 197
[Space]
[Tooltip("\"Circular\" is the fastest, followed by \"Hexagonal\" and \"Octogonal\".")]
public DepthOfField.ApertureShape apertureShape;
// Token: 0x040000C6 RID: 198
[Range(0f, 179f)]
[Tooltip("Rotates the aperture when working with \"Hexagonal\" and \"Ortogonal\".")]
public float apertureOrientation;
}
// Token: 0x0200002E RID: 46
[Serializable]
public struct QualitySettings
{
// Token: 0x040000C7 RID: 199
[Tooltip("Enable this to get smooth bokeh.")]
public bool prefilterBlur;
// Token: 0x040000C8 RID: 200
[Tooltip("Applies a median filter for even smoother bokeh.")]
public DepthOfField.FilterQuality medianFilter;
// Token: 0x040000C9 RID: 201
[Tooltip("Dilates near blur over in focus area.")]
public bool dilateNearBlur;
// Token: 0x040000CA RID: 202
[Tooltip("Uses high quality upsampling.")]
public bool highQualityUpsampling;
// Token: 0x040000CB RID: 203
[Tooltip("Prevent haloing from bright in focus region over dark out of focus region.")]
public bool preventHaloing;
// Token: 0x040000CC RID: 204
public static DepthOfField.QualitySettings[] presetQualitySettings = new DepthOfField.QualitySettings[]
{
new DepthOfField.QualitySettings
{
prefilterBlur = false,
medianFilter = DepthOfField.FilterQuality.None,
dilateNearBlur = false,
highQualityUpsampling = false,
preventHaloing = false
},
new DepthOfField.QualitySettings
{
prefilterBlur = true,
medianFilter = DepthOfField.FilterQuality.None,
dilateNearBlur = false,
highQualityUpsampling = false,
preventHaloing = false
},
new DepthOfField.QualitySettings
{
prefilterBlur = true,
medianFilter = DepthOfField.FilterQuality.Normal,
dilateNearBlur = false,
highQualityUpsampling = false,
preventHaloing = false
},
new DepthOfField.QualitySettings
{
prefilterBlur = true,
medianFilter = DepthOfField.FilterQuality.Normal,
dilateNearBlur = true,
highQualityUpsampling = false,
preventHaloing = false
},
new DepthOfField.QualitySettings
{
prefilterBlur = true,
medianFilter = DepthOfField.FilterQuality.High,
dilateNearBlur = true,
highQualityUpsampling = false,
preventHaloing = true
},
new DepthOfField.QualitySettings
{
prefilterBlur = true,
medianFilter = DepthOfField.FilterQuality.High,
dilateNearBlur = true,
highQualityUpsampling = true,
preventHaloing = true
}
};
}
// Token: 0x0200002F RID: 47
[Serializable]
public struct FocusSettings
{
// Token: 0x17000033 RID: 51
// (get) Token: 0x06000083 RID: 131 RVA: 0x000053B0 File Offset: 0x000037B0
public static DepthOfField.FocusSettings defaultSettings
{
get
{
return new DepthOfField.FocusSettings
{
transform = null,
plane = 0.225f,
nearPlane = 0f,
farPlane = 1f,
fStops = 5f,
rangeAdjustment = 0.9f
};
}
}
// Token: 0x040000CD RID: 205
[DepthOfField.Basic]
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Tooltip("Auto-focus on a selected transform.")]
public Transform transform;
// Token: 0x040000CE RID: 206
[DepthOfField.Basic]
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0f, 1f)]
[Tooltip("Focus distance.")]
public float plane;
// Token: 0x040000CF RID: 207
[DepthOfField.Explicit]
[Range(0f, 1f)]
[Tooltip("Near focus distance.")]
public float nearPlane;
// Token: 0x040000D0 RID: 208
[DepthOfField.Explicit]
[Range(0f, 1f)]
[Tooltip("Far focus distance.")]
public float farPlane;
// Token: 0x040000D1 RID: 209
[DepthOfField.Basic]
[DepthOfField.Advanced]
[Range(0f, 32f)]
[Tooltip("Simulates focal ratio. Lower values will result in a narrow depth of field.")]
public float fStops;
// Token: 0x040000D2 RID: 210
[DepthOfField.Basic]
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0f, 1f)]
[Tooltip("Focus range/spread. Use this to fine-tune the F-Stop range.")]
public float rangeAdjustment;
}
// Token: 0x02000030 RID: 48
[Serializable]
public struct BokehTextureSettings
{
// Token: 0x17000034 RID: 52
// (get) Token: 0x06000084 RID: 132 RVA: 0x0000540C File Offset: 0x0000380C
public static DepthOfField.BokehTextureSettings defaultSettings
{
get
{
return new DepthOfField.BokehTextureSettings
{
texture = null,
scale = 1f,
intensity = 50f,
threshold = 2f,
spawnHeuristic = 0.15f
};
}
}
// Token: 0x040000D3 RID: 211
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Tooltip("Adding a texture to this field will enable the use of \"Bokeh Textures\". Use with care. This feature is only available on Shader Model 5 compatible-hardware and performance scale with the amount of bokeh.")]
public Texture2D texture;
// Token: 0x040000D4 RID: 212
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0.01f, 5f)]
[Tooltip("Maximum size of bokeh textures on screen.")]
public float scale;
// Token: 0x040000D5 RID: 213
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0.01f, 100f)]
[Tooltip("Bokeh brightness.")]
public float intensity;
// Token: 0x040000D6 RID: 214
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0.01f, 50f)]
[Tooltip("Controls the amount of bokeh textures. Lower values mean more bokeh splats.")]
public float threshold;
// Token: 0x040000D7 RID: 215
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0.01f, 1f)]
[Tooltip("Controls the spawn conditions. Lower values mean more visible bokeh.")]
public float spawnHeuristic;
}
// Token: 0x02000031 RID: 49
[Serializable]
public struct BlurSettings
{
// Token: 0x17000035 RID: 53
// (get) Token: 0x06000085 RID: 133 RVA: 0x0000545C File Offset: 0x0000385C
public static DepthOfField.BlurSettings defaultSettings
{
get
{
return new DepthOfField.BlurSettings
{
nearRadius = 20f,
farRadius = 20f,
boostPoint = 0.75f,
nearBoostAmount = 0f,
farBoostAmount = 0f
};
}
}
// Token: 0x040000D8 RID: 216
[DepthOfField.Basic]
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0f, 35f)]
[Tooltip("Maximum blur radius for the near plane.")]
public float nearRadius;
// Token: 0x040000D9 RID: 217
[DepthOfField.Basic]
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0f, 35f)]
[Tooltip("Maximum blur radius for the far plane.")]
public float farRadius;
// Token: 0x040000DA RID: 218
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0.5f, 4f)]
[Tooltip("Blur luminosity booster threshold for the near and far boost amounts.")]
public float boostPoint;
// Token: 0x040000DB RID: 219
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0f, 1f)]
[Tooltip("Boosts luminosity in the near blur.")]
public float nearBoostAmount;
// Token: 0x040000DC RID: 220
[DepthOfField.Advanced]
[DepthOfField.Explicit]
[Range(0f, 1f)]
[Tooltip("Boosts luminosity in the far blur.")]
public float farBoostAmount;
}
}
}