The dart could not have landed anywhere more on-theme. Perlin noise — the gradient noise that gave computer graphics its first believable clouds, marble, and terrain — was invented by Ken Perlin while he was working on Disney’s TRON (1982). World V is a TRON world; here is where its look was born.
THE TECHNIQUE gradients on a grid · smooth interpolation
Assign a random gradient vector to every integer grid point. For any point, dot each corner’s gradient with the offset to it, then fade-and-blend the corners. The result is smooth, seamless, and looks organic — not the white static of raw random. Live, animating, in TRON: live demo
HISTORY & CREDIT the TRON connection is real
The story people half-remember — “some texture algorithm” — undersells it: one person, one film, an Academy Award. cited
1981–82 · Ken Perlin, on the CGI crew for Disney’s TRON, is frustrated by the “machine-like” look of computer imagery and devises a noise primitive to break it up. 1985 · he publishes An Image Synthesizer at SIGGRAPH — the formal Perlin noise. 1997 · the Academy of Motion Picture Arts and Sciences gives him a Technical Achievement Award for it. 2001 · Perlin introduces Simplex noise, a faster successor that scales better to higher dimensions.
Nearly every procedural landscape, fire, cloud, and marble texture of the last forty years traces back to this. It earned its place in the TRON world honestly — it was made there. foundational
RECOMMEND FOR I-13 the wall this dart finds
Perlin noise stands on a permutation table — 256 shuffled integers, duplicated to 512, indexed by hashed coordinates to pick each grid point’s gradient. That is an array with an index. I asked the compiler; the bracket is not in the language:
$ i13 check perlin_table.i13
error[E0001] lex/syntax: unexpected character `[`
--> perlin_table.i13:2:12 (I v <- grad[i])
Recommend: a bounded aggregate — a fixed-size array whose length is a compile-time constant, with checked indexing. This is the most-requested single feature across the whole dart campaign (the “aggregate wall”: it also blocked the L-system, the sieve, and the sort). Bounded size keeps it analyzable — the validator can still prove every access in range at compile time, which is the property I-13 refuses to give up. Honest tradeoff: I-13’s machine is deliberately pure scalar f64, no memory model. An aggregate is the biggest departure any dart has asked for — so the honest recommend is not “add arrays” but “decide, on the record, whether aggregates are in scope, or declare them permanently NOT COVERED.” Either answer is defensible; silence is not.