Unity 全局光照LightMap 动态加载
来源:互联网 发布:每天算工资软件 编辑:程序博客网 时间:2024/05/16 18:10
Unity5 里面, 当场景里的物体保存成Prefab之后,LightMap的信息就会丢失。Fuck。。
所以最后就写了个脚本,把每个Render里的lightmap纪录下来,当prefab实例化之后,重新设置。
上代码。。
相关设置:
注意事项:检查下是否勾选了 Static -> BatchingStatic ,如果勾选了,一定要去除勾选 !!!!!!
using UnityEngine; using System.Collections; using System.Collections.Generic;using UnityEngine.Rendering;public class PrefabLightmapData : MonoBehaviour {//LightMap信息[System.Serializable] public struct RendererInfo { public Renderer renderer; public int lightmapIndex; public Vector4 lightmapOffsetScale; }//场景中的Fog信息[System.Serializable] public struct FogInfo { public bool fog; public FogMode fogMode; public Color fogColor;public float fogStartDistance;public float fogEndDistance;public float fogDensity;}public FogInfo fogInfo;public List<RendererInfo> m_RendererInfo; public List<Texture2D> lightmapNear;public List<Texture2D> lightmapFar;public LightmapData[] lightmapData;public LightmapsMode lightmapsMode;//地形的LightMap信息public Terrain terrain;public RendererInfo terrainRendererInfo;//设置光照信息[ContextMenu("SetUp")]public void SetUp(){ lightmapData = new LightmapData[lightmapNear.Count > lightmapFar.Count ? lightmapNear.Count : lightmapFar.Count];for(int i = 0; i < lightmapData.Length; i ++){lightmapData[i]=new LightmapData();lightmapData[i].lightmapFar = i < lightmapFar.Count ? lightmapFar[i] : null;lightmapData[i].lightmapNear = i < lightmapNear.Count ? lightmapNear[i] : null;}LightmapSettings.lightmapsMode = lightmapsMode;LightmapSettings.lightmaps=lightmapData;LoadLightmap();RenderSettings.fog = fogInfo.fog;RenderSettings.fogMode = fogInfo.fogMode;RenderSettings.fogColor = fogInfo.fogColor;RenderSettings.fogStartDistance = fogInfo.fogStartDistance;RenderSettings.fogEndDistance = fogInfo.fogEndDistance;RenderSettings.fogDensity = fogInfo.fogDensity;}//保存光照信息[ContextMenu("SaveData")]public void SaveData(){ SaveLightmap ();}public void SaveLightmap(){ fogInfo = new FogInfo ();fogInfo.fog = RenderSettings.fog;fogInfo.fogMode = RenderSettings.fogMode;fogInfo.fogColor = RenderSettings.fogColor;fogInfo.fogStartDistance = RenderSettings.fogStartDistance;fogInfo.fogEndDistance = RenderSettings.fogEndDistance;lightmapNear = new List<Texture2D>();lightmapFar = new List<Texture2D>();for(int i = 0; i < LightmapSettings.lightmaps.Length; i ++){LightmapData data = LightmapSettings.lightmaps[i];if(data.lightmapNear != null){lightmapNear.Add(data.lightmapNear);}if(data.lightmapFar != null){lightmapFar.Add(data.lightmapFar);}}m_RendererInfo = new List<RendererInfo> ();var renderers = GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer r in renderers) { if (r.lightmapIndex != -1) { RendererInfo info = new RendererInfo(); info.renderer = r; info.lightmapOffsetScale = r.lightmapScaleOffset; info.lightmapIndex = r.lightmapIndex; m_RendererInfo.Add(info); } }terrain = GetComponentInChildren<Terrain> ();if (terrain != null) {terrainRendererInfo = new RendererInfo();terrainRendererInfo.lightmapOffsetScale = terrain.lightmapScaleOffset; terrainRendererInfo.lightmapIndex = terrain.lightmapIndex; }lightmapsMode = LightmapSettings.lightmapsMode;} public void LoadLightmap() { if (m_RendererInfo.Count <= 0) return; if (terrain != null) {terrain.lightmapScaleOffset = terrainRendererInfo.lightmapOffsetScale;terrain.lightmapIndex = terrainRendererInfo.lightmapIndex;}foreach (var item in m_RendererInfo) { item.renderer.lightmapIndex = item.lightmapIndex; item.renderer.lightmapScaleOffset = item.lightmapOffsetScale; } }}
当场景中LightMap烘培好了之后,在perfab根节点上面挂上这个脚本,右键-》SaveData,之后apply prefab。
在运行时场景初始化完成之后。调用SetUp方法,即可挂载lightMap。
重点!!我遇上个问题,需要保持原来存在的渲染场景,assetbundle才的LightMap能正常。否则就不会有LightMap,希望谁来个提示。
如果把原来渲染lightmap的场景删了,那么在手机上就会加载不到。
我估摸着是因为assetbundle的时候,没有把lightmap的贴图打包进去,只保存了引用的关系。
所以如果场景删了,那么lightmap的贴图也丢了。
如有疑问,请回复哦~~
0 0
- Unity 全局光照LightMap 动态加载
- Unity动态加载LightMap
- Lightmap与动态光照的实时切换
- Unity 5.x动态加载光照信息(所有坑已踩)
- unity3D中 lightmap 与 动态光照的实时切换
- unity3D中 lightmap 与 动态光照的实时切换
- unity关于程序获得lightmap,光照贴图以及对应的所在光照贴图的位置
- Lightmapping使用及动态加载lightmap方案
- U3D lightmap的assetbundle和动态加载
- Unity 5中的全局光照使用详解
- Unity 5 中的全局光照技术详解
- Unity 5 中的全局光照技术详解
- Unity 5 中的全局光照技术详解
- Unity 5 中的全局光照技术详解
- Unity 5 中的全局光照技术详解
- Unity 5 中的全局光照技术详解
- Unity 5 中的全局光照技术详解
- Unity 5 中的全局光照技术详解
- Activity四种启动模式(精)
- C语言学习之运算符第一讲
- MMDrawerController如何只让指定ViewController起作用
- iOS注释方法经验总结
- Windows下安装并设置Redis
- Unity 全局光照LightMap 动态加载
- Xcode View无法映射到类的解决方法(new referencing outlet can not work)
- 2792: [Poi2012]Well 思路题 二分答案
- iOS UILable换行相关设置
- Jquery-判断form表单数据是否变化
- 构建持续集成平台
- Android Property Animation属性动画:rotation旋转(2)
- Python-层次聚类-Hierarchical clustering
- Xamarion.IOS UIImage图片的裁剪缩放等