Unity的PostProcessing后处理使用介绍

news2024/12/25 23:37:51

大家好,我是阿赵。
上一篇文章说了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选项,这就是我自定义的后处理效果了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个人的面相能直接反映其个性与命运

中国传统文化&#xff0c;博大精深&#xff0c;面相学只是其中一种。 在古代&#xff0c;面相学却是一门非常实用的学科&#xff0c; 尤其是经过了一代代人的发展&#xff0c;面相学得到了完善之后&#xff0c;他的准确性往往会超过现代人的预料。相由心生&#xff0c;面相是对…

用户端App 测试方法与技术

目录&#xff1a; app测试体系app项目测试流程app结构讲解app测试设计思路app常见bug解析常用模拟器使用android开发者选项安装mumu模拟器adb命令介绍adb环境搭建与配置adb与设备交互adb安装卸载应用adb命令启动页面adb命令清缓存adb文件传输adb日志操作adb命令操作Android设备…

DRF+Vue.JS前后端分离项目实例(下) --- Vue.js 前端实现代码

本文上篇请 点击阅读 1. 需求说明 本文以学生信息查询功能为例&#xff0c;采用前后端分离架构&#xff0c;后端提供RESTFul 接口&#xff0c;前端代码用Vue.js Bottstrap实现。 1.1 本例要求提供如下查询功能&#xff1a; 列表查询、单条查询 添加学生信息 更改学生信息 删…

在线试用Stable Diffusion生成可爱的图片

文章目录 一、 Stable Diffusion 模型在线使用地址&#xff1a;二、模型相关版本和参数配置&#xff1a;三、图片生成提示词与反向提示词&#xff1a;提示词1提示词2提示词3提示词4提示词5 一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/insc…

python 读取npy文件

import numpy as np test np.load("I:/软件/mask.npy") print(test) 如下图所示&#xff1a;

Web3 智能合约通过数组方式存储更多学生数据

之前的文章 Web3 在Truffle项目中编写出自己的第一个solidity智能合约带大家写了一个相对捡漏的智能合约 这样 每次 我们set 后 都会将原来的数据覆盖掉了 那么 有些人可能会想 那我们弄个数组 将新的数据全部加到数组里不就行了吗&#xff1f; 这个想法其实就很不错 我们可以…

数据结构与算法--javascript(持续更新中...)

一. 概论 1. 数据结构 队列&#xff1a;一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项&#xff1b;队列在尾部添加新元素&#xff0c;并从头部移除元素。最新添加的元素必须排在队列的末尾。&#xff08;例如&#xff1a;去食堂排队打饭&#xff0c;排在前…

JsonView下载安装

文章目录 一、JsonView概述二、JsonView下载三、JsonView安装四、JsonView测试 一、JsonView概述 SONView是一款非常好用的Json格式查看器。在日常开发调试中经常会遇到Json格式的数据需要解析阅读&#xff0c;但Json格式数据阅读性极差&#xff0c;JSONView可以帮我们解决Jso…

基于协同过滤算法的智能推荐点餐系统小程序/基于微信小程序的点餐系统

摘 要 在社会的发展和科学技术的进步&#xff0c;现在我们所生活的世纪是一个集信息高度数字化&#xff0c;网络化&#xff0c;信息化的&#xff0c;以网络为核心的社会。随着移动互联网的飞速发展&#xff0c;微信客户端的应用也逐渐广泛起来。与此同时&#xff0c;我国每个人…

上手CUDA编程

上手CUDA编程 文章目录 上手CUDA编程矩阵加法例子编译 查看本机GPU信息内存管理函数专门二维数组拷贝函数 Reference>>>>> 欢迎关注公众号【三戒纪元】 <<<<< 矩阵加法例子 编写 CUDA C 程序时&#xff0c; 要将文件命名为 *.cu&#xff0c;cu文…

新版危险废物标签二维码制作教程

生态环境部发布的《危险废物识别标志设置技术规范》已经在2023年7月1日正式实施&#xff0c;除了对危废标签格式、内容的规范&#xff0c;明确规定新版危废标签需要包含数字识别码和二维码&#xff0c;实现危险废物“一物一码”管理。 其中危险废物标签中的二维码部分&#xff…

【SuperPoint】语义SLAM深度学习用于特征提取

1. 概况 作者的写作思路很清晰&#xff0c;把各个技术点这么做的原因写的很清楚&#xff0c;一共三篇&#xff0c;另外两篇分别是2016年和2017年发表的&#xff0c;这三篇文章通读下来&#xff0c;可以看清作者在使用深度学习进行位姿估计这一方法上的思路演变过程&#xff0c…

IDEA中 jps+jmap+jconsole命令查看堆内存情况

结论 1.获取进程idjps2.jmap 某个时刻堆内存的情况jdk8之前jmap -heap pid 15876jdk8之后jhsdb jmap --heap --pid 158763.jconsole 动态查看堆内存情况&#xff0c;直接jconsole ,然后弹出可视化窗口jconsole其中12 要结合使用&#xff0c;且是静态的查看&#xff1b;3可以单…

【c++报错】无法打开自己的工程项目(C++ 无法打开文件“xxx.lib”)

问题&#xff1a; C 无法打开文件“xxx.lib” 问题分析&#xff1a; 在进行单个生成的时候&#xff0c;可以生成成功&#xff0c;也可以运行程序。但是点击全部重新生成时&#xff0c;就显示无法打开文件“xxx.lib”。 观察生成顺序&#xff0c;发现exe的程序&#xff08;调用…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的实践

熟悉蒸散发ET及其组分&#xff08;植被蒸腾Ec、土壤蒸发Es、冠层截留Ei&#xff09;、植被总初级生产力GPP的概念和碳水耦合的基本原理&#xff1b;掌握利用Python与ArcGIS工具进行课程相关的操作&#xff1b;熟练掌握国际上流行的Penman-Monteith模型&#xff0c;并能够应用该…

yarn 无法加载文件 CUsersAdministratorAppDataRoamingnpmyarn.ps1,因为在此系统上禁止运行脚本。的解决方案

yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本。 1、问题描述 执行yarn相关命令时报错&#xff1a; yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统…

PHP 学生信息管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 学生信息管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88027229https://down…

7 个顶级免费网站在线图像压缩工具!

在将图像上传到网站之前对其进行压缩是缩短网站加载时间的最简单、最有效的方法之一&#xff0c;从而改善访问者的网站体验并提高搜索排名。 大图像会显着降低网站的性能&#xff0c;这总体来说是个坏消息。幸运的是&#xff0c;您可以使用一些很棒的工具来帮助您轻松优化图像…

实现windows系统文件传输到Linux系统中的工具

1、实现windows系统文件传输到Linux系统中的工具 yum -y install lrzsz然后就可以将windows中的文件&#xff0c;直接拖到Xshell窗口即可。

Springboot快速回顾(集成Dubbo)

Dubbo是实现远程调用的一个框架&#xff0c;阿里巴巴开源的。远程调用就是B服务器可以调用A服务器的方法。大型项目会被拆分成多个模块&#xff0c;部署在不同的服务器上。若将公共模块集中部署在一台服务器上&#xff0c;可以方便其他服务器调用。因此&#xff0c;需要Dubbo。…