private static void LoadMaterials()
    {
        switch (currentMaterialsPack)
        {
        case MaterialsPack.PBR:
            currentMaterialsPack = MaterialsPack.PBR;
            shadowCasting        = true;
            break;

        case MaterialsPack.Simplified:
            currentMaterialsPack = MaterialsPack.Simplified;
            shadowCasting        = false;
            break;

        default:
            currentMaterialsPack = MaterialsPack.Standart;
            shadowCasting        = false;
            break;
        }
        var mats = LoadMaterialPack(currentMaterialsPack);

        glassMaterial_disabled = mats[GLASS_OFF_MAT_INDEX];
        basic_material         = mats[BASIC_MAT_INDEX];
        glassMaterial          = mats[GLASS_MAT_INDEX];
        metal_material         = mats[METAL_MAT_INDEX];
        green_material         = mats[GREEN_MAT_INDEX];
    }
 public static void ReplaceMaterials(GameObject g, MaterialsPack mpack)
 {
     Renderer[] rrs = g.GetComponentsInChildren <Renderer>();
     if (rrs.Length > 0)
     {
         ReplaceMaterials(rrs, mpack);
     }
 }
    private static void DefineMaterialPack()
    {
        qualityLevel = QualitySettings.GetQualityLevel();
        switch (qualityLevel)
        {
        case 0:
            currentMaterialsPack = MaterialsPack.Simplified;
            break;

        case 2:
            currentMaterialsPack = MaterialsPack.PBR;
            break;

        default: currentMaterialsPack = MaterialsPack.Standart; break;
        }
    }
    private static Material[] LoadMaterialPack(MaterialsPack mptype)
    {
        var mats = new Material[5];

        switch (mptype)
        {
        case MaterialsPack.PBR:
        {
            mats[BASIC_MAT_INDEX]     = Resources.Load <Material>("Materials/Advanced/Basic_PBR");
            mats[GLASS_MAT_INDEX]     = Resources.Load <Material>("Materials/Advanced/Glass_PBR");
            mats[METAL_MAT_INDEX]     = Resources.Load <Material>("Materials/Advanced/Metal_PBR");
            mats[GREEN_MAT_INDEX]     = Resources.Load <Material>("Materials/Advanced/Green_PBR");
            mats[GLASS_OFF_MAT_INDEX] = Resources.Load <Material>("Materials/Advanced/GlassOffline_PBR");
            break;
        }

        case MaterialsPack.Simplified:
        {
            mats[GLASS_OFF_MAT_INDEX] = Resources.Load <Material>("Materials/Simplified/GlassOffline");
            mats[BASIC_MAT_INDEX]     = Resources.Load <Material>("Materials/Simplified/Basic");
            mats[GLASS_MAT_INDEX]     = Resources.Load <Material>("Materials/Simplified/Glass");
            mats[METAL_MAT_INDEX]     = Resources.Load <Material>("Materials/Simplified/Metal");
            mats[GREEN_MAT_INDEX]     = Resources.Load <Material>("Materials/Simplified/Green");
            break;
        }

        default:
        {
            mats[GLASS_OFF_MAT_INDEX] = Resources.Load <Material>("Materials/StandartPack/GlassOffline");
            mats[BASIC_MAT_INDEX]     = Resources.Load <Material>("Materials/StandartPack/Basic");
            mats[GLASS_MAT_INDEX]     = Resources.Load <Material>("Materials/StandartPack/Glass");
            mats[METAL_MAT_INDEX]     = Resources.Load <Material>("Materials/StandartPack/Metal");
            mats[GREEN_MAT_INDEX]     = Resources.Load <Material>("Materials/StandartPack/Green");
            break;
        }
        }
        return(mats);
    }
    public static void ReplaceMaterials(Renderer[] rrs, MaterialsPack mpack)
    {
        Material[] materials;
        if (mpack == currentMaterialsPack)
        {
            materials = new Material[5];
            materials[BASIC_MAT_INDEX]     = basic_material;
            materials[GLASS_MAT_INDEX]     = glassMaterial;
            materials[GLASS_OFF_MAT_INDEX] = glassMaterial_disabled;
            materials[GREEN_MAT_INDEX]     = green_material;
            materials[METAL_MAT_INDEX]     = metal_material;
        }
        else
        {
            materials = LoadMaterialPack(mpack);
        }
        foreach (Renderer mr in rrs)
        {
            bool castShadows = false, receiveShadows = false;

            if (mr.sharedMaterials != null)
            {
                if (mr.sharedMaterials.Length == 1)
                {
                    if (mr.sharedMaterial != null)
                    {
                        switch (mr.sharedMaterial.name)
                        {
                        case "Basic":
                        case "Basic_PBR":
                            mr.sharedMaterial = materials[BASIC_MAT_INDEX];
                            castShadows       = true;
                            receiveShadows    = true;
                            break;

                        case "Glass":
                        case "Glass_PBR":
                            mr.sharedMaterial = materials[GLASS_MAT_INDEX];
                            castShadows       = true;
                            receiveShadows    = true;
                            break;

                        case "GlassOffline":
                        case "GlassOffline_PBR":
                            mr.sharedMaterial = materials[GLASS_OFF_MAT_INDEX];
                            castShadows       = true;
                            receiveShadows    = true;
                            break;

                        case "Vegetation":
                        case "Green":
                        case "Green_PBR":
                            mr.sharedMaterial = materials[GREEN_MAT_INDEX];
                            castShadows       = true;
                            receiveShadows    = true;
                            break;

                        case "Metal":
                        case "Metal_PBR":
                            mr.sharedMaterial = materials[METAL_MAT_INDEX];
                            castShadows       = true;
                            receiveShadows    = true;
                            break;

                        case "Sailcloth":
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "BillboardMaterial":
                        case "shadedBillboard":
                            if (shadowCasting)
                            {
                                mr.sharedMaterial = billboardShadedMaterial;
                            }
                            else
                            {
                                mr.sharedMaterial = billboardMaterial;
                            }
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "ChargedMaterial":
                        case "ChargedMaterial_advanced":
                            mr.sharedMaterial = energyMaterial;
                            castShadows       = true;
                            receiveShadows    = false;
                            break;
                        }
                    }
                }
                else
                {
                    var sm  = mr.sharedMaterials;
                    var sm2 = new Material[sm.Length];
                    for (int i = 0; i < sm.Length; i++)
                    {
                        if (sm[i] == null)
                        {
                            sm2[i] = null;
                            continue;
                        }
                        switch (sm[i].name)
                        {
                        case "Basic":
                        case "Basic_PBR":
                            sm2[i]         = materials[BASIC_MAT_INDEX];
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "Glass":
                        case "Glass_PBR":
                            sm2[i]         = materials[GLASS_MAT_INDEX];
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "GlassOffline":
                        case "GlassOffline_PBR":
                            sm2[i]         = materials[GLASS_OFF_MAT_INDEX];
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "Vegetation":
                        case "Green":
                        case "Green_PBR":
                            sm2[i]         = materials[GREEN_MAT_INDEX];
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "Metal":
                        case "Metal_PBR":
                            sm2[i]         = materials[METAL_MAT_INDEX];
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "Sailcloth":
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "BillboardMaterial":
                        case "shadedBillboard":
                            if (shadowCasting)
                            {
                                sm2[i] = billboardShadedMaterial;
                            }
                            else
                            {
                                sm2[i] = billboardMaterial;
                            }
                            castShadows    = true;
                            receiveShadows = true;
                            break;

                        case "ChargedMaterial":
                        case "ChargedMaterial_advanced":
                            sm2[i]         = energyMaterial;
                            castShadows    = true;
                            receiveShadows = false;
                            break;

                        default: sm2[i] = sm[i]; break;
                        }
                    }
                    mr.sharedMaterials = sm2;
                }
            }
            if (shadowCasting)
            {
                if (castShadows)
                {
                    mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
                }
                else
                {
                    mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
                }
                mr.receiveShadows = receiveShadows;
            }
            else
            {
                mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
                mr.receiveShadows    = false;
            }
        }
    }