Files
2026-06-04 11:42:34 +02:00

120 lines
4.5 KiB
C#

using System;
using UnityEngine;
namespace UnityStandardAssets.ImageEffects
{
// Token: 0x0200007D RID: 125
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
[AddComponentMenu("Image Effects/Rendering/Screen Space Ambient Obscurance")]
internal class ScreenSpaceAmbientObscurance : PostEffectsBase
{
// Token: 0x06000179 RID: 377 RVA: 0x0001004F File Offset: 0x0000E44F
public override bool CheckResources()
{
base.CheckSupport(true);
this.aoMaterial = base.CheckShaderAndCreateMaterial(this.aoShader, this.aoMaterial);
if (!this.isSupported)
{
base.ReportAutoDisable();
}
return this.isSupported;
}
// Token: 0x0600017A RID: 378 RVA: 0x00010088 File Offset: 0x0000E488
private void OnDisable()
{
if (this.aoMaterial)
{
global::UnityEngine.Object.DestroyImmediate(this.aoMaterial);
}
this.aoMaterial = null;
}
// Token: 0x0600017B RID: 379 RVA: 0x000100AC File Offset: 0x0000E4AC
[ImageEffectOpaque]
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (!this.CheckResources())
{
Graphics.Blit(source, destination);
return;
}
Camera component = base.GetComponent<Camera>();
Matrix4x4 projectionMatrix = component.projectionMatrix;
Matrix4x4 inverse = projectionMatrix.inverse;
Vector4 vector = new Vector4(-2f / projectionMatrix[0, 0], -2f / projectionMatrix[1, 1], (1f - projectionMatrix[0, 2]) / projectionMatrix[0, 0], (1f + projectionMatrix[1, 2]) / projectionMatrix[1, 1]);
if (component.stereoEnabled)
{
Matrix4x4 stereoProjectionMatrix = component.GetStereoProjectionMatrix(Camera.StereoscopicEye.Left);
Matrix4x4 stereoProjectionMatrix2 = component.GetStereoProjectionMatrix(Camera.StereoscopicEye.Right);
Vector4 vector2 = new Vector4(-2f / stereoProjectionMatrix[0, 0], -2f / stereoProjectionMatrix[1, 1], (1f - stereoProjectionMatrix[0, 2]) / stereoProjectionMatrix[0, 0], (1f + stereoProjectionMatrix[1, 2]) / stereoProjectionMatrix[1, 1]);
Vector4 vector3 = new Vector4(-2f / stereoProjectionMatrix2[0, 0], -2f / stereoProjectionMatrix2[1, 1], (1f - stereoProjectionMatrix2[0, 2]) / stereoProjectionMatrix2[0, 0], (1f + stereoProjectionMatrix2[1, 2]) / stereoProjectionMatrix2[1, 1]);
this.aoMaterial.SetVector("_ProjInfoLeft", vector2);
this.aoMaterial.SetVector("_ProjInfoRight", vector3);
}
this.aoMaterial.SetVector("_ProjInfo", vector);
this.aoMaterial.SetMatrix("_ProjectionInv", inverse);
this.aoMaterial.SetTexture("_Rand", this.rand);
this.aoMaterial.SetFloat("_Radius", this.radius);
this.aoMaterial.SetFloat("_Radius2", this.radius * this.radius);
this.aoMaterial.SetFloat("_Intensity", this.intensity);
this.aoMaterial.SetFloat("_BlurFilterDistance", this.blurFilterDistance);
int width = source.width;
int height = source.height;
RenderTexture renderTexture = RenderTexture.GetTemporary(width >> this.downsample, height >> this.downsample);
Graphics.Blit(source, renderTexture, this.aoMaterial, 0);
if (this.downsample > 0)
{
RenderTexture renderTexture2 = RenderTexture.GetTemporary(width, height);
Graphics.Blit(renderTexture, renderTexture2, this.aoMaterial, 4);
RenderTexture.ReleaseTemporary(renderTexture);
renderTexture = renderTexture2;
}
for (int i = 0; i < this.blurIterations; i++)
{
this.aoMaterial.SetVector("_Axis", new Vector2(1f, 0f));
RenderTexture renderTexture2 = RenderTexture.GetTemporary(width, height);
Graphics.Blit(renderTexture, renderTexture2, this.aoMaterial, 1);
RenderTexture.ReleaseTemporary(renderTexture);
this.aoMaterial.SetVector("_Axis", new Vector2(0f, 1f));
renderTexture = RenderTexture.GetTemporary(width, height);
Graphics.Blit(renderTexture2, renderTexture, this.aoMaterial, 1);
RenderTexture.ReleaseTemporary(renderTexture2);
}
this.aoMaterial.SetTexture("_AOTex", renderTexture);
Graphics.Blit(source, destination, this.aoMaterial, 2);
RenderTexture.ReleaseTemporary(renderTexture);
}
// Token: 0x0400030B RID: 779
[Range(0f, 3f)]
public float intensity = 0.5f;
// Token: 0x0400030C RID: 780
[Range(0.1f, 3f)]
public float radius = 0.2f;
// Token: 0x0400030D RID: 781
[Range(0f, 3f)]
public int blurIterations = 1;
// Token: 0x0400030E RID: 782
[Range(0f, 5f)]
public float blurFilterDistance = 1.25f;
// Token: 0x0400030F RID: 783
[Range(0f, 1f)]
public int downsample;
// Token: 0x04000310 RID: 784
public Texture2D rand;
// Token: 0x04000311 RID: 785
public Shader aoShader;
// Token: 0x04000312 RID: 786
private Material aoMaterial;
}
}