Skip to main content

Creating post-processing profiles

There are some best practices to be aware of when adding post processing to your scene.

First, you should always have a base global post processing volume set up to have some basic tonemapping and bloom parameters. Then use seperate global or local volumes for colour shifting and other effects. For example, if you want to turn bloom off and on, have an extra object that turns it off, and toggle it with a trigger. Keep in mind that an individual volume can override as many or as few options as you want, and you can also use animations to smoothly interpolate between one set of options and any other!

Now, on to the available settings!

Colour Grading

The most important setting. You have four options for tonemapping: None, ACES, Neutral, and Custom.

image-1643232243270.png.jpg

  • Don't pick None. It does nothing.
  • ACES gives the most film-like image and is very popular with modern, cinematic games. It features powerful contrast, with bold colours and pale highlights.
  • Neutral was most popular with games from a few years ago, and preserves colours well. It can look washed out compared to ACES, but it preserves colours and is well suited to stylised scenes. I recommend increasing the Contrast when using Neural to 30-50.
  • Custom gives you many options, and allows you to define your own tonemapping curve. It's only recommended for experts who really want to achieve a specific look.

Between ACES and Neutral, which one you pick is up to preference. Try both and see which fits your map! Using Neutral allows you to receive the advantages of tone mapping without drastically changing the lighting of an existing map. It's also well suited to tweaking with the other colour controls. However, using ACES gives a rich colour balance, It needs strong lighting to reach full potential, but the end result can be very nice.

Underneath that, you're given a bunch of options for changing the colour tone of your scene. These are great for doing something artistic, or for providing options like a night-time filter that tints the world darker. If you want to tweak the colours, I recommend playing with the colour wheels, as they give fine controls that let you get amazing detail!

But keep your adjustments small! Unlike a film or game displayed on a screen, having intense colour toning will cause people in VR to get sick, as it will affect everything they see, including menus. A good benchmark is that if white objects are hard to identify as white, you have gone too far.

Auto Exposure

This can be enabled, but you can do without it too.

In a real camera, the brightness and darkness are defined by the camera's dynamic range, and the exposure point it's set to. Also, the human eye has incredible dynamic range, so you can see things really well even if there's a lot of difference between the darkest and lightest areas.

By default, Auto Exposure won't do anything until you raise the Minimum or Maximum value. The Minimum controls the lowest brightness the Auto Exposure will correct for, and the Maximum controls the highest brightness it will correct for. In other words, to make a dark place brighter, lower the Minimum, and to make a bright place darker, raise the Maximum.

In real life, things can get very bright. So, you might think to use really bright lights and take care of them with exposure. However, there is one caveat with VRchat - anything that is using a shader that doesn't account for Unity's lighting will likely be too dark or bright. 

So, for safety's sake, you should keep things around the default values. This generally comes down more to your lighting than the post processing, though, but auto exposure drastically affects how people see your lighting.

Bloom

This should be enabled and tweaked according to taste.

An ideal set-up means having a low bloom intensity and little to no threshold. This combination means normally lit objects don't produce visible bloom, but bright objects and glancing reflections will, properly simulating a clean but not perfect lens into our world.

  • Intensity: 0.01 to 0.3, don't go any higher!
  • Threshold: Below 1.0, but ideally 0.
  • Soft Knee: 1.0
  • Clamp: 30 - not required, but prevents some kinds of griefing.
  • Radius: Ideally 7, but higher is fine
  • Anamorphic: Ideally 0, as it will rotate with the headset in VR.
  • Fast Mode: Off, unless your scene has no bright objects.
  • Dirt: Off. Don't use dirt. As Unity will tell you, "Using a dirt texture in VR is not recommended."

Bloom is additive. Any light that comes out of the bloom effect is added onto the image. If the bloom's Intensity is set to 1, that means the average brightness of everything is doubled, and everything is blurry on top. Also, eye adaptation values are calculated before bloom, so it won't stop your bloom from making the image too bright.

But if the threshold is zero, won't everything bloom?

No, because low bloom intensity means only bright objects will have visible glow!

In VRchat, lighting worlds isn't just about how the world looks, but about how players look in it, too. Because of this, relying on Threshold is a bad idea. This is an example of bad bloom. Because of a threshold, only the bright parts of the image have bloom... but because the intensity is high, the result is completely blown out from just a regular white shirt.

It's also worth noting that a harsh threshold can cause flickering spots of bloom that cause eye strain. So please, ease off on the intensity and threshold! If your world needs bloomy things, make them very bright.

To check your bloom is set up correctly, place a white sphere with white emission at 1.0 strength and verify that it has little to no glow.

Film Grain

You can tweak it as you like, but don't make it too strong or you'll overwhelm people! In VR, film grain doubles up about a metre out in front of you, and setting it too strong will cause people to get a broken sense of parallax.

Unlike Stack v1, you don't need to use this to cover up for the broken dithering. I'm only mentioning this here so that you know you shouldn't use it... unless you want film grain.

Everything else

That concludes what you can use. Now here's what you should NOT use.

  • Anti-aliasing: Don't use it. This has lots of bugs. SMAA will cause the screen to double up. FXAA will make everything blurry. TAA will make everything super blurry, and renders objects out of order. In summary, don't use post-process anti-aliasing.
  • Ambient occlusion: Ambient occlusion is an effect that looks best in games using Deferred rendering. VRchat is using Forward rendering. This means it gets applied on top of everything else after they get shaded, which is bad! It is also not optimised for VR - the performance cost is huge, and it renders differently for each eye! On top of that, the best quality AO is broken in VR. If you want AO, please bake your lighting. Don't use this.
  • Depth of field: Has a high performance cost, and is very disorientating in VR. Please don't use this. If you really want to, make it be disabled by default.
  • Motion blur: If you really want to use it, make it be disabled by default. Motion blur can cause motion sickness. In VR, it is automatically disabled.
  • Screen-space Reflections: Only works for games using a Deferred renderer. VRchat doesn't support deferred rendering, so this can't be used.
  • Lens Distortion: Often, people find this effect makes them really uncomfortable. It causes sickness in VR. In v2, Unity disables Lens Distortion automatically for VR.
  • Vignette: Only to be used in very small amounts. A full-on vignette can cause sickness in VR.

The next section will cover some final notes for setting up your scene with post-processing.