文章目录
环境
- 环境
- 原因
- 解决方法
- 实践
- 场景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