Wilderness InternationalCanopy Field System · Peru

Flight preparation / point cloud

Initialising field system …

00%

Adaptive Point Cloud

…
Initializing…
Frame GPU— Frame— Draw calls— Render scale— Pixels Points drawn0 Overdraw— Point density— Refinement Error target— Stops at— Data-limited— Streaming Tiles · point / map— Cache—
Point spacing & size
Square removes the shader's circular cut, which lets the card skip hidden points; on quads the cut alone measured worth 0.8%. Square also puts Vertices per dot on quads, since an uncut triangle would change the look — and from the default triangles that rebuilds every tile and costs the quad's extra vertices, measured 14–49% more cloud GPU time. Pick it for the look, not for speed; to time the cut alone, boot with ?dot=quad
The one detail control: how far apart the drawn points may sit on screen. A tile keeps refining while its own points project wider than this. Distance is already inside that measure, so one value covers every camera range. SSE is the same setting in the raw units the HUD and the tile data use — twice the spacing. Boot and flight brakes still raise it temporarily
The one multiplier on drawn dot diameter, in both modes: it scales the single fixed size, or the size derived from each tile's own spacing when Point size from spacing is on
Floor in CSS pixels. Below roughly one device pixel the canopy opens up into holes
Ceiling in CSS pixels, so a coarse tile seen from arm's length cannot paint the screen. Set at or near its floor and the derived size collapses back to one constant
Dot geometry (test)
Every point is drawn as a small shape the round dot is cut out of: a square of 4 vertices and 2 triangles, or one triangle of 3 vertices around the same circle. The dot looks the same either way; the triangle is 30% larger, and those extra corner pixels are thrown away. Switching changes every loaded tile in place, so both sides compare the same tiles at the same view. With Dot shape on ■ Square it still draws quads when Triangle is picked, so this stays a pure speed test. Triangles are the default; ?dot=quad boots on quads —
Instanced hands the card one tiny shape per point, which it processes a point at a time. Pulled draws each tile as one long list of corners instead, and every corner looks its point up in a texture — the same data, the same 16 bytes per point, so many points share each batch of vertex work. Switching rebuilds every loaded tile in place, which costs a moment and a re-upload. Pulled is the default; ?feed=inst boots instanced
Sphere fade (test)
Two spheres standing on the basemap under the centre of the view. A tile the error target asks for is only fetched if its box reaches into the outer sphere; a fetched tile is only drawn if its box reaches into the inner one, and stays loaded either way. Inside the inner sphere every point shrinks and sinks toward the map with distance from the centre and is gone at the rim, the flat ground patch fading with it. Off is byte-identical to the feature not existing — the falloff is compiled out, so switching rebuilds the tile shaders —
How far inside the inner radius the falloff starts, in metres at the close-up size; it widens in step as the dome grows. Nearer the centre than that every point is drawn whole; over these last metres to the rim the size and the height ramp down to nothing. Wider than the radius ramps from the very centre
How the ramp leaves the plateau, for size and height alike. Above 1 the points hold full size a while longer before they start to drop; below 1 they drop the moment the ramp begins. 1 with a fade-out of 1 is a straight line
How the ramp lands on nothing at the rim. Above 1 the points linger small and low before they vanish; below 1 they vanish abruptly. Each end is shaped by its own slider only
The inner radius as a share of the camera's distance to the dome's centre, so the dome covers about the same part of the screen at every height and reads as a vignette from high up. Never below the inner radius set further down, which is the size close to the canopy; the outer radius and the ramp grow in step. All the way left keeps the dome at one fixed size
Where the growth stops, in metres. Above the height that reaches it the dome keeps its size and shrinks on screen as the camera climbs on
Tiles lying wholly in the fade band are refined coarser, following the fade: never where a tile reaches the whole part of the dome, and this many times coarser at the rim. Off by default, because it changes detail at tile boundaries. Their points are drawn small and low out there anyway. All the way left is off
A tile lying wholly in the fade band draws only its share of points, down to its fade: fewer points as well as smaller ones, without widening the ones left. Rides on distance thinning, so it does nothing while that is off. All the way left is off
How far below the middle of the screen the dome's centre sits once the camera is tilted fully to the side, as a share of half the screen height. Looking straight down it is always the middle; in between it slides on the same tilt curve as the fovea. It never goes so far down that the ground in the middle of the screen leaves the whole part of the dome, so from high up it stays nearer the middle. All the way left keeps it in the middle at every tilt
Two translucent spheres standing on the basemap under the centre of the view: blue is the outer one, amber the inner. They keep their size in metres at every zoom, so they shrink on screen as the camera climbs. When the view centre misses the ground they hold their last offset from the camera and travel with it
Gates loading: a tile the error target asks for is only fetched if its box reaches into this sphere
Gates drawing and sets the falloff: points shrink and sink to the map from the centre out and vanish at this distance. This is the size close to the canopy, the floor the growth starts from. Never larger than the outer radius
How strongly the shells tint what is behind them. They never write depth, so the scene stays readable through them
Distance thinning (test)
Draws fewer points per tile, widening the survivors to cover the gap. Switching reloads the tiles, so give it a moment. ?thinning=off boots in the off state, which is the one the load cost has to be measured from
Everything closer than this is left completely alone — every point it loaded, drawn. Roughly 87% of the points in a normal view sit beyond 100 m, so protecting the near field costs very little
Where the two sliders below reach their full effect. Between the near and far distance the strength eases in. Keep the two far apart: the ramp is decided per tile, so a narrow band can show as a ring
How far apart the kept points should sit out there, as a multiple of the spacing the error target already asks for. 1 thins everything down to exactly the target, which reads coarser than the unthinned cloud; below 1 keeps some of the finer detail the tree delivered
Kept points are drawn wider to stand in for the ones dropped. This caps how far that goes. 1 disables it entirely. Note this is the only limit on dot size while Point size is Fixed — the smallest/largest dot sliders above apply to the spacing-derived size only
How much of a tile to keep when its own children are also on screen. Not duplicates: the levels split the survey between them, so an ancestor's points fall between its children's and dropping them loses real detail. It is still the cheapest place to save, because over fully refined ground the whole stack is only 4/3 as dense as its deepest level — the ancestors are a quarter of the points, and losing all of them spreads the rest about 15% further apart. This is where most of the saving comes from
A tile counts as covered the moment its first child finishes downloading, which is a step change in both the point count and the dot width. On, each tile eases to its new density over about a quarter second; off is the bare per-frame decision, which is what the feature did before. Watch the far field while turning the camera
Tile arrival (test)
A tile's buffers are uploaded to the card the first frame it is drawn, all of it, inside the render pass. When several land together that is one long frame. On, freshly built tiles are held back and released a few per frame instead. Off is exactly the picture you get with the feature removed — nothing is queued and nothing is delayed
How many waiting tiles may become visible in one frame. Lower spreads the cost further but makes a fast turn show its holes for longer. Inert while the switch above is off
The real limit on how many tiles can land in one frame — measured, arrivals never exceed this number. Each landing tile uploads its buffers to the card inside that frame, and the cost is worse than linear: one 270k tile is 0.8 ms, two are 3.5 ms, four are 14.5 ms. Lower it to bound the spike and accept slower filling in. This is the bandwidth limit, in the only unit the loader actually has
Pivot
Green = on the canopy, amber = fell back
Height ruler
Every height at once, on one screen-fixed axis in metres. Survey rows are the real-world elevations the data carries; drawn rows are the same planes expressed in the shifted frame, and the shaded band between them is the offset. Nothing is drawn into the 3D scene —
Smooth mouse input
Without it the view waits, then jumps a whole pixel step
Higher is smoother, but more latency
Level & error inspector (test)
Off is the normal render, untouched. Level paints each tile with the depth it came from — d0 coarsest and violet, running warm to the finest. Error paints each tile by how its own screen-space error compares with the live target, in five flat bands, where 1.0 is the refine threshold and green is sitting on it
Foveated detail (test)
Full detail in a core, coarser outward. Distance is already handled per tile — this only picks where in the frame
Half width, in half screen heights
Half height. Same as width = round core, low = band
Blend width out to the corner value. Narrow = visible ring. The dashed outline is where it ends
Looking down, the nearest ground is the middle of the frame. Looking across, it is the bottom edge. On, the core slides down as you tilt — the same pitch curve the dome's focus drop follows
How far down the core goes in full side view. 1 reaches the bottom edge
Shifts the core on top of the pitch travel. -1 down, 0 none, +1 up
SSE multiplier inside the core. Inert once the core reaches leaves — check for • in the tile grid
SSE multiplier at the frame corner. Under 4x barely bites
Draws the core and the end of the blend
Tile outlines with depth, • for leaf, error in px. Cyan = core budget, orange = corner. A dashed orange box cannot be dropped
The same tiles as 3D volumes, without the flat overlay's false overlap
— Angle below the horizon (90 = straight down), the SSE the core and corner land on, and the tile split

View

Protected parcel from GeoJSON. Column = light column through the canopy, X-ray = footprint shines through the trees, Canopy = plate on the crowns, Wall = low glowing wall. Switching re-frames the camera
Exact = the surveyed staircase with every 1 m² cell line — the authoritative boundary. Organic = rounded, area-preserving, a stylised reading of the same parcel
The story's parcel reveal, one beat per slider: the outline draws itself on, the wall rises from the ground, the inside fills in. A moved slider takes its beat over; Release hands all three back, and the parcel shows fully as before
Checking device headroom

Optimizations

Design

Basemap
With Colour match off, raw white reaches the Shoulder knee from 80 % and at 140 % everything from raw sRGB 199 up is compressed; with the match on the map sits on a 3.5–4.7× gain, so the knee comes from about raw sRGB 115. Past 100 % the brightest ground rolls off where None would clip it
Allowed error in screen pixels. 1 = pixel-perfect and expensive, higher = softer and far fewer tiles (measured: 23 tiles at 1, 16 at 2, 9 at 4). The point cloud itself runs at 8
Colour match
Evens out the colour drift between the flight blocks in the point colour and gives the cloud and the basemap one colour at landscape scale: each point keeps its own fine detail and takes the basemap's colour over hundreds of metres. The basemap is lifted to the cloud's level and matched at the field's saturation (60 % for this survey) everywhere, and the ground patch's map follows it. Off compiles it out of the tile shaders and puts the basemap back on Brightness and Saturation alone. ?colourmatch=off boots with it off
0 = the captured colour and today's basemap, 100 % = the full match. Blended in stops, so 50 % is half the correction in brightness terms. The basemap Brightness slider trims around the matched level
Drone ortho
The drone orthophoto of the survey (about 10 cm a pixel), from our own map tiles, colour-matched to the satellite offline. Inside the area a map tile loads straight from ours instead of the satellite; at the area's edge the satellite comes first and our edge tile is blended in once it has settled on screen — the same tiles and the same shader, so it costs downloads and one texture upload per edge tile, no draw call or shader. Inside the dome the ground patch covers it where the cloud is; it shows in the river, in the gaps and beyond the dome. Auto follows the device preset and the link: off on constrained devices, with Save-Data or on 2g. On shows it on any device and link. Off shows the satellite everywhere. ?ortho=off|on boots Off or On (old half and full links read as On), ?orthokinds tints the blended tiles: red an edge tile, blue a full tile that loaded as satellite before the tiles' index came in. Full tiles loaded from ours are not blended and stay untinted
—
Tone & colour
Off takes the whole stage out as if it had never been added — no curve, no point grade, the old decode. With Colour match off as well the shader is exactly the pre-tone-mapping one; use that pair to read off what the stage costs in fps. ?tonemap=off&colourmatch=off boots with both off
Film is the cinematic grade the experience ships with (settings below). Shoulder passes captured colour through exactly. At white point 1× it only changes what goes past full brightness — scaled down with its hue kept instead of clipped per channel; a higher white point rolls those highlights off softly, at the cost of a few levels off the brightest whites. None clips. Stock Neutral darkens all unlit colour and crushes the darks; AgX greys and ACES yellows it — kept for comparison. Applies to the whole frame, sky and clouds included, in the output pass that already runs, so no curve costs a pass
Linear gain before the curve, for the whole frame. No effect with None
Shoulder only: the brightness that reaches full output. 1× means no roll-off — everything up to 100 % passes unchanged and anything brighter is scaled down until its brightest channel is full, hue kept, instead of clipped per channel. Higher keeps more gradation in lit cloud tops and bright sand at the cost of a softer top end
Film only, like every row down to Vignette strength. Each Film switch compiles its part out of the output pass when off — and so does a slider at its neutral value
An S-curve around mid-grey: deeper shadows, brighter highlights. 1× is none
Raises black slightly, like a print stock, so shadows read as film rather than as a screen's black
Cool shadows against warm highlights. Off compiles it out of the output pass
Darkens the corners of the frame. Off compiles it out of the output pass
Contrast and saturation for the point cloud only. Off compiles it out of the tile shaders whatever the sliders say; at 1× / 100 % it is compiled out anyway
Around 18 % grey, hue kept. Most of the canopy sits below that, so more contrast mostly deepens it. 1× is the captured colour
Colour grade
Runs on the displayed frame, after Tone & colour. Exposure and vignette stay there. Neutral with this section closed, it is compiled out and costs nothing. While the section is open, or whenever the grade changes anything, it is one 3D colour lookup in the pass that already draws the frame, about 0.01 ms. Switching between the two rebuilds the post shaders once, a short hitch; moving a control never does
Grade off takes the grade out whatever the controls say. Compare splits the frame: left of the line without the grade, right of it with. Drag the round handle, or focus it and use ← → (Shift for big steps). ?grade=0 boots with the grade off
A and B hold two versions to flip between: tap an empty slot to store the grade, a stored one (dotted) to recall it. Store overwrites the slot used last. Each finished slider move or drag, run of arrow keys, recall, reset, import and paste is one undo step: ↶ ↷, or Ctrl+Z and Ctrl+Shift+Z while a control here has focus. Reset sets every control to neutral and keeps the look
Pick a wheel, then drag anywhere on the large one: the puck moves toward the colour it adds, relative to where it was, Shift for fine moves. A double tap, or 0 with the wheel focused, sets it back; arrows nudge it. The range under it is that wheel's master value. Applied in this order: white balance, then lift, gain and offset, then gamma, then contrast
R 0.000 G 0.000 B 0.000
Raises or lowers black while white stays put, so the shadows move most
Warmer to the right, cooler to the left, as in Lightroom. A white balance in linear light that keeps grey's brightness; at ±100 red and blue end up a stop apart
Magenta to the right, green to the left, brightness kept
An S around the pivot: black, the pivot and white stay where they are, everything between spreads apart. Below 1× it flattens straight toward the pivot and lifts black
The tone contrast turns around, as a screen value (sRGB code). The mark is 18 % grey, sRGB 118; most of the canopy sits below it, so a lower pivot gives the canopy more of the contrast
Every colour toward or away from its own grey, brightness kept. 100 % is unchanged, 0 % black and white
Saturation for the dull colours first: near-greys take all of it, the saturated canopy greens about a tenth, so they do not clip. Left mutes the dull colours first
—
Ground fog
Off removes the effect from the shader entirely rather than turning it down, so it costs nothing at all — use it to read off what it is worth in fps
Past 100% the fog saturates earlier instead of overshooting its colour — the coverage itself is capped at 100%
Falloff upward from the base (1/e height)
0 = fog reaches the ground at full density · higher = a band hanging in the canopy with clear air beneath
1 = physical (Beer-Lambert) · <1 fog starts early · >1 the near field stays clear and density moves into the distance
Smaller = denser. e-folding distance along the fog base, not a cutoff. 0 = full coverage immediately
0 = follows the daylight automatically · 1 = a fixed colour around the clock
Ground under the point cloud
Off removes the effect from the shader entirely rather than turning it down, so it costs nothing at all — use it to read off what it is worth in fps Replaces the satellite imagery with a solid colour where point data exists — the shape follows a coverage mask splatted from the points themselves, so gaps in the survey — the river, the missing strip — keep showing the map
Paints the coverage mask in flat magenta at full strength, so every pixel the mask claims is unmistakable — the fastest way to tell a mask fault from a cloud shadow or a dark patch of imagery
0% = the basemap at its own brightness below · 100% = the flat colour · in between blends the two
No daylight grading, no ground fog — those are applied before the patch. Distance fog is not: three applies it after, so at range the colour is tinted toward the haze
Relative to the map's own level (the colour-matched map while Colour match is on). Independent of the global Brightness slider, and free of fog and vignette
100% = imagery fully replaced · below that the terrain shows through
Radius in metres the coverage is averaged over. Smooths the outline and gives the threshold room to move the edge. Too wide and it stops seeing gaps — past about half the river's width the patch closes back over it
Where to cut the blurred coverage. 50% sits on the outline, higher pulls the edge inward, lower pushes it out
Volumetric fog
Sky & sun
Sun shadows
Sky clouds
Weather
Birds
Waiting for the crowns the flock sits in …
Torch
A torch held at the camera and pointed through the mouse: a near-white pool of light on the crowns, the map and the ground where you point, soft at its edge and fading with distance. It stays where the mouse last was on the map. Off by day, when it is not needed and costs nothing; it comes on through the dusk, and at night it is the way to look into the dark forest. 0 = off, which takes it out of the shaders: crossing 0 rebuilds them once. ?torch=<0..1> boots a strength
The beam's full angle. At 250 m a 12° beam lights a pool about 50 m across
Haze & sky
Aerial perspective: distance fades into the horizon colour, and the cut edge of the map disappears into it (with the sky gradient off, into the flat sky colour). Takes over from the distance fog below while on. Off removes it from every shader, as if it were not there. Turn it off for level-of-detail A/Bs — it fades the far field
Hazy horizon to deep zenith, following the time of day. Off brings back the flat sky colour
Distance from the camera before any haze — keeps the near canopy clear
How quickly the air thickens beyond the clear zone. Shorter = denser air
How much the horizon takes the sunlight's colour: pale at noon, warm at golden hour
Distance fog
Off removes the effect from the shader entirely rather than turning it down, so it costs nothing at all — use it to read off what it is worth in fps
Fraction of the view distance where the haze starts. Small = haze begins right at the camera
Fraction of the view distance where everything turns sky-coloured — this hides the map edge. Always kept above the onset
Both are fractions of the current view distance, not metres — so the haze keeps the same proportions over the canopy as it does 90 km out. Colour follows the daylight.
Cloud shadows
Off removes the effect from the shader entirely rather than turning it down, so it costs nothing at all — use it to read off what it is worth in fps
Base depth of the shadows. Additionally multiplied by daylight, and halved when the cloud layer is off
Metres per noise period. Small = fine, busy dappling · large = broad continental shadows
Tightens the noise ramp. 0 = soft, washed blotches · high = clearly defined cloud gaps
Eye-dome lighting
Darkens what lies just behind each crown's silhouette, read from depth alone — the standard point-cloud aid, since points have no normals to light. A screen pass sharing the depth-of-field pipeline (+0.2 ms measured). Off drops it from the pipeline, and with depth of field also off the frame is drawn straight to the canvas, so it costs nothing at all. Overlays that write no depth, like the parcel glow, are shaded too; the near rain is drawn after it and is not. ?edl=0 boots with it off, ?edl=1 on
Neighbour distance in whole backbuffer pixels (CSS pixels × render pixel ratio). Larger gives wider rims
The darkest EDL may make any pixel. Keeps the crown rims but stops the gaps between points turning into black speckle; 0 % is unbounded
Depth of Field
Off removes the effect from the shader entirely rather than turning it down, so it costs nothing at all — use it to read off what it is worth in fps A real post pass, nine blur and composite draws — with eye-dome lighting, one of the two effects that do not run in the shader. Off = no cost
On = the focal plane follows the point at screen centre · Off = a fixed distance from the camera
With autofocus an offset from the aimed point (negative pulls focus nearer), otherwise the absolute distance
Distance past the focal plane to full blur. Small = shallow and cinematic, large = almost everything sharp
Largest blur radius, about this many backbuffer pixels. The tap count is fixed whatever the size
Small = the focal plane eases in, large = it snaps
© MapTiler © OpenStreetMap contributors
19.10.26 14:31 · 8cb1e2f · sbb-main