Ejemplo n.º 1
0
        public static Material CreateDecalMaterial(string selectedMaterialPath, Material selectedMaterial, float decalBlend)
        {
            Material decalMaterial = new Material(Shader.Find("Standard"));

#if UNITY_2018_3 || UNITY_2018_4 || UNITY_2019
            decalMaterial.shader = Shader.Find("HDRP/Decal");
#else
            decalMaterial.shader = Shader.Find("HDRenderPipeline/Decal");
#endif
            string decalMaterialPath = selectedMaterialPath.Replace(".mat", "_Decal.mat");
            AssetDatabase.CreateAsset(decalMaterial, decalMaterialPath);
            AssetDatabase.Refresh();
            decalMaterial.enableInstancing = true;

            //Enable material keywords
            decalMaterial.EnableKeyword("_ALPHATEST_ON");
            decalMaterial.EnableKeyword("_ALBEDOCONTRIBUTION");
            decalMaterial.EnableKeyword("_COLORMAP");
            decalMaterial.EnableKeyword("_DISPLACEMENT_LOCK_TILING_SCALE");
            decalMaterial.EnableKeyword("_DOUBLESIDED_ON");
            decalMaterial.EnableKeyword("_MASKMAP");
            decalMaterial.EnableKeyword("_METALLICSPECGLOSSMAP");
            decalMaterial.EnableKeyword("_NORMALMAP");
            decalMaterial.EnableKeyword("_NORMALMAP_TANGENT_SPACE");
            decalMaterial.EnableKeyword("_PIXEL_DISPLACEMENT");
            decalMaterial.EnableKeyword("_PIXEL_DISPLACEMENT_LOCK_OBJECT_SCALE");
            //Set material textures
            decalMaterial.SetTexture("_BaseColorMap", selectedMaterial.mainTexture);
            decalMaterial.SetTexture("_MaskMap", selectedMaterial.GetTexture("_MaskMap"));
            decalMaterial.SetTexture("_NormalMap", selectedMaterial.GetTexture("_NormalMap"));
            //Set material keywords
            decalMaterial.SetFloat("_AlbedoMode", 1f);
            if (!MegascansUtilities.isLegacy())
            {
                decalMaterial.SetFloat("_MaskBlendSrc", 0f);
            }
            decalMaterial.SetFloat("_DecalBlend", decalBlend);

            return(decalMaterial);
        }
Ejemplo n.º 2
0
        public static void SetupTerrain()
        {
            string materialName = EditorPrefs.GetString("QuixelDefaultMaterialName", "Terrain Material");
            string materialPath = EditorPrefs.GetString("QuixelDefaultMaterialPath", "Quixel/");
            string tilingNumber = EditorPrefs.GetString("QuixelDefaultTiling", "10");

            string[] versionParts = Application.unityVersion.Split('.');
            int      majorVersion = int.Parse(versionParts[0]);

            if (majorVersion < 2018)
            {
                Debug.Log("This Unity version doesn't support this feature.");
                return;
            }
            else
            {
                float tiling;

                try
                {
                    tiling = float.Parse(tilingNumber);
                }
                catch (Exception ex)
                {
                    Debug.Log("Exception: " + ex.ToString());
                    tiling = 1f;
                }
                maxMaterialAllowed = MegascansUtilities.isLegacy() ? 4 : 8;

                List <Material> sourceMaterials = new List <Material>();
                Terrain         terrain         = null;

                try
                {
                    //Get currently highlighted materials in the project window.
                    sourceMaterials = GetSelectedMaterialsInProjectHierarchy();
                    //Verify two or more materails were seleted.
                    if (sourceMaterials.Count < 2 && MegascansUtilities.isLegacy())
                    {
                        Debug.Log("Not enough materials to create a blend material. Please select more materials.");
                        return;
                    }

                    //Get selected terrain in the scene view.
                    terrain = getCurrentlySelectedTerrain();
                    //Verify a terrain is selected.
                    if (terrain == null)
                    {
                        Debug.Log("No terrain selected. Please select a terrain.");
                        //return;
                    }
                }
                catch (Exception ex)
                {
                    Debug.Log("Error getting select terrain/materials.");
                    Debug.Log(ex);
                }

                if (MegascansUtilities.isLegacy())
                {
                    try
                    {
                        //Set up the material here.
                        Material terrainMaterial = SetupTerrainMaterialDeprecated(sourceMaterials, materialPath, materialName, tiling);
                        //Get terrain data for splat maps.
                        TerrainData terrainData = terrain.terrainData;
                        //Get the textures from source materials to add to the painting.
                        if (terrainData)
                        {
#pragma warning disable
                            terrainData.splatPrototypes = getMaterialTexturesForSplatMap(sourceMaterials, tiling);
                        }
                        terrain.materialType     = Terrain.MaterialType.Custom;
                        terrain.materialTemplate = terrainMaterial;
                        EnableSplatmaps(terrainData);
                        Texture2D alphaMap = terrainData.alphamapTextures[0];
                        terrainMaterial.SetTexture("_LayerMaskMap", alphaMap);
                        Debug.Log("Terrain blend material successfully created!");
                    }
                    catch (Exception ex)
                    {
                        Debug.Log("Error Generating terrain blend material!");
                        Debug.Log(ex);
                    }
                }
                else
                {
#if UNITY_2018_3 || UNITY_2019
                    //Create the material here.
                    //Material terrainMaterial = SetupTerrainMaterial(materialPath, materialName);
                    List <TerrainLayer> terrainLayers = new List <TerrainLayer>();

                    foreach (TerrainLayer tl in terrain.terrainData.terrainLayers)
                    {
                        terrainLayers.Add(tl);
                    }

                    foreach (Material mat in sourceMaterials)
                    {
                        if (terrainLayers.Count <= 8)
                        {
                            terrainLayers.Add(createTerrainLayer(mat, tiling));
                        }
                    }

                    if (terrainLayers.Count > 0)
                    {
                        terrain.terrainData.terrainLayers = terrainLayers.ToArray();
                    }
#endif
                }
            }
        }
Ejemplo n.º 3
0
        void OnGUI()
        {
            GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), MSBackground, ScaleMode.StretchToFill);

            GUILayout.BeginHorizontal();

            GUILayout.Box("Bridge Plugin v" + version, MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y));

            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();

            if (GUILayout.Button(MSLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x)))
            {
                Application.OpenURL("https://quixel.com/megascans/library/latest");
            }

            if (GUILayout.Button(BridgeLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x)))
            {
                Application.OpenURL("https://quixel.com/bridge");
            }

            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();

            tab = GUILayout.Toolbar(tab, new string[] { "Settings", "Utilities" }, MSTabsStyle, GUILayout.Height(textSize.y));

            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            Handles.color = Color.white;
            Handles.DrawLine(new Vector3(0f, lineYLoc), new Vector3(maxSize.x, lineYLoc));
            GUILayout.EndHorizontal();

            if (tab == 0)
            {
                GUILayout.BeginHorizontal();

                GUILayout.Label("Workflow", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                texPack = EditorGUILayout.Popup(texPack, texPacking, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Label("Displacement", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                dispType = EditorGUILayout.Popup(dispType, dispTypes, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Shader Type", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                shaderType = EditorGUILayout.Popup(shaderType, shaderTypes, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Import Resolution", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                importResolution = EditorGUILayout.Popup(importResolution, importResolutions, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("LOD Fade Mode", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                lodFadeMode = EditorGUILayout.Popup(lodFadeMode, lodFadeModeSettings, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Import Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                path = EditorGUILayout.TextField(path, MSField, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                setupCollision = EditorGUI.Toggle(collisionLoc, setupCollision, MSCheckBox);
                GUILayout.Box("Setup Collision", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                applyToSelection = EditorGUI.Toggle(applyToSelectionLoc, applyToSelection, MSCheckBox);
                GUILayout.Box("Apply To Selection (2D Surfaces)", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                addAssetToScene = EditorGUI.Toggle(addAssetToSceneLoc, addAssetToScene, MSCheckBox);
                GUILayout.Box("Add Asset to the Scene", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                setupPrefabs = EditorGUI.Toggle(setupPrefabsLoc, setupPrefabs, MSCheckBox);
                GUILayout.Box("Create Prefabs", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                importLODs = EditorGUI.Toggle(importLODsLoc, importLODs, MSCheckBox);
                GUILayout.Box("Import Lower LODs", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                setupLOD = EditorGUI.Toggle(setupLODLoc, setupLOD, MSCheckBox);
                GUILayout.Box("Create LOD Groups", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                importAllTextures = EditorGUI.Toggle(importAllTexturesLoc, importAllTextures, MSCheckBox);
                GUILayout.Box("Import All Textures", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                connection = EditorGUI.Toggle(connectionLoc, connection, MSCheckBox);
                GUILayout.Box("Enable Plugin", MSNormalTextStyle, GUILayout.Height(textSize.y));
                if (GUILayout.Button("Help...", MSHelpStyle, GUILayout.Width(textSize.x)))
                {
                    Application.OpenURL("https://docs.google.com/document/d/1NUAh2vQ9UgK-c1J-yhVnqkTgqZxMVm77rRK-X1ukWw0/");
                }

                GUILayout.EndHorizontal();
            }
            else
            {
#if (UNITY_2018 || UNITY_2019 || UNITY_2020)
                GUILayout.BeginHorizontal();

                GUILayout.Box("Terrain Tools (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y));

                GUILayout.EndHorizontal();

                if (MegascansUtilities.isLegacy())
                {
                    GUILayout.BeginHorizontal();

                    GUILayout.Box("Material Name", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                    terrainMaterialName = EditorGUILayout.TextField(terrainMaterialName, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x));

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();

                    GUILayout.Box("Material Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                    terrainMaterialPath = EditorGUILayout.TextField(terrainMaterialPath, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x));

                    GUILayout.EndHorizontal();
                }

                GUILayout.BeginHorizontal();

                GUILayout.Box("Texture Tiling", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                tiling = EditorGUILayout.TextField(tiling, MSField, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                if (GUILayout.Button("Setup Paint Layers", MSStrechedWidthStyle, GUILayout.Height(textSize.y)))
                {
                    MegascansTerrainTools.SetupTerrain();
                }

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                string warningMsg = "Warning: This feature works properly with the metallic workflow only.";
                if (MegascansUtilities.isLegacy())
                {
                    warningMsg += "This feature requires HD Render Pipeline.";
                }

                GUI.skin.label.wordWrap = true;
                GUILayout.Label(warningMsg, MSWarningTextStyle, GUILayout.Height(textSize.y));

                GUILayout.EndHorizontal();
#endif

#if (UNITY_2018_3 || UNITY_2018_4 || UNITY_2019 || UNITY_2020)
                GUILayout.BeginHorizontal();

                GUILayout.Box("Material Tools (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                if (GUILayout.Button("Create Terrain Paint Layer", MSStrechedWidthStyle, GUILayout.Height(textSize.y)))
                {
                    MegascansTerrainTools.CreateTerrainLayerFromMat();
                }

                GUILayout.EndHorizontal();
#endif

#if HDRP && (UNITY_2018_2 || UNITY_2018_3 || UNITY_2018_4 || UNITY_2019 || UNITY_2020)
                GUILayout.BeginHorizontal();

                GUILayout.Box("Decal Setup (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Global Opacity (%)", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                decalBlend = EditorGUILayout.TextField(decalBlend, MSField, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                if (!MegascansUtilities.isLegacy())
                {
                    GUILayout.BeginHorizontal();

                    GUILayout.Box("Scale", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                    decalSize = EditorGUILayout.TextField(decalSize, MSField, GUILayout.Height(fieldSize.y));

                    GUILayout.EndHorizontal();
                }

                GUILayout.BeginHorizontal();

                if (GUILayout.Button("Create Decal Projector", MSStrechedWidthStyle, GUILayout.Height(textSize.y)))
                {
                    MegascansDecalTools.SetupDecalProjector();
                }

                GUILayout.EndHorizontal();
#endif
            }

            if (!MSLogo)
            {
                InitStyle();
                Repaint();
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Creates materials needed for the asset.
        /// </summary>
        /// <returns></returns>
        Material CreateMaterial()
        {
            MegascansUtilities.UpdateProgressBar(1.0f, "Processing Asset " + assetName, "Creating material...");
            if ((shaderType == 0 || shaderType == 1) && isAlembic)
            {
                Debug.Log("Alembic files are not supported in LWRP/HDRP. Please change your export file format in Bridge or change your SRP in Unity.");
                return(null);
            }

            try {
                string   rp  = matPath + ".mat";
                Material mat = (Material)AssetDatabase.LoadAssetAtPath(rp, typeof(Material));
                if (!mat)
                {
                    mat = new Material(Shader.Find("Standard"));
                    AssetDatabase.CreateAsset(mat, rp);
                    AssetDatabase.Refresh();
                    if (shaderType < 1)
                    {
                        mat.shader = Shader.Find("HDRenderPipeline/Lit");
#if UNITY_2018_3 || UNITY_2019
                        mat.shader = Shader.Find("HDRP/Lit");
#endif
                        mat.SetInt("_DisplacementMode", dispType);
                    }
                    if (shaderType > 0)
                    {
                        if (MegascansUtilities.isLegacy())
                        {
                            mat.shader = Shader.Find("LightweightPipeline/Standard (Physically Based)");
                        }
                        else
                        {
                            mat.shader = Shader.Find("Lightweight Render Pipeline/Lit");
                        }
                    }
                    if (shaderType > 1)
                    {
                        if (isAlembic)
                        {
                            mat.shader = Shader.Find("Alembic/Standard");
                            if (texPack > 0)
                            {
                                mat.shader = Shader.Find("Alembic/Standard (Specular setup)");
                            }
                        }
                        else
                        {
                            mat.shader = Shader.Find("Standard");
                            if (texPack > 0)
                            {
                                mat.shader = Shader.Find("Standard (Specular setup)");
                            }
                        }
                    }
                }
                return(mat);
            } catch (Exception ex) {
                Debug.Log("Exception: " + ex.ToString());
                MegascansUtilities.HideProgressBar();
                return(null);
            }
        }
Ejemplo n.º 5
0
        void OnGUI()
        {
            GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), MSBackground, ScaleMode.StretchToFill);

            GUILayout.BeginHorizontal();

            if (GUILayout.Button(MSLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x)))
            {
                Application.OpenURL("https://quixel.com/megascans/library/latest");
            }

            GUILayout.Button(BridgeLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x));

            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();

            tab = GUILayout.Toolbar(tab, new string[] { "Importer", "Utilities" }, MSTabsStyle, GUILayout.Height(tabSize.y), GUILayout.Width(tabSize.x));

            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            Handles.color = Color.white;
            Handles.DrawLine(new Vector3(0, 105), new Vector3(maxSize.x, 105));
            GUILayout.EndHorizontal();

            if (tab == 0)
            {
                GUILayout.BeginHorizontal();

                GUILayout.Label("Workflow", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                texPack = EditorGUILayout.Popup(texPack, texPacking, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Label("Displacement", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                dispType = EditorGUILayout.Popup(dispType, dispTypes, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Shader Type", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                shaderType = EditorGUILayout.Popup(shaderType, shaderTypes, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Import Resolution", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                importResolution = EditorGUILayout.Popup(importResolution, importResolutions, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("LOD Fade Mode", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                lodFadeMode = EditorGUILayout.Popup(lodFadeMode, lodFadeModeSettings, MSPopup, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Import Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                path = EditorGUILayout.TextField(path, MSField, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                setupCollision = EditorGUI.Toggle(collisionLoc, setupCollision, MSCheckBox);
                GUILayout.Box("Setup Collision", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                terrainNormal = EditorGUI.Toggle(terrainNormalLoc, terrainNormal, MSCheckBox);
                GUILayout.Box("Generate Terrain Normals", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                applyToSelection = EditorGUI.Toggle(applyToSelectionLoc, applyToSelection, MSCheckBox);
                GUILayout.Box("Apply To Selection", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                addAssetToScene = EditorGUI.Toggle(addAssetToSceneLoc, addAssetToScene, MSCheckBox);
                GUILayout.Box("Add Asset to the Scene", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                connection = EditorGUI.Toggle(connectionLoc, connection, MSCheckBox);
                GUILayout.Box("Enable Live Link", MSNormalTextStyle, GUILayout.Height(textSize.y));
                if (GUILayout.Button("Help...", MSHelpStyle, GUILayout.Width(textSize.x)))
                {
                    Application.OpenURL("https://docs.google.com/document/d/17FmQzTxo63NIvGkRcfVfLtp73GSfBBvZmlq3v6C-9nY/edit?usp=sharing");
                }

                GUILayout.EndHorizontal();
            }
            else
            {
                GUILayout.BeginHorizontal();

                GUILayout.Box("Terrain Tools (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y));

                GUILayout.EndHorizontal();

                if (MegascansUtilities.isLegacy())
                {
                    GUILayout.BeginHorizontal();

                    GUILayout.Box("Material Name", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                    terrainMaterialName = EditorGUILayout.TextField(terrainMaterialName, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x));

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();

                    GUILayout.Box("Material Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                    terrainMaterialPath = EditorGUILayout.TextField(terrainMaterialPath, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x));

                    GUILayout.EndHorizontal();
                }

                GUILayout.BeginHorizontal();

                GUILayout.Box("Texture Tiling", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                tiling = EditorGUILayout.TextField(tiling, MSField, GUILayout.Height(fieldSize.y));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                if (GUILayout.Button("Setup Paint Layers", MSStrechedWidthStyle, GUILayout.Height(textSize.y)))
                {
                    MegascansTerrainTools.SetupTerrain();
                }

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUI.skin.label.wordWrap = true;
                GUILayout.Label("Warning: This feature works properly with the metallic workflow only.", MSWarningTextStyle, GUILayout.Height(textSize.y));

                GUILayout.EndHorizontal();

                if (MegascansUtilities.isLegacy())
                {
                    GUILayout.BeginHorizontal();

                    GUILayout.Box("Warning: This feature requires HD Render Pipeline.", MSWarningTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));

                    GUILayout.EndHorizontal();
                }

                GUILayout.BeginHorizontal();

                Handles.color = Color.white;
                Handles.DrawLine(new Vector3(0, 105), new Vector3(310, 105));

                GUILayout.EndHorizontal();

#if HDRP && (UNITY_2018_2 || UNITY_2018_3 || UNITY_2019)
                GUILayout.BeginHorizontal();

                GUILayout.Box("Decal Setup (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y), GUILayout.Width(textHeadingSize.x));

                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();

                GUILayout.Box("Global Opacity (%)", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                decalBlend = EditorGUILayout.TextField(decalBlend, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x));

                GUILayout.EndHorizontal();

                if (!MegascansUtilities.isLegacy())
                {
                    GUILayout.BeginHorizontal();

                    GUILayout.Box("Scale", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x));
                    decalSize = EditorGUILayout.TextField(decalSize, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x));

                    GUILayout.EndHorizontal();
                }

                GUILayout.BeginHorizontal();

                if (GUILayout.Button("Create Decal Projector", MSStrechedWidthStyle, GUILayout.Height(textSize.y), GUILayout.Width(size.x)))
                {
                    MegascansDecalTools.SetupDecalProjector();
                }

                GUILayout.EndHorizontal();
#endif
            }

            if (!MSLogo)
            {
                InitStyle();
                Repaint();
            }
        }