コード例 #1
0
    public override void OnInspectorGUI()
    {
        SuperSampling_SSAA ssaaTarget = (SuperSampling_SSAA)target;
        Camera             c          = ssaaTarget.GetComponent <Camera>();

        if (c == null)
        {
            if (GUILayout.Button("Add Camera"))
            {
                ssaaTarget.gameObject.AddComponent <Camera>();
            }
            else
            {
                return;
            }
        }

        if (c.targetTexture == null)
        {
            if (ssaaTarget.Scale < 0.5f)
            {
                ssaaTarget.Scale = defaultValue;
            }

            if (SSAA.internal_SSAA.scale < 1f)
            {
                SSAA.internal_SSAA.ChangeScale(ssaaTarget.Scale);
            }

            GUI.changed = false;

            GUIContent cnt = new GUIContent("HighScale (Caution!)");
            cnt.tooltip         = "Unlocks 2+ multipliers Range. We recommend 1.25-2 for normal game usage. 2 is already very high.";
            ssaaTarget.unlocked = EditorGUILayout.Toggle(cnt, ssaaTarget.unlocked);

            float newScale = SSAA.internal_SSAA.scale;
            cnt         = new GUIContent("Resolution multiplier");
            cnt.tooltip = "We recommend 1.25 - 2 for normal game usage";

            if (!ssaaTarget.unlocked)
            {
                newScale = (float)Math.Round(EditorGUILayout.Slider(cnt, SSAA.internal_SSAA.scale, MinScale, MaxScale), 1);
            }
            else
            {
                newScale = (float)Math.Round(EditorGUILayout.Slider(cnt, SSAA.internal_SSAA.scale, MinScaleHigh, MaxScaleHigh), 1);
            }

            if (Mathf.Abs(newScale - SSAA.internal_SSAA.scale) > 0.005f)
            {
                SSAA.internal_SSAA.ChangeScale(newScale);
                ssaaTarget.Scale = newScale;
            }

            int filterSelector = 0;
            switch (SSAA.internal_SSAA.Filter)
            {
            case SSAA.SSAAFilter.NearestNeighbor: filterSelector = 0; break;

            case SSAA.SSAAFilter.BilinearSharper: filterSelector = 1; break;

            case SSAA.SSAAFilter.BilinearDefault: filterSelector = 2; break;

            case SSAA.SSAAFilter.BilinearHigh: filterSelector = 3; break;

            case SSAA.SSAAFilter.LanczosHigh: filterSelector = 4; break;
            }

            string[] options = { "Nearest Neighbor      (0.5 - 2)",
                                 "Bilinear Sharper          (1.25 - 2)",
                                 "Bilinear Default          (2 - 3)",
                                 "Bilinear High              (3 - 4)",
                                 "Lanczos High             (3 - 4)" };

            filterSelector = EditorGUILayout.Popup("Filter Algorithm", filterSelector, options);

            switch (filterSelector)
            {
            case 0: SSAA.internal_SSAA.Filter = SSAA.SSAAFilter.NearestNeighbor; break;

            case 1: SSAA.internal_SSAA.Filter = SSAA.SSAAFilter.BilinearSharper; break;

            case 2: SSAA.internal_SSAA.Filter = SSAA.SSAAFilter.BilinearDefault; break;

            case 3: SSAA.internal_SSAA.Filter = SSAA.SSAAFilter.BilinearHigh; break;

            case 4: SSAA.internal_SSAA.Filter = SSAA.SSAAFilter.LanczosHigh; break;
            }
            ssaaTarget.Filter = SSAA.internal_SSAA.Filter;

            bool usingHigh = false;
            if (ssaaTarget.renderTextureFormat == RenderTextureFormat.ARGBHalf)
            {
                usingHigh = true;
            }

            cnt         = new GUIContent("16Bit Texture Format");
            cnt.tooltip = "Use 16 Bit Color Depth per Channel instead of 8 Bit";
            usingHigh   = EditorGUILayout.Toggle(cnt, usingHigh);

            if (ssaaTarget.renderTextureFormat == RenderTextureFormat.ARGBHalf && !usingHigh)
            {
                ssaaTarget.renderTextureFormat = RenderTextureFormat.ARGB32;
            }
            else if (ssaaTarget.renderTextureFormat == RenderTextureFormat.ARGB32 && usingHigh)
            {
                ssaaTarget.renderTextureFormat = RenderTextureFormat.ARGBHalf;
            }

            if (GUI.changed)
            {
                ssaaTarget.enabled = false;
                ssaaTarget.enabled = true;
            }
        }
        else
        {
            if (ssaaTarget.Scale < 0.5f)
            {
                ssaaTarget.Scale = defaultValue;
            }


            GUI.changed = false;


            EditorGUILayout.LabelField("");

            GUIContent cnt = new GUIContent("HighScale (Caution!)");
            cnt.tooltip         = "Unlocks 2+ multipliers Range. We recommend 1.25-2 for normal game usage. 2 is already very high.";
            ssaaTarget.unlocked = EditorGUILayout.Toggle(cnt, ssaaTarget.unlocked);

            cnt         = new GUIContent("Resolution multiplier");
            cnt.tooltip = "We recommend 1.25 - 2 for normal game usage";

            float newScale = ssaaTarget.Scale;
            if (!ssaaTarget.unlocked)
            {
                newScale = (float)Math.Round(EditorGUILayout.Slider(cnt, ssaaTarget.Scale, MinScale, MaxScale), 1);
            }
            else
            {
                newScale = (float)Math.Round(EditorGUILayout.Slider(cnt, ssaaTarget.Scale, MinScaleHigh, MaxScaleHigh), 1);
            }

            if (Mathf.Abs(newScale - ssaaTarget.Scale) > 0.005f)
            {
                ssaaTarget.Scale = newScale;
            }

            int filterSelector = 0;
            switch (ssaaTarget.Filter)
            {
            case SSAA.SSAAFilter.NearestNeighbor: filterSelector = 0; break;

            case SSAA.SSAAFilter.BilinearSharper: filterSelector = 1; break;

            case SSAA.SSAAFilter.BilinearDefault: filterSelector = 2; break;

            case SSAA.SSAAFilter.BilinearHigh: filterSelector = 3; break;

            case SSAA.SSAAFilter.LanczosHigh: filterSelector = 4; break;
            }

            string[] options = { "Nearest Neighbor      (0.5 - 2)",
                                 "Bilinear Sharper          (1.25 - 2)",
                                 "Bilinear Default          (2 - 3)",
                                 "Bilinear High              (3 - 4)",
                                 "Lanczos High             (3 - 4)" };

            filterSelector = EditorGUILayout.Popup("Filter Algorithm", filterSelector, options);

            switch (filterSelector)
            {
            case 0: ssaaTarget.Filter = SSAA.SSAAFilter.NearestNeighbor; break;

            case 1: ssaaTarget.Filter = SSAA.SSAAFilter.BilinearSharper; break;

            case 2: ssaaTarget.Filter = SSAA.SSAAFilter.BilinearDefault; break;

            case 3: ssaaTarget.Filter = SSAA.SSAAFilter.BilinearHigh; break;

            case 4: ssaaTarget.Filter = SSAA.SSAAFilter.LanczosHigh; break;
            }

            bool usingHigh = false;
            if (ssaaTarget.renderTextureFormat == RenderTextureFormat.ARGBHalf)
            {
                usingHigh = true;
            }

            cnt         = new GUIContent("16Bit Texture Format");
            cnt.tooltip = "Use 16 Bit Color Depth per Channel instead of 8 Bit";
            usingHigh   = EditorGUILayout.Toggle(cnt, usingHigh);

            if (ssaaTarget.renderTextureFormat == RenderTextureFormat.ARGBHalf && !usingHigh)
            {
                ssaaTarget.renderTextureFormat = RenderTextureFormat.ARGB32;
            }
            else if (ssaaTarget.renderTextureFormat == RenderTextureFormat.ARGB32 && usingHigh)
            {
                ssaaTarget.renderTextureFormat = RenderTextureFormat.ARGBHalf;
            }

            if (GUI.changed)
            {
                ssaaTarget.enabled = false;
                ssaaTarget.enabled = true;
            }
        }

        EditorGUILayout.LabelField("");

        ssaaTarget.showScreenshot = EditorGUILayout.Foldout(ssaaTarget.showScreenshot, "Screenshot Menu");

        if (ssaaTarget.showScreenshot)
        {
            Vector2 v2 = new Vector2(ssaaTarget.screenshotWidth, ssaaTarget.screenshotHeight);
            v2 = EditorGUILayout.Vector2Field("Resolution", v2);
            ssaaTarget.screenshotWidth  = Mathf.RoundToInt(v2.x);
            ssaaTarget.screenshotHeight = Mathf.RoundToInt(v2.y);

            string[] options = { "x4 Lanczos", "x3 Bilinear", "x2 Nearest Neighbor", "Native" };
            ssaaTarget.scalingSelector = EditorGUILayout.Popup("Scaling", ssaaTarget.scalingSelector, options);

            ssaaTarget.screenshotScale = (float)(options.Length - ssaaTarget.scalingSelector);

            switch (options.Length - ssaaTarget.scalingSelector)
            {
            case 4: ssaaTarget.screenshotFilter = SSAA.SSAAFilter.LanczosHigh; break;

            case 3: ssaaTarget.screenshotFilter = SSAA.SSAAFilter.BilinearDefault; break;

            case 2: ssaaTarget.screenshotFilter = SSAA.SSAAFilter.NearestNeighbor; break;

            case 1: ssaaTarget.screenshotFilter = SSAA.SSAAFilter.NearestNeighbor; break;
            }
            GUIContent cnt = new GUIContent("Path/Name");
            cnt.tooltip = "You can add folders as well: /Assets/Screenshots/MyImage";
            ssaaTarget.relativeScreenshotPath = EditorGUILayout.TextField(cnt, ssaaTarget.relativeScreenshotPath);

            //if the user added the extension himself, we want to make sure its ".png"
            if (ssaaTarget.relativeScreenshotPath.Contains(".png") || ssaaTarget.relativeScreenshotPath.Contains(".jpg") || ssaaTarget.relativeScreenshotPath.Contains(".tga"))
            {
                Debug.LogWarning("Don't add the extension manually! .png will be added automatically");
            }


            if (Application.isPlaying && GUILayout.Button("Save Screenshot"))
            {
                ssaaTarget.TakeHighScaledShot(ssaaTarget.screenshotWidth, ssaaTarget.screenshotHeight, ssaaTarget.screenshotScale, ssaaTarget.screenshotFilter, "/../" + ssaaTarget.relativeScreenshotPath);
#if UNITY_EDITOR
                AssetDatabase.Refresh();
#endif
            }
            else if (!Application.isPlaying)
            {
                GUILayout.Label("Screenshots work in Play and Pause Mode", GUI.skin.button);
            }
        }
        EditorGUILayout.LabelField("");
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);

#if (UNITY_5_0 || UNITY_5_1 || UNITY_5_2)
            if (!EditorApplication.isPlaying)
            {
                EditorApplication.MarkSceneDirty();
            }
#elif (!UNITY_4_3 && !UNITY_4_4 && !UNITY_4_5 && !UNITY_4_6)
            if (!EditorApplication.isPlaying)
            {
                EditorSceneManager.MarkAllScenesDirty();
            }
#endif
        }
    }
コード例 #2
0
    public override void OnInspectorGUI()
    {
        SuperSampling_SSAA ssaaTarget = (SuperSampling_SSAA)target;

        if (ssaaTarget.Scale < 0.5f)
        {
            ssaaTarget.Scale = defaultValue;
        }

        if (SSAA.internal_SSAA.scale < 1f)
        {
            SSAA.internal_SSAA.ChangeScale(ssaaTarget.Scale);
        }

        GUI.changed = false;


        EditorGUILayout.LabelField("");

        ssaaTarget.unlocked = EditorGUILayout.Toggle("HighScale (Caution!)", ssaaTarget.unlocked);


        float newScale = SSAA.internal_SSAA.scale;

        if (!ssaaTarget.unlocked)
        {
            newScale = (float)Math.Round(EditorGUILayout.Slider("Resolution multiplier", SSAA.internal_SSAA.scale, MinScale, MaxScale), 1);
        }
        else
        {
            newScale = (float)Math.Round(EditorGUILayout.Slider("Resolution multiplier", SSAA.internal_SSAA.scale, MinScaleHigh, MaxScaleHigh), 1);
        }

        if (Mathf.Abs(newScale - SSAA.internal_SSAA.scale) > 0.005f)
        {
            SSAA.internal_SSAA.ChangeScale(newScale);
            ssaaTarget.Scale = newScale;
        }

        SSAA.internal_SSAA.Filter = (SSAA.SSAAFilter)EditorGUILayout.EnumPopup("Filter", SSAA.internal_SSAA.Filter);
        ssaaTarget.Filter         = SSAA.internal_SSAA.Filter;

        ssaaTarget.UseDynamicOutputResolution = EditorGUILayout.Toggle("Dynamic Output Resolution", ssaaTarget.UseDynamicOutputResolution);

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
#if UNITY_5_0 || UNITY_5_1
            EditorApplication.MarkSceneDirty();
#endif
        }



        EditorGUILayout.LabelField("");



        EditorGUILayout.LabelField("• Screenshots are saved to your top Project folder.");
        if (GUILayout.Button("Save .PNG Screenshot"))
        {
            SSAA.internal_SSAA.SaveSuperSampledToPNG(ScreenshotPathName + screenshotExt);
        }

        EditorGUILayout.LabelField("");
    }