Files
engine/docs/zh/graphics/postProcess/postProcess.mdx
zhuxudong 3441a7690a Enhance post-processing document (#2604)
* refactor: enhance post-processing document
2025-04-07 18:59:25 +08:00

117 lines
6.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
order: 0
title: 后处理总览
---
后处理系统可以对相机渲染的结果进行“加工”。
<Comparison
leftSrc="https://gw.alipayobjects.com/zos/OasisHub/3a50ed18-c2d4-4b33-a4e6-af79f2c273f8/2024-07-18%25252018.08.30.gif"
leftText="OFF"
rightSrc="https://gw.alipayobjects.com/zos/OasisHub/4bd5f985-1b82-4aca-b6fa-fd521aab8f57/2024-07-18%25252018.15.30.gif"
rightText="ON"
/>
## 后处理组件
后处理有两种模式:
- 全局模式:影响当前场景中的所有相机。
- 局部模式:只有当相机靠近后处理实体的碰撞体范围时才生效。
后处理组件拥有以下属性,可以控制后处理的特效、模式、混合距离等:
| 属性 | 作用 |
| :-- | :-- |
| [全局模式](/apis/core/#PostProcess-isGlobal) | 控制这个后处理组件是全局还是局部模式。 |
| [混合距离](/apis/core/#PostProcess-blendDistance) | 局部模式时,用来控制相机靠近碰撞体多少距离时,开始混合特效。 |
| [优先级](/apis/core/#PostProcess-priority) | 当场景中有多个后处理组件时,优先级越高,越后面开始覆盖/混合。 |
| [层级](/apis/core/#PostProcess-layer) | 配合相机的[后处理遮罩](/apis/core/#Camera-postProcessMask) 使用,决定生效的后处理组件。 |
| [添加特效](/apis/core/#PostProcess-addEffect) | 添加后处理特效。 |
## 混合规则
- 全局模式时,混合规则是以优先级大的后处理组件为准。
- 局部模式时,会从相机距离碰撞体的 **混合距离** 开始, 从上一个后处理组件混合后的值过渡到当前后处理组件的值,如果没有上一个,则以后处理特效的定义值作为起始值。
举一个例子,强度的定义值为 `0`, 即通过 [PostProcessEffectFloatParameter](/apis/core/#PostProcessEffectFloatParameter) 定义了这个强度:
- 后处理组件 1全局模式强度为 `0.5`,混合后为 `0.5`
- 后处理组件 2局部模式强度为 `1` 相机距离碰撞体为混合距离的一半,混合后为 `mix( 0.5, 1, 1 - distance / blendDistance)` = `0.75`
<Callout type="info">
如果想要自定义后处理,请参考 [文档](/docs/graphics/postProcess/customPostProcess/#3-融合数据)
</Callout>
## 使用后处理
### 1.添加后处理组件
在层级面板,预设了全局、局部后处理的几种模式,选择添加即可直接使用。
<Image src="https://gw.alipayobjects.com/zos/OasisHub/a6e9a327-1823-4dde-94a8-89bb4bf02e3a/2025-01-15%25252011.59.50.gif" />
当然,也可以手动添加后处理组件,局部模式需要搭配碰撞体进行使用:
<Image src="https://gw.alipayobjects.com/zos/OasisHub/6eb3b8d5-27d1-419d-8bf6-65371861fb97/2025-01-15%25252014.51.12.gif" />
<Callout type="info">具体的后处理效果配置,请参考 [后处理效果列表](/docs/graphics/postProcess/effects)</Callout>
### 2.相机开关
相机预览区受**相机组件**控制,在相机组件中,以下属性也会影响后处理效果:
| 属性 | 作用 |
| :-- | :-- |
| [后处理开关](/apis/core/#Camera-enablePostProcess) | 可以开启或关闭相机的后期处理效果。 |
| [HDR 开关](/apis/core/#Camera-enableHDR) | HDR 模式下,允许输出颜色使用浮点数进行存储,可以得到更大范围的值,用于[泛光特效](/docs/graphics/postProcess/effects)等场景。 |
| [MSAA 配置](/apis/core/#Camera-msaaSamples) | 可以调整多重采样抗锯齿的设置,改善锯齿等画面质量。 |
| [后处理遮罩](/apis/core/#Camera-postProcessMask) | 配合后处理组件的[层级](/apis/core/#PostProcess-layer) 使用,决定生效的后处理组件。 |
<Callout type="info">相机更多配置参考 [相机组件](/docs/graphics/camera/component)</Callout>
### 3.视图区开关
除了相机预览区,视图区也能看到后处理效果。视图区的相机是独立的,但是也和相机组件一样拥有后处理等配置。
<Callout type="warning">视图区的开关只会影响视图窗口,并不会影响项目导出的真实效果</Callout>
<Image src="https://gw.alipayobjects.com/zos/OasisHub/e3c55184-f51c-4a7a-9a12-ad490774dc26/image-20250115151324628-20250115151336116.png" />
### 4. Pro code
```ts
// 获取后处理组件
const postProcessComponent = entity.getComponent(PostProcess);
// 设置后处理组件的一些属性
postProcessComponent.isGlobal = false;
// 获取已有的后处理特效
const bloomEffect = postProcessComponent.getEffect(BloomEffect);
// 也可以手动添加后处理特效
const bloomEffect = postProcessComponent.addEffect(BloomEffect);
// 设置后处理特效的属性
bloomEffect.intensity.value = 1;
bloomEffect.threshold.value = 0.5;
```
<Callout type="info">具体的后处理效果配置,请参考 [后处理效果列表](/docs/graphics/postProcess/effects)</Callout>
## 后处理遮罩
前面提到,后处理组件有一个属性叫做[层级](/apis/core/#PostProcess-layer),当场景中有多个后处理组件时,可以配合相机的[后处理遮罩](/apis/core/#Camera-postProcessMask)使用,来决定生效的后处理组件;
此功能只是用来决定数据融合的来源,如果你只想要某些物体具有后处理,可以使用多场景方案,将不需要后处理的 Entity 添加到另外一个 Scene 下面。
<Image src="https://gw.alipayobjects.com/zos/OasisHub/ad36f45d-8e15-4fab-8ce9-dc0641a812d4/image-20250407183538658.png" />
<Image src="https://gw.alipayobjects.com/zos/OasisHub/d578cdb0-5f96-496b-91d6-8fedca938a3b/image-20250407183445964.png" />
## 最佳实践
- 关于相机中 `HDR` 开关,如果场景中绝大部分像素计算没有超过 1比如没有使用 HDR 贴图), 尽量别开启 HDR开启后引擎会先渲染到 `R11G11B10_UFloat` 格式的 RenderTarget 中,再渲染到屏幕上,有性能开销。
- 关于相机中的 `MSAA` 选项,仅当开启了后处理,且对锯齿表现要求严格的情况下,才建议调整这个值,值越大,性能开销越大。
- 泛光特效中,`Down Scale` 默认为 `Half`,即初始降采样的分辨率为画布的一半,如果对精度要求没那么高,可以切换为 `Quarter`,节省为画布的 1/4。
- 色调映射特效中, 虽然 `ACES` 拥有更好的色彩对比度和饱和度,但是计算比较复杂,在低端机型可能导致降帧严重,可以尝试使用 `Neutral` 作为替代方案。