IMHOTEP Framework
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Pages
BloomEditor.cs
1 using System;
2 using UnityEditor;
3 using UnityEngine;
4 
5 namespace UnityStandardAssets.ImageEffects
6 {
7  [CustomEditor (typeof(Bloom))]
8  class BloomEditor : Editor
9  {
10  SerializedProperty tweakMode;
11  SerializedProperty screenBlendMode;
12 
13  SerializedObject serObj;
14 
15  SerializedProperty hdr;
16  SerializedProperty quality;
17  SerializedProperty sepBlurSpread;
18 
19  SerializedProperty bloomIntensity;
20  SerializedProperty bloomThresholdColor;
21  SerializedProperty bloomThreshold;
22  SerializedProperty bloomBlurIterations;
23 
24  SerializedProperty hollywoodFlareBlurIterations;
25 
26  SerializedProperty lensflareMode;
27  SerializedProperty hollyStretchWidth;
28  SerializedProperty lensflareIntensity;
29  SerializedProperty flareRotation;
30  SerializedProperty lensFlareSaturation;
31  SerializedProperty lensflareThreshold;
32  SerializedProperty flareColorA;
33  SerializedProperty flareColorB;
34  SerializedProperty flareColorC;
35  SerializedProperty flareColorD;
36 
37  SerializedProperty lensFlareVignetteMask;
38 
39  void OnEnable () {
40  serObj = new SerializedObject (target);
41 
42  screenBlendMode = serObj.FindProperty("screenBlendMode");
43  hdr = serObj.FindProperty("hdr");
44  quality = serObj.FindProperty("quality");
45 
46  sepBlurSpread = serObj.FindProperty("sepBlurSpread");
47 
48  bloomIntensity = serObj.FindProperty("bloomIntensity");
49  bloomThreshold = serObj.FindProperty("bloomThreshold");
50  bloomThresholdColor = serObj.FindProperty("bloomThresholdColor");
51  bloomBlurIterations = serObj.FindProperty("bloomBlurIterations");
52 
53  lensflareMode = serObj.FindProperty("lensflareMode");
54  hollywoodFlareBlurIterations = serObj.FindProperty("hollywoodFlareBlurIterations");
55  hollyStretchWidth = serObj.FindProperty("hollyStretchWidth");
56  lensflareIntensity = serObj.FindProperty("lensflareIntensity");
57  lensflareThreshold = serObj.FindProperty("lensflareThreshold");
58  lensFlareSaturation = serObj.FindProperty("lensFlareSaturation");
59  flareRotation = serObj.FindProperty("flareRotation");
60  flareColorA = serObj.FindProperty("flareColorA");
61  flareColorB = serObj.FindProperty("flareColorB");
62  flareColorC = serObj.FindProperty("flareColorC");
63  flareColorD = serObj.FindProperty("flareColorD");
64  lensFlareVignetteMask = serObj.FindProperty("lensFlareVignetteMask");
65 
66  tweakMode = serObj.FindProperty("tweakMode");
67  }
68 
69 
70  public override void OnInspectorGUI () {
71  serObj.Update();
72 
73  EditorGUILayout.LabelField("Glow and Lens Flares for bright screen pixels", EditorStyles.miniLabel);
74 
75  EditorGUILayout.PropertyField (quality, new GUIContent("Quality", "High quality preserves high frequencies with bigger blurs and uses a better blending and down-/upsampling"));
76 
77  EditorGUILayout.Separator ();
78 
79  EditorGUILayout.PropertyField (tweakMode, new GUIContent("Mode"));
80  EditorGUILayout.PropertyField (screenBlendMode, new GUIContent("Blend"));
81  EditorGUILayout.PropertyField (hdr, new GUIContent("HDR"));
82 
83  EditorGUILayout.Separator ();
84 
85  // display info text when screen blend mode cannot be used
86  Camera cam = (target as Bloom).GetComponent<Camera>();
87  if (cam != null) {
88  if (screenBlendMode.enumValueIndex==0 && ((cam.hdr && hdr.enumValueIndex==0) || (hdr.enumValueIndex==1))) {
89  EditorGUILayout.HelpBox("Screen blend is not supported in HDR. Using 'Add' instead.", MessageType.Info);
90  }
91  }
92 
93  EditorGUILayout.PropertyField (bloomIntensity, new GUIContent("Intensity"));
94  bloomThreshold.floatValue = EditorGUILayout.Slider ("Threshold", bloomThreshold.floatValue, -0.05f, 4.0f);
95  if (1 == tweakMode.intValue) {
96  EditorGUILayout.PropertyField(bloomThresholdColor, new GUIContent(" RGB Threshold"));
97  }
98  EditorGUILayout.Separator ();
99 
100  bloomBlurIterations.intValue = EditorGUILayout.IntSlider ("Blur Iterations", bloomBlurIterations.intValue, 1, 4);
101  sepBlurSpread.floatValue = EditorGUILayout.Slider (" Sample Distance", sepBlurSpread.floatValue, 0.1f, 10.0f);
102  EditorGUILayout.Separator ();
103 
104  if (1 == tweakMode.intValue) {
105  // further lens flare tweakings
106  if (0 != tweakMode.intValue)
107  EditorGUILayout.PropertyField (lensflareMode, new GUIContent("Lens Flares"));
108  else
109  lensflareMode.enumValueIndex = 0;
110 
111  EditorGUILayout.PropertyField (lensflareIntensity, new GUIContent(" Local Intensity", "0 disables lens flares entirely (optimization)"));
112  lensflareThreshold.floatValue = EditorGUILayout.Slider ("Threshold", lensflareThreshold.floatValue, 0.0f, 4.0f);
113 
114  if (Mathf.Abs(lensflareIntensity.floatValue) > Mathf.Epsilon) {
115  if (lensflareMode.intValue == 0) {
116  // ghosting
117  EditorGUILayout.BeginHorizontal ();
118  EditorGUILayout.PropertyField (flareColorA, new GUIContent(" 1st Color"));
119  EditorGUILayout.PropertyField (flareColorB, new GUIContent(" 2nd Color"));
120  EditorGUILayout.EndHorizontal ();
121 
122  EditorGUILayout.BeginHorizontal ();
123  EditorGUILayout.PropertyField (flareColorC, new GUIContent(" 3rd Color"));
124  EditorGUILayout.PropertyField (flareColorD, new GUIContent(" 4th Color"));
125  EditorGUILayout.EndHorizontal ();
126  }
127  else if (lensflareMode.intValue == 1) {
128  // hollywood
129  EditorGUILayout.PropertyField (hollyStretchWidth, new GUIContent(" Stretch width"));
130  EditorGUILayout.PropertyField (flareRotation, new GUIContent( " Rotation"));
131  hollywoodFlareBlurIterations.intValue = EditorGUILayout.IntSlider (" Blur Iterations", hollywoodFlareBlurIterations.intValue, 1, 4);
132 
133  EditorGUILayout.PropertyField (lensFlareSaturation, new GUIContent(" Saturation"));
134  EditorGUILayout.PropertyField (flareColorA, new GUIContent(" Tint Color"));
135  }
136  else if (lensflareMode.intValue == 2) {
137  // both
138  EditorGUILayout.PropertyField (hollyStretchWidth, new GUIContent(" Stretch width"));
139  hollywoodFlareBlurIterations.intValue = EditorGUILayout.IntSlider (" Blur Iterations", hollywoodFlareBlurIterations.intValue, 1, 4);
140 
141  EditorGUILayout.PropertyField (lensFlareSaturation, new GUIContent(" Saturation"));
142 
143  EditorGUILayout.BeginHorizontal ();
144  EditorGUILayout.PropertyField (flareColorA, new GUIContent(" 1st Color"));
145  EditorGUILayout.PropertyField (flareColorB, new GUIContent(" 2nd Color"));
146  EditorGUILayout.EndHorizontal ();
147 
148  EditorGUILayout.BeginHorizontal ();
149  EditorGUILayout.PropertyField (flareColorC, new GUIContent(" 3rd Color"));
150  EditorGUILayout.PropertyField (flareColorD, new GUIContent(" 4th Color"));
151  EditorGUILayout.EndHorizontal ();
152  }
153 
154  EditorGUILayout.PropertyField(lensFlareVignetteMask, new GUIContent(" Mask", "This mask is needed to prevent lens flare artifacts"));
155 
156  }
157  }
158 
159  serObj.ApplyModifiedProperties();
160  }
161  }
162 }