IMHOTEP Framework
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Pages
TonemappingEditor.cs
1 using System;
2 using UnityEditor;
3 using UnityEngine;
4 
5 namespace UnityStandardAssets.ImageEffects
6 {
7  [CustomEditor (typeof(Tonemapping))]
8  class TonemappingEditor : Editor
9  {
10  SerializedObject serObj;
11 
12  SerializedProperty type;
13 
14  // CURVE specific parameter
15  SerializedProperty remapCurve;
16 
17  SerializedProperty exposureAdjustment;
18 
19  // REINHARD specific parameter
20  SerializedProperty middleGrey;
21  SerializedProperty white;
22  SerializedProperty adaptionSpeed;
23  SerializedProperty adaptiveTextureSize;
24 
25  void OnEnable () {
26  serObj = new SerializedObject (target);
27 
28  type = serObj.FindProperty ("type");
29  remapCurve = serObj.FindProperty ("remapCurve");
30  exposureAdjustment = serObj.FindProperty ("exposureAdjustment");
31  middleGrey = serObj.FindProperty ("middleGrey");
32  white = serObj.FindProperty ("white");
33  adaptionSpeed = serObj.FindProperty ("adaptionSpeed");
34  adaptiveTextureSize = serObj.FindProperty("adaptiveTextureSize");
35  }
36 
37 
38  public override void OnInspectorGUI () {
39  serObj.Update ();
40 
41  GUILayout.Label("Mapping HDR to LDR ranges since 1982", EditorStyles.miniLabel);
42 
43  Camera cam = (target as Tonemapping).GetComponent<Camera>();
44  if (cam != null) {
45  if (!cam.hdr) {
46  EditorGUILayout.HelpBox("The camera is not HDR enabled. This will likely break the Tonemapper.", MessageType.Warning);
47  }
48  else if (!(target as Tonemapping).validRenderTextureFormat) {
49  EditorGUILayout.HelpBox("The input to Tonemapper is not in HDR. Make sure that all effects prior to this are executed in HDR.", MessageType.Warning);
50  }
51  }
52 
53  EditorGUILayout.PropertyField (type, new GUIContent ("Technique"));
54 
55  if (type.enumValueIndex == (int) Tonemapping.TonemapperType.UserCurve) {
56  EditorGUILayout.PropertyField (remapCurve, new GUIContent ("Remap curve", "Specify the mapping of luminances yourself"));
57  } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.SimpleReinhard) {
58  EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment"));
59  } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.Hable) {
60  EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment"));
61  } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.Photographic) {
62  EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment"));
63  } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.OptimizedHejiDawson) {
64  EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment"));
65  } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.AdaptiveReinhard) {
66  EditorGUILayout.PropertyField (middleGrey, new GUIContent ("Middle grey", "Middle grey defines the average luminance thus brightening or darkening the entire image."));
67  EditorGUILayout.PropertyField (white, new GUIContent ("White", "Smallest luminance value that will be mapped to white"));
68  EditorGUILayout.PropertyField (adaptionSpeed, new GUIContent ("Adaption Speed", "Speed modifier for the automatic adaption"));
69  EditorGUILayout.PropertyField (adaptiveTextureSize, new GUIContent ("Texture size", "Defines the amount of downsamples needed."));
70  } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.AdaptiveReinhardAutoWhite) {
71  EditorGUILayout.PropertyField (middleGrey, new GUIContent ("Middle grey", "Middle grey defines the average luminance thus brightening or darkening the entire image."));
72  EditorGUILayout.PropertyField (adaptionSpeed, new GUIContent ("Adaption Speed", "Speed modifier for the automatic adaption"));
73  EditorGUILayout.PropertyField (adaptiveTextureSize, new GUIContent ("Texture size", "Defines the amount of downsamples needed."));
74  }
75 
76  GUILayout.Label("All following effects will use LDR color buffers", EditorStyles.miniBoldLabel);
77 
78  serObj.ApplyModifiedProperties();
79  }
80  }
81 }