Log inGet started
World

Fruit Fly

Branchmain
Branchesmain
Commit83f1b94a81

README.md

FruitFlyLook

The lab's look, as data on one entity. Put it on an entity called Look, point its sun and ambient Fields at the scene's two lights, and every decision about how the room is lit and graded is in one inspector.

It owns four things:

  • The lighting intent. sunColor, sunIntensity, sunDirection, ambientColor, ambientIntensity. It writes these onto the two lights when it wakes and whenever a Field changes, so the lights themselves are a cache of what this component says.
  • The cast shadows. shadowSoftness, shadowFade, shadowDistance, via renderer.setShadowConfig. At softness 0 every shadow is a hard stencil; the lab runs at 0.55.
  • The haze. A depth fog registered as the post effect fruitFlyHaze on the scene layer at priority 60, so it runs before anything else the world adds and leaves every widget on screen as authored. hazeDensity is how much air a metre of depth carries; hazeFar decides how much of the sky it tints, because the sky reads as sitting at that plane. Setting hazeDensity to 0 removes the effect.
  • The vignette. Registered as fruitFlyVignette on the scene layer at priority 200, so it lands last. vignetteIntensity 0 removes it.

What it is for

The floor runs to a hard polygonal edge against the sky wherever it ends, and a specimen suspended in the air reads as a cut-out against a clean gradient. The haze answers both: the floor's far edge dissolves into a colour matched to the sky near the horizon, and the air between the viewer and the specimen separates it from the sky behind it. The vignette settles the eye on the middle of the frame without taking anything out of it.

Methods

CallWhat it answers
look:apply()Restates every part of the look on the engine. The wake and the inspector do this for you; call it after something else has moved the lights, the shadow config or the post chain.
look:describe()What the look is asking for right now, and the shadow config the engine answered with.

What it does not touch

Only the two effects it registers by name, the two lights its Fields name, and the directional shadow config. Anything else the world puts in the post chain runs beside it under its own name.