一、使用方法
Bakery 烘焙脚本
Bakery Direct Light :平行光烘焙参数设置
- Direct And Indirect:间接光和直接光都全量烘焙,相当于 Light 的 Baked
- Indirect Only:只烘焙间接光,相当于 Bake Indirect Mode
- Indirect And Shadowmask:烘焙间接光和阴影,相当于 shadowmask 模式
Bakery Point Light:点光源和探照灯烘焙参数设置(探照灯使用 Cone mask)
Bakery Sky Light:天空盒烘焙参数设置
Bakery Light Mesh:自发光物体烘焙参数设置
Bakery Lightmapped Prefab:预制体烘焙参数设置,可以动态加载
Bakery Volume:LightProbe 烘焙,3D 贴图
Bakery Always Render:无论物体是否隐藏,都会参与烘焙
Bakey Pack As Single Square:该物体及其子物体,烘焙时他们的 UV 会作为一个整体烘焙在Lightmap图上,不会打乱
Bakery Sector:独立烘焙,可以选择只烘焙特定区域,其他区域不会变更。
Bakery Lightmap Group Selector:设置单个区域烘焙的参数,会 override 全局参数。
全局烘焙时,会按照每个 Bakery Lightmap Group Selector 组进行烘焙,当没有这个设置的物体是,会按照全局参数烘焙。如下图,全局烘焙时,左边这一组按照 AO Only 烘焙,而右边会按照 shadowmask 方式进行正常烘焙

Directional mode

Bakery API 使用
using UnityEngine;
public class TestBakeryAPI : MonoBehaviour
{
public BakerySector bakerySector;
[ContextMenu("Test1")]
private void Test1()
{
// 每个场景会保存一个 ftLightmapsStorage
ftLightmapsStorage storage = ftRenderLightmap.FindRenderSettingsStorage();
storage.renderSettingsSector = bakerySector;
storage.renderSettingsUserRenderMode = (int) BakeryLightmapGroup.RenderMode.AmbientOcclusionOnly;
// 获取当前渲染的实例
ftRenderLightmap bakery = ftRenderLightmap.instance;
// 加载 ftLightmapsStorage 设置到实例中
bakery.LoadRenderSettings();
// 在用 Bakery Sector情况下,直接调用 bakery.RenderButton 会报错,需要手动验证路径
// bakery.ValidateOutputPath();
// 进行烘焙
bakery.RenderButton(false);
// 保存当前实例烘焙参数到 ftLightmapsStorage
bakery.SaveRenderSettings();
}
}
Bakery Meta Pass 使用
Albedo: 默认识别 _MainTex、_BaseColorMap、 _Color(没有贴图的情况下) 的 颜色作为 albedo 颜色
Emission:默认识别 _EmissionMap、 _EmissionColor 作为自发光的颜色
Alpha:默认识别 _MainTex、 _BaseColorMap 、 _BaseMap 的 Alpha 作为 alpha 值
_Cutoff:作为裁剪值
- 计算公式为:finalCutoff = 1 - (1 - cutoff) * alpha

Bakery 对半透明烘焙不支持,只能 _cutoff,但是可以对 alpha 进行修改。方式如下:
[HideInInspector] BAKERY_META_ALPHA_ENABLE (“Enable Bakery alpha meta pass”, Float) = 1.0
Name “META_BAKERY”
if (unity_MetaFragmentControl.w)
Shader "Unlit/TestMetaPass"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color("Color for Lightmap", Color) = (0.5, 0.5, 0.5, 1.0)
_Cutoff("_Cutoff",Range(0,1)) = 0
[HideInInspector] BAKERY_META_ALPHA_ENABLE ("Enable Bakery alpha meta pass", Float) = 1.0
}
SubShader
{
Tags
{
"RenderType" = "Transparent"
"Queue" = "Transparent"
}
Blend SrcAlpha OneMinusSrcAlpha
ZWrite off
Pass
{
Name "META_BAKERY"
Tags
{
"LightMode" = "Meta"
}
Cull Off
HLSLPROGRAM
#pragma target 3.5
#pragma vertex VertMeta
#pragma fragment FragMeta
#include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UniversalMetaPass.hlsl"
// #include "MetaPass.hlsl"
Varyings VertMeta(Attributes input)
{
Varyings output = (Varyings)0;
output = UniversalVertexMeta(input);
return output;
}
half4 FragMeta(Varyings input) : SV_Target
{
MetaInput metaInput = (MetaInput)0;
//Output custom alpha to Bakery
if (unity_MetaFragmentControl.w)
{
float2 alpha2 = cos(abs(frac(input.uv * 10) *2 - 1));
float alpha = alpha2.x * alpha2.y;
return alpha;
}
return UniversalFragmentMeta(input, metaInput);
}
ENDHLSL
}
}
}
Normal Mapping
_BumpMap
_MainTex_ST
META_BAKERY
BakeryMetaPass.cginc
#pragma vertex vert_bakerymt
unity_MetaFragmentControl.z
BakeryEncodeNormal
