渲染设置的数据流固定为:
Editor panel -> RenderSettingsPanelAdapter -> RenderSettingsStore
-> immutable RenderSettingsSnapshot -> RenderFramePacket -> Feature
Feature 不包含 ImGui 代码,也不读取 Editor 的聚合 RenderSettings 对象。渲染主线程 adapter 负责把面板值写入 typed
store;packet 只携带不可变快照。同步 Renderer 相对最近一次成功 GPU submit 的快照计算 diff,跳过或提交失败的帧不会
成为设置或历史基线。
每个可配置 Feature 使用自己的稳定 FeatureId 和设置类型,在
pipelines::registerDefaultRenderSettings() 中注册默认值、校验器和 diff 分类。设置类型需要可按值复制和比较,校验器必须在
主线程发布快照前拒绝 NaN、越界值和不支持的组合。
变化影响使用 SettingsChangeImpact:
HotUpdate:只更新 uniform 或 CPU 标量,不重建资源,不重置历史。HistoryReset:资源拓扑不变,但一个或多个HistoryDomain的样本不能继续使用。PipelineRecompose:Feature 集合、能力要求或 DAG 结构变化;在渲染主线程帧边界事务式创建候选实例。ResourceRecreate:格式、尺寸、descriptor 容量或 shader 变体使 Feature 自有资源必须重建。
影响可以组合。需要历史处理时同时返回具体 FrameChangeSet,不要在 session 或 Feature 内再次写一套布尔失效规则。
RenderSettingsPanelAdapter 是 Editor 与 typed store 的唯一适配层。新增设置时:
- 在所属 Feature 的设置类型中增加字段和中文 Doxygen 注释。
- 更新默认 schema 的默认值、校验器和 diff 分类。
- 在 adapter 的聚合读写中映射该字段。
- 在 Editor panel 调用 adapter 暴露的编辑值,不向 Feature 传递 ImGui 或回调。
- 添加默认值、非法值、snapshot 不可变性和影响分类测试。
公开设置、实际 UI、默认 recipe 和文档必须在同一提交中保持一致。删除或重命名字段时,不得保留已经失效的面板说明或 架构描述。
Ray Tracing 的 Direct Lighting / DI Mode 提供 Uniform NEE(默认)、Light Tree + NEE、
Light Tree + NEE + MIS 和 ReSTIR DI,
对应 DirectLightingFeatureSettings::mode。Global Illumination / GI Mode 提供 Disabled、SHARC(默认)、
ReSTIR GI 和 ReSTIR GI + SHARC,映射已有 sharcEnabled、restirGiEnabled、restirGiUseSharc。
Denoiser 提供 Disabled、NRD REBLUR(默认)、SVGF,对应 GlobalIlluminationSettings::denoiser。
同时作用于 DI/GI,Legacy 不显示该设置。模式变化属于 HistoryReset,重置 ReSTIR、SHARC、降噪与 TAA,不重组 pipeline。
项目以 denoiser 字符串 disabled / nrd / svgf 保存;旧项目缺失字段时从 nrd 布尔值迁移。
旧 nrdEnabled=false 在新枚举为 Nrd 时仍关闭 NRD,显式 SVGF 或 Disabled 优先。Editor::setNrdEnabled()
同时设置新枚举,保持旧编辑器接口行为。资源与算法约束见降噪器。
项目以 directLightingMode 保存 DI 选择,旧 restirDi 字段仍兼容;Legacy 路径禁用 RT DI 下拉框。
详见光源树 NEE 与 ReSTIR 光照。
postfx.bloom 使用独立的 BloomSettings schema,postfx.tonemap 使用 ToneMappingSettings。当前后处理项全部归类为
HotUpdate:它们只改变下一帧的 pass 分支、push constants 或 uniform,不触发 pipeline 重组、资源重建或 TAA 历史失效。
Editor 的 Render / GI 面板提供以下设置:
AgX:默认开启;关闭后使用 ACES Filmic。Exposure:保留原有线性倍率语义,默认1.0;自动曝光开启时仍作为最终倍率参与合成。Auto exposure:默认开启;在 GPU 上对 Bloom 后的 scene-linear HDR 画面测光。Compensation EV:默认0 EV,范围[-8, 8],叠加到自动曝光结果。EV range:默认[-3, 10] EV,完整 schema 范围[-16, 16],最小值与最大值至少相差0.1 EV。Brighten speed/Darken speed:默认3.0/s与1.0/s,按真实成功提交帧间隔进行指数适应。Bloom:默认开启;关闭时跳过多级滤波并复制 TAA HDR 输出。Intensity:默认0.08,面板范围[0, 0.5]。Threshold:默认1.0,面板范围[0, 8]。Soft knee:默认0.5,范围[0, 1]。Radius:默认1.0,范围[0.5, 4]。
项目保存时,这些值写入场景 JSON 的 projectSettings.render:agx、autoExposure、
exposureCompensationEv、minimumExposureEv、maximumExposureEv、adaptationSpeedUp、
adaptationSpeedDown、bloom、bloomIntensity、bloomThreshold、bloomSoftKnee 和 bloomRadius。旧项目缺失字段时
使用上述默认值;加载后会将越界的有限数值
归一化到 schema 支持范围,非有限值由 typed schema 拒绝。Editor 修改设置后仍通过 ProjectSession 的
dirty/save 流程持久化,不直接写项目文件。