# 后处理资源
# 简要介绍
考虑到手写后处理管线比较复杂,为了方便开发者使用,小游戏框架内置了一些后处理效果,以及能简单使用它们的后处理资源。
# 重要属性与方法
属性名称 | 描述 |
---|---|
hdr | 后处理过程中是否采用高动态范围。 |
方法名称 | 描述 |
---|---|
addFXAA | 在最后一步添加快速近似抗锯齿。 |
addBloom | 在最后一步添加泛光效果。 |
addToneMapping | 在最后一步添加色调映射。 |
addGaussianBlur | 在最后一步添加高斯模糊。 |
addCustomEffect | 在最后一步添加自定义后处理。(*详见自定义效果) |
remove | 删除指定的后处理效果。 |
内置后处理效果均使用内置后处理节点,详细内容可参考内置后处理节点。
# 使用方法
后处理资源目前无法通过工具来创建,只能通过脚本来创建,并附加在相机上。
新建脚本,并添加到场景主相机上。
修改脚本内容,在onAwake阶段创建后处理资源。
import engine from "engine"; @engine.decorators.serialize("postprocess") export default class postprocess extends engine.Script { public onAwake() { const pp = new engine.PostProcessAsset(); pp.addBloom(); pp.addToneMapping("", 0.5); this.entity.getComponent<engine.Camera>(engine.Camera).postProcess = pp; } }
播放场景,观察在泛光和色调映射后,场景是否有相应效果。
# HDR
后处理资源上的hdr开关可以决定后处理过程是否使用高动态范围。
*IOS平台目前不支持开启该选项。
在以下情况下,应该开启hdr开关:
- 如果相机的输出颜色是高动态范围的,那么后处理资源上也应开启hdr;
- 如果后处理资源包括泛光效果,那么开启hdr会获得更好的效果。
# 开启hdr前后对比:
无后处理 开启泛光,关闭hdr 开启泛光,打开hdr 开启泛光和色调映射,打开hdr
# 注意事项
- 请使用后处理资源暴露出来的接口来对后处理效果进行改变。如果直接修改内部的数据,可能会没有效果。
- 在addXXX添加后处理效果时,在第一个参数传入名称。之后可以根据这个名称来对其进行修改(addXXX传入同一个名称来替换,remove传入同一个名称来删除)。
const pp = new engine.PostProcessAsset(); pp.addBloom("bloom", 20/*radius*/); // 想要修改泛光的范围 pp.addBloom("bloom", 15); // 想要删除泛光效果 pp.remove("bloom");
# 自定义效果
可以通过后处理资源来添加自定义后处理效果。
编写自定义后处理效果的渲染节点,记录下节点的序列化名称。
编写方法参考后处理节点文档。 记录下类装饰器里的自定义名称,这里以MyEffect
为例:@engine.RGPostProcessNode.serialize('MyEffect') export class RGMyEffectPostProcessNode ... { ... }
在后处理资源内使用
addCustomEffect
接口来添加自定义效果。
想要在最后一步添加MyEffect
效果的话:const pp = new engine.PostProcessAsset(); pp.addCustomEffect( "id0", // 和其他addXXX接口一样,需要为该步骤提供一个ID,任意即可 "MyEffect", // 在这里填入记录下的序列化名称 { ... // 这里填入自定义效果所需要的参数 } );