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 }