public static CustomRenderTexture GetPreViewNoise3DRT(Noise3DType type, int noiseID, bool isChange)
    {
        if (crtList[noiseID] == null)
        {
            CustomRenderTexture rt = GenerateNoise3DRT(type, 5, 128, 128, 64);
            crtList[noiseID]    = rt;
            crtMatList[noiseID] = rt.material;
            switch (type)
            {
            case Noise3DType.PerilinNoise3D:
                crtList[noiseID].material.SetFloatArray("_PERM", permutation);
                crtList[noiseID].material.SetFloatArray("_G3D", g3Darray);
                break;

            case Noise3DType.PerilinNoise3D_ZLoop:
                crtList[noiseID].material.SetFloatArray("_PERM", permutation);
                crtList[noiseID].material.SetFloatArray("_G4D", g4Darray);
                break;

            case Noise3DType.PerilinNoise3D_Tile:
                crtList[noiseID].material.SetFloatArray("_PERM", permutation);
                crtList[noiseID].material.SetFloatArray("_G6D_0", g6Darray0);
                crtList[noiseID].material.SetFloatArray("_G6D_1", g6Darray1);
                break;
            }
        }
        else if (isChange)
        {
            crtList[noiseID].material.shader = Shader.Find(noise3DDict[type]);
            switch (type)
            {
            case Noise3DType.PerilinNoise3D:
                crtList[noiseID].material.SetFloatArray("_PERM", permutation);
                crtList[noiseID].material.SetFloatArray("_G3D", g3Darray);
                break;

            case Noise3DType.PerilinNoise3D_ZLoop:
                crtList[noiseID].material.SetFloatArray("_PERM", permutation);
                crtList[noiseID].material.SetFloatArray("_G4D", g4Darray);
                break;

            case Noise3DType.PerilinNoise3D_Tile:
                crtList[noiseID].material.SetFloatArray("_PERM", permutation);
                crtList[noiseID].material.SetFloatArray("_G6D_0", g6Darray0);
                crtList[noiseID].material.SetFloatArray("_G6D_1", g6Darray1);
                break;
            }
        }
        return(crtList[noiseID]);
    }
    public static CustomRenderTexture GenerateNoise3DRT(Noise3DType type, float scale, int width, int height, int depth = 128)
    {
        CustomRenderTexture noiseRT = new CustomRenderTexture(width, height);

        noiseRT.format               = RenderTextureFormat.ARGB32;
        noiseRT.wrapMode             = TextureWrapMode.Repeat;
        noiseRT.filterMode           = FilterMode.Bilinear;
        noiseRT.updateMode           = CustomRenderTextureUpdateMode.Realtime;
        noiseRT.initializationMode   = CustomRenderTextureUpdateMode.Realtime;
        noiseRT.initializationSource = CustomRenderTextureInitializationSource.Material;
        noiseRT.enableRandomWrite    = true;

        noiseRT.dimension              = UnityEngine.Rendering.TextureDimension.Tex3D;
        noiseRT.volumeDepth            = depth;
        noiseRT.material               = new Material(Shader.Find(noise3DDict[type]));
        noiseRT.initializationMaterial = noiseRT.material;
        noiseRT.shaderPass             = 0;
        noiseRT.material.SetFloat("_Scale", scale);

        noiseRT.Initialize();
        noiseRT.Update();
        noiseRT.Create();
        return(noiseRT);
    }