You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.5 KiB
JavaScript
71 lines
2.5 KiB
JavaScript
|
|
#pragma strict
|
|
|
|
@script ExecuteInEditMode
|
|
@script RequireComponent(Camera)
|
|
@script AddComponentMenu("Image Effects/Contrast Enhance (Unsharp Mask)")
|
|
|
|
class ContrastEnhance extends PostEffectsBase {
|
|
public var intensity : float = 0.5;
|
|
public var threshhold : float = 0.0;
|
|
|
|
private var separableBlurMaterial : Material;
|
|
private var contrastCompositeMaterial : Material;
|
|
|
|
public var blurSpread : float = 1.0;
|
|
|
|
public var separableBlurShader : Shader = null;
|
|
public var contrastCompositeShader : Shader = null;
|
|
|
|
function OnDisable()
|
|
{
|
|
if (contrastCompositeMaterial)
|
|
DestroyImmediate(contrastCompositeMaterial);
|
|
if (separableBlurMaterial)
|
|
DestroyImmediate(separableBlurMaterial);
|
|
}
|
|
function CheckResources () : boolean {
|
|
CheckSupport (false);
|
|
|
|
contrastCompositeMaterial = CheckShaderAndCreateMaterial (contrastCompositeShader, contrastCompositeMaterial);
|
|
separableBlurMaterial = CheckShaderAndCreateMaterial (separableBlurShader, separableBlurMaterial);
|
|
|
|
if(!isSupported)
|
|
ReportAutoDisable ();
|
|
return isSupported;
|
|
}
|
|
|
|
function OnRenderImage (source : RenderTexture, destination : RenderTexture) {
|
|
if(CheckResources()==false) {
|
|
Graphics.Blit (source, destination);
|
|
return;
|
|
}
|
|
|
|
var halfRezColor : RenderTexture = RenderTexture.GetTemporary (source.width / 2.0, source.height / 2.0, 0);
|
|
var quarterRezColor : RenderTexture = RenderTexture.GetTemporary (source.width / 4.0, source.height / 4.0, 0);
|
|
var secondQuarterRezColor : RenderTexture = RenderTexture.GetTemporary (source.width / 4.0, source.height / 4.0, 0);
|
|
|
|
// ddownsample
|
|
|
|
Graphics.Blit (source, halfRezColor);
|
|
Graphics.Blit (halfRezColor, quarterRezColor);
|
|
|
|
// blur
|
|
|
|
separableBlurMaterial.SetVector ("offsets", Vector4 (0.0, (blurSpread * 1.0) / quarterRezColor.height, 0.0, 0.0));
|
|
Graphics.Blit (quarterRezColor, secondQuarterRezColor, separableBlurMaterial);
|
|
separableBlurMaterial.SetVector ("offsets", Vector4 ((blurSpread * 1.0) / quarterRezColor.width, 0.0, 0.0, 0.0));
|
|
Graphics.Blit (secondQuarterRezColor, quarterRezColor, separableBlurMaterial);
|
|
|
|
// composite
|
|
|
|
contrastCompositeMaterial.SetTexture ("_MainTexBlurred", quarterRezColor);
|
|
contrastCompositeMaterial.SetFloat ("intensity", intensity);
|
|
contrastCompositeMaterial.SetFloat ("threshhold", threshhold);
|
|
Graphics.Blit (source, destination, contrastCompositeMaterial);
|
|
|
|
RenderTexture.ReleaseTemporary (halfRezColor);
|
|
RenderTexture.ReleaseTemporary (quarterRezColor);
|
|
RenderTexture.ReleaseTemporary (secondQuarterRezColor);
|
|
}
|
|
} |