unity post processing stack v2——正式入坑第二弹

本篇主要讲解如何实现自定义的一个后处理效果,参考网址:
https://docs.unity3d.com/Packages/com.unity.postprocessing@2.2/manual/Writing-Custom-Effects.html

第1步:
编写一个C#脚本:
名字必须是:Grayscale.cs

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

[Serializable]
[PostProcess(typeof(GrayscaleRenderer), PostProcessEvent.AfterStack, "Custom/Grayscale")]
public sealed class Grayscale : PostProcessEffectSettings
{
    [Range(0f, 1f), Tooltip("Grayscale effect intensity.")]
    public FloatParameter blend = new FloatParameter { value = 0.5f };

    public override bool IsEnabledAndSupported(PostProcessRenderContext context)
    {
        return enabled.value
            && blend.value > 0f;
    }
}

public sealed class GrayscaleRenderer : PostProcessEffectRenderer<Grayscale>
{
    public override void Render(PostProcessRenderContext context)
    {
        var sheet = context.propertySheets.Get(Shader.Find("Hidden/Custom/Grayscale"));
        sheet.properties.SetFloat("_Blend", settings.blend);
        context.command.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);
    }
}

第2步:编写一个shader文件Grayscale.shader

Shader "Hidden/Custom/Grayscale"
{
	HLSLINCLUDE
	#include "../../Shaders/StdLib.hlsl"
	TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex);

	float _Blend;
	float4 Frag(VaryingsDefault i) : SV_Target
	{
		float4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord);
		float luminance = dot(color.rgb, float3(0.2126729, 0.7151522, 0.0721750));
		color.rgb = lerp(color.rgb, luminance.xxx, _Blend.xxx);
		return color;
	}

	ENDHLSL

	SubShader
	{
		Cull Off ZWrite Off ZTest Always
		Pass
		{
			HLSLPROGRAM

				#pragma vertex VertDefault
				#pragma fragment Frag

			ENDHLSL
		}
	}
}

第3步:写一个编辑器文件:GrayscaleEditor.cs

using UnityEditor.Rendering.PostProcessing;

[PostProcessEditor(typeof(Grayscale))]
public sealed class GrayscaleEditor : PostProcessEffectEditor<Grayscale>
{
    SerializedParameterOverride m_Blend;

    public override void OnEnable()
    {
        m_Blend = FindParameterOverride(x => x.blend);
    }

    public override void OnInspectorGUI()
    {
        PropertyField(m_Blend);
    }
}

开启grayscale的效果:

在这里插入图片描述
未开启grayscale的效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
postprocessing stack v2Unity 引擎中的一个功能强大的后处理效果工具。通过使用 postprocessing stack v2,你可以为你的游戏添加各种视觉上的增强效果,如颜色校正、模糊、抗锯齿,以及其他的图像效果。 在使用 postprocessing stack v2 之前,你首先需要将其导入到你的项目中。你可以在 Unity 的 Asset Store 或 Unity Package Manager 中找到并下载它。安装完成后,你可以在 Unity 的菜单栏中找到 "Window" -> "Package Manager",然后在打开的窗口中找到 "Postprocessing",点击导入按钮即可将其添加到你的项目中。 导入完成后,你可以在 Unity 的 "Hierarchy" 面板中创建一个空的游戏对象,并将 "Post Process Volume" 组件添加到该对象上。这个组件将决定哪些相机将受到后处理的影响。在"Post Process Volume"的属性面板中,你可以选择所需的配置文件。配置文件中包含了各种后处理效果的设置,如颜色校正、曝光度、对比度和抗锯齿等。 在配置文件中,你可以为不同的相机创建不同的配置文件。这样,你可以为不同的相机定制不同的后处理效果,并且你可以在运行时切换不同的配置文件。 如果你想为整个场景应用一个全局的后处理效果,你可以在场景中添加一个全局的 "Post Process Layer" 组件。这个组件将为场景中的所有相机应用相同的后处理效果。 postprocessing stack v2 还提供了一些其他的功能,如在屏幕上显示调试信息、自定义效果,并且还支持自定义脚本来创建独特的效果。 总的来说,postprocessing stack v2 是一个非常方便的工具,通过它可以轻松为你的游戏添加各种视觉上的增强效果,提升游戏的质量和吸引力,使其更加引人注目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值