public struct PostProcessSettingsA look, as a set of opinions rather than as a complete description.
Remarks
Every field is optional, and that is the whole design. A volume contributes only what it opted into and everything else falls through to whatever is underneath — so two volumes that each care about one thing can both apply, and a volume that only wants the cellar darker does not also silently reset the grade. Unreal spells the same idea with a bOverride_ boolean beside every property; C#'s nullable is that boolean, and the [DataContract] generator already writes one.
⚠ An unset field is not a zero. That distinction is the feature. A bloom intensity of zero means "no bloom here", which is a real thing to say; means "I have no opinion about bloom", which is a different one. Anything that flattens the two — an inspector showing an unset float as 0, a serializer writing defaults — turns every volume into a full replacement and the overlap rule into nonsense.
⚠ No field here is a resource name, and none is part of the lens. A name would change the frame's graph, which a volume cannot do — see [32](../../docs/plan/32-post-process-volumes.md) — and the aperture, the shutter, the ISO and the focal length belong to Camera, which is the one place they can be without two claimants on one number. Unreal puts them here, and a cine camera's depth of field being overridden by a level's volume is the well-known consequence.
Exposure is a compensation rather than a value, for the same reason. "This cellar is two stops under what the meter says" is a statement about the place and composes with whatever the camera and the auto-exposure decided; "this cellar is EV 9" is a second claimant on a number something else owns, and two overlapping volumes would fight over an absolute instead of adding two offsets.
This is what a volume authors. What the frame consumes is PostProcessOverlay, which is the fold of several of these and carries a weight per field — see there for why the two are different types.
Fields and properties (32)
public float? ExposureCompensationStops added to whatever exposure the camera or the meter arrived at.
public float? LocalHighlightContrastHow much the highlights are brought down by the local exposure, 0 for none.
public float? LocalShadowContrastAnd how much the shadows are brought up.
public float? Ev100The exposure the frame is pinned to, as an EV at ISO 100.
public float? MeterMinimumEvThe darkest scene the meter may expose for, as an EV at ISO 100.
public float? MeterMaximumEvAnd the brightest, so a dark level cannot be metered up to noon.
public float? BloomIntensityHow much of the pyramid is composited into the image.
public float? BloomThresholdLuminance above which a pixel contributes, in the source's units.
public float? BloomKneeHow soft the shoulder under the threshold is, 0 for a hard knee.
public Vector3? BloomTintWhat colour the glow is tinted.
public float? ContrastContrast, applied around middle grey.
public float? SaturationSaturation, 0 for greyscale.
public Vector3? ColourFilterA multiplier on the whole image before the curve.
public float? TemperatureThe colour temperature the scene is graded against, in kelvin.
public float? TintGreen against magenta, perpendicular to the temperature.
public float? HueShiftHue rotation, in degrees.
public ColorGrading? GradingThe whole colour decision list, as one opinion.
public float? FogDensityHow thick the fog is.
public Vector3? FogColourWhat it looks like away from the sun, as a radiance in cd/m².
public bool? FogHeightFalloffWhether the fog thins with altitude, as an atmosphere does.
public bool? FogSunScatteringWhether looking toward the sun brightens the fog.
public float? VolumetricDensityHow thick the froxel medium is here, per metre.
public Vector3? VolumetricAlbedoWhat fraction of that scatters rather than absorbs, per channel.
public float? VolumetricPhaseGHenyey–Greenstein anisotropy: 0 an even glow, 0.9 a searchlight beam.
public float? VignetteIntensity0 is no darkening at the corners, 1 is fully dark.
public float? VignetteSmoothnessHow abrupt the vignette's falloff is.
public float? GrainIntensityHow much film grain there is.
public float? AberrationStrengthChannel offset at the screen edge, in UV units.
public float? FlareIntensityHow bright the lens flare's ghosts are.
public float? MaximumDefocusHow wide the defocus may get, in pixels.
public static PostProcessSettings NoneA look with no opinions at all, which is what a fold starts from.
public readonly bool IsEmptyWhether anything here has an opinion.
Methods (1)
public readonly void Opinions(ICollection<string> into)Adds the document name of every field that has an opinion.
Used by (18)
- AppGraphicsVixen.App.Hosting
- AutoExposureTestsVixen.Rendering.PostFx.Tests
- BloomTestsVixen.Rendering.PostFx.Tests
- LookAssetVixen.Rendering
- PostEffectTestsVixen.Rendering.PostFx.Tests
- PostProcessOverlayVixen.Rendering
- PostProcessVolumeVixen.Rendering
- PostProcessVolumeSystemVixen.Rendering
- PostProcessVolumeTestsVixen.Rendering.Tests
- StandardFrameTestsVixen.Rendering.PostFx.Tests
- TypeRegistrationVixen.Rendering
- Vixen_Rendering_Ecs_PostProcessSettingsSerializerVixen.Rendering
- Vixen_Rendering_Ecs_PostProcessVolumeSerializerVixen.Rendering
- Vixen_Rendering_LookAssetSerializerVixen.Rendering
- VolumetricFogIntegrationTestsVixen.Rendering.PostFx.Tests
- FrameVolumeStackTestsVixen.Editor.AssetEditors.Tests
- LookSettingsVixen.Editor.AssetEditors
- ResolvedVolumesVixen.Editor.AssetEditors