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; } }
/// <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); } } }
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; // } //} } }
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; } }
/// <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); }
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; } }