diff --git a/README.md b/README.md index 7c9cc58..8a37154 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ If you have any other post-processing effects on your camera that make use of th ![PPV2 Camera Setup](images/camera-ppv2.png) +Also make sure that any other anti-aliasing methods (MSAA, FXAA, SMAA, TAA) are disabled when enabling FSR2. + ### Callbacks FSR2 for Unity requires the application to provide a few services that it can't make any assumptions about itself. For this purpose, it exposes an `IFsr2Callbacks` interface with a default implementation `Fsr2CallbacksBase`. The application can provide these callbacks by either implementing the `IFsr2Callbacks` interface or inheriting the `Fsr2CallbacksBase` class and overriding one or more methods. Assign these callbacks to the `Callbacks` property on the `Fsr2ImageEffect` script component, before the script is enabled. @@ -64,11 +66,11 @@ One key part of FSR2 is adjusting the mipmap bias of textures. Normally when low Unfortunately Unity has no single unified way to identify textures that are part of the 3D scene, nor does it offer a way to set a global mipmap bias at run-time. There are also many ways in which textures may or may not be applied to the scene, depending on which third-party asset packages the application chooses to use. This makes the implementation of texture mipmap biasing a highly application-specific thing. -The default implementation in `Fsr2CallbackBase` will very naively look up every `Texture2D` object in the current scene and apply the mipmap bias offset to it. This generally works fine but it will also include textures that shouldn't have the mipmap bias applied (e.g. UI textures) and potentially miss textures that should have the mipmap bias applied (e.g. texture arrays for terrain rendering). You will want to override this callback to more specifically select the textures that need to have this mipmap bias applied, and possibly store the current mipmap bias to retroactively apply it to assets that are loaded on demand. +The default implementation in `Fsr2CallbackBase` will very naively look up every `Texture2D` object in the current scene and apply the mipmap bias offset to it. This generally works fine but it will also include textures that shouldn't have the mipmap bias applied (e.g. UI textures) and potentially misses textures that should have the mipmap bias applied (e.g. texture arrays for terrain rendering). You will want to override this callback to more specifically select the textures that need to have this mipmap bias applied, and possibly store the current mipmap bias value to retroactively apply it to assets that are loaded on demand. ### Motion vectors -FSR2 relies on depth and motion vector data to track pixels across frames and to detect areas that 'became visible' on the current frame and therefore should not be reconstructed using historical data. For this to work properly, it is very important that the application renders correct motion vector data for all moving objects in the scene, in addition to camera motion vectors. +FSR2 relies on depth and motion vector data to track pixels across frames and to detect areas that 'became visible' on the current frame and therefore should not be reconstructed using historical data. For this all to work properly, it is very important that the application renders correct motion vector data for all moving objects in the scene, in addition to camera motion vectors. Unfortunately not all community-made Unity asset packages have gotten the message that temporal image techniques are here to stay, and either don't output motion vectors from their shaders or poorly document how this is enabled. This is not helped by Unity itself being rather obscure in how motion vectors are to be accessed and rendered. @@ -115,7 +117,7 @@ The manually generated reactive mask can be supplied to the `Fsr2ImageEffect` sc - Auto Exposure causes a black screen on some platforms (OpenGL Core, Xbox One). Disabling and re-enabling FSR2 will sometimes cause auto-exposure to suddenly start working. It's uncertain what is causing this. It may be a simple case of the original auto-exposure shader not having been written/tested with these platforms in mind. Workaround: disable Auto Exposure on affected platforms. It's generally better for the application to provide an exposure value anyway, rather than relying on an automatically generated value. -- Auto Reactive Mask causes jitter artifacting on base Xbox One and Xbox One S when ESRAM Usage is enabled. +- Auto Reactive Mask causes jitter artifacting on Xbox One when ESRAM is enabled. This is due to an unresolved issue in Unity related to render texture blitting. For some reason the opaque-only render buffer used as reference for generating the reactive mask has an incorrect jitter offset (possible it's a render buffer from a previous frame), causing the reactive mask to be incorrect as well. Workaround: either disable ESRAM Usage or disable the Auto Generate Reactive Mask feature. - Texture mipmap bias adjustment is not working on MacOS Metal. @@ -150,9 +152,7 @@ Initial prototypes of the upscaler used a two-camera setup with an intermediate Unity also offers a dynamic resolution system (through `ScalableBufferManager`) which would be a good fit for upscaling techniques, but the problem there is that it's not supported on every platform. In particular DirectX 11 on Windows does not support `ScalableBufferManager`, which is a deal breaker. Additionally `ScalableBufferManager` has a long-standing issue where UI gets scaled as well, even if the UI camera is set not to allow dynamic resolution. -After looking around for alternative solutions, I came across this discussion: -https://answers.unity.com/questions/1322637/best-way-to-downsample-camera-viewport.html -Using camera viewport rect manipulation turned out to be an easy, unassuming and unintrusive solution offering the best balance of platform support, performance and simplicity. +After looking around for alternative solutions, I came across this discussion: https://answers.unity.com/questions/1322637/best-way-to-downsample-camera-viewport.html. Using camera viewport rect manipulation turned out to be an easy, unassuming and unintrusive solution offering the best balance of platform support, performance and simplicity. ### Supporting unsupported platforms diff --git a/images/comparison.png b/images/comparison.png index a6f3232..79671bf 100644 Binary files a/images/comparison.png and b/images/comparison.png differ