unity屏幕后处理全家桶v1、v2区别
使用方法区别
参考:https://github.com/Unity-Technologies/PostProcessing/wiki/(v2)-Quickstart
1. v1版本直接将postProcessBehaviour脚本拖到摄像机上,而v2中,将postProcessLayer拖到摄像机上,如图
好处:专用的layer放屏幕后处理效果以获取较好的性能。
注意:layer不要用everything或default,否则多个屏幕后期混合开销会较大
上图中,layer包含postProcess、default层,那么包含如下对象
和default层对象
2. 包含volume的游戏对象的创建:新建一个空GameObject,在右侧,点击Add Component按钮,在下拉列表中选取postProcessVolume,新创建的volume组件什么profile都没有,可以手动拖入已有的profile,也可以点击New新建一个profile。
- volume增加是否是global的属性。global的volume在整个场景中都有作用。
- 如果是局部volume,则需要有碰撞体(collider)组件绑定到它上来定义它的包围盒。最好用比较接近它而且比较简单的碰撞体;局部碰撞体还可以有个混合距离,代表从volume混合到外部的距离。只有自身所有collider中与TriggerTransform的最短距离在blendDistance范围内的非global的volume有作用。
- 还可以设置volume的强度,优先级,优先级定义volume在栈中的顺序,priority值越大,优先级越高(这个在代码里还没看到具体体现)。
- 如果TriggerTranform为空,则只有global的volume有作用,否则global和非global的volume都有作用。有作用的volume都根据权重混合。
- 每个volume包含profile。一个profile还可以有override,比如进入某个特定区域环境光变化,就可以在拷贝原来的profile,修改光照的选项,设置blend距离和优先级。
参考:
设计方面的区别
- v2的各个特效render,不直接用
public static void Blit(Texture source, RenderTexture dest, Material
mat, [Internal.DefaultValue("-1")] int pass);
而是用
cmd.DrawMesh(fullscreenTriangle, Matrix4x4.identity, propertySheet.material,