示例#1
0
    private void SetLightmapInfo(GameObject go)
    {
        try
        {
            MeshRenderer[] meshs = GameObject.FindObjectsOfType <MeshRenderer>();

            //info.maps = new LightmapInfo.MeshLightMap[meshs.Length];
            for (int i = 0; i < meshs.Length; i++)
            {
                if (meshs[i].lightmapIndex < 0)
                {
                    continue;
                }

                LightmapInfo info = meshs[i].GetComponent <LightmapInfo>() ??
                                    meshs[i].gameObject.AddComponent <LightmapInfo>();

                info.index     = meshs[i].lightmapIndex;
                info.v4_Offset = meshs[i].lightmapScaleOffset;

                info.nameFar = LightmapSettings.lightmaps[info.index].lightmapFar.name;

                if (LightmapSettings.lightmapsMode != LightmapsMode.NonDirectional)
                {
                    info.nameNear = LightmapSettings.lightmaps[info.index].lightmapNear.name;
                }
            }
        }
        catch (Exception e)
        {
            throw e;
        }
    }
示例#2
0
    /// <summary>
    /// 将 模型转换成 prefab 写入到 taget.str_bakePath 文件夹中
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    private void SetAsset()
    {
        AutoBake bake = target as AutoBake;

        for (int i = 0; i < bake.prefabs.Length; i++)
        {
            GameObject obj = GameObject.Find(bake.prefabs[i].name) ?? Instantiate(bake.prefabs[i]);
            obj.name = obj.name.Replace("(Clone)", "");

            string path = AssetDatabase.GetAssetPath(obj);

            if (!Directory.Exists(str_AssetMainPath + "/" + obj.name))
            {
                AssetDatabase.CreateFolder(str_AssetMainPath, obj.name);
            }

            AssetDatabase.Refresh();

            string preName = str_AssetMainPath + "/" + obj.name + "/" + obj.name + ".prefab";

            if (File.Exists(preName))
            {
                GameObject go = AssetDatabase.LoadAssetAtPath <GameObject>(preName);

                LightmapInfo[] info = go.GetComponentsInChildren <LightmapInfo>();

                for (int j = 0; j < info.Length; j++)
                {
                    GameObject infoGo = GameObject.Find(info[j].gameObject.name);

                    LightmapInfo goInfo = infoGo.GetComponent <LightmapInfo>() ?? infoGo.AddComponent <LightmapInfo>();

                    goInfo.index     = info[j].index;
                    goInfo.nameFar   = info[j].nameFar;
                    goInfo.nameNear  = info[j].nameNear;
                    goInfo.v4_Offset = info[j].v4_Offset;
                }


                if (path.Contains(str_AssetMainPath))
                {
                    bake.prefabs[i] = PrefabUtility.ReplacePrefab(obj, bake.prefabs[i]);
                }
                else
                {
                    bake.prefabs[i] = PrefabUtility.CreatePrefab(preName, obj);
                }
            }
            else
            {
                bake.prefabs[i] = PrefabUtility.CreatePrefab(preName, obj);
            }

            if (GameObject.Find(obj.name))
            {
                DestroyImmediate(obj);
            }
        }
    }
示例#3
0
    IEnumerator LoadModel(string name)
    {
        WWW www = new WWW("file://" + Application.streamingAssetsPath + "/bakeABs/WINDOW/" + name);

        yield return(www);

        var bundle = www.assetBundle;

        string[] assetNames = bundle.GetAllAssetNames();

        List <LightmapData> data = new List <LightmapData>(LightmapSettings.lightmaps);

        GameObject go = null;

        for (int i = 0; i < assetNames.Length; i++)
        {
            Object obj = bundle.LoadAsset(assetNames[i]);

            if (obj as Texture2D)
            {
                LightmapData lidata = new LightmapData
                {
                    lightmapFar  = obj as Texture2D,
                    lightmapNear = null
                };

                data.Add(lidata);
            }
            else
            {
                go = Instantiate(obj) as GameObject;
            }
        }
        LightmapSettings.lightmaps = null;
        LightmapSettings.lightmaps = data.ToArray();

        Renderer[] rndrs = GameObject.FindObjectsOfType <Renderer>();
        for (int y = 0; y < rndrs.Length; y++)
        {
            Renderer     renderer = rndrs[y];
            LightmapInfo info     = rndrs[y].GetComponent <LightmapInfo>();
            renderer.gameObject.isStatic         = true;
            renderer.lightmapIndex               = 0;
            renderer.lightmapScaleOffset         = info.v4_Offset;
            renderer.realtimeLightmapIndex       = 0;
            renderer.realtimeLightmapScaleOffset = info.v4_Offset;

            //for (int k = 0; k < data.Count; k++)
            //{
            //    if (info.nameFar == data[k].lightmapFar.name)
            //    {
            //        break;
            //    }
            //}
        }
    }
示例#4
0
    static void SetLightmap()
    {
        MeshRenderer[] renderers = GameObject.FindObjectsOfType <MeshRenderer>();

        for (int i = 0; i < renderers.Length; i++)
        {
            LightmapInfo info = renderers[i].GetComponent <LightmapInfo>();


            //renderers[i].lightmapIndex = info.index;
            //renderers[i].lightmapScaleOffset = info.v4_Offset;
        }
    }
示例#5
0
    /// <summary>
    /// 把当前场景的lightmap像素以HDR格式读取出来保存成未压缩的浮点格式
    /// </summary>
    /// <returns></returns>
    unsafe static List <LightmapInfo> LoadAllLightmapData()
    {
        var litmapData = new List <LightmapInfo>();
        var lightmaps  = LightmapSettings.lightmaps;
        var count      = 0;

        for (int j = 0; j < lightmaps.Length; ++j)
        {
            var out_data  = IntPtr.Zero;
            var err       = IntPtr.Zero;
            var width     = 0;
            var height    = 0;
            var assetPath = AssetDatabase.GetAssetPath(lightmaps[j].lightmapColor);
            var ld        = new LightmapInfo();
            ld.assetPath = assetPath;
            try {
                if (NativeAPI.LoadEXR(ref out_data, out width, out height, ld.assetPath, ref err) >= 0)
                {
                    ld.pixels = new Vector4[width * height];
                    ld.width  = width;
                    ld.height = height;
                    var src = ( Vector4 * )out_data;
                    for (int n = 0; n < ld.pixels.Length; ++n)
                    {
                        ld.pixels[n] = *src++;
                    }
                    ++count;
                }
                else
                {
                    if (err != IntPtr.Zero)
                    {
                        var errorInfo = Marshal.PtrToStringAnsi(err);
                        UDebug.LogError(errorInfo);
                    }
                }
            } finally {
                if (out_data != IntPtr.Zero)
                {
                    NativeAPI.crt_free(out_data);
                }
            }
            litmapData.Add(ld);
        }
        return(count == lightmaps.Length ? litmapData : null);
    }
示例#6
0
    public static void SetLightmapIndex()
    {
        MeshRenderer[] renderers = GameObject.FindObjectsOfType <MeshRenderer>();

        for (int i = 0; i < renderers.Length; i++)
        {
            LightmapInfo info = renderers[i].GetComponent <LightmapInfo>();

            if (info != null)
            {
                DestroyImmediate(info);
            }

            info = renderers[i].gameObject.AddComponent <LightmapInfo>();
            //info.nameFar = LightmapSettings.lightmaps[renderers[i].lightmapIndex].lightmapFar.name;
            //info.v4_Offset = renderers[i].lightmapScaleOffset;
        }
    }