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

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

使用Python实现生命之轮Wheel of life效果

《使用Python实现生命之轮Wheeloflife效果》生命之轮Wheeloflife这一概念最初由SuccessMotivation®Institute,Inc.的创始人PaulJ.Meyer... 最近看一个生命之轮的视频,让我们珍惜时间,因为一生是有限的。使用python创建生命倒计时图表,珍惜时间

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的