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]
#endif
    internal 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;
        }
    ENDHLSL

    SubShader
    {
        Cull Off ZWrite Off ZTest Always
        Pass
        {
            HLSLPROGRAM
                #pragma vertex VertDefault
                #pragma fragment Frag
            ENDHLSL
        }
    }
}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Postprocessing UnityPackage 是一个在Unity游戏引擎中用于图像后处理的软件包。它提供了一系列用于增强和改善游戏图形的工具和效果。 使用Postprocessing UnityPackage 可以轻松地添加一些常见的图像后处理效果,如景深、运动模糊、环境光遮蔽、色彩校正和曝光控制等。这些效果可以让游戏的画面更加逼真、细腻和引人注目。通过调整这些效果的参数,开发人员可以定制和优化游戏的视觉效果以满足特定需求。 Postprocessing UnityPackage 还具有易于使用的界面和文档。开发人员可以通过简单的拖放方式在Unity编辑器中添加效果,然后根据自己的需求进行调整和优化。该软件包还提供了详细的文档和教程,开发人员可以根据自己的需要学习和掌握各种效果的使用方法。 使用Postprocessing UnityPackage,开发人员可以为游戏创建出色的视觉效果,使其更具吸引力和真实感。无论是创建一个逼真的战斗场景,还是一个梦幻般的幻想世界,Postprocessing UnityPackage都可以帮助开发人员实现他们的创意和愿景。 总之,Postprocessing UnityPackage 是一个优秀的图像后处理工具包,为Unity游戏引擎提供了强大的图形增强和改善功能。它可以帮助开发人员创建令人惊叹的游戏画面,提供了广泛的效果选择和定制选项。无论是初学者还是有经验的开发人员,都可以利用该软件包创造出个性化和令人印象深刻的游戏视觉效果。 ### 回答2: postprocessing unitypackage 是一个在Unity中进行后期处理的插件包。它提供了许多用于增强游戏画面效果的工具和特效。通过使用postprocessing unitypackage,我们可以轻松地添加全局光影、色彩校正、景深效果、模糊效果、屏幕空间反射、抗锯齿等多种效果到我们的游戏中。 这个插件包的使用相对简单。首先,我们需要将postprocessing unitypackage导入到Unity项目中。导入后,我们可以在Unity的Inspector面板中看到一个Post-Processing Volume组件。我们可以将这个组件添加到相机上,从而使得该相机拍摄的画面应用后期处理效果。 为了添加特定的后期处理效果,我们需要在Hierarchy窗口中创建一个Post-Processing Profile对象,并将其分配给Post-Processing Volume组件。在这个Profile对象中,我们可以启用或禁用各种效果,并调整它们的参数。 例如,如果我们想要在游戏中添加一个全局光影效果,我们可以启用Bloom效果并通过调整Threshold、Intensity和Soft Knee等参数来调整效果的强度和质量。类似地,我们可以通过启用Antialiasing效果来降低图像的锯齿,并通过调整其参数来平衡图像质量和性能。 总之,postprocessing unitypackage是一个非常实用的插件包,可以让我们在Unity中轻松地实现各种令人惊叹的后期处理效果,提升游戏画面的质量和真实感。无论是优化图像质量,还是创造各种特殊的视觉效果postprocessing unitypackage都是一个值得使用的强大工具。 ### 回答3: 在Unity中,postprocessing unitypackage是一个非常有用且常见的资源包。它包含了一系列用于后期处理的特效和工具,可以用于提高游戏的视觉质量和真实感。 通过导入postprocessing unitypackage,开发者可以轻松地添加各种后期处理效果到他们的游戏场景中。这些效果包括颜色校正、景深、运动模糊、光晕、泛光、色彩分级和抗锯齿等等。这些效果可以创建出更加逼真的画面,增强游戏的视觉效果。 使用postprocessing unitypackage非常简单,只需要将资源包导入到Unity项目中,然后在需要应用后期处理效果的相机上添加对应的组件即可。开发者可以根据自己的需求调整效果的参数,以达到想要的效果。 除了已经包含的效果之外,postprocessing unitypackage还支持自定义后期处理效果。开发者可以使用自己的着色器来实现特定的效果,并将其添加到postprocessing stack中。这为开发者提供了极大的灵活性,可以创造出具有个性化风格的独特游戏画面。 总而言之,postprocessing unitypackage为Unity开发者提供了丰富多样的后期处理效果,可以显著提升游戏的视觉效果。无论是增强游戏的写实感,还是创造出独特的风格,postprocessing unitypackage都是一个非常有用的资源包。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值