Unity 自定义Post Processing 后期效果

2024-06-13 15:08

本文主要是介绍Unity 自定义Post Processing 后期效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

测试环境

Unity2018.4.6

Post Processing2.1.7

实现后期效果需要三个文件 ,以GrayScale举例:

 

1.GrayScaleEditor.cs

    此文件主要做面板上控制属性显示

    

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;namespace UnityEditor.Rendering.PostProcessing
{[PostProcessEditor(typeof(GrayScale))]public sealed class GrayScaleEditor : PostProcessEffectEditor<GrayScale>{SerializedParameterOverride m_Blend;public override void OnEnable(){m_Blend = FindParameterOverride(x => x.m_Blend);}public override void OnInspectorGUI(){EditorUtilities.DrawHeaderLabel("GrayScale");PropertyField(m_Blend);}}
}

 

 

2.GrayScale.cs

  GrayScale类需要继承 PostProcessEffectSettings,这里主要是提供给用户的调参属性结构。

  GrayScaleRenderer类继承PostProcessEffectRenderer<GrayScale>,重载Render方法,此方法可以通过CommandBuff做效果。

using System;
using UnityEngine.Serialization;
namespace UnityEngine.Rendering.PostProcessing
{[Serializable][PostProcess(typeof(GrayScaleRenderer), UnityEngine.Rendering.PostProcessing.PostProcessEvent.AfterStack, "Unity/GrayScale", true)]public class GrayScale : PostProcessEffectSettings{[Range(0f, 1f), Tooltip("Grayscale effect intensity.")]public FloatParameter m_Blend = new FloatParameter { value = 0.5f };public override bool IsEnabledAndSupported(PostProcessRenderContext context){return enabled.value&& m_Blend.value > 0f;}}#if UNITY_2017_1_OR_NEWER[UnityEngine.Scripting.Preserve]
#endifinternal sealed class GrayScaleRenderer : PostProcessEffectRenderer<GrayScale>{public override void Render(PostProcessRenderContext context){var sheet = context.propertySheets.Get(Shader.Find("Test/Grayscale"));sheet.properties.SetFloat("_Blend", settings.m_Blend);context.command.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);}}
}

 

注意点:

MaterialPropertyBlock(MPB) 

MaterialPropertyBlock is used by Graphics.DrawMesh and Renderer.SetPropertyBlock. Use it in situations where you want to draw multiple objects with the same material, but slightly different properties. For example, if you want to slightly change the color of each mesh drawn. Changing the render state is not supported.

 

  这是文档的一段说明,Unity建议用MPB的API去替换掉传统的Material.setXXX,有用户测试过,提升还是蛮大的。猜测Unity应该是对材质管理和图形API底层Shader赋值的结构上进行了优化,降低了不必要的查找,拷贝等。

 

3.GrayScale.shader

   shader需要使用HLSL来编写,必须引入文件 StdLib.hlsl

Shader "Test/Grayscale"
{HLSLINCLUDE#include "Packages/com.unity.postprocessing/PostProcessing/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;}ENDHLSLSubShader{Cull Off ZWrite Off ZTest AlwaysPass{HLSLPROGRAM#pragma vertex VertDefault#pragma fragment FragENDHLSL}}
}

 

这篇关于Unity 自定义Post Processing 后期效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057649

相关文章

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依