Convert between light exposure and intensity

import math,sys

def Exposure2Intensity(exposure): 
    exp = float(exposure)
    result = math.pow(2,exp)
    print(result)

Exposure2Intensity(0)

def Intensity2Exposure(intensity):
    inarg = float(intensity)
    
    if inarg == 0:
        print("Exposure of zero intensity is undefined.")
        return
    
    if inarg < 1e-323:
        inarg = max(inarg, 1e-323)
        print("Exposure of negative intensities is undefined. Clamping to a very small value instead (1e-323)")
    
    result = math.log(inarg, 2)
    print(result)

Intensity2Exposure(0.1)

Why Exposure?

Exposure is a stop value that multiplies the intensity by 2 to the power of the stop. Increasing exposure by 1 results in double the amount of light.

Artists think in “stops.” Doubling or halving brightness is easy math and common in grading and look-dev.
Exposure counts doublings in whole stops:

  • +1 stop = ×2 brightness
  • −1 stop = ×0.5 brightness

This gives perceptually even controls across both bright and dark values.


Why Intensity?

Intensity is linear.
It’s what render engines and compositors expect when:

  • Summing values
  • Averaging pixels
  • Multiplying or filtering pixel data

Use intensity when you need the actual math on pixel/light data.


Formulas (from your Python)

  • Intensity from exposure: intensity = 2**exposure
  • Exposure from intensity: exposure = log₂(intensity)

Guardrails:

  • Intensity must be > 0 to compute exposure.
  • If intensity = 0 → exposure is undefined.
  • Clamp tiny values (e.g. 1e−323) before using log₂.

Use Exposure (stops) when…

  • You want artist-friendly sliders (−5…+5 stops)
  • Adjusting look-dev or grading in even stops
  • Matching plates with quick ±1 stop tweaks
  • Tweening brightness changes smoothly across ranges

Use Intensity (linear) when…

  • Storing raw pixel/light values
  • Multiplying textures or lights by a gain
  • Performing sums, averages, and filters
  • Feeding values to render engines expecting linear data

Examples

  • +2 stops → 2**2 = 4.0 (×4)
  • +1 stop → 2**1 = 2.0 (×2)
  • 0 stop → 2**0 = 1.0 (×1)
  • −1 stop → 2**(−1) = 0.5 (×0.5)
  • −2 stops → 2**(−2) = 0.25 (×0.25)
  • Intensity 0.1 → exposure = log₂(0.1) ≈ −3.32

Rule of thumb

Think in stops (exposure) for controls and matching.
Compute in linear (intensity) for rendering and math.