Page MenuHome

F-stop does not scale with Scene unit scale
Confirmed, NormalPublicKNOWN ISSUE

Description

System Information
Operating system: Linux-5.4.0-40-generic-x86_64-with-debian-bullseye-sid 64 Bits
Graphics card: GeForce GTX 960/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 440.100

Blender Version
Broken: version: 2.83.2, branch: master, commit date: 2020-07-09 05:50, hash: rB239fbf7d936f

Short description of error
Camera F-Stop setting does not scale with Scene unit scale, resulting in unrealistic focal blur for real-world F-Stop values. Affects viewport (Material Preview and Rendered modes, where DoF is evaluated) and final renders. Affects both Eevee and Cycles.

Exact steps for others to reproduce the error
Please see attached .blend file, "F-stop scaling bug.blend", which contains the following setup:

  • 2 Suzanne monkeys, each 34mm tall, placed at different distances from the camera. The closer one is placed with the front of the face approximately 80mm from camera.
  • Camera has a 35mm sensor, 15mm focal length, f/2.8 and 80mm focal distance. (DoF at these extremes should be about 3.9mm, resulting in significant focal blur.)

The file contains 3 scenes to illustrate the issue:

  • Scene 1: no scene scale. Scene unit scale was left at 1.000. Objects are scaled down to the 34mm-tall target size. F-Stop set to 2.8. DoF and focal blur look correct.
  • Scene 2: unit scale, no F-Stop adj. Scene unit scale set to 0.001. Objects are scaled to sizes that would normally report as 34 meters tall under Blender defaults, but now report as 34mm tall. F-Stop set to 2.8. EXTREMELY LARGE DOF AND ALMOST NO FOCAL BLUR. (Unrealistic)
  • Scene 3: unit scale + F-Stop adj. Identical to Scene 2, but the F-Stop has been manually adjusted to 0.0028 (2.8 x 0.001 scene unit scale). DoF and focal blur are now correct and equivalent to Scene 1.

Screenshots of Viewport, Eevee, and Cycles for each scene are also attached.

Event Timeline

Richard Antalik (ISS) changed the task status from Needs Triage to Confirmed.Jul 21 2020, 5:23 AM

F-Stop is a proportion between two dimensions, so it is unit-less, and hence should not be affected by scene scale, see https://en.wikipedia.org/wiki/F-number.

Think the issue here is more with camera focal distance? But this would have rather unexpected and undesired effects as well!

@Brecht Van Lommel (brecht) think this is just a consequence of the scaling thing in fact? I.e. cannot be properly automatically supported?

So far we do not use unit scale anywhere in rendering or dependency graph evaluation. But for cameras the properties were defined to remain in mm independent of unit scale.

We need to either change that or take into account unit scale. It's rather unexpected to get a camera with a massive or tiny sensor size if you change unit scale, so making one exception for f-stop is probably ok even if it's not ideal that this needs to behave different than everything else.

Brecht Van Lommel (brecht) changed the subtype of this task from "Report" to "Known Issue".Aug 3 2020, 6:18 PM

Necro-ing to express interest in it getting fixed. Unit scale not applying to camera sensor size. I tested (2.90) by multiplying focal length and sensor size against my unit scale and was able to get expected results with f stop.

Mildly infuriating bug. For now, multiply against your F-Stop, as it is less frustrating than multiplying your Focal Length and Sensor Width.

I dunno - I'm just a Maya user swapping to Blender and trying to get my units back to cm. I'm not your mom, do whatever you want.

Just wanted to report that scaling the f-stop worked for me in my project that uses a scaled scene unit as well (0.001, mm).
When the f-stop is set to 2.8, everything is in focus all the time. If I enter .0028 as the f-stop, it behaves as f2.8 should.

It feels like the correct way to fix this is to internally scale the f-stop value in the UI against the "Unit Scale".

For anyone interested, until this is fixed, changing fstop inside of the addon photographer will properly update the value according to your scene scale.