You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
4.8 KiB

  1. using UnityEngine;
  2. using UnityEngine.PostProcessing;
  3. namespace UnityEditor.PostProcessing
  4. {
  5. using VignetteMode = VignetteModel.Mode;
  6. using Settings = VignetteModel.Settings;
  7. [PostProcessingModelEditor(typeof(VignetteModel))]
  8. public class VignetteModelEditor : PostProcessingModelEditor
  9. {
  10. SerializedProperty m_Mode;
  11. SerializedProperty m_Color;
  12. SerializedProperty m_Center;
  13. SerializedProperty m_Intensity;
  14. SerializedProperty m_Smoothness;
  15. SerializedProperty m_Roundness;
  16. SerializedProperty m_Mask;
  17. SerializedProperty m_Opacity;
  18. SerializedProperty m_Rounded;
  19. public override void OnEnable()
  20. {
  21. m_Mode = FindSetting((Settings x) => x.mode);
  22. m_Color = FindSetting((Settings x) => x.color);
  23. m_Center = FindSetting((Settings x) => x.center);
  24. m_Intensity = FindSetting((Settings x) => x.intensity);
  25. m_Smoothness = FindSetting((Settings x) => x.smoothness);
  26. m_Roundness = FindSetting((Settings x) => x.roundness);
  27. m_Mask = FindSetting((Settings x) => x.mask);
  28. m_Opacity = FindSetting((Settings x) => x.opacity);
  29. m_Rounded = FindSetting((Settings x) => x.rounded);
  30. }
  31. public override void OnInspectorGUI()
  32. {
  33. EditorGUILayout.PropertyField(m_Mode);
  34. EditorGUILayout.PropertyField(m_Color);
  35. if (m_Mode.intValue < (int)VignetteMode.Masked)
  36. {
  37. EditorGUILayout.PropertyField(m_Center);
  38. EditorGUILayout.PropertyField(m_Intensity);
  39. EditorGUILayout.PropertyField(m_Smoothness);
  40. EditorGUILayout.PropertyField(m_Roundness);
  41. EditorGUILayout.PropertyField(m_Rounded);
  42. }
  43. else
  44. {
  45. var mask = (target as VignetteModel).settings.mask;
  46. // Checks import settings on the mask, offers to fix them if invalid
  47. if (mask != null)
  48. {
  49. var importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(mask)) as TextureImporter;
  50. if (importer != null) // Fails when using an internal texture
  51. {
  52. #if UNITY_5_5_OR_NEWER
  53. bool valid = importer.anisoLevel == 0
  54. && importer.mipmapEnabled == false
  55. //&& importer.alphaUsage == TextureImporterAlphaUsage.FromGrayScale
  56. && importer.alphaSource == TextureImporterAlphaSource.FromGrayScale
  57. && importer.textureCompression == TextureImporterCompression.Uncompressed
  58. && importer.wrapMode == TextureWrapMode.Clamp;
  59. #else
  60. bool valid = importer.anisoLevel == 0
  61. && importer.mipmapEnabled == false
  62. && importer.grayscaleToAlpha == true
  63. && importer.textureFormat == TextureImporterFormat.Alpha8
  64. && importer.wrapMode == TextureWrapMode.Clamp;
  65. #endif
  66. if (!valid)
  67. {
  68. EditorGUILayout.HelpBox("Invalid mask import settings.", MessageType.Warning);
  69. GUILayout.Space(-32);
  70. using (new EditorGUILayout.HorizontalScope())
  71. {
  72. GUILayout.FlexibleSpace();
  73. if (GUILayout.Button("Fix", GUILayout.Width(60)))
  74. {
  75. SetMaskImportSettings(importer);
  76. AssetDatabase.Refresh();
  77. }
  78. GUILayout.Space(8);
  79. }
  80. GUILayout.Space(11);
  81. }
  82. }
  83. }
  84. EditorGUILayout.PropertyField(m_Mask);
  85. EditorGUILayout.PropertyField(m_Opacity);
  86. }
  87. }
  88. void SetMaskImportSettings(TextureImporter importer)
  89. {
  90. #if UNITY_5_5_OR_NEWER
  91. importer.textureType = TextureImporterType.SingleChannel;
  92. //importer.alphaUsage = TextureImporterAlphaUsage.FromGrayScale;
  93. importer.alphaSource = TextureImporterAlphaSource.FromGrayScale;
  94. importer.textureCompression = TextureImporterCompression.Uncompressed;
  95. #else
  96. importer.textureType = TextureImporterType.Advanced;
  97. importer.grayscaleToAlpha = true;
  98. importer.textureFormat = TextureImporterFormat.Alpha8;
  99. #endif
  100. importer.anisoLevel = 0;
  101. importer.mipmapEnabled = false;
  102. importer.wrapMode = TextureWrapMode.Clamp;
  103. importer.SaveAndReimport();
  104. }
  105. }
  106. }