private void BlendPass2D(Texture2D tex, INoisCreater creater, Color mask, int width, int height, Vector3 offset, int octave, float a, float f, bool isSeamless)
 {
     if (creater != null)
     {
         Texture2D targetTex = null;
         if (!isSeamless)
         {
             targetTex = NoiseGenerate.ShowNoise2D(width, height, offset, octave, f, a, creater);
         }
         else
         {
             targetTex = NoiseGenerate.ShowNoise2DSeamless(width, height, offset, octave, f, a, creater);
         }
         BlendPassColorTexture2D(tex, targetTex, mask);
     }
 }
 private void BlendPass3D(Texture3D tex, INoisCreater creater, Color mask, int width, int height, int depth, Vector3 offset, int octave, float a, float f, bool isSeamless)
 {
     if (creater != null)
     {
         Texture3D targetTex = null;
         if (!isSeamless)
         {
             targetTex = NoiseGenerate.ShowNoise3D(width, height, depth, offset, octave, f, a, creater);
             //BlendPassColorTexture3D(tex, targetTex, mask);
         }
         else
         {
             targetTex = NoiseGenerate.ShowNoise3DSeamless(width, height, depth, offset, octave, f, a, creater);
             //NoiseGenerate.ShowNoise3DSeamlessAsync(width, height, depth, offset, octave, f, a, creater, (t) => {
             //    BlendPassColorTexture3D(tex, t, mask);
             //    seamlessAsyncTex3D = true;
             //});
         }
         BlendPassColorTexture3D(tex, targetTex, mask);
     }
 }
        protected virtual void OnGUI()
        {
            GUILayout.BeginVertical();

            id = EditorGUILayout.TextField("纹理ID", id);

            width   = EditorGUILayout.IntField("宽度", width);
            height  = EditorGUILayout.IntField("高度", height);
            depth   = EditorGUILayout.IntField("厚度", depth);
            offsets = EditorGUILayout.Vector3Field("偏移向量", offsets);

            EditorGUILayout.Space(10);
            EditorGUILayout.LabelField("无缝纹理生成采用升维采样法,运行较耗时");
            isSeamless = EditorGUILayout.Toggle("无缝纹理", isSeamless);
            EditorGUILayout.Space(10);

            a      = EditorGUILayout.Slider("a", a, 0, 3);
            f      = EditorGUILayout.Slider("f", f, 0, 2);
            octave = EditorGUILayout.IntSlider("octave", octave, 1, 10);

            if (GUILayout.Button("生成 2D " + NoiseName))
            {
                if (!isSeamless)
                {
                    noise2D = NoiseGenerate.ShowNoise2D(width, height, offsets, octave, f, a, Creater);
                }
                else
                {
                    noise2D = NoiseGenerate.ShowNoise2DSeamless(width, height, offsets, octave, f, a, Creater);
                }
                tex2dPath = "Assets/Temp/" + id + "_" + NoiseName + "_Tex2D.asset";
                AssetDatabase.CreateAsset(noise2D, tex2dPath);
                AssetDatabase.SaveAssets();
            }

            if (noise2D != null)
            {
                GUI.Label(new Rect(0, 300, 800, 20), "2D纹理已生成, 路径为:" + tex2dPath);
                GUI.Label(new Rect(0, 325, 800, 20), "2D纹理预览图:");
                GUI.DrawTexture(new Rect(0, 350, noise2D.width, noise2D.height), noise2D);;
            }


            //worleyNoise2D = (Texture2D)EditorGUILayout.ObjectField("Worely Noise 2D", worleyNoise2D, typeof(Texture), false);

            if (GUILayout.Button("生成 3D " + NoiseName))
            {
                if (!isSeamless)
                {
                    noise3D = NoiseGenerate.ShowNoise3D(width, height, depth, offsets, octave, f, a, Creater);
                }
                else
                {
                    noise3D = NoiseGenerate.ShowNoise3DSeamless(width, height, depth, offsets, octave, f, a, Creater);
                }
                tex3dPath = "Assets/Temp/" + id + "_" + NoiseName + "_Tex3D.asset";
                AssetDatabase.CreateAsset(noise3D, tex3dPath);
                AssetDatabase.SaveAssets();
            }
            if (noise3D != null)
            {
                float yoffset = noise2D == null ? 0 : noise2D.height;
                GUI.Label(new Rect(0, 400 + yoffset, 800, 20), "3D纹理已生成, 路径为:" + tex3dPath);
                GUI.Label(new Rect(0, 425 + yoffset, 800, 20), "3D纹理预览图(3D纹理的预览图会有问题,不代表真实效果,可以2D纹理效果为参考)");
                GUI.DrawTexture(new Rect(0, 450 + yoffset, noise3D.width, noise3D.height), noise3D);
            }

            GUILayout.EndVertical();
        }