Unity Lightmap&LightProbe局部动态加载(亲测2020以及以上版本官方修复了)

本文介绍了解决Unity中多场景加载时Lightmap失效的问题,提供了两种解决方案:一是通过脚本手动设置Lightmap信息;二是利用更高版本Unity的自动加载功能。文章详细介绍了具体实现步骤及注意事项。


环境

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 即可


实践


场景A烘焙效果,并创建A Prefab

在这里插入图片描述


场景B烘焙效果,并创建B Prefab

在这里插入图片描述


单独Load A/B Prefab + 烘焙效果

可以看到 SingleAPrefabSceneSingleBPrefabScene 场景也有 Baked Lightmaps 的内容
在这里插入图片描述
在这里插入图片描述


同时将A,B场景的内容放到同一个场景内容,同时应用不同的 lightmap 烘焙

在这里插入图片描述


方案1 - 可以同一个场景中使用多个场景的烘焙结果

// 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<LightmapDataAndRendererBinder> lightmapDatas;

    public bool refreshLightmap = false;
    public bool updated = true;

    private Dictionary<int, int> lightMapIndexDict;

    private void Start
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值