Bakery烘焙


一、使用方法

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 方式进行正常烘焙

  • image-20221121150011963

Directional mode

image-20221122101338057

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

image-20221121204812045

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

image-20221122101713655


文章作者: 血魂S
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 血魂S !
  目录