169 lines
5.7 KiB
C#
169 lines
5.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace UnityStandardAssets.ImageEffects
|
|
{
|
|
// Token: 0x0200008B RID: 139
|
|
[ExecuteInEditMode]
|
|
[RequireComponent(typeof(Camera))]
|
|
[AddComponentMenu("Image Effects/Rendering/Sun Shafts")]
|
|
public class SunShafts : PostEffectsBase
|
|
{
|
|
// Token: 0x06000193 RID: 403 RVA: 0x00011DCC File Offset: 0x000101CC
|
|
public override bool CheckResources()
|
|
{
|
|
base.CheckSupport(this.useDepthTexture);
|
|
this.sunShaftsMaterial = base.CheckShaderAndCreateMaterial(this.sunShaftsShader, this.sunShaftsMaterial);
|
|
this.simpleClearMaterial = base.CheckShaderAndCreateMaterial(this.simpleClearShader, this.simpleClearMaterial);
|
|
if (!this.isSupported)
|
|
{
|
|
base.ReportAutoDisable();
|
|
}
|
|
return this.isSupported;
|
|
}
|
|
|
|
// Token: 0x06000194 RID: 404 RVA: 0x00011E30 File Offset: 0x00010230
|
|
private void OnRenderImage(RenderTexture source, RenderTexture destination)
|
|
{
|
|
if (!this.CheckResources())
|
|
{
|
|
Graphics.Blit(source, destination);
|
|
return;
|
|
}
|
|
if (this.useDepthTexture)
|
|
{
|
|
base.GetComponent<Camera>().depthTextureMode |= DepthTextureMode.Depth;
|
|
}
|
|
int num = 4;
|
|
if (this.resolution == SunShafts.SunShaftsResolution.Normal)
|
|
{
|
|
num = 2;
|
|
}
|
|
else if (this.resolution == SunShafts.SunShaftsResolution.High)
|
|
{
|
|
num = 1;
|
|
}
|
|
Vector3 vector = Vector3.one * 0.5f;
|
|
if (this.sunTransform)
|
|
{
|
|
vector = base.GetComponent<Camera>().WorldToViewportPoint(this.sunTransform.position);
|
|
}
|
|
else
|
|
{
|
|
vector = new Vector3(0.5f, 0.5f, 0f);
|
|
}
|
|
int num2 = source.width / num;
|
|
int num3 = source.height / num;
|
|
RenderTexture renderTexture = RenderTexture.GetTemporary(num2, num3, 0);
|
|
this.sunShaftsMaterial.SetVector("_BlurRadius4", new Vector4(1f, 1f, 0f, 0f) * this.sunShaftBlurRadius);
|
|
this.sunShaftsMaterial.SetVector("_SunPosition", new Vector4(vector.x, vector.y, vector.z, this.maxRadius));
|
|
this.sunShaftsMaterial.SetVector("_SunThreshold", this.sunThreshold);
|
|
if (!this.useDepthTexture)
|
|
{
|
|
RenderTextureFormat renderTextureFormat = ((!base.GetComponent<Camera>().allowHDR) ? RenderTextureFormat.Default : RenderTextureFormat.DefaultHDR);
|
|
RenderTexture temporary = RenderTexture.GetTemporary(source.width, source.height, 0, renderTextureFormat);
|
|
RenderTexture.active = temporary;
|
|
GL.ClearWithSkybox(false, base.GetComponent<Camera>());
|
|
this.sunShaftsMaterial.SetTexture("_Skybox", temporary);
|
|
Graphics.Blit(source, renderTexture, this.sunShaftsMaterial, 3);
|
|
RenderTexture.ReleaseTemporary(temporary);
|
|
}
|
|
else
|
|
{
|
|
Graphics.Blit(source, renderTexture, this.sunShaftsMaterial, 2);
|
|
}
|
|
base.DrawBorder(renderTexture, this.simpleClearMaterial);
|
|
this.radialBlurIterations = Mathf.Clamp(this.radialBlurIterations, 1, 4);
|
|
float num4 = this.sunShaftBlurRadius * 0.0013020834f;
|
|
this.sunShaftsMaterial.SetVector("_BlurRadius4", new Vector4(num4, num4, 0f, 0f));
|
|
this.sunShaftsMaterial.SetVector("_SunPosition", new Vector4(vector.x, vector.y, vector.z, this.maxRadius));
|
|
for (int i = 0; i < this.radialBlurIterations; i++)
|
|
{
|
|
RenderTexture temporary2 = RenderTexture.GetTemporary(num2, num3, 0);
|
|
Graphics.Blit(renderTexture, temporary2, this.sunShaftsMaterial, 1);
|
|
RenderTexture.ReleaseTemporary(renderTexture);
|
|
num4 = this.sunShaftBlurRadius * (((float)i * 2f + 1f) * 6f) / 768f;
|
|
this.sunShaftsMaterial.SetVector("_BlurRadius4", new Vector4(num4, num4, 0f, 0f));
|
|
renderTexture = RenderTexture.GetTemporary(num2, num3, 0);
|
|
Graphics.Blit(temporary2, renderTexture, this.sunShaftsMaterial, 1);
|
|
RenderTexture.ReleaseTemporary(temporary2);
|
|
num4 = this.sunShaftBlurRadius * (((float)i * 2f + 2f) * 6f) / 768f;
|
|
this.sunShaftsMaterial.SetVector("_BlurRadius4", new Vector4(num4, num4, 0f, 0f));
|
|
}
|
|
if (vector.z >= 0f)
|
|
{
|
|
this.sunShaftsMaterial.SetVector("_SunColor", new Vector4(this.sunColor.r, this.sunColor.g, this.sunColor.b, this.sunColor.a) * this.sunShaftIntensity);
|
|
}
|
|
else
|
|
{
|
|
this.sunShaftsMaterial.SetVector("_SunColor", Vector4.zero);
|
|
}
|
|
this.sunShaftsMaterial.SetTexture("_ColorBuffer", renderTexture);
|
|
Graphics.Blit(source, destination, this.sunShaftsMaterial, (this.screenBlendMode != SunShafts.ShaftsScreenBlendMode.Screen) ? 4 : 0);
|
|
RenderTexture.ReleaseTemporary(renderTexture);
|
|
}
|
|
|
|
// Token: 0x04000379 RID: 889
|
|
public SunShafts.SunShaftsResolution resolution = SunShafts.SunShaftsResolution.Normal;
|
|
|
|
// Token: 0x0400037A RID: 890
|
|
public SunShafts.ShaftsScreenBlendMode screenBlendMode;
|
|
|
|
// Token: 0x0400037B RID: 891
|
|
public Transform sunTransform;
|
|
|
|
// Token: 0x0400037C RID: 892
|
|
public int radialBlurIterations = 2;
|
|
|
|
// Token: 0x0400037D RID: 893
|
|
public Color sunColor = Color.white;
|
|
|
|
// Token: 0x0400037E RID: 894
|
|
public Color sunThreshold = new Color(0.87f, 0.74f, 0.65f);
|
|
|
|
// Token: 0x0400037F RID: 895
|
|
public float sunShaftBlurRadius = 2.5f;
|
|
|
|
// Token: 0x04000380 RID: 896
|
|
public float sunShaftIntensity = 1.15f;
|
|
|
|
// Token: 0x04000381 RID: 897
|
|
public float maxRadius = 0.75f;
|
|
|
|
// Token: 0x04000382 RID: 898
|
|
public bool useDepthTexture = true;
|
|
|
|
// Token: 0x04000383 RID: 899
|
|
public Shader sunShaftsShader;
|
|
|
|
// Token: 0x04000384 RID: 900
|
|
private Material sunShaftsMaterial;
|
|
|
|
// Token: 0x04000385 RID: 901
|
|
public Shader simpleClearShader;
|
|
|
|
// Token: 0x04000386 RID: 902
|
|
private Material simpleClearMaterial;
|
|
|
|
// Token: 0x0200008C RID: 140
|
|
public enum SunShaftsResolution
|
|
{
|
|
// Token: 0x04000388 RID: 904
|
|
Low,
|
|
// Token: 0x04000389 RID: 905
|
|
Normal,
|
|
// Token: 0x0400038A RID: 906
|
|
High
|
|
}
|
|
|
|
// Token: 0x0200008D RID: 141
|
|
public enum ShaftsScreenBlendMode
|
|
{
|
|
// Token: 0x0400038C RID: 908
|
|
Screen,
|
|
// Token: 0x0400038D RID: 909
|
|
Add
|
|
}
|
|
}
|
|
}
|