Class PostProcessLayer
This is the component responsible for rendering post-processing effects. It must be put on every camera you want post-processing to be applied to.
Namespace: UnityEngine.Rendering.PostProcessing
Syntax
public sealed class PostProcessLayer : MonoBehaviour
Fields
antialiasingMode
The anti-aliasing method to use for this camera. By default it's set to None
.
Declaration
public PostProcessLayer.Antialiasing antialiasingMode
Field Value
Type | Description |
---|---|
PostProcessLayer.Antialiasing |
breakBeforeColorGrading
If true
, it will stop applying post-processing effects just before color grading
is applied. This is used internally to export to EXR without color grading.
Declaration
public bool breakBeforeColorGrading
Field Value
Type | Description |
---|---|
Boolean |
debugLayer
The debug layer is reponsible for rendering debugging information on the screen. It will only be used if this layer is referenced in a PostProcessDebug component.
Declaration
public PostProcessDebugLayer debugLayer
Field Value
Type | Description |
---|---|
PostProcessDebugLayer |
See Also
fastApproximateAntialiasing
Fast Approximate Anti-aliasing settings for this camera.
Declaration
public FastApproximateAntialiasing fastApproximateAntialiasing
Field Value
Type | Description |
---|---|
FastApproximateAntialiasing |
finalBlitToCameraTarget
If true
, it will render straight to the backbuffer and save the final blit done
by the engine. This has less overhead and will improve performance on lower-end platforms
(like mobiles) but breaks compatibility with legacy image effect that use OnRenderImage.
Declaration
public bool finalBlitToCameraTarget
Field Value
Type | Description |
---|---|
Boolean |
fog
Fog settings for this camera.
Declaration
public Fog fog
Field Value
Type | Description |
---|---|
Fog |
stopNaNPropagation
If true
, it will kill any invalid / NaN pixel and replace it with a black color
before post-processing is applied. It's generally a good idea to keep this enabled to
avoid post-processing artifacts cause by broken data in the scene.
Declaration
public bool stopNaNPropagation
Field Value
Type | Description |
---|---|
Boolean |
subpixelMorphologicalAntialiasing
Subpixel Morphological Anti-aliasing settings for this camera.
Declaration
public SubpixelMorphologicalAntialiasing subpixelMorphologicalAntialiasing
Field Value
Type | Description |
---|---|
SubpixelMorphologicalAntialiasing |
temporalAntialiasing
Temporal Anti-aliasing settings for this camera.
Declaration
public TemporalAntialiasing temporalAntialiasing
Field Value
Type | Description |
---|---|
TemporalAntialiasing |
volumeLayer
A mask of layers to consider for volume blending. It allows you to do volume filtering and is especially useful to optimize volume traversal. You should always have your volumes in dedicated layers instead of the default one for best performances.
Declaration
public LayerMask volumeLayer
Field Value
Type | Description |
---|---|
LayerMask |
volumeTrigger
This is transform that will be drive the volume blending feature. In some cases you may
want to use a transform other than the camera, e.g. for a top down game you'll want the
player character to drive the blending instead of the actual camera transform.
Setting this field to null
will disable local volumes for this layer (global ones
will still work).
Declaration
public Transform volumeTrigger
Field Value
Type | Description |
---|---|
Transform |
Properties
cameraDepthFlags
The current flags set on the camera for the built-in render pipeline.
Declaration
public DepthTextureMode cameraDepthFlags { get; }
Property Value
Type | Description |
---|---|
DepthTextureMode |
haveBundlesBeenInited
Returns true
if the bundles have been initialized properly.
Declaration
public bool haveBundlesBeenInited { get; }
Property Value
Type | Description |
---|---|
Boolean |
sortedBundles
Pre-ordered effects mapped to available injection points.
Declaration
public Dictionary<PostProcessEvent, List<PostProcessLayer.SerializedBundleRef>> sortedBundles { get; }
Property Value
Type | Description |
---|---|
Dictionary<PostProcessEvent, List<PostProcessLayer.SerializedBundleRef>> |
Methods
BakeMSVOMap(CommandBuffer, Camera, RenderTargetIdentifier, Nullable<RenderTargetIdentifier>, Boolean, Boolean)
Utility method to bake a multi-scale volumetric obscurance map for the current camera. This will only work if ambient occlusion is active in the scene.
Declaration
public void BakeMSVOMap(CommandBuffer cmd, Camera camera, RenderTargetIdentifier destination, RenderTargetIdentifier? depthMap, bool invert, bool isMSAA = false)
Parameters
Type | Name | Description |
---|---|---|
CommandBuffer | cmd | The command buffer to use for rendering steps |
Camera | camera | The camera to render ambient occlusion for |
RenderTargetIdentifier | destination | The destination render target |
Nullable<RenderTargetIdentifier> | depthMap | The depth map to use. If |
Boolean | invert | Should the result be inverted? |
Boolean | isMSAA | Should use MSAA? |
GetBundle(Type)
Grabs the bundle for the given effect type.
Declaration
public PostProcessBundle GetBundle(Type settingsType)
Parameters
Type | Name | Description |
---|---|---|
Type | settingsType | An effect type. |
Returns
Type | Description |
---|---|
PostProcessBundle | The bundle for the effect of type |
GetBundle<T>()
Grabs the bundle for the given effect type.
Declaration
public PostProcessBundle GetBundle<T>()
where T : PostProcessEffectSettings
Returns
Type | Description |
---|---|
PostProcessBundle | The bundle for the effect of type |
Type Parameters
Name | Description |
---|---|
T | An effect type. |
GetSettings<T>()
Gets the current settings for a given effect.
Declaration
public T GetSettings<T>()
where T : PostProcessEffectSettings
Returns
Type | Description |
---|---|
T | The current state of an effect |
Type Parameters
Name | Description |
---|---|
T | The type of effect to look for |
HasActiveEffects(PostProcessEvent, PostProcessRenderContext)
Checks if this layer has any active effect at the given injection point.
Declaration
public bool HasActiveEffects(PostProcessEvent evt, PostProcessRenderContext context)
Parameters
Type | Name | Description |
---|---|---|
PostProcessEvent | evt | The injection point to look for |
PostProcessRenderContext | context | The current render context |
Returns
Type | Description |
---|---|
Boolean |
|
HasOpaqueOnlyEffects(PostProcessRenderContext)
Checks if this layer has any active opaque-only effect.
Declaration
public bool HasOpaqueOnlyEffects(PostProcessRenderContext context)
Parameters
Type | Name | Description |
---|---|---|
PostProcessRenderContext | context | The current render context |
Returns
Type | Description |
---|---|
Boolean |
|
Init(PostProcessResources)
Initializes this layer. If you create the layer via scripting you should always call this method.
Declaration
public void Init(PostProcessResources resources)
Parameters
Type | Name | Description |
---|---|---|
PostProcessResources | resources | A reference to the resource asset |
InitBundles()
Initializes all the effect bundles. This is called automatically by the framework.
Declaration
public void InitBundles()
Render(PostProcessRenderContext)
Renders all effects not in the BeforeTransparent bucket.
Declaration
public void Render(PostProcessRenderContext context)
Parameters
Type | Name | Description |
---|---|---|
PostProcessRenderContext | context | The current post-processing context. |
RenderOpaqueOnly(PostProcessRenderContext)
Renders effects in the BeforeTransparent bucket. You should call HasOpaqueOnlyEffects(PostProcessRenderContext) before calling this method as it won't automatically blit source into destination if no opaque-only effect is active.
Declaration
public void RenderOpaqueOnly(PostProcessRenderContext context)
Parameters
Type | Name | Description |
---|---|---|
PostProcessRenderContext | context | The current post-processing context. |
ResetHistory()
This method should be called whenever you need to reset any temporal effect, e.g. when doing camera cuts.
Declaration
public void ResetHistory()
UpdateVolumeSystem(Camera, CommandBuffer)
Updates the state of the volume system. This should be called before any other post-processing method when running in a scriptable render pipeline. You don't need to call this method when running in one of the builtin pipelines.
Declaration
public void UpdateVolumeSystem(Camera cam, CommandBuffer cmd)
Parameters
Type | Name | Description |
---|---|---|
Camera | cam | The currently rendering camera. |
CommandBuffer | cmd | A command buffer to fill. |