The Hook Is True; the Easy Myth Is Not
Rob Cook's 1984 “shade trees” let a renderer build surface and lighting behavior from composable operations. Pixar's RenderMan Interface, released in 1988, carried that idea into a full shading language. NVIDIA's GeForce3 user-programmable vertex engine arrived in 2001.
So yes: programmable shading existed in software before it became a mass-market GPU feature.
But chronology is not a license to invent a clean corporate genealogy. The old archive post suggested that workstation vendors, LSI Logic, Pixar, NVIDIA, and AI formed one hardware chain centered on fused multiply-add. The available primary sources support a different chain: movie requirements shaped a scalable renderer and language; real-time shading research translated the programming model; stream-computing research exposed the GPU; neural networks then exploited the resulting parallel machine.
What the Movie Problem Actually Demanded
In the early 1980s, Ed Catmull, Loren Carpenter, and Rob Cook at Lucasfilm asked what a computer-generated image would need in order to sit beside live-action photography without revealing itself through jagged edges, polygonal surfaces, missing motion blur, or crude materials.
Their REYES design target was deliberately extreme: 5 million pixels, 80 million micropolygons per image, 16 samples per pixel, and a budget of about 300 floating-point operations per micropolygon. The exact numbers were planning assumptions, not a benchmark result. Their purpose was to make incremental extensions impossible. The architecture had to be rebuilt around scale.
The resulting pipeline—bucket, split, dice, shade, hide, filter, display—kept working sets small, exploited locality, and shaded coherent grids that could be vectorized. The floating-point work mattered, but so did sampling, visibility, texture access, caching, and the order in which geometry moved through the machine.
The durable move was to turn appearance into code. A fixed renderer could have accumulated one-off switches for every material request. A shading language instead gave technical directors a programmable boundary for surfaces, lights, deformations, and volumes.
Pixar and SGI Tried One Interface—Then Split
The history contains a useful failed convergence. In 1987, Pixar and Silicon Graphics explored a common procedural 3D interface. They separated because their primary use cases wanted different abstractions.
RenderMan described a scene for batch-oriented photorealistic rendering that could take hours. SGI's interactive systems needed lower-level drawing commands, real-time response, z-buffers, accumulation buffers, 2D applications, and a graphical user interface.
That fork matters. It disproves the idea that movie rendering simply became the consumer GPU pipeline. Offline and real-time rendering diverged. What crossed the gap later was not one untouched architecture; it was the idea that shading should be programmable.
The Abstraction Crossed Anyway
Pat Hanrahan's Stanford group later developed a real-time shading language, RTSL. Hanrahan and Catmull's 2021 retrospective says RTSL strongly influenced NVIDIA Cg, Microsoft HLSL, and GLSL. In the same research lineage, Ian Buck developed Brook for GPUs; Brook evolved into CUDA.
On the hardware side, GeForce3's 2001 vertex engine moved a tightly tuned fixed-function stage behind a user-programmable instruction stream. Programs still operated on independent vertices inside a larger graphics pipeline. That restriction was a strength: the machine could keep transparent multithreading and parallel throughput while exposing a useful programming model.
Later unified-shader designs let more graphics stages share a parallel processor array. CUDA then exposed threads, memory, and synchronization without requiring the program to pretend it was drawing triangles.
One Arithmetic Motif, Four Different Meanings
Graphics and learning repeatedly need weighted sums:
accumulator = accumulator + value * weight
A lighting calculation forms dot products between directions, then combines the results with colors and material terms. A convolution forms dot products between an image neighborhood and a learned kernel. A dense neural layer multiplies an input vector by many weight vectors. Matrix multiplication performs many dot products together.
The family resemblance is real. The words are not interchangeable.
a × b + c with one final rounding. Fermi introduced IEEE-754-2008-style FP32 FMA and implemented FMA for both FP32 and FP64; GT200 already supported FP64 FMA. Earlier single-precision GPU MAD instructions should not be retroactively renamed FMA.AlexNet Was the Hinge
The 2012 AlexNet paper did not claim that a graphics renderer had become a neural network. It made the more concrete claim that current GPUs, paired with a highly optimized implementation of two-dimensional convolution, were powerful enough to train an unusually large convolutional network on high-resolution images.
The network had five convolutional and three fully connected layers. Training took five to six days on two 3 GB GTX 580 GPUs. The model was split because one GPU did not have enough memory, and the two devices communicated only at selected layers so communication would remain a tolerable fraction of computation.
The authors ended that hardware discussion with a remarkably direct forecast: larger models would be limited mainly by GPU memory and acceptable training time, and results could improve with faster GPUs and bigger datasets.
Neural networks fit GPUs not because a neuron is a pixel. They fit because convolution and dense layers expose vast fields of similar dot products, enough arithmetic per data item to reward a throughput-oriented parallel machine.
The Scalar Loop Became a Matrix Tile
By 2017, NVIDIA's Volta Tensor Cores exposed the operation D = A × B + C on matrix tiles. The first generation used FP16 multiplication inputs with FP16 or FP32 accumulation. NVIDIA counted 64 mixed-precision floating-point FMA operations per Tensor Core per clock.
That is not merely a faster old pixel shader. The instruction shape, cooperating threads, data layout, precision contract, and accumulation behavior changed. The recurring sum-of-products was important enough to become a dedicated matrix datapath.
Peak numbers across generations need caution. A scalar FP32 FMA rate, an early shader MAD rate, and mixed-precision Tensor TFLOPS do not measure the same numerical contract. The more useful comparison is architectural: the hardware unit grew to match the dominant workload.
What Did Not Carry Across
Rendering is not only arithmetic. REYES depended on splitting and dicing geometry, stochastic sampling, visibility, texture thrift, locality, and bounded working sets. Modern path tracing adds ray traversal, divergent paths, complex shaders, random sampling, and large scene data.
Training is not only Tensor Cores. Data loading, activation functions, normalization, softmax, optimizer state, memory movement, and communication across accelerators can dominate parts of a run.
Precision is a design choice, not a footnote. A visually acceptable rendering error, an IEEE scientific result, and a stable mixed-precision training step have different tolerances. Training with low-precision products works only when range, accumulation, scaling, and updates are protected appropriately.
The corporate myth is unsupported. Neither chronological proximity nor overlapping industry relationships establish that Pixar's RenderMan requirements or a custom Pixar floating-point engine passed into NVIDIA. No primary source reviewed for this article documents that handoff. The documented connection is strong enough without inventing one.
Inspect the Same Boundary at Small Scale
The nearby artifacts on this site are intentionally smaller than the history:
- Cheap Pixelless Textures With 2D SDFs keeps one procedural image beside the source that produced it. It is a Python/NumPy/Pillow renderer, not GPU-throughput evidence.
- Four-Layer Tiny Transformer Training Run keeps a model shape, command, loss log, samples, and source path together. It was trained on CPU, not evidence for accelerator performance.
- Why Open-Sourcing ASIC FMA Is Hard follows
a × b + cinto the physical-design boundary: alignment, partial products, normalization, rounding, exceptions, pipeline staging, timing, verification, and layout.
Those boundaries matter because a powerful historical analogy becomes useful only after each artifact says what it actually proves.
The Engineering Claim
A workload shapes hardware when four things line up: an operation repeats often enough, its dataflow exposes parallel work, a programming interface lets people express new uses, and a large enough market rewards specialized implementation.
Movie rendering helped make programmable appearance a production requirement. Games and real-time graphics made programmable parallel arithmetic a mass-market product. GPU computing opened the machine beyond the raster pipeline. Deep learning arrived with dot-product-heavy work large enough to justify matrix-specific, mixed-precision hardware.
The movie frame and the model token do not share one product family tree. They share a pressure: keep enormous streams of small arithmetic fed.
Primary Sources
- Pat Hanrahan and Edwin Catmull, The Design of RenderMan, IEEE Computer Graphics and Applications, 2021.
- Pixar RenderMan, The Evolution of RenderMan.
- Erik Lindholm, Mark Kilgard, and Henry Moreton, A User-Programmable Vertex Engine, SIGGRAPH 2001.
- Ian Buck et al., Scalable Parallel Programming with CUDA, 2008.
- NVIDIA, NVIDIA's Next Generation CUDA Compute Architecture: Fermi, 2009.
- Alex Krizhevsky, Ilya Sutskever, and Geoffrey Hinton, ImageNet Classification with Deep Convolutional Neural Networks, 2012.
- NVIDIA, Programming Tensor Cores in CUDA 9, 2017.
- NVIDIA, Matrix Multiplication Background User's Guide.