Пример #1
0
    public void ApplyLightmapsTex()
    {
        var lightmap_tex = LightmapTexs;
        int itemLen      = 0;

        if (LightmapTexs != null && LightmapTexs.Length > 0)
        {
            LightmapData[] datas = new LightmapData[LightmapTexs.Length];
            for (int i = 0; i < LightmapTexs.Length; i++)
            {
                LightmapData     dataL    = new LightmapData();
                LightmapsTexture lightmap = LightmapTexs[i];
                dataL.lightmapColor = lightmap.color;
                dataL.lightmapDir   = lightmap.dir;
                dataL.shadowMask    = lightmap.shadowmask;
                datas[i]            = dataL;
            }
            itemLen = LightmapTexs.Length;
            LightmapSettings.lightmaps     = datas;
            LightmapSettings.lightmapsMode = lightmapMode;
        }
    }
Пример #2
0
        //拷贝烘焙数据并保存
        public static void CopyLightmapsData(bool other, Light dirLight)
        {
            Scene  sc           = SceneManager.GetActiveScene();
            string sceneName    = sc.name;
            string dir          = Path.Combine(LightingDatasPath, sceneName);
            string lightmap_dir = Path.Combine(dir, "main_lightmap");

            if (other)
            {
                lightmap_dir = Path.Combine(dir, "other_lightmap");
            }
            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
            if (Directory.Exists(lightmap_dir))
            {
                Directory.Delete(lightmap_dir, true);
            }
            Directory.CreateDirectory(lightmap_dir);

            var lightmaps = LightmapSettings.lightmaps;

            LightmapsTexture[] lightmapTices = new LightmapsTexture[lightmaps.Length];
            for (int index = 0; index < lightmaps.Length; index++)
            {
                LightmapData     item    = lightmaps[index];
                LightmapsTexture texName = new LightmapsTexture();
                if (item.lightmapColor)
                {
                    string light_name = Path_HEADER + index + "_light";
                    texName.color = SaveTexEXR(lightmap_dir, light_name, item.lightmapColor);
                }
                if (item.lightmapDir)
                {
                    string dir_name = Path_HEADER + index + "_dir";
                    texName.dir = SaveTexPNG(lightmap_dir, dir_name, item.lightmapDir);
                }
                if (item.shadowMask)
                {
                    string sm_name = Path_HEADER + index + "_sm";
                    texName.shadowmask = SaveTexPNG(lightmap_dir, sm_name, item.shadowMask);
                }
                lightmapTices[index] = texName;
            }

            LightmapsManager lightmapManager = CreateLightmapsManager(other);

            lightmapManager.dirLight             = dirLight;
            lightmapManager.lightmapsRenderDatas = lightmapManager.GetLightmapsRenderData();
            var lightingData = lightmapManager.lightingData;

            lightingData.LightmapTexs = lightmapTices;
            lightingData.lightmapMode = LightmapSettings.lightmapsMode;

            var prefabName = Path.Combine(dir, other ? "other_lightmap" : "main_lightmap");

            prefabName = prefabName + ".prefab";
            prefabName = prefabName.Replace('\\', '/');
            if (File.Exists(prefabName))
            {
                File.Delete(prefabName);
            }
            PrefabUtility.SaveAsPrefabAsset(lightingData.gameObject, prefabName);

            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }