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.
CrowdControl/Assets/Top Down/Standard Assets/Image Effects (Pro Only)/Crease.js

76 lines
2.5 KiB
JavaScript

#pragma strict
@script ExecuteInEditMode
@script RequireComponent (Camera)
@script AddComponentMenu ("Image Effects/Crease")
class Crease extends PostEffectsBase {
public var intensity : float = 0.5;
public var softness : int = 1;
public var spread : float = 1.0;
public var blurShader : Shader;
private var blurMaterial : Material = null;
public var depthFetchShader : Shader;
private var depthFetchMaterial : Material = null;
public var creaseApplyShader : Shader;
private var creaseApplyMaterial : Material = null;
function OnDisable()
{
if (blurMaterial)
DestroyImmediate(blurMaterial);
if (depthFetchMaterial)
DestroyImmediate(depthFetchMaterial);
if (creaseApplyMaterial)
DestroyImmediate(creaseApplyMaterial);
}
function CheckResources () : boolean {
CheckSupport (true);
blurMaterial = CheckShaderAndCreateMaterial (blurShader, blurMaterial);
depthFetchMaterial = CheckShaderAndCreateMaterial (depthFetchShader, depthFetchMaterial);
creaseApplyMaterial = CheckShaderAndCreateMaterial (creaseApplyShader, creaseApplyMaterial);
if(!isSupported)
ReportAutoDisable ();
return isSupported;
}
function OnRenderImage (source : RenderTexture, destination : RenderTexture) {
if(CheckResources()==false) {
Graphics.Blit (source, destination);
return;
}
var widthOverHeight : float = (1.0f * source.width) / (1.0f * source.height);
var oneOverBaseSize : float = 1.0f / 512.0f;
var hrTex : RenderTexture = RenderTexture.GetTemporary (source.width, source.height, 0);
var lrTex1 : RenderTexture = RenderTexture.GetTemporary (source.width / 2, source.height / 2, 0);
var lrTex2 : RenderTexture = RenderTexture.GetTemporary (source.width / 2, source.height / 2, 0);
Graphics.Blit (source,hrTex, depthFetchMaterial);
Graphics.Blit (hrTex, lrTex1);
for(var i : int = 0; i < softness; i++) {
blurMaterial.SetVector ("offsets", Vector4 (0.0, spread * oneOverBaseSize, 0.0, 0.0));
Graphics.Blit (lrTex1, lrTex2, blurMaterial);
blurMaterial.SetVector ("offsets", Vector4 (spread * oneOverBaseSize / widthOverHeight, 0.0, 0.0, 0.0));
Graphics.Blit (lrTex2, lrTex1, blurMaterial);
}
creaseApplyMaterial.SetTexture ("_HrDepthTex", hrTex);
creaseApplyMaterial.SetTexture ("_LrDepthTex", lrTex1);
creaseApplyMaterial.SetFloat ("intensity", intensity);
Graphics.Blit (source,destination, creaseApplyMaterial);
RenderTexture.ReleaseTemporary (hrTex);
RenderTexture.ReleaseTemporary (lrTex1);
RenderTexture.ReleaseTemporary (lrTex2);
}
}