4 namespace UnityStandardAssets.ImageEffects
7 [RequireComponent (typeof (Camera))]
8 [AddComponentMenu (
"Image Effects/Edge Detection/Edge Detection")]
11 public enum EdgeDetectMode
13 TriangleDepthNormals = 0,
14 RobertsCrossDepthNormals = 1,
17 TriangleLuminance = 4,
21 public EdgeDetectMode mode = EdgeDetectMode.SobelDepthThin;
22 public float sensitivityDepth = 1.0f;
23 public float sensitivityNormals = 1.0f;
24 public float lumThreshold = 0.2f;
25 public float edgeExp = 1.0f;
26 public float sampleDist = 1.0f;
27 public float edgesOnly = 0.0f;
28 public Color edgesOnlyBgColor = Color.white;
30 public Shader edgeDetectShader;
31 private Material edgeDetectMaterial = null;
32 private EdgeDetectMode oldMode = EdgeDetectMode.SobelDepthThin;
35 public override bool CheckResources ()
39 edgeDetectMaterial = CheckShaderAndCreateMaterial (edgeDetectShader,edgeDetectMaterial);
58 if (mode == EdgeDetectMode.SobelDepth || mode == EdgeDetectMode.SobelDepthThin)
59 GetComponent<Camera>().depthTextureMode |= DepthTextureMode.Depth;
60 else if (mode == EdgeDetectMode.TriangleDepthNormals || mode == EdgeDetectMode.RobertsCrossDepthNormals)
61 GetComponent<Camera>().depthTextureMode |= DepthTextureMode.DepthNormals;
70 void OnRenderImage (RenderTexture source, RenderTexture destination)
72 if (CheckResources () ==
false)
74 Graphics.Blit (source, destination);
78 Vector2 sensitivity =
new Vector2 (sensitivityDepth, sensitivityNormals);
79 edgeDetectMaterial.SetVector (
"_Sensitivity",
new Vector4 (sensitivity.x, sensitivity.y, 1.0f, sensitivity.y));
80 edgeDetectMaterial.SetFloat (
"_BgFade", edgesOnly);
81 edgeDetectMaterial.SetFloat (
"_SampleDistance", sampleDist);
82 edgeDetectMaterial.SetVector (
"_BgColor", edgesOnlyBgColor);
83 edgeDetectMaterial.SetFloat (
"_Exponent", edgeExp);
84 edgeDetectMaterial.SetFloat (
"_Threshold", lumThreshold);
86 Graphics.Blit (source, destination, edgeDetectMaterial, (int) mode);