unity插件Post Process 后期效果 画面特效 颜色替换

Posted 煮粥侠_99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity插件Post Process 后期效果 画面特效 颜色替换相关的知识,希望对你有一定的参考价值。

 插件的说明文档、安装方式:

Installation | Post Processing | 3.2.2

资源备份:

PostProcessing2(UnityPackage后期处理视觉效果处理)-Unity3D文档类资源-CSDN下载

一、创建空物体,添加组件:Post-process Volume

  1. 新建一个profile

  2. Add effect添加需要的效果。

  3. 将这个对象的Layer设置为特定的层,这里我命名为Post-process。

Volume可以控制具体的效果、作用范围
为Volume设置Layer、触发的范围
  •  Is Global:是否在全局应用效果。勾选就是全局,否则是局部效果。
    • 局部效果需要再添加一个3D collider,比如Box Collider。当Camera进入Collider,便可以看到添加的画面效果。

二、在Camera上添加组件:Post-process Layer

  1. 设置trigger。点后面的This按钮即可。
  2. 设置Layer,设置为Post-process

  • Trigger:设置某个对象的 Transform 用作特效的触发器。
    • 这个 Transform 控制混合功能,Unity 默认将 Camera 分配给Trigger。也可以使用其他游戏对象来控制混合功能。
    • 例如,在一个top-down game中,或许用玩家角色 GameObject 来驱动混合更加合适,而不是相机 Transform。
    • 当此字段设置为 None 时,将禁用该层的局部Volume(全局Volume正常工作)。
  • Layer:这里Layer不是指要对哪些层进行渲染,而是选择volume所在的Layer,只有这些Layer上的Volume的效果会被渲染。
  •  top-down Game :Eastward

 一些Effect:

调色相关——Color Grading 的一些功能:

原始画面: 

 更高饱和度: Hue Vs Sat

改变色相:Hue Vs Hue

去色/保留:Hue Vs Sat

颜色替换 

用于颜色替换的初始图片:

look up texture - 查找纹理 (LUT) 
  1. 在Ps里,将画面调色至满意的效果
  2. 将应用的效果叠加在这张初始LUT
  3. 保存修改后的LUT,放进Unity中。
  4. 将Lookup Texture指定为该LUT,即可对画面进行颜色替换。

  

代码部分: 

using UnityEngine.Rendering.PostProcessing;

创建新Volume:

[
public PostProcessVolume QuickVolume(int layer, float priority, params PostProcessEffectSettings[] settings)
]

示例:动态创建一个Bloom。并在Update中控制其亮度变化。

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class Test : MonoBehaviour

    PostProcessVolume m_Volume;
    Bloom m_bloom;
    float startValue = 12.68f;

    void Start()
    
        // Create an instance of a Bloom
        m_bloom = ScriptableObject.CreateInstance<Bloom>();
        m_bloom.enabled.Override(true);
        m_bloom.intensity.Override(startValue);
        // Use the QuickVolume method to create a volume with a priority of 100, and assign the bloom to this volume
        m_Volume = PostProcessManager.instance.QuickVolume(gameObject.layer, 100f, m_bloom);
    
    void Update()
    
        // Change intensity using a sinus curve
        m_bloom.intensity.value = startValue + Mathf.Sin(Time.realtimeSinceStartup)*6f;
    
    void OnDestroy()
    
        RuntimeUtilities.DestroyVolume(m_Volume, true);
    

这段代码创建一个新的Bloom效果并将其分配给新生成的Volume。然后,在每一帧改变泛光的强度。为避免内存泄漏,请在不再需要时销毁Volume和附加的Profile。

配置文件编辑

您也可以手动编辑一个或多个Volume使用的现有配置文件(profile)。为此,您可以使用PostProcessVolume. 每个字段的效果略有不同:

  • 直接修改shared profile:
    • 类字段名称:sharedProfile
    • 将会更改应用到使用相同配置文件的所有Volume
    • 修改了asset——退出播放模式时不会重置
  • 请求一个shared profile的克隆,仅用于此Volume
    • 类字段名称:profile
    • 将更改应用到指定的Volume
    • 退出播放模式时重置
    • 当您不再需要配置文件时,您必须手动销毁它

PostProcessProfile包含以下实用方法:

实用方法描述
T AddSettings()为profile创建、添加且返回一个T类型的新effect。如果已经存在则抛出异常
PostProcessEffectSettings AddSettings(PostProcessEffectSettings effect)将您创建的effect添加到profile,并返回该effect。
void RemoveSettings()从profile中删除effect。如果不存在则抛出异常。
bool TryGetSettings(out T outSetting)从profile中获取effect。如果找到profile,则返回 true,反之返回 false

/PostProcessing/Runtime/PostProcessProfile.cs您可以在源文件中找到更多方法。

重要提示:必须销毁任何手动创建的 profile 或 effect 。

补充说明

如果需要在运行中实例化PostProcessLayer,必须将PostProcessResources文件绑定到它。

AddComponent之后,调用PostProcessLayer 的Init(),将PostProcessResources 文件作为参数使用。

Resource在哪里?在PostProcessLayer脚本的导入设置中,点击这一栏即可定位到它!

例:

var postProcessLayer = gameObject.AddComponent<PostProcessLayer>();
postProcessLayer.Init(resources);

PostFX v2后期处理特效包:升级更惊艳的视觉效果

https://mp.weixin.qq.com/s/BMkLLuagbhRSWspzeGhK7g

Post-Processing Stack后期处理特效包能够轻松创建和调整高质量视觉效果,实现更为惊艳而逼真的特效。在Unity 2018.1 beta版本推出后,我们根据用户的反馈为Post-Processing Stack后期处理特效包添加了一些功能,并修复了大量bug;我们还添加了针对移动端的支持、体积混合以及一整套为自定义用户效果提供的框架。

 

Post-Processing Stack后期处理特效包的第二个版本,在本文中我们将简称为:PostFX v2。它将带给用户Asset Store资源商店工具包一样的插件灵活性,同时又带有Unity核心功能的更新能力。你也可以通过Unity Hub中的Templates模板功能进行获取。

 

在Unity 2018.1中,PostFX v2拥有更高质量的特效、自带强大重写栈的自动体积混合功能,以及一个灵活的框架,用于编写和发布自定义效果。Post-Processing Stack后期处理特效包能够与LWRP、HDRP和内置渲染管线兼容使用。

 

技术分享图片

左边没有使用后期处理功能,右边使用了全栈的后期处理功能

 

PostFX的发展过程

PostFX v1 已经在Asset Store资源商店推出了一段时间,旨在收集用户反馈、了解用户工作流并提升质量和效率。这个过程给予了我们宝贵的信息,让我们知道如何改进这个功能并将它进入下一阶段。

 

PostFX v2改进了PostFX v1 的多个效果,我们将工作流更改为体积方法,以便能够更轻松地在效果之间进行切换,而不需要多个带有各自栈的摄像机。

 

PostFX v2在其开发过程中托管在GitHub,我们这样做是为了使它能尽可能开放和透明,让用户提供反馈和贡献。在这个过程中,我们得到了一些很不错的反馈:超过2000个星数和330个fork。我们开放了450个身份票据和30个合并请求,其中包括从小型修复到大型PR等内容,我们的用户自定义了栈并将他们的变更集发给了我们。感谢所有尝试使用PostFX的用户,感谢你们提供的反馈。

 

如何获取PostFX

现在你可以从编辑器中的资源包管理器获取PostFX,这样得到的工具包是经过测试并验证的版本。如果你想要PostFX v2的最新开发分支,那么它仍在GitHub上托管着,你可以访问Github获取。

下载地址:https://github.com/Unity-Technologies/PostProcessing

 

Unity资源包管理器(Package Manager)是Unity 2017.2新增的功能,它是一个模块化系统和API,能够在项目中动态载入和更新Unity开发的新功能。Unity 2018.1以此为基础更进一步,加入了全新发布的资源包管理器用户界面(Package Manager User Interface)、Hub和项目模板(Project Templates),这些功能都将帮助你更快更高效地开启新项目。

 

技术分享图片

 

你也可以通过Unity Hub的模板获取这个工具。项目模板能够改变你在Unity中开启新项目的方式。Unity项目模板功能旨在提高大多数用户的“开箱即用”体验。这些模板基于最佳常用实践为不同的项目类型提供了相应的预选择设置,例如移动端、高端PC、3D、2D和VR等。

 

你可以阅读《Unity资源包管理器-全新项目管理方式》和《使用Unity 2018.1项目模板功能》,了解Unity资源包管理器以及如何充分利用模板功能。

 

内置工具

默认情况下,我们为你准备了一整套内置效果,用来自定义场景的外观和感觉。这其中的不少效果自从PostFX v1发布后就经过了重写,在这个新版本中还加入了一些新的组件。我们尽可能地将效果合并到了一个渲染pass中,而其它则仍是独立的。我们提供了一些移动端专有选项,用以帮助在低端设备上优化。下面来了解下包含了哪些工具吧。

 

技术分享图片

 

环境遮蔽(SAO、MSVO)

环境遮蔽(SAO、MSVO)能够使互相接近的皱褶、洞穴、相交部分和平面的色彩变暗。这是因为在现实生活中,这类区域会挡住或遮盖环境光,从而看起来更暗一些。

 

抗锯齿(FXAA、SMAA、TAA)

抗锯齿效果提供了一组算法,用来防止出现锯齿现象,并为3D图形提供更平滑的外观。锯齿现象是指在画面中的线条呈现锯齿状或是带有“梯形”的外观效果。

 

在Post Processing Stack中提供的算法有:

  • 快速近似抗锯齿算法(FXAA)

  • 子像素形态抗锯齿算法(SMAA)

  • 短时抗锯齿算法(TAA)

 

自动曝光

自动曝光效果会根据图像所包含的亮度范围来动态调整图像的曝光。调整过程会在一段时间内逐渐发生。例如:当玩家从黑暗的通道中出来时,会被明亮的户外光短暂地刺眼。相同的,当从明亮的场景移动到黑暗的场景时,“眼睛”会需要一些时间来调整。实际上,这个效果曾在Post Processing Stack v1叫作“眼睛适应”(Eye Adaptation)。

 

泛光效果

泛光效果效果会产生从图像明亮区域的边界延伸出的光线条纹,从而使摄像机或眼睛产生极其明亮的光亮幻觉。

 

色差

色差效果是由于摄像机镜头无法将所有颜色汇集到同一点而产生的。它会在边缘部分以色彩“条纹”的样子出现,从而分离图像的黑暗部分和明亮部分。

 

色差效果便是用来仿制摄像机的这个瑕疵。它也经常用作艺术特效,作为摄像机效果的一部分。

 

颜色分级(LDR、HDR、CUBES)

颜色分级用于调整或校正最终图像的色彩和亮度。你可以将这个过程看作类似在Instagram中应用滤镜。

 

颜色分级效果带有三个模式:

  • 低分辨率范围(Low Definition Range):这个模式针对低端平台使用,但它其实可以在任意平台上使用。分级会应用于最终渲染帧上,并将其压缩到0到1之间的强制范围内,然后储存在标准LUT中。

  • 高分辨率范围:这个模式针对支持HDR渲染的平台使用。所有颜色操作过程将应用于HDR,存储在3D编码日志的LUT中,从而确保有足够的覆盖范围和精准度(Alexa LogC El1000)。

  • 外部范围:这个模式能让你提供在外部软件中编写的自定义3D LUT。

 

景深

景深(Depth of Field)是个常见的后期处理效果,它模拟了摄像机镜头的对焦属性。在现实生活中,摄像机只能以特定距离对焦一个物体对象,在摄像机较近或较远的对象都会略微失焦。

 

粒度

粒度(Grain)效果是基于相干梯度噪声实现的。它常用于模拟电影画面的明显缺陷,也经常在恐怖题材游戏中用于表现夸张的画面效果。

 

镜头失真

镜头失真(Lens Distortion)效果通过使最终渲染图像失真或不失真来模拟镜头形状。

 

动态模糊

动态模糊(Motion Blur)是个常见后期处理效果,它模拟的效果是,当一个对象被摄像机拍摄且摄像机的移动速度比其曝光速度快时产生的图像模糊效果。这个效果可以通过快速移动对象或是增长曝光时间产生。

 

屏幕空间反射

屏幕空间反射(Screen-space Reflection)是个通过重用屏幕空间数据来计算反射的技术。这个技术常用于制作更为简单的反射效果,例如潮湿地板表面或水坑的反射效果。

 

晕影

在摄影学上,晕影(vignetting)是个专业术语,指的是使图像边缘相对于中心暗化和/或稀释的效果。

 

组件

Post Process Layer

Post Process Layer组件位于你的摄像机上。你可以在Component -> Rendering -> Post-process Layer找到它。

 

Post Process Layer组件能够分解不同的标题;通过设置触发器(通常是摄像机Transform)和应用图层来控制体积混合,也能应用所选的抗锯齿方法并启用雾效果。下方的额外“Toolkit”设置带有一些工具用来将当前帧到处为EXR格式文件。最后的部分能让你修改自定义效果的渲染顺序。

 

技术分享图片

 

Post Process Volume

在这个框架中,后期处理效果是通过使用本地体积和全局体积完成的。它能让你给各个体积一个优先级和效果重写集合,从而自动在场景中混合后期处理设置。例如:你可以在全局设置一个光照晕影效果,但当玩家进入洞穴时,你只需要在保持其它设置完好的情况下,重写晕影的强度设置并增强其强度即可。

 

技术分享图片

 

在本示例中,我们勾选了Global Volume上的“Is Global”选项,使得其它体积将从这个体积和Post Process Profile派生出来。然后我们创建了一个“Cave Area Profile”来使摄像机(触发器)进入触发器区域(由方块碰撞体设置)时从“Global Profile”重写效果。“Cave Area Profile”拥有一个混合距离集合和比Global Volume(全局体积)更高的优先度。

 

我们可以从下面视频中看到,Post Process Volume组件是如何在场景中工作的。当摄像机进入体积时,全局设置被重写,效果很好地混合了起来。

 


Post Process Debug

技术分享图片

 

Post-Processing Stack还包含一个显示器集合和调试视图,用来帮助你正确设置效果并在输出结果中调试问题。

 

技术分享图片

 

创建自定义效果

该框架还能让你编写自定义后期处理效果并将它们插入到栈中,而无需修改代码库。当然所有针对框架编写的效果,都能够与体积混合功能有开箱即用的使用效果,除非你需要依赖循环实现的功能,否则它们都会在可编程脚本渲染管线SRP上自动运行。

 

下面是Unity工程师Keijiro的一些实验效果:

 

技术分享图片

实现自定义效果

 

技术分享图片

添加风格化特效

 

与Cinemachine和Timeline结合使用

PostFx v2紧密地与编辑器的其它部分整合了起来。例如:Cinemachine会利用一个Cinemachine Post Processing Component实现整合。这二者都可以添加到Timeline中,从而使艺术家和设计师得到完整的创意控制。

 

技术分享图片

在移动端运行

在移动端运行后期处理效果不是件易事。例如:环境遮蔽这样的一些效果,即使在最高端的移动平台运行,它的资源消耗也过于昂贵。

 

例如抗锯齿、泛光、色差等这样的效果,我们创建了“快速模式”,它能通过降低质量提高性能。我们还建议为颜色分级使用低分辨率范围,尽可能降低其它效果的使用。我们目前正制作一个更为针对移动端的优化,它将在后续推出。

 

结语

PostFx v2能够帮助开发者轻松创建并调整高质量视觉效果,实现惊艳和逼真的效果。体积混合功能使之能轻易地在体积间切换、重写和混合不同的内置或自定义效果,欢迎大家使用!更多Unity最新功能介绍尽在Unity官方中文论坛(Unitychina.cn)!


以上是关于unity插件Post Process 后期效果 画面特效 颜色替换的主要内容,如果未能解决你的问题,请参考以下文章

unity post processing的应用

PostFX v2后期处理特效包:升级更惊艳的视觉效果

Unity - 将后期处理效果应用于所有 UI 元素

Unity中的后期处理:PostProcessing

Unity shader学习之屏幕后期效果之调整屏幕亮度,饱和度,对比度

Unity3D+Post Processing Stack V2自定义后处理效果研究