ue4-shader-后处理
ue4-shader-后处理
前篇
- 官方文档 - http://api.unrealengine.com/CHN/Engine/Rendering/PostProcessEffects/index.html
- 后期处理(Post Process)材质使用 - https://www.bilibili.com/video/av16176521/
官方已经提供了一些效果, 如 bloom, dof 等, 也可以通过材质自定义效果.
节点说明
一般的后处理的 场景贴图 大概都是这几个输出参数
- color : 贴图的 rgba
- size : 纹理的宽高
- invSize : 纹理宽高的倒数, 一般用于像素点的偏移
PostProcessVolume
最简单的启用 ppv, 修改一下颜色
直接拖一个 PostProcessVolume 进场景
修改颜色. 找到 color grading -> scene color tint 修改颜色, 这里将 g 改为 0
进入到 volume 内才能触发后处理效果
PostProcessVolume 不进入包围盒也能触发
如果想不进入 包围盒 也能触发, 勾选上 post process volume settings -> infinite extent, 也就是包围盒半径是无限大, 同时 Blend Raidus 会变为不可设置
场景深度图 sceneDepth
有两个节点可以获取到场景的深度图, sceneDepth 和 sceneTexture 设置为 sceneDepth
添加一个 ppv, 新建一个 材质球a, 把 a 丢进 post process materials 中
把 infinite extent 也勾选上, 这样就不用进入 包围盒 也能看到效果.
打开 材质球a, 把 material domain 的类型改为 post process, 此时输出的引脚变为只有一个 emissive color
添加一个 scene depth 节点, 除以一个比较大的数, 比如: 1000, 然后直接输出给 emission color
解释: 深度值是指 物体到摄像机的距离, 很可能是一个大于1的值, 而颜色值有是 01 区间的值, 所以除以一个比较大的数是为了约束其值到在 01 区间. 不然就是白茫茫的一片 (如果你看到的还是白茫茫一片, 可以尝试吧值调大一点)
还有个方式可以看到场景的深度. 场景预览窗口中 lit (默认) -> buff visualization -> scene depth
自定义深度图 customDepth
项目开启模板测试, 默认是关闭的. project settings -> engine -> rendering -> postprocessing -> custom depth-stencil pass, 不选取 disabled 都可以开启.
只有标记了的 不透明物体 ( opaque ) 才会 要渲染到 自定义深度buffer, 这个 buffer 与 深度buffer 不是同一个 buffer.
标记方式:在 mesh 组件下搜索 render, 勾选 render customDepth pass
具体参考: ue4-shader-自定义深度CustomDepth
customDepth 与 sceneDepth 区别
sceneDepth : 场景中的 不透明物体 ( opaque ) 都会渲染到一个 深度buffer 中
customDepth : 只有标记了的 不透明物体 ( opaque ) 才会 要渲染到 自定义深度buffer, 这个 buffer 与 深度buffer 不是同一个 buffer.
标记方式:在 mesh 组件下搜索 render, 勾选 render customDepth pass
查看buffer
打钩 代表有标记 render customDepth pass, 打叉 代表没有.
姿势一(简单)
lit -> buffer visualization -> custom depth 或者 scene depth
姿势二
添加一个后处理的方式查看.
sceneDepth
customDepth
场景贴图 PostProcessInput0
就是摄像机渲染出来的 颜色缓冲区
一个简单调色效果.
通过 mainColor 控制调色场景贴图
通过 color_overlay 来插值 原场景贴图 和 调色后的场景贴图,
InvSize 的使用
主要用于获取 临近像素.
简单示例: 通过 offset 参数来偏移 场景贴图