Version: 2022.3
Experimental: this API is experimental and might be changed or removed in the future.

IScriptableBakedReflectionSystem

interface in UnityEditor.Experimental.Rendering

切换到手册

描述

定义 ScriptableBakedReflectionSystem 实现所需的成员。

您可以将空实现用作基类,请参阅 ScriptableBakedReflectionSystem

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor.Experimental.Rendering;

public interface IBakeJobs { // Add job counts + remove jobs count int count { get; } int toAddCount { get; } int toRemoveCount { get; } }

public interface IBaker<TProbe> { IBakeJobs PrepareBakeJobsFor(SceneStateHash sceneStateHash); void IssueJobs(IBakeJobs jobs); List<TProbe> bakedProbes { get; set; } void StopRunningJobs(); }

abstract class CustomScriptableBakedReflectionSystem : ScriptableBakedReflectionSystem { enum Stage { None, BakeReflectionProbes }

IBaker<ReflectionProbe> m_ReflectionProbeBaker;

public CustomScriptableBakedReflectionSystem( IBaker<ReflectionProbe> reflectionProbeBaker) // Our custom system processes in 1 stage: reflection probes : base(1) { m_ReflectionProbeBaker = reflectionProbeBaker; }

public override void Tick( SceneStateHash sceneStateHash, IScriptableBakedReflectionSystemStageNotifier handle) { // Reflection Probes { // Calculate reflection probes to remove and to bake and add var jobs = m_ReflectionProbeBaker.PrepareBakeJobsFor(sceneStateHash); if (jobs.count > 0) { // Update progression information of current stage // Progress is the progression of to bake and add jobs handle.EnterStage( (int)Stage.BakeReflectionProbes, string.Format("Reflection Probes | {0} jobs", jobs.toAddCount), 1 - (jobs.toAddCount / (float)m_ReflectionProbeBaker.bakedProbes.Count));

// Perform removal of remove jobs // Issue baking of add jobs if they are not in progress m_ReflectionProbeBaker.IssueJobs(jobs);

return; } handle.ExitStage((int)Stage.BakeReflectionProbes); }

// Update the hash of the reflection system stateHashes = CalculateStateHash(); // Baking is complete for this sceneStateHash handle.SetIsDone(true); }

public override void SynchronizeReflectionProbes() { // Synchronize Reflection Probes for (int i = 0, c = m_ReflectionProbeBaker.bakedProbes.Count; i < c; ++i) { var probe = m_ReflectionProbeBaker.bakedProbes[i]; probe.bakedTexture = GetReflectionProbeBakedTexture(probe); } }

public override void Clear() { m_ReflectionProbeBaker.bakedProbes.Clear(); DeleteBakedReflectionProbeTextures(); }

public override void Cancel() { m_ReflectionProbeBaker.StopRunningJobs(); }

Cubemap GetReflectionProbeBakedTexture(ReflectionProbe probe) { throw new System.NotImplementedException(); }

protected abstract void DeleteBakedReflectionProbeTextures(); protected abstract Hash128[] CalculateStateHash(); }

变量

stageCount烘焙过程的阶段数。
stateHashesScriptableBakedReflectionSystem 当前烘焙状态的哈希。

公共函数

BakeAllReflectionProbes实现此方法可烘焙所有加载的反射探针。
Cancel取消正在运行的烘焙作业。
Clear清除 ScriptableBakedReflectionSystem 的状态。
SynchronizeReflectionProbes将烘焙数据与实际组件和渲染设置同步。
Tick每次编辑器更新都会调用此方法,直到 ScriptableBakedReflectionSystem 指示烘焙完成,即 handle.SetIsDone(true)。(请参阅 IScriptableBakedReflectionSystemStageNotifier.SetIsDone)。