Unity的PostProcessing后处理使用介绍

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

一、安装

打开PackageManager,然后搜索Post,应该就能看到左边出现搜索结果,选择,然后Install安装。
在这里插入图片描述
在这里插入图片描述

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

二、使用

1、添加PostProcessLayer组件

这个组件一般是添加在摄像机上面的。
在这里插入图片描述

2、添加PostProcessVolume组件

这个组件千万不要添加在摄像机上面,原因下面会说,建一个空物体,然后在它身上添加。
在这里插入图片描述

3、创建Profile

在这里插入图片描述

点New按钮,就会自动创建一个新的Profile文件,当然也可以直接拖旧的文件到这里。
在这里插入图片描述

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

4、添加效果

在这里插入图片描述

点击Add effect按钮
在这里插入图片描述
在这里插入图片描述

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

5、改变设置

这时候发现场景里面的东西并没有Bloom的效果。
在这里插入图片描述

下面对设置进行一些修改,先不用管为什么,下面会详细说。
先把IsGlobal选项勾上。
在这里插入图片描述

然后去PostProcessLayer,看到一个警告,说没有设置layer,因为当前是选择了Nothing。
在这里插入图片描述

先随便选择一个EveryThing,先不用管下面的警告,之后会说。
在这里插入图片描述

这时候,看到场景已经亮起来了,有了Bloom的效果。
在这里插入图片描述

6、创建layer

回头再来看刚才的警告
在这里插入图片描述

警告的意思是,不要用EveryThing和Default作为一个layer层遮罩使用。因为一般一个PostProcessLayer只需要看到自己指定的layer的volume,如果把所有层或者默认层都添加进去,会无端端增加了很多没有volume的对象,无端端增加了很多计算量。这一点,是一般美术同事们最容易忽略而犯错的地方。
于是就建一个新的Layer
在这里插入图片描述

为了容易看,我把新的层命名为PostProcess
在这里插入图片描述

然后设置volume所在的物体的层为PostProcess
在这里插入图片描述

PostProcessLayer指定的Layer也设置为只有PostProcess
在这里插入图片描述

三、PostProcessLayer的设置

下面详细说一下PostProcessLayer的设置项:
在这里插入图片描述

1、Volume blending

1.Trigger

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

2、Anti-aliasing

抗锯齿设置
在这里插入图片描述

3、Stop NaN Propagation

开启之后unity会自动用黑色代替没有渲染好的像素
在这里插入图片描述

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

4、Directly to Camera Target

在这里插入图片描述

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

5、Toolkit

在这里插入图片描述

1.Export frame to EXR

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

2.Select all layer volumes

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

3.Select all active volumes

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

6、CustomEffectSorting

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

四、PostVolume的设置

在这里插入图片描述

1、IsGlobal

设置当前这个Volume是否全局的。
全局的意思就是,不管放在哪里,这个Volume都能生效。
在这里插入图片描述

如果把IsGlobal去掉,会出现一个BlendDistance
在这里插入图片描述

从提示可以看出,我们想使用局部的后处理Volume,必须是先要添加一个碰撞体的。然后这个混合距离,就是后处理从无到有的过程中的一个过渡性的混合效果。
在这里插入图片描述

于是添加一个球体碰撞器
在这里插入图片描述

可以看到这个Volume上面出现了两个范围显示,一个是碰撞体范围,一个就是BlendDistance的范围
在这里插入图片描述

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

2、Weight

在这里插入图片描述

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

3、Priority

在这里插入图片描述

当前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选项,这就是我自定义的后处理效果了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到这里,自定义后处理效果添加完毕。

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Unity后处理是一种在渲染完成后对图像进行处理的技术,可以通过添后处理效果来改善游戏的视觉效果。Unity后处理功能包括色彩校正、景深、运动模糊、环境光遮蔽等效果。通过使用Unity后处理功能,游戏开发者可以轻松地创建出更逼真的游戏画面。 ### 回答2: Unity Postprocessing(后期处理)是一个集成到Unity引擎中的强大工具,它给游戏制作人员带来了更多的控制权和自由度,使游戏更优美、亮丽、高质量。Postprocessing可以改变游戏画面的整体色调、亮度、对比度以及模糊等特效,从而让游戏画面效果更佳、更精致。 具体来说,UnityPostprocessing Stack v2 提供了许多后期效果,包括屏幕空间环境光遮蔽 (SSAO)、景深、快速移动时的模糊、运动模糊、线性阴影、颜色校正等等。同时,Postprocessing还提供了相机后处理堆栈的模块化和可定制化的设计,这让用户能够以自己的方式去创建他们自己的后期处理效果。 此外,Unity Postprocessing可以轻松地实现各种图形效果,比如片头的转场、画面跳拍效果、飞行视图、泛光等,这些效果都是非常有利于提高游戏的画面效果的。 但是,由于postprocessing是对画面的后期渲染调整,因此它是一个消耗GPU性能的操作。因此,在使用Postprocessing的同时还要注意游戏性能的影响。它可能降低游戏的帧率、增大游戏的卡顿等。所以在使用Unity Postprocessing时,需要为游戏制定能够平衡画面质量和性能的策略。 综上所述,Unity Postprocessing 开发者可以通过使用这个工具,创建出高质量、层次分明、视觉冲击力强烈的游戏效果,不仅给玩家带来精彩的游戏体验,还可以成为游戏的差异化竞争优势。 ### 回答3: Unity中的后处理Postprocessing)是一种增强游戏视觉效果的技术,包括场景的颜色校正、环境光遮蔽、景深模糊、反射、抗锯齿、运动模糊等效果。它可以让游戏画面更真实、优美,提高游戏体验。 Unity中的后处理技术基于Shader的编写实现。通过在相机上添后处理脚本(Postprocessing Stack),我们可以将多种后处理效果堆叠在一起,使得游戏画面更华丽。常用的后处理效果包括: 场景的颜色校正,可以调整游戏画面的色彩风格,增游戏的氛围感。通过对场景的明度、饱和度、色调进行调整,可以精细地塑造出不同的场景环境。 环境光遮蔽,可以增强场景物体之间的空间感和深度感。它通过计算遮挡物体对光线的影响,使得场景中的物体在投射阴影时更真实。 景深模糊,可以产生焦距模糊的效果,增真实感。景深模糊通过使用相机的深度信息,计算出离焦点的模糊程度,使得镜头前后的物体在呈现效果上表现出不同的清晰度。 反射,可以让游戏中的水面、玻璃等物体反射出周围景色的效果更真实。反射通过计算出镜面上的反射图像,结合上色、模糊等特效,增强了游戏的逼真度。 抗锯齿,可以消除模型边缘的锯齿状痕迹。它通过对图像进行平滑处理,使渲染图像更平滑自然,很大程度上提高了游戏的视觉表现力。 运动模糊,可以模拟出快速移动时物体的虚化效果。它可以让场景中的运动物体表现出更真实的移动轨迹,使得场景更不拘束于静态效果。 总之,Unity中的后处理技术可以让开发者在保持游戏的性能表现不变的情况下,增游戏的美观度,更逼真自然。后处理技术已经成为现代游戏制作必不可少的一部分,得到了广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值