文章目录
环境
- 环境
- 原因
- 解决方法
- 实践
- 场景A烘焙效果,并创建A Prefab
- 场景B烘焙效果,并创建B Prefab
- 单独Load A/B Prefab + 烘焙效果
- 同时将A,B场景的内容放到同一个场景内容,同时应用不同的 lightmap 烘焙
- 方案1 - 可以同一个场景中使用多个场景的烘焙结果
- 优化案例
- 方案2 - 在单个场景中使用
- 遗留问题
- Project
- References
- 重要重要重要 - 2021.3.10, 2020.3.7 试了以下,官方完善了此功能
Unity : 2020.3.37f1(后续发现 2020.3.37f1 官方是支持 多场景加载的烘焙信息的还原的,-_-!!!) Pipeline : BRP
如果你使用的是 2020, 或是以上的 unity 版本,请无视此问题
原因因为 unity 内置的 bake 系统是只能跟单个场景走的
并且,运行时,只有 active == true 的场景对象才有小
如果你当前 additve 的方式 load 了多个场景,并且每个场景都有自己的 lightmap
那么其他不是 active == true 的场景对象的 lightmap 将会失效
(我是没搞懂为何 unity 这功能不制作好一些,这个功能应该很多项目都会有使用到的)
恰好,我们项目之前加载关卡的代码不是使用 加载 scene 的方式
而是使用 加载 prefab 的方式,一个prefab 就是一个 scene 里面的内容
那么这个关卡中如果烘焙了 lightmap的话,走 加载 prefab 的话, lightmap 都会失效
所以才搞这么一出笔记
解决方法只要通过运行时,设置好 Renderer.lightmapIndex, Renderer.lightmapScaleOffset 即可
可以看到 SingleAPrefabScene, SingleBPrefabScene 场景也有 Baked Lightmaps 的内容
// jave.lin : 加载自定义的 lightmap 信息
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class LoadCustomLightmapInfo : MonoBehaviour
{
// jave.lin : 不要使用天空和,因为这个是在运行前决定的,
// 中途设置除了 camera.clearFlag 有小,其他 renderer 的 reflection 都会有问题,
// 建议使用 reflection probe 来替代
//public Material skyboxMat;
public List lightmapDatas;
public bool refreshLightmap = false;
public bool updated = true;
private Dictionary lightMapIndexDict;
private void Start()
{
refreshLightmap = false;
}
private void Update()
{
if (!updated)
return;
if (!refreshLightmap)
{
refreshLightmap = true;
LightmapData[] lightmaps = null;
if (lightmapDatas != null)
{
// jave.lin : 刷新映射 idx
if (lightMapIndexDict == null)
{
lightMapIndexDict = new Dictionary();
}
else
{
lightMapIndexDict.Clear();
}
// jave.lin : 统计总共使用到多少个 texture 2d array的元素
// 计算 light map texture 属于哪个索引,相同的索引都会放在同一个 lightmapData 中
var lightmapDataCount = 0;
for (int i = 0; i
关注
打赏
热门博文
- 3D Assets (Textures & Model & Animations) & Game Design Ideas & DCC Tutorials & TA
- LearnGL - 学习笔记目录
- Unity - Timeline 知识汇总
- Unity Graphics - 知识点目录 - 停止翻译,因为发现官方有中文文档了
- Graphic资料
- Unity Lightmap&LightProbe局部动态加载(亲测2020以及以上版本官方修复了)
- Unity - 踩坑日志 - 低版本线性颜色空间渲染异常的 “BUG”
- Unity Shader - PBR 渲染 SP 导出的素材
- 什么是 3A 游戏?
- Photosohp - 实现 2D MetaBall、MetaFont
