Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TRACKER] DOF Blur quality issues #65116

Open
2 of 10 tasks
TokisanGames opened this issue Aug 30, 2022 · 4 comments
Open
2 of 10 tasks

[TRACKER] DOF Blur quality issues #65116

TokisanGames opened this issue Aug 30, 2022 · 4 comments

Comments

@TokisanGames
Copy link
Contributor

TokisanGames commented Aug 30, 2022

Godot version

9c890ef2f

System information

Windows 11/64, RTX 3070, Vulkan

Issue description

Tracker for depth of field blur issues.

I can pull any of these out into separate issues if desired. Otherwise, the detail is below.

Steps to reproduce

  • Load the MRP.
  • Cycle through blur quality project settings.
  • Test each issue.

Minimal reproduction project

test_dof_blur.zip

Jitter does nothing

rendering/camera/depth_of_field/depth_of_field_use_jitter doesn't seem to do anything.
I see no effect on any bokeh or quality level.

Label3D

Label3D is incorrectly affected by blur

image

Blur Artifacts

Different blur algorithms amounts have different artifacts on movement. This is tested while adjusting focus_distance between near and far and back. This procedure is done all the time when a real camera is autofocusing, or when an First Assistant Camera pulls focus on a camera when filmmaking (a person manually focusing the camera). Every film racks focus. Many video games also use this technique.

Hexagon

Low

Tested w/ f/4, 100 ISO, 250 shutter

This seems to be the reference setting and the best all around, however it has issues.

  • The focal planes (hex/low) move pixels of a focused object up and to the left significantly enough to notice and be disconcerting. It affects details of faces and edges. Racking focus, objects pops up then back down as focus hits and leaves them. It looks like it's using an up/left directional blur instead of a radial blur. You can see on the zoomed image that the top left pixels blur but the bottom right stay static. It only moves pixels when close to the focus plane (eg 2.4-4 for an object @ 3). Outside of that range they don't move.
dof_moving.mp4

moving focus

Very Low

Tested w/ f/4, 100 ISO, 250 shutter

  • A bit of pixel movement on focus.

  • It appears that the blur amount is stepped. As the MRP racks between 3 and 6, watch the background. It doesn't change smoothly. It looks more like it changes in 3 increments as if recording with a stop motion camera. Compare with Low, which changes smoothly. Not present on Low or High.

Medium

Tested with f/2, 25 ISO, 250 shutter to get about the same amount of blur.

  • A bit of pixel movement on focus.

  • This level also changes the blur in steps, like Very Low. Not present on Low or High.

High

Tested with f/2, 25 ISO, 250 shutter to get about the same amount of blur. Otherwise, no artifacts.

  • Pixel movement is much less pronounced.

Box

Pretty much the same as Hexagon.

  • Pixels move around on focus. Less pronounced on high.
  • Blur frame rate
    • Very Low & Medium: Stepped blur levels
    • Low: A tiny bit stepped
    • High: Smooth

Circle

Tested with f/2, 25 ISO, 250 shutter.

In its current state, this is not usable for a racking focus camera due to artifacts. Performance takes a big hit as well. The blur looks amazing, so it's too bad.

Very low

  • Blur is unstable. The blur noise changes each frame.
  • The edges of objects flutter as the focal planes move. It's like the body and edges are blurred separately and not in sync with each other.
edge_artifacts.mp4

Low

  • Same as above. Runs on par with other blurs.

Medium

  • Blur is smooth and stable. Though a heavy performance hit. Runs at 1/5th the speed of other blurs
  • Edges are still a problem

High

  • Same as Medium. Heaviest performance hit. Runs at 25% the speed of other blurs.
  • Edges are a problem.
@clayjohn
Copy link
Member

I will update the other points more substantially later, but the Label3D issue comes from it being a transparent object. It doesn't write to depth so it gets treated as if it's at the depth of whatever is behind it. It will have trouble with all screen-space effects utilizing the depth buffer (SSR, SSAO, etc.). The solution is to set the depth draw mode to opaque prepass so it's depth can be written into the depth buffer.

@Calinou
Copy link
Member

Calinou commented Aug 31, 2022

Regarding jitter, I remember it having a very subtle effect a few months ago. It may have broken with refactoring changes though. Either way, I think that setting should be removed to only perform DoF jitter when TAA is enabled (where jittering effects over time is the most beneficial).

#57210 has a WIP branch linked in a comment to improve depth of field performance/quality, but its author no longer has time to work on it.

@BraqueDown
Copy link

BraqueDown commented Sep 1, 2022

Regarding jitter, I remember it having a very subtle effect a few months ago. It may have broken with refactoring changes though.

It still works, but it's effect is extremely slight, and is masked by using higher quality settings, using a larger blur size, or rendering at a higher resolution.

EDIT: Also, It doesn't look like it has any effect in Circle mode.

@ghost
Copy link

ghost commented Sep 6, 2022

I'm working on a fix for an edge artifact that happens at uneven resolutions, which is somewhat related to the #65116 (comment) issue described here (I suspect the half_size rendering is the cause for this too). So I'll try to tackle both issues.

I think creating individual issues and checklist linking them in this tracker issue might be easier to follow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: No status
Development

No branches or pull requests

5 participants