How to paint the dry east: sage flats, bunchgrass and ponderosa by The steppe student

8. Ponderosa pine

The bark is ready. The crown is partial.

From the photos (Turnbull NWR, Dixie Mountain, the 1939 Keen tree-class photos) and the plant desk's guide 09:

Bark: a stretched Voronoi

photo, photo box 40 px, ours

figs.fig_bark: the Dixie Mountain trunk, the same box-downsampled to 40 px, and the near trunk of my parkland hero, 4×.

pine._trunk scatters seed points in the trunk's own coordinates and computes, per pixel, the nearest and second-nearest seed in a space squashed 3:1 vertically. That gives plates taller than wide. Where the two distances are nearly equal, the pixel is on a cell border, and that's a furrow, the darkest step. Plates are shaded across the cylinder, and a third of them get half a step more, so neighbouring plates differ:

plate_w = max(1.6, wb * 0.45)
npts = int((gy - top_y) * wb * 4 / (plate_w * plate_w * 3) + 20)
sx = rng.uniform(-wb, wb, npts)
sy = rng.uniform(top_y, gy + 2, npts)
...
    u = (x + 0.5 - xc) / max(half, 0.5)
    nz = np.sqrt(max(0.0, 1 - min(1, u * u)))
    lit = max(0.0, u * L[0] + nz * L[2] * 0.8 + 0.1)
    base = 1 + 2.6 * lit
    if half >= 1.5 and not young:
        dxs = (x - xc) - sx
        dys = (y - sy) / 3.0
        d = dxs * dxs + dys * dys
        a, b = np.partition(d, 1)[:2]
        furrow = (np.sqrt(b) - np.sqrt(a)) < 0.55
        if furrow:
            s = 0
        else:
            s = int(np.clip(round(base + (0.5 if (np.argmin(d) % 3 == 0) else 0)), 1, 4))

Young trees skip the plates and cap at step 2, which makes the dark blackjack bark. The BARK ramp's albedo is (196, 112, 62) with a strong shadow shift toward violet-brown.

The downsampled photo shows what I exaggerated. At 40 px the real plates are finer and more flecked, and the furrows are thin dark streaks. Mine are bold polygons. That was a choice, because the jigsaw is the recognition key and Ferrari exaggerates the telling feature. I'd still thin the furrows by half at this size and let the plates break into flecks near the edges of the trunk.

At 7 px wide or less (the trunk of a 150-px tree) the plates don't fit and the trunk is just orange with a few dark flecks. That's right, but the bark only sings on near trees.

The crown: what I tried

pine a a: a coat rack. A few pads on bare limbs.

pine b b: fill pads added around the limbs. Now it's topiary, evenly stacked.

pine d d: broader, more tufts, lit needles shifted yellow-green. Smooth blobs.

pine f f (kept): fewer, smaller fill pads with log-normal sizes, leaving sky holes.

What stayed in pine.paint_pine:

small pines, before

Before: mature pines at 150, 90, 60, 40 and 24 px. Below 60 px they're coat racks.

small pines, after

After, with the envelope fill for small trees (down to 14 px).

Where it falls short

photo | ours | Ferrari

Turnbull NWR | my stage-3 pines | Ferrari's V16 conifers.