Unity的PostProcessing后处理使用介绍

这篇具有很好参考价值的文章主要介绍了Unity的PostProcessing后处理使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是阿赵。
上一篇文章说了Unity的PostProcessing后处理有bug并提供了解决办法,这里顺便介绍一下PostProcessing的用法。

一、安装

打开PackageManager,然后搜索Post,应该就能看到左边出现搜索结果,选择,然后Install安装。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

安装完之后,会看到在Packages里面出现了PostProcessing文件夹。

二、使用

1、添加PostProcessLayer组件

这个组件一般是添加在摄像机上面的。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

2、添加PostProcessVolume组件

这个组件千万不要添加在摄像机上面,原因下面会说,建一个空物体,然后在它身上添加。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

3、创建Profile

unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

点New按钮,就会自动创建一个新的Profile文件,当然也可以直接拖旧的文件到这里。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

新建后,会发现Unity其实是帮我们建立了一个新文件。

4、添加效果

unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

点击Add effect按钮
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

选择其中一个效果,并设置参数。我这里随便先了一个Bloom效果。

5、改变设置

这时候发现场景里面的东西并没有Bloom的效果。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

下面对设置进行一些修改,先不用管为什么,下面会详细说。
先把IsGlobal选项勾上。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

然后去PostProcessLayer,看到一个警告,说没有设置layer,因为当前是选择了Nothing。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

先随便选择一个EveryThing,先不用管下面的警告,之后会说。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

这时候,看到场景已经亮起来了,有了Bloom的效果。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

6、创建layer

回头再来看刚才的警告
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

警告的意思是,不要用EveryThing和Default作为一个layer层遮罩使用。因为一般一个PostProcessLayer只需要看到自己指定的layer的volume,如果把所有层或者默认层都添加进去,会无端端增加了很多没有volume的对象,无端端增加了很多计算量。这一点,是一般美术同事们最容易忽略而犯错的地方。
于是就建一个新的Layer
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

为了容易看,我把新的层命名为PostProcess
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

然后设置volume所在的物体的层为PostProcess
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

PostProcessLayer指定的Layer也设置为只有PostProcess
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

三、PostProcessLayer的设置

下面详细说一下PostProcessLayer的设置项:
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

1、Volume blending

1.Trigger

这里指定了这个PostProcessLayer针对哪个摄像机,一般习惯都是挂在摄像机上面,所以默认就是自己,或者点This指定所在物体本身的摄像机。
2.Layer
指定这个PostProcessLayer可以渲染哪些Layer的Volume。

2、Anti-aliasing

抗锯齿设置
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

3、Stop NaN Propagation

开启之后unity会自动用黑色代替没有渲染好的像素
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

说明里面提到了,在GLES2平台上,这个设置是没有效果的。

4、Directly to Camera Target

unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

使用最终的位块到相机渲染目标进行后期处理。
提示里面说明,如果勾上这个,会减少开销,但会破坏使用旧版本的使用OnRenderImage的图片效果的兼容性。

5、Toolkit

unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

1.Export frame to EXR

可以把后处理导出成EXR格式

2.Select all layer volumes

快速选择场景里面所有的后处理volume

3.Select all active volumes

快速选择场景里面所有激活状态的volume

6、CustomEffectSorting

用于改变自定义后处理的渲染顺序。

四、PostVolume的设置

unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

1、IsGlobal

设置当前这个Volume是否全局的。
全局的意思就是,不管放在哪里,这个Volume都能生效。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

如果把IsGlobal去掉,会出现一个BlendDistance
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

从提示可以看出,我们想使用局部的后处理Volume,必须是先要添加一个碰撞体的。然后这个混合距离,就是后处理从无到有的过程中的一个过渡性的混合效果。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

于是添加一个球体碰撞器
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

可以看到这个Volume上面出现了两个范围显示,一个是碰撞体范围,一个就是BlendDistance的范围
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

这个时候,如果我们移动摄像机,进入触发范围,就可以看到有后处理效果,离开了范围之后,后处理效果就不再显示。
volume有全局和局部功能,还可layer与坐标有关系,所以千万千万不要把Volume挂在摄像机上面,这也是很多美术同事会忽略和犯错的地方。

2、Weight

unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

当前的Volume在场景里面占的权重值。

3、Priority

unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

当前Volume在堆栈里面的优先级别。

4、Profile

实际设置后处理效果的Profile文件指定。

五、自定义后处理效果

自定义后处理需要3个东西:

1、Shader

这里我随便写一个通过偏导数来求图形边缘的效果:

Shader "azhao/LineStyle"
{
	HLSLINCLUDE

#include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl"

	TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex);
	float _lineStrength = 1.0;
	float4 _lineColor = (0, 0, 0, 0);
	float4 _baseColor = (1, 1, 1, 0);

	float4 Frag(VaryingsDefault i) : SV_Target
	{
		float4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord);
		float grayscale = col.r * 0.2126729f + col.g * 0.7151522f + col.b * 0.0721750f;
		float ddVal = (saturate(ddx(grayscale) + ddy(grayscale))*_lineStrength);
		float3 finalRGB = _baseColor.rgb * (1.0 - ddVal) + _lineColor.rgb * ddVal;
		float4 finalCol = float4(finalRGB, 1);
		return finalCol;
	}

		ENDHLSL

		SubShader
	{
		Cull Off ZWrite Off ZTest Always

			Pass
		{
			HLSLPROGRAM

				#pragma vertex VertDefault
				#pragma fragment Frag

			ENDHLSL
		}
	}	
}

值得注意的是,由于一定要#include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl"才能生效,所以这个Shader一定要用HLSL写。

2、自定义效果的参数类

using System;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

[Serializable]
[PostProcess(typeof(LineStyleRender), PostProcessEvent.AfterStack, "azhao/LineStyle")]
public class LineStyle : PostProcessEffectSettings
{
    [Range(0f, 20f), Tooltip("Strength of line.")]
    public FloatParameter lineStrength = new FloatParameter { value = 1f };

    [ColorUsage(false), Tooltip("Color of line.")]
    public ColorParameter lineColor = new ColorParameter { value = Color.black};

    [ColorUsage(false), Tooltip("Color of base.")]
    public ColorParameter baseColor = new ColorParameter { value = Color.white };

}

这里指定了自定义参数在选择时候的路径,这里是"azhao/LineStyle"。然后还给予玩家在上面的shader用到的几个自定义参数的输入。

3、自定义效果的实现类

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class LineStyleRender : PostProcessEffectRenderer<LineStyle>
{
    public override void Render(PostProcessRenderContext context)
    {
        var sheet = context.propertySheets.Get(Shader.Find("azhao/LineStyle"));
        sheet.properties.SetFloat("_lineStrength", settings.lineStrength);
        sheet.properties.SetColor("_lineColor", settings.lineColor);
        sheet.properties.SetColor("_baseColor", settings.baseColor);
        context.command.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);
    }
}

这里是获取了自定义参数,然后设置给Shader,最后全屏渲染。

做完以上三步之后,会发现在Add effect时出现了我刚才指定的azhao/LineStyle选项,这就是我自定义的后处理效果了。
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理
unity后处理怎么加,Unity屏幕后处理,unity,游戏引擎,PostProcessing,后处理

到这里,自定义后处理效果添加完毕。文章来源地址https://www.toymoban.com/news/detail-752272.html

到了这里,关于Unity的PostProcessing后处理使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊

    发现之前学习记录的太过详细,导致整理的过程占用太长的时间了,这篇之后博客重要的是掌握实现过程,关于基础的理论会更多的放上别人写得更好的文章。 参考:【Unity Shader编程】之十五 屏幕高斯模糊(Gaussian Blur)后期特效的实现 高斯模糊只是各种模糊方式中的一种。模

    2023年04月08日
    浏览(28)
  • 【Unity Shader】屏幕后处理4.0:基于高斯模糊的Bloom

    原本打算写高斯模糊和双重模糊两个实现Bloom方法的对比,但两个加在一起篇幅过长,于是拆成两篇文章来进行。 学习前建议应先搞清楚的几个概念 HDR LDR ToneMapping 几种模糊算法 最近一直在学习Unity Shader实现各种后处理效果,Bloom效果就是其中之一,它也是游戏中最常见的效

    2023年04月11日
    浏览(34)
  • Unity指定使用某些屏幕(多屏开发)

    在一些展示场景中我们会遇到有多个画面需要展示在多个屏幕中的时候,此时很有可能运行我们的项目的设备上还运行着其他展示程序。如果仅仅是多屏展示,那么很有可能在我们的程序打开时抢占了原本正在运行的程序的屏幕。所以我们需要程序能在多屏展示中由我们自己

    2024年02月12日
    浏览(32)
  • 【Unity】从零使用Amplify Shader - 屏幕抓取与扭曲

    前言: 很多实际项目中,我们都需要对当前整个屏幕进行一些特殊处理,那再ASE中其实可以非常快速的实现,下面就跟着教程试试吧。 创建材质: ● 右键 - Create - Amplify Shader - Legacy - Unlit ● 在创建出的Shader上右键 - Create - Material - 起个名字 ● 打开ASE编辑器。 初步实现:

    2024年02月10日
    浏览(35)
  • unity修改单个3D物体的重力的大小该怎么处理呢?

    在Unity中修改单个3D物体的重力大小可以通过以下步骤实现: 创建一个新的C#脚本来控制重力: 首先,创建一个新的C#脚本(例如:GravityModifier.cs)并将其附加到需要修改重力的3D物体上。在脚本中,你可以使用Rigidbody组件来控制物体的物理属性。 将脚本附加到物体上,取消勾

    2024年02月13日
    浏览(39)
  • unity 双屏,多屏幕显示

    新建 scence ,新建 camera 给camera 的 targetDisplay 选择 为 display2 其中默认为display1 (如图) 然后在初始化中添加开启代码 到现在在场景中添加新的 game视图 然后选择display2 ,当前即为刚刚新建camea 的视图 ,可以新建cude 等测试 新建canvas ,在canvas中选择 targetDisplay2 ,那么当前的 ca

    2024年02月02日
    浏览(30)
  • Unity自适应屏幕

            在移动设备上,由于设备屏幕的种类与规格繁多,为了让游戏在不同屏幕上都能正常显示,我们需要对游戏进行适配。适配的方法很多,其中一种较为常见的方法是对游戏进行自适应屏幕的处理。本篇文章将介绍如何在 Unity 中实现自适应屏幕。         首先,

    2024年02月15日
    浏览(28)
  • unity屏幕截图功能

    1.在Editor文件夹新建脚本ScreenTest.cs 2.点击菜单栏的【Tools/截图】按钮 3.ctrl+r刷新下资源,图片会保存在Editor文件夹    备注: 1.运行/非运行状态下均可使用。 2.若想要自定义不同分辨率的图片可在Game窗口修改:    

    2024年02月15日
    浏览(34)
  • Unity实现屏幕淡入淡出效果

    预期效果:为实现在进入新场景时的淡入淡出效果 编译器版本:2021.3.19f1c1 使用组件:UI -- RawImage 在Unity场景切换的时候,使用RawImage制作场景的淡入淡出效果。 添加RawImage,覆盖全屏,将脚本添加上去

    2024年02月12日
    浏览(78)
  • Unity 物体固定屏幕尺寸(透视模式)

    如图所示物体远离摄像机后会被放大,靠近相机会被缩小,使得在屏幕上的大小保持不变; 导入插件后使用 gameObject.SetFixedScreenSize 即可启动固定屏幕尺寸功能

    2024年01月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包