UnityMol  0.9.6-875
UnityMol viewer / In developement
EdgeDetection.cs
Go to the documentation of this file.
1 using System;
2 using UnityEngine;
3 
4 namespace UnityStandardAssets.ImageEffects
5 {
6  [ExecuteInEditMode]
7  [RequireComponent (typeof (Camera))]
8  [AddComponentMenu ("Image Effects/Edge Detection/Edge Detection")]
10  {
11  public enum EdgeDetectMode
12  {
13  TriangleDepthNormals = 0,
14  RobertsCrossDepthNormals = 1,
15  SobelDepth = 2,
16  SobelDepthThin = 3,
17  TriangleLuminance = 4,
18  }
19 
20 
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;
29 
30  public Shader edgeDetectShader;
31  private Material edgeDetectMaterial = null;
32  private EdgeDetectMode oldMode = EdgeDetectMode.SobelDepthThin;
33 
34 
35  public override bool CheckResources ()
36  {
37  CheckSupport (true);
38 
39  edgeDetectMaterial = CheckShaderAndCreateMaterial (edgeDetectShader,edgeDetectMaterial);
40  if (mode != oldMode)
41  SetCameraFlag ();
42 
43  oldMode = mode;
44 
45  if (!isSupported)
46  ReportAutoDisable ();
47  return isSupported;
48  }
49 
50 
51  new void Start ()
52  {
53  oldMode = mode;
54  }
55 
56  void SetCameraFlag ()
57  {
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;
62  }
63 
64  void OnEnable ()
65  {
66  SetCameraFlag();
67  }
68 
69  [ImageEffectOpaque]
70  void OnRenderImage (RenderTexture source, RenderTexture destination)
71  {
72  if (CheckResources () == false)
73  {
74  Graphics.Blit (source, destination);
75  return;
76  }
77 
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);
85 
86  Graphics.Blit (source, destination, edgeDetectMaterial, (int) mode);
87  }
88  }
89 }
void OnRenderImage(RenderTexture source, RenderTexture destination)