howfishthink
Model documentation

How the fish behaviour models work

A simulation nobody can check is just an opinion with better graphics. This is the whole model, including the parts that are approximations and the parts that are wrong.

The chain

  1. Down. Sunlight enters the water and travels to the lure's depth, losing energy per wavelength (Beer-Lambert: I = I₀·e^(−Kd·d)).
  2. Reflect. The lure reflects some fraction of whatever survived.
  3. Across. That reflection travels the viewing distance to the eye, losing more.
  4. Veil. Backscatter adds a glow along the line of sight, raising the black level. In dirty water this — not darkness — is what makes a lure vanish.
  5. See. What arrives is integrated by that species' cones, blended toward rod (monochrome) vision as light falls.

Every step but the reflection is linear in radiance, so the whole per-pixel transform folds into one 3×3 matrix plus an additive veil. That is why the Fish Vision Camera runs at full frame rate on a phone.

Water types

Sampled at 8 bands (420–700nm). The shape is the point: each water type has a different transmission window, and that window is the real reason colour advice differs from lake to lake.

Water420460500540580620660700Backscatter
Clear0.040.030.040.070.120.250.400.650.05
Green / algal0.350.220.130.120.170.300.480.750.16
Stained / tannic1.300.850.500.350.300.380.550.850.22
Muddy / suspended sediment1.801.501.251.151.151.251.451.800.55

Diffuse attenuation coefficient Kd, per metre, per band.

Eyes

SpeciesCone peaks (nm)Low-light gainNotes
Human (reference)440 / 545 / 5781×Trichromat baseline. This is the view you think you tied on.
Largemouth bass535 / 6141.6×Dichromat, green + red. Strong on chartreuse/red separation, weak on blue.
Walleye530 / 6054.5×Dichromat with a tapetum lucidum. Superb in low light; red-orange biased.
Rainbow trout434 / 531 / 5761.3×Trichromat (UV cone too, when young). The best colour vision on this list.
Northern pike525 / 6151.8×Dichromat, ambush predator. Tuned for contrast against a bright ceiling.
Bluegill460 / 530 / 6201.1×Trichromat. Sight-feeder on small forage; good colour discrimination.

Fish vision is not one standard system: cone count and spectral sensitivity vary by species, population, life stage, and light environment. The profiles above are simplified inputs to this model, not a claim that every fish of a listed species sees exactly this way. For example, a laboratory study found two cone classes and tested color discrimination in largemouth bass; that result should not be generalized to every freshwater gamefish.

Evidence behind the vision profiles

The largemouth-bass profile uses the two cone peaks reported by Brown and colleagues (535nm and 614nm). Their study measured photoreceptors from nine fish and included a behavioral color-discrimination assay. A broader review describes substantial diversity in fish visual systems, which is why the other species profiles here should be read as model parameters rather than species-complete measurements.

Two decisions worth defending

The reference observer

A photograph is already a human-trichromat encoding of a spectrum. Before re-viewing it through a different eye, that encoding has to be undone, or the broad overlap between our own cone curves shows up as a colour cast on every render. So the model inverts a human-at-the-surface observer first. The check you can run by eye in one second:human + clear + 0m renders exactly the input image. Everything else is a departure the physics has to earn.

Light adaptation

A real eye is not a light meter. Pupil, photopigment regeneration, tapetum and neural gain all pull the operating point toward ambient — a fish at 6m in stained water is not "in the dark" from its own point of view. We model that as grey-world adaptation, gaining the response until the background sits at mid-luminance. The gain is capped, and the cap scales with the species' low-light hardware. Past it the image really does go black, because "there is not enough light here for this fish to solve this problem" is a legitimate answer.

What the score measures

Detection contrast is three numbers, because a fish has three ways to pick a target out of the background and they fail under different conditions.

Pattern earned its own number after the mean-colour score rated firetiger as mediocre in green water. The average of firetiger is close to a green lake's background — what makes it visible is the hard dark barring inside it, and an average is exactly the operation that destroys that information.

The Tank: lure physics

A separate model, on the same principle. A lure is a grid of components; the question it answers first is whether the thing swims at all.

The failure being modelled is specific and real. An unbalanced crankbait does not swim badly — it rolls onto its side and skates, and catches nothing. That happens when the centre of mass sits at or above the centre of buoyancy, leaving no righting couple, or when the lip's drag overpowers the couple that does exist.

Materials

ComponentDensity kg/m³FillDisplaces
Balsa160100%100%
Cedar380100%100%
ABS plastic104035%100%
Closed foam90100%100%
Lead ballast1134014%100%
Tungsten193009%100%
Rattle chamber250100%100%
Lip120030%18%
Hook hanger78008%5%
Line tie78004%2%

Fill and displaces are load-bearing, not fudge factors. Without them a "lead ballast" cell is a solid cubic centimetre of lead and a hook hanger is solid steel — which made a 12cm balsa crankbait weigh 66g and sink like a bolt. Real ballast is a small slug set into the body, so the cell still displaces a full volume; a hook hanger is thin wire hanging outside it, so it displaces almost nothing while still acting as keel weight.

What decides the action

This is a two-dimensional side-view proxy for tracking stability, not a three-dimensional roll simulation. It uses vertical lip offset against the restoring estimate. Lip load rises with the square of retrieve speed, while the beat rate rises roughly with speed. The Tank's vertical tendency combines buoyancy and lip dive force; it does not predict an exact running depth. Disconnected components are excluded from the calculation.

The Fish: the decision model

The third model, and the one the other two exist to feed, is the fish decision model. It models a four-stage predation sequence, and every stage can fail on its own terms — because "it didn't work" is useless, while "it never detected it" and "it tracked it and refused at two feet" are different problems with different fixes.

  1. Detect — vision (from the optics model) OR the lateral line. Two independent channels, which is why a rattle earns its keep exactly where colour stops working.
  2. Approach — is it worth moving for: hunger, aggression, and whether the profile falls inside the species' prey window.
  3. Track — follow and evaluate. Both too little action and too much are real failures.
  4. Commit — eat, or refuse after inspection.

Temperature is the master variable

Fish are ectotherms, so water temperature is not a modifier here — it sets metabolic rate, which sets how much a fish needs to eat, how far it will move, and how fast a presentation it can physically run down. The curve is deliberately asymmetric: performance climbs steadily to the optimum, then falls off sharply above it as oxygen demand outruns supply.

SpeciesOptimalFeeds betweenForageWants wobbleAggression
Largemouth bass27°C7–34°C60–180mm4–90.85
Smallmouth bass21°C5–29°C40–120mm3–70.8
Walleye20°C2–27°C50–150mm1–40.45
Northern pike18°C1–26°C100–350mm5–100.95
Rainbow trout14°C1–22°C15–70mm2–60.55
Bluegill24°C8–32°C5–30mm0–30.4

The blind eat

When vision fails but the lateral line still has the bait, commitment drops but does not go to zero — and how far it drops scales with the species' aggression. Vibration sayssomething is there; it does not say that is food. A largemouth will eat on feel alone; a walleye, under the same conditions, shadows it and turns off. That difference is the whole argument for rattles in dirty water.

To see the whole chain run end to end, the scenario pages put twelvelure archetypes through all three models under fixed conditions for each species, and show every refusal with its reason.

The sonar model is documented on its own page: the beam geometry, the level assumptions, and what it leaves out. The same model answers two narrower questions: how wide thecone really is at depth, and whether you cantell a fish's size from its arch.

Where this model is wrong

The equations describe mechanisms; many values fed into them are working assumptions, not measurements from your lake or a universal species profile. The species temperatures, prey sizes, preferred action ranges, aggression, reaction distances, water classes, and most non-bass cone profiles have not been calibrated against field observations for this tool. Treat results as comparative hypotheses: change one input and inspect how the model responds, not as a prediction that a real fish will strike.

If you know a coefficient here to be wrong, or have measured data that contradicts it,tell us. Being corrected is cheaper than being confidently wrong in public.