World & rooms

Looks

Per-venue lighting, colour grading and surface colours in .ullook profiles.

How a room feels (warm and dim for a bar, bright and neutral for an office, cool at night) is set by look profiles: JSON files in Looks/*.ullook, chosen by venue tag.

A profile

json{
  "profiles": [
    {
      "tag": "ynl_speakeasy",
      "inherits": "bar",
      "exposure_bias": 8.4,
      "temperature": 5200,
      "saturation": 1.02,
      "contrast": 1.08,
      "fixture_scale": 1.3,
      "fixture_color": [1.0, 0.72, 0.45],
      "bloom": 1.2,
      "vignette": 0.24,
      "wall_color": [0.55, 0.45, 0.4],
      "night": { "exposure_bias": 8.2, "fixture_scale": 1.5 }
    }
  ]
}
  • tag names the venue; tags: [ … ] lets one profile cover a family of venues.
  • inherits builds on another profile; without it a new profile starts from *, the default.
  • A tag with no profile of its own uses *.
  • Profiles merge: a later profile for the same tag (from your mod, or later in the same file) only changes the fields it sets.
  • night holds values that override the day values after dark.

Fields

Exposure and grade

Field Meaning
exposure_bias Exposure compensation in stops (the base rooms sit around 8–9)
temperature White balance of the grade, in kelvin
saturation, contrast 1 = neutral
global_gain, shadow_gain, highlight_gain [r, g, b] multipliers for the whole image, the shadows, the highlights
bloom, bloom_threshold, bloom_size Glow around bright lights
vignette Darkening of the corners
indirect Strength of bounced light

Lights

Field Meaning
fixture_scale, fixture_color Brightness and colour of the room's lamps and ceiling lights
window_scale, window_color Light through the windows
fill_scale, fill_color A soft room-sized fill light
sun_scale Scale of the sun while inside

Surfaces and camera (with "art_direction": 1)

Field Meaning
wall_color, accent_color, ceiling_color, floor_color [r, g, b] multiplied with the surface's texture
floor_texture A named floor texture ("PolyHaven/laminate_floor_03")
wall_texture A named wall texture for the plain wall tiles ("PolyHaven/brick_wall_13"); wall_color still multiplies it
camera_height, camera_aim_height Where the room camera sits and aims, in cm

Colours are linear RGB values from 0 to 1.

Advice that saves an evening

  • Night overrides day. A value changed at the top level but also present in night changes nothing after dark. Check both.
  • Surface colours multiply. wall_color does not paint the wall, it tints its texture: 0.8 is "slightly tinted", 0.3 is "much darker than the texture". Values written as flat colours darken everything.
  • Brighten with lamps, not fill. Raise fixture_scale or indirect to light a room. A strong fill_scale prints a pale patch in the middle of the floor; it is capped for this reason.
  • Warmth comes from the glow. A lamp reads warm because of its halo (bloom), not because the bulb is brighter; very bright emissive light clips to white and loses its colour.
  • Judge with your eyes. Compare screenshots of several venues at the same hour; a number that looks right in the file can look wrong on screen.

Textures

Loose images for looks (backdrops seen through windows, for example) live in Looks/Textures/ next to the profile and are loaded at runtime.

The base profiles are in ul_Base/Looks/underlives.ullook: eleven families that between them cover every venue tag. Start from the family closest to your venue with inherits.