This page describes how to create a custom post-processingA process that improves product visuals by applying filters and effects before the image appears on screen. You can use post-processing effects to simulate physical camera and film properties, for example Bloom and Depth of Field. More info post processing, postprocessing, postprocess
See in Glossary effect with Volume support.
URP provides a template for custom post-processing effects. The implementation in the template consists of a Renderer Feature, where you can inject the code for the custom effect, and the script that implements the code for interacting with the Volume component.
To create an effect using the template, select the following menu item:
Unity creates two new scriptsA piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info
See in Glossary in the Assets
folder: the script containing the Renderer Feature template and the Volume component script.
The template contains the example effect implementation that inverts colors on the screen.
In the Renderer Feature, in the Create
method you define the custom Material for the custom effect or the render pass that implements the effect logic.
The Renderer Feature script contains the ScriptableRenderPass
implementation.
You set the shaderA program that runs on the GPU. More info
See in Glossary properties for the custom effect in the following region in the render pass code:
#region PASS_SHARED_RENDERING_CODE
The render pass contains the following two regions. Unity selects the PASS_RENDER_GRAPH_PATH
region and uses the render graph API if Compatibility mode is disabled for the project, and uses the PASS_NON_RENDER_GRAPH_PATH
region otherwise.
#region PASS_NON_RENDER_GRAPH_PATH
#region PASS_RENDER_GRAPH_PATH
To set the effect properties on the volume component, modify the following line in the AddRenderPasses
method:
NewPostProcessEffectVolumeComponent myVolume = VolumeManager.instance.stack?.GetComponent<NewPostProcessEffectVolumeComponent>();
if (myVolume == null || !myVolume.IsActive())
s_SharedPropertyBlock.SetFloat("_Intensity", myVolume.intensity.value);
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.