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.
66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
2 months ago
|
|
||
|
#pragma strict
|
||
|
|
||
|
@script ExecuteInEditMode
|
||
|
@script RequireComponent (Camera)
|
||
|
@script AddComponentMenu ("Image Effects/Edge Detection (Geometry)")
|
||
|
|
||
|
enum EdgeDetectMode {
|
||
|
Thin = 0,
|
||
|
Thick = 1,
|
||
|
}
|
||
|
|
||
|
class EdgeDetectEffectNormals extends PostEffectsBase {
|
||
|
|
||
|
public var mode : EdgeDetectMode = EdgeDetectMode.Thin;
|
||
|
public var sensitivityDepth : float = 1.0;
|
||
|
public var sensitivityNormals : float = 1.0;
|
||
|
|
||
|
public var edgesOnly : float = 0.0;
|
||
|
public var edgesOnlyBgColor : Color = Color.white;
|
||
|
|
||
|
public var edgeDetectShader : Shader;
|
||
|
private var edgeDetectMaterial : Material = null;
|
||
|
|
||
|
function OnDisable()
|
||
|
{
|
||
|
if (edgeDetectMaterial)
|
||
|
DestroyImmediate(edgeDetectMaterial);
|
||
|
}
|
||
|
function CheckResources () : boolean {
|
||
|
CheckSupport (true);
|
||
|
|
||
|
edgeDetectMaterial = CheckShaderAndCreateMaterial (edgeDetectShader,edgeDetectMaterial);
|
||
|
|
||
|
if(!isSupported)
|
||
|
ReportAutoDisable ();
|
||
|
return isSupported;
|
||
|
}
|
||
|
|
||
|
@ImageEffectOpaque
|
||
|
function OnRenderImage (source : RenderTexture, destination : RenderTexture) {
|
||
|
if(CheckResources()==false) {
|
||
|
Graphics.Blit (source, destination);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var sensitivity : Vector2 = Vector2 (sensitivityDepth, sensitivityNormals);
|
||
|
|
||
|
source.filterMode = FilterMode.Point;
|
||
|
|
||
|
edgeDetectMaterial.SetVector ("sensitivity", Vector4 (sensitivity.x, sensitivity.y, 1.0, sensitivity.y));
|
||
|
edgeDetectMaterial.SetFloat ("_BgFade", edgesOnly);
|
||
|
|
||
|
var vecCol : Vector4 = edgesOnlyBgColor;
|
||
|
edgeDetectMaterial.SetVector ("_BgColor", vecCol);
|
||
|
|
||
|
if (mode == EdgeDetectMode.Thin) {
|
||
|
Graphics.Blit (source, destination, edgeDetectMaterial, 0);
|
||
|
}
|
||
|
else {
|
||
|
Graphics.Blit (source, destination, edgeDetectMaterial, 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|