コード例 #1
0
        public void Apply(RenderTexture targetRt, GTextureFilterParams param)
        {
            GBlurParams   blurParam = param.Blur;
            RenderTexture bg        = CloneBg(targetRt);

            Mat.SetTexture("_MainTex", bg);
            GCommon.DrawQuad(targetRt, GCommon.FullRectUvPoints, Mat, blurParam.Radius);
        }
コード例 #2
0
        public void Apply(RenderTexture targetRt, GTextureFilterParams param)
        {
            GStepParams   stepParam = param.Step;
            RenderTexture bg        = CloneBg(targetRt);

            Mat.SetTexture("_MainTex", bg);
            Mat.SetInt("_Count", stepParam.Count);

            GCommon.DrawQuad(targetRt, GCommon.FullRectUvPoints, Mat, 0);
        }
コード例 #3
0
        public void Apply(RenderTexture targetRt, GTextureFilterParams param)
        {
            GInvertParams invertParam = param.Invert;
            RenderTexture bg          = CloneBg(targetRt);

            Mat.SetTexture("_MainTex", bg);
            Mat.SetInt("_InvertRed", invertParam.InvertRed ? 1 : 0);
            Mat.SetInt("_InvertGreen", invertParam.InvertGreen ? 1 : 0);
            Mat.SetInt("_InvertBlue", invertParam.InvertBlue ? 1 : 0);
            Mat.SetInt("_InvertAlpha", invertParam.InvertAlpha ? 1 : 0);
            GCommon.DrawQuad(targetRt, GCommon.FullRectUvPoints, Mat, 0);
        }
コード例 #4
0
        public void Apply(RenderTexture targetRt, GTextureFilterParams param)
        {
            GWarpParams   warpParam = param.Warp;
            RenderTexture bg        = CloneBg(targetRt);

            Mat.SetTexture("_MainTex", bg);
            Mat.SetTexture("_Mask", warpParam.UseBackgroundAsMask ? (Texture)bg : (Texture)warpParam.Mask);
            Mat.SetFloat("_Strength", warpParam.Strength);
            GCommon.SetMaterialKeywordActive(Mat, "MASK_IS_NORMAL", warpParam.MaskIsNormalMap);

            GCommon.DrawQuad(targetRt, GCommon.FullRectUvPoints, Mat, 0);
        }
コード例 #5
0
        public void Apply(RenderTexture targetRt, GTextureFilterParams param)
        {
            GHydraulicErosionParams erosionParam = param.HydraulicErosion;
            RenderTexture           writeRt      = null; //buffer to write to
            RenderTexture           readRt       = null; //buffer to read from
            RenderTexture           tmp          = null; //temp buffer for swapping

            CloneBg(targetRt, out writeRt, out readRt);

            //init height field & water level
            Mat.SetTexture("_HeightMap", targetRt);
            GCommon.DrawQuad(writeRt, GCommon.FullRectUvPoints, Mat, 0);
            GCommon.DrawQuad(readRt, GCommon.FullRectUvPoints, Mat, 0);

            //simulate
            for (int i = 0; i < erosionParam.Iteration; ++i)
            {
                Mat.SetTexture("_HeightMap", readRt);
                Mat.SetVector("_Dimension", erosionParam.Dimension);
                Mat.SetFloat("_Rain", erosionParam.Rain);
                Mat.SetFloat("_Transportation", erosionParam.Transportation);
                Mat.SetFloat("_MinAngle", erosionParam.AngleMin);
                Mat.SetFloat("_Evaporation", erosionParam.Evaporation);
                Mat.SetTexture("_WaterSourceMap", erosionParam.WaterSourceMap);
                Mat.SetTexture("_HardnessMap", erosionParam.HardnessMap);
                //Mat.SetFloat("_Seed", Random.value);
                GCommon.DrawQuad(writeRt, GCommon.FullRectUvPoints, Mat, 1);

                //swap buffer
                tmp     = readRt;
                readRt  = writeRt;
                writeRt = tmp;
            }

            //copy result
            GCommon.CopyToRT(writeRt, targetRt);
        }
コード例 #6
0
        public void Apply(RenderTexture targetRt, GTextureFilterParams param)
        {
            GCurveParams  curveParam     = param.Curve;
            RenderTexture bg             = CloneBg(targetRt);
            Texture2D     masterCurveTex = GCommon.CreateTextureFromCurve(curveParam.MasterCurve, 1024, 1);
            Texture2D     redCurveTex    = GCommon.CreateTextureFromCurve(curveParam.RedCurve, 1024, 1);
            Texture2D     greenCurveTex  = GCommon.CreateTextureFromCurve(curveParam.GreenCurve, 1024, 1);
            Texture2D     blueCurveTex   = GCommon.CreateTextureFromCurve(curveParam.BlueCurve, 1024, 1);
            Texture2D     alphaCurveTex  = GCommon.CreateTextureFromCurve(curveParam.AlphaCurve, 1024, 1);

            Mat.SetTexture("_MainTex", bg);
            Mat.SetTexture("_MasterCurve", masterCurveTex);
            Mat.SetTexture("_RedCurve", redCurveTex);
            Mat.SetTexture("_GreenCurve", greenCurveTex);
            Mat.SetTexture("_BlueCurve", blueCurveTex);
            Mat.SetTexture("_AlphaCurve", alphaCurveTex);
            GCommon.DrawQuad(targetRt, GCommon.FullRectUvPoints, Mat, 0);

            GUtilities.DestroyObject(masterCurveTex);
            GUtilities.DestroyObject(redCurveTex);
            GUtilities.DestroyObject(greenCurveTex);
            GUtilities.DestroyObject(blueCurveTex);
            GUtilities.DestroyObject(alphaCurveTex);
        }
コード例 #7
0
 public GTextureFilterLayer(GTextureFilterType t)
 {
     enabled = true;
     type    = t;
     param   = GTextureFilterParams.Default;
 }
コード例 #8
0
        private void DrawFilterLayer(GTextureFilterLayer layer, int index)
        {
            string label = string.Format("{0} {1}", ObjectNames.NicifyVariableName(layer.Type.ToString()), layer.Enabled ? "" : "[-]");
            string id    = "texture-creator-filter" + index;

            string prefKey  = GEditorCommon.GetProjectRelatedEditorPrefsKey("foldout", id);
            bool   expanded = EditorPrefs.GetBool(prefKey, true);

            int indent = EditorGUI.indentLevel;

            EditorGUI.indentLevel = 0;

            Rect headerRect = EditorGUILayout.BeginHorizontal();

            expanded = EditorGUILayout.Foldout(expanded, label);
            EditorPrefs.SetBool(prefKey, expanded);
            GUILayout.FlexibleSpace();
            Rect deleteButtonRect = EditorGUILayout.GetControlRect(GUILayout.Width(15));

            if (headerRect.Contains(Event.current.mousePosition))
            {
                if (GUI.Button(deleteButtonRect, "X", EditorStyles.label))
                {
                    ConfirmAndRemoveFilterAt(index);
                }
            }
            EditorGUILayout.EndHorizontal();

            if (expanded)
            {
                EditorGUI.indentLevel += 1;
                layer.Enabled          = EditorGUILayout.Toggle("Enable", layer.Enabled);
                GTextureFilterParams param = layer.Param;
                if (layer.Type == GTextureFilterType.Blur)
                {
                    GBlurParams blur = param.Blur;
                    blur.Radius = EditorGUILayout.DelayedIntField("Radius", blur.Radius);
                    EditorGUILayout.LabelField("This filter is expensive!", GEditorCommon.WordWrapItalicLabel);
                    param.Blur = blur;
                }
                else if (layer.Type == GTextureFilterType.Curve)
                {
                    GCurveParams curve = param.Curve;
                    curve.MasterCurve = EditorGUILayout.CurveField("Master", curve.MasterCurve, Color.white, GCommon.UnitRect);
                    curve.RedCurve    = EditorGUILayout.CurveField("Red", curve.RedCurve, Color.red, GCommon.UnitRect);
                    curve.GreenCurve  = EditorGUILayout.CurveField("Green", curve.GreenCurve, Color.green, GCommon.UnitRect);
                    curve.BlueCurve   = EditorGUILayout.CurveField("Blue", curve.BlueCurve, Color.blue, GCommon.UnitRect);
                    curve.AlphaCurve  = EditorGUILayout.CurveField("Alpha", curve.AlphaCurve, Color.gray, GCommon.UnitRect);
                    param.Curve       = curve;
                }
                else if (layer.Type == GTextureFilterType.Invert)
                {
                    GInvertParams invert = param.Invert;
                    invert.InvertRed   = EditorGUILayout.Toggle("Red", invert.InvertRed);
                    invert.InvertGreen = EditorGUILayout.Toggle("Green", invert.InvertGreen);
                    invert.InvertBlue  = EditorGUILayout.Toggle("Blue", invert.InvertBlue);
                    invert.InvertAlpha = EditorGUILayout.Toggle("Alpha", invert.InvertAlpha);
                    param.Invert       = invert;
                }
                else if (layer.Type == GTextureFilterType.Step)
                {
                    GStepParams step = param.Step;
                    step.Count = EditorGUILayout.IntSlider("Count", step.Count, 1, 256);
                    param.Step = step;
                }
                else if (layer.Type == GTextureFilterType.Warp)
                {
                    GWarpParams warp = param.Warp;
                    warp.MaskIsNormalMap = EditorGUILayout.Toggle("Is Normal Map", warp.MaskIsNormalMap);
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PrefixLabel("Mask");
                    using (EditorGUI.IndentLevelScope level = new EditorGUI.IndentLevelScope(-1))
                    {
                        warp.Mask = EditorGUILayout.ObjectField(warp.Mask, typeof(Texture2D), false) as Texture2D;
                    }
                    EditorGUILayout.EndHorizontal();
                    warp.Strength = EditorGUILayout.FloatField("Strength", warp.Strength);
                    param.Warp    = warp;
                }


                /*
                 * else if (layer.Type == GTextureFilterType.HydraulicErosion)
                 * {
                 *  GHydraulicErosionParams erosion = param.HydraulicErosion;
                 *
                 *  erosion.Iteration = EditorGUILayout.IntField("Iteration", erosion.Iteration);
                 *
                 *  Vector3 dim = erosion.Dimension;
                 *  dim = GEditorCommon.InlineVector3Field("Dimension", dim);
                 *  dim.Set(Mathf.Max(1, dim.x), Mathf.Max(1, dim.y), Mathf.Max(1, dim.z));
                 *  erosion.Dimension = dim;
                 *
                 *  erosion.Rain = EditorGUILayout.Slider("Rain", erosion.Rain, 0f, 1f);
                 *  erosion.Transportation = EditorGUILayout.Slider("Transportation", erosion.Transportation, 0f, 1f);
                 *  erosion.AngleMin = EditorGUILayout.Slider("Min Angle", erosion.AngleMin, 1f, 45f);
                 *  erosion.Evaporation = EditorGUILayout.Slider("Evaporation", erosion.Evaporation, 0f, 1f);
                 *
                 *  EditorGUILayout.BeginHorizontal();
                 *  EditorGUILayout.PrefixLabel("Water Source");
                 *  using (EditorGUI.IndentLevelScope level = new EditorGUI.IndentLevelScope(-1))
                 *  {
                 *      erosion.WaterSourceMap = EditorGUILayout.ObjectField(erosion.WaterSourceMap, typeof(Texture2D), false) as Texture2D;
                 *  }
                 *  EditorGUILayout.EndHorizontal();
                 *
                 *  EditorGUILayout.BeginHorizontal();
                 *  EditorGUILayout.PrefixLabel("Hardness");
                 *  using (EditorGUI.IndentLevelScope level = new EditorGUI.IndentLevelScope(-1))
                 *  {
                 *      erosion.HardnessMap = EditorGUILayout.ObjectField(erosion.HardnessMap, typeof(Texture2D), false) as Texture2D;
                 *  }
                 *  EditorGUILayout.EndHorizontal();
                 *
                 *  param.HydraulicErosion = erosion;
                 * }
                 */

                layer.Param            = param;
                EditorGUI.indentLevel -= 1;
            }

            EditorGUI.indentLevel = indent;
        }