{
  "nodes": {
    "a-trous-filter": {
      "title": "A-Trous Wavelet Filter",
      "cluster": "denoising",
      "year": 2010,
      "summary": "Applies a small kernel repeatedly with exponentially increasing sample spacing, reaching a wide filter in a few passes instead of one enormous kernel.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Stationary_wavelet_transform",
      "refs": [
        {
          "title": "Edge-Avoiding A-Trous Wavelet Transform for Fast Global Illumination Filtering",
          "authors": "Dammertz, Sewtz, Hanika, Lensch",
          "year": 2010
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "bilateral-filter",
          "why": "wide support in a few sparse passes, not one big kernel"
        }
      ],
      "id": "a-trous-filter"
    },
    "a3c": {
      "title": "Asynchronous Advantage Actor-Critic",
      "cluster": "reinforcement",
      "year": 2016,
      "aka": [
        "A3C",
        "A2C"
      ],
      "summary": "Runs many actors on their own copy of the environment and applies their gradients to one shared set of weights; A2C is the same idea with the actors stepped in lockstep. Cheap enough to train on CPUs, and the reason on-policy methods no longer needed a replay buffer.\n",
      "refs": [
        {
          "title": "Asynchronous Methods for Deep Reinforcement Learning",
          "authors": "Mnih et al.",
          "year": 2016,
          "url": "https://arxiv.org/abs/1602.01783"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "actor-critic",
          "why": "one actor and critic, updated from many environments at once"
        },
        {
          "rel": "alternative-to",
          "to": "experience-replay",
          "why": "parallel environments decorrelate the updates instead of a buffer"
        }
      ],
      "id": "a3c"
    },
    "aces": {
      "title": "ACES",
      "cluster": "color",
      "summary": "A standardized colour management pipeline with defined working spaces and a reference rendering transform, so that the same render matches across displays and facilities.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Academy_Color_Encoding_System",
      "edges": [
        {
          "rel": "extends",
          "to": "filmic-tonemapping",
          "why": "a whole managed pipeline, not just an output curve"
        }
      ],
      "id": "aces"
    },
    "actor-critic": {
      "title": "Actor-Critic",
      "cluster": "reinforcement",
      "summary": "Learns a policy and a value function together, using the value estimate as the baseline the policy gradient is measured against. Most modern policy methods are some form of this.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Actor-critic_algorithm",
      "edges": [
        {
          "rel": "extends",
          "to": "policy-gradient",
          "why": "a learned baseline instead of sampled returns"
        }
      ],
      "id": "actor-critic"
    },
    "adam": {
      "title": "Adam",
      "cluster": "learning",
      "year": 2014,
      "summary": "Keeps running averages of both the gradient and its square, giving every parameter its own step size. The default optimiser almost everywhere, mostly because it needs so little tuning.\n",
      "refs": [
        {
          "title": "Adam: A Method for Stochastic Optimization",
          "authors": "Kingma, Ba",
          "year": 2014,
          "url": "https://arxiv.org/abs/1412.6980"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "momentum",
          "why": "adds a per-parameter step size from the second moment"
        }
      ],
      "id": "adam"
    },
    "adamw": {
      "title": "AdamW",
      "cluster": "learning",
      "year": 2017,
      "summary": "Applies weight decay directly to the weights instead of adding an L2 term to the loss. The distinction is invisible in plain SGD and decisive in Adam.\n",
      "refs": [
        {
          "title": "Decoupled Weight Decay Regularization",
          "authors": "Loshchilov, Hutter",
          "year": 2017,
          "url": "https://arxiv.org/abs/1711.05101"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "adam",
          "why": "an L2 penalty stops being weight decay once Adam rescales it"
        }
      ],
      "id": "adamw"
    },
    "all-reduce": {
      "title": "All-Reduce",
      "cluster": "distributed",
      "summary": "A collective that sums a tensor across every participant and returns the result to all of them. Ring and tree schedules make its cost depend on interconnect bandwidth rather than device count.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Collective_operation",
      "id": "all-reduce"
    },
    "ambient-occlusion": {
      "title": "Ambient Occlusion",
      "cluster": "real-time-shading",
      "summary": "A scalar factor for how much of the hemisphere above a point is blocked by nearby geometry, multiplied into ambient light. Not physically justified, but it restores the contact darkening flat ambient loses.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Ambient_occlusion",
      "edges": [
        {
          "rel": "approximates",
          "to": "rendering-equation",
          "why": "one visibility scalar instead of an indirect bounce"
        }
      ],
      "id": "ambient-occlusion"
    },
    "anisotropic-filtering": {
      "title": "Anisotropic Filtering",
      "cluster": "antialiasing",
      "summary": "Takes several mip samples along the direction the footprint is stretched, instead of choosing one level from its widest extent.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Anisotropic_filtering",
      "edges": [
        {
          "rel": "corrects",
          "to": "mipmapping",
          "why": "one isotropic level overblurs surfaces seen at an angle"
        }
      ],
      "id": "anisotropic-filtering"
    },
    "antialiasing-over-time": {
      "title": "Temporal Sample Reuse",
      "cluster": "antialiasing",
      "summary": "The general idea that a frame is one sample of a continuously moving signal, so previous frames are usable samples if you can find the corresponding point.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Spatial_anti-aliasing",
      "edges": [
        {
          "rel": "approximates",
          "to": "supersampling",
          "why": "spreads the extra samples across frames"
        }
      ],
      "id": "antialiasing-over-time"
    },
    "arithmetic-intensity": {
      "title": "Arithmetic Intensity",
      "cluster": "hardware",
      "summary": "Operations performed per byte moved. The single number that decides whether a kernel is compute bound or bandwidth bound, and therefore which optimisations can possibly help.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Roofline_model",
      "edges": [
        {
          "rel": "part-of",
          "to": "roofline-model"
        }
      ],
      "id": "arithmetic-intensity"
    },
    "artist-friendly-fresnel": {
      "title": "Artist-Friendly Metallic Fresnel",
      "cluster": "materials",
      "year": 2014,
      "summary": "Reparameterizes conductor Fresnel from complex indices of refraction, which nobody can author, into reflectivity and edge tint, which can be picked from a colour swatch.\n",
      "refs": [
        {
          "title": "Artist Friendly Metallic Fresnel",
          "authors": "Gulbrandsen",
          "year": 2014,
          "url": "https://jcgt.org/published/0003/04/03/paper.pdf"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "fresnel",
          "why": "reflectivity and edge tint, not unauthorable complex IOR"
        }
      ],
      "id": "artist-friendly-fresnel"
    },
    "attention": {
      "title": "Attention",
      "cluster": "sequence-models",
      "year": 2014,
      "summary": "Compute a weighted sum over all positions, with weights from a learned compatibility score. Every position can reach every other in one hop, regardless of distance.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Attention_(machine_learning)",
      "refs": [
        {
          "title": "Neural Machine Translation by Jointly Learning to Align and Translate",
          "authors": "Bahdanau, Cho, Bengio",
          "year": 2014,
          "url": "https://arxiv.org/abs/1409.0473"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "recurrent-network",
          "why": "a fixed-size hidden state cannot carry a whole sequence"
        }
      ],
      "id": "attention"
    },
    "autoencoder": {
      "title": "Autoencoder",
      "cluster": "representation",
      "summary": "Compresses input through a bottleneck and reconstructs it. The bottleneck is the whole mechanism: whatever survives it is what the data could not do without.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Autoencoder",
      "id": "autoencoder"
    },
    "autoregressive-language-model": {
      "title": "Autoregressive Language Model",
      "cluster": "language",
      "aka": [
        "GPT",
        "Decoder-only"
      ],
      "summary": "A decoder-only transformer trained to predict the next token. The objective is trivial and the capability that falls out of scaling it was not anticipated.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Generative_pre-trained_transformer",
      "edges": [
        {
          "rel": "specializes",
          "to": "transformer",
          "why": "decoder only, predicting forward with a causal mask"
        },
        {
          "rel": "alternative-to",
          "to": "bert",
          "why": "generates continuations rather than encoding a whole span"
        }
      ],
      "id": "autoregressive-language-model"
    },
    "back-face-culling": {
      "title": "Back-Face Culling",
      "cluster": "visibility",
      "summary": "Discards triangles whose winding shows they face away from the camera, removing about half the geometry of a closed mesh before it is rasterized at all.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Back-face_culling",
      "edges": [
        {
          "rel": "extends",
          "to": "rasterization",
          "why": "half a closed mesh can never face the camera"
        }
      ],
      "id": "back-face-culling"
    },
    "backpropagation": {
      "title": "Backpropagation",
      "cluster": "learning",
      "year": 1986,
      "summary": "Reverse-mode differentiation over the network graph: one backward pass yields the gradient with respect to every parameter, at roughly the cost of the forward pass.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Backpropagation",
      "edges": [
        {
          "rel": "requires",
          "to": "gradient-descent",
          "why": "it supplies the gradient the update step consumes"
        }
      ],
      "id": "backpropagation"
    },
    "batch-normalization": {
      "title": "Batch Normalization",
      "cluster": "learning",
      "year": 2015,
      "aka": [
        "BatchNorm"
      ],
      "summary": "Normalise each activation across the batch, then rescale by learned parameters. Allowed much higher learning rates, which is what made very deep networks trainable in practice.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Batch_normalization",
      "refs": [
        {
          "title": "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift",
          "authors": "Ioffe, Szegedy",
          "year": 2015,
          "url": "https://arxiv.org/abs/1502.03167"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "stochastic-gradient-descent",
          "why": "each layer's input distribution shifts as earlier layers update"
        }
      ],
      "id": "batch-normalization"
    },
    "beckmann": {
      "title": "Beckmann Distribution",
      "cluster": "materials",
      "summary": "A Gaussian distribution of microfacet slopes, derived from physical optics. Its tail falls off quickly, so highlights end more abruptly than measured materials do.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Specular_highlight",
      "edges": [
        {
          "rel": "specializes",
          "to": "microfacet-model",
          "why": "supplies a Gaussian slope distribution as D"
        }
      ],
      "id": "beckmann"
    },
    "behavior-cloning": {
      "title": "Behavior Cloning",
      "cluster": "reinforcement",
      "year": 1988,
      "aka": [
        "Behaviour cloning",
        "Imitation learning"
      ],
      "summary": "Fit a policy to demonstrations with a supervised loss and skip the reward entirely. Its own small errors then take it off the states it was shown, where nothing in the data says what to do. That compounding drift is the failure DAgger names and patches.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Imitation_learning",
      "refs": [
        {
          "title": "ALVINN: An Autonomous Land Vehicle in a Neural Network",
          "authors": "Pomerleau",
          "year": 1988,
          "url": "https://proceedings.neurips.cc/paper/1988/hash/812b4ba287f5ee0bc9d43bbf5bbe87fb-Abstract.html"
        },
        {
          "title": "A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning",
          "authors": "Ross, Gordon, Bagnell",
          "year": 2011,
          "url": "https://arxiv.org/abs/1011.0686"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "policy-gradient",
          "why": "demonstrations instead of a reward, so nothing has to be explored"
        }
      ],
      "id": "behavior-cloning"
    },
    "bellman-equation": {
      "title": "Bellman Equation",
      "cluster": "reinforcement",
      "year": 1957,
      "summary": "The value of a state is the reward collected now plus the discounted value of wherever the next step lands. Everything else here is a way of solving that recursion without being handed the transition probabilities it is written in terms of.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bellman_equation",
      "edges": [
        {
          "rel": "part-of",
          "to": "markov-decision-process"
        }
      ],
      "id": "bellman-equation"
    },
    "bert": {
      "title": "BERT",
      "cluster": "language",
      "year": 2018,
      "summary": "An encoder-only transformer pretrained by masking tokens and predicting them from both sides. Showed that one pretrained model plus a small head beats task-specific architectures.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/BERT_(language_model)",
      "refs": [
        {
          "title": "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding",
          "authors": "Devlin, Chang, Lee, Toutanova",
          "year": 2018,
          "url": "https://arxiv.org/abs/1810.04805"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "transformer",
          "why": "encoder only, trained by masking rather than predicting"
        }
      ],
      "id": "bert"
    },
    "bfloat16": {
      "title": "bfloat16",
      "cluster": "numerics",
      "year": 2018,
      "summary": "Keeps float32's eight exponent bits and spends the savings on significand instead. The same range as single precision, so values that were representable before still are.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bfloat16_floating-point_format",
      "edges": [
        {
          "rel": "corrects",
          "to": "half-precision",
          "why": "fp16's exponent range underflows small gradients"
        }
      ],
      "id": "bfloat16"
    },
    "bidirectional-path-tracing": {
      "title": "Bidirectional Path Tracing",
      "cluster": "light-transport",
      "year": 1993,
      "aka": [
        "BDPT"
      ],
      "summary": "Trace a subpath from the camera and another from a light, then connect every pair of vertices. Finds paths that neither direction would find alone, such as a room lit only through a narrow doorway.\n",
      "refs": [
        {
          "title": "Bi-Directional Path Tracing",
          "authors": "Lafortune, Willems",
          "year": 1993
        },
        {
          "title": "Bidirectional Estimators for Light Transport",
          "authors": "Veach, Guibas",
          "year": 1994,
          "url": "https://doi.org/10.1007/978-3-642-87825-1_11"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "path-tracing",
          "why": "also grows a subpath from the light side"
        },
        {
          "rel": "requires",
          "to": "multiple-importance-sampling",
          "why": "the same path is built many ways and must be weighted"
        }
      ],
      "id": "bidirectional-path-tracing"
    },
    "bilateral-filter": {
      "title": "Bilateral Filter",
      "cluster": "denoising",
      "summary": "Weights a blur by similarity in depth, normal and colour as well as distance, so it smooths within a surface but not across its boundaries.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bilateral_filter",
      "edges": [
        {
          "rel": "corrects",
          "to": "monte-carlo-integration",
          "why": "trades a little bias for a large drop in variance"
        }
      ],
      "id": "bilateral-filter"
    },
    "blinn-phong": {
      "title": "Blinn-Phong",
      "cluster": "materials",
      "year": 1977,
      "summary": "Replaces Phong's reflection vector with the half vector between light and view. Cheaper, and the resulting highlight elongates at grazing angles the way real ones do.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_reflection_model",
      "refs": [
        {
          "title": "Models of Light Reflection for Computer Synthesized Pictures",
          "authors": "Blinn",
          "year": 1977,
          "url": "https://doi.org/10.1145/965141.563893"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "phong",
          "why": "the half vector is cheaper and behaves at grazing angles"
        }
      ],
      "id": "blinn-phong"
    },
    "blue-noise-sampling": {
      "title": "Blue-Noise Error Distribution",
      "cluster": "sampling",
      "year": 2019,
      "summary": "Chooses per-pixel sample seeds so that the residual error is high- frequency across the screen. The error is not smaller, but the eye and any subsequent filter both handle it far better than white noise.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Colors_of_noise",
      "refs": [
        {
          "title": "A Low-Discrepancy Sampler that Distributes Monte Carlo Errors as a Blue Noise in Screen Space",
          "authors": "Heitz, Belcour, Chizhov, Lucas, Iehl, Ostromoukhov",
          "year": 2019,
          "url": "https://doi.org/10.1145/3306307.3328191"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "monte-carlo-integration",
          "why": "same error, redistributed to where the eye sees it least"
        }
      ],
      "id": "blue-noise-sampling"
    },
    "branch-divergence": {
      "title": "Branch Divergence",
      "cluster": "hardware",
      "summary": "When lanes in a group take different sides of a branch, the hardware runs both sides and masks off the lanes that should not execute. Cost is the sum of the paths, not the average.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads",
      "edges": [
        {
          "rel": "part-of",
          "to": "simt"
        }
      ],
      "id": "branch-divergence"
    },
    "brdf": {
      "title": "BRDF",
      "cluster": "foundations",
      "year": 1965,
      "aka": [
        "Bidirectional Reflectance Distribution Function"
      ],
      "summary": "Ratio of outgoing radiance to incoming irradiance for a pair of directions. The formalism that lets a material be specified independently of the transport algorithm that uses it.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bidirectional_reflectance_distribution_function",
      "refs": [
        {
          "title": "Directional Reflectance and Emissivity of an Opaque Surface",
          "authors": "Nicodemus",
          "year": 1965,
          "url": "https://doi.org/10.21236/ad0463473"
        }
      ],
      "edges": [
        {
          "rel": "part-of",
          "to": "reflection"
        },
        {
          "rel": "requires",
          "to": "radiance",
          "why": "defined as a ratio of radiance to irradiance"
        }
      ],
      "id": "brdf"
    },
    "bsdf": {
      "title": "BSDF",
      "cluster": "foundations",
      "aka": [
        "Bidirectional Scattering Distribution Function"
      ],
      "summary": "A BRDF and a BTDF taken together, defined over the whole sphere rather than the upper hemisphere, so that one function describes both sides of a surface.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bidirectional_scattering_distribution_function",
      "edges": [
        {
          "rel": "extends",
          "to": "brdf",
          "why": "covers the transmitted hemisphere as well"
        }
      ],
      "id": "bsdf"
    },
    "bssrdf": {
      "title": "BSSRDF",
      "cluster": "materials",
      "year": 2001,
      "aka": [
        "Subsurface scattering"
      ],
      "summary": "Relates light entering at one point to light leaving at another, rather than assuming both happen at the same place. Necessary for skin, marble and milk, where the transport distance is visible at normal viewing scale.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Subsurface_scattering",
      "refs": [
        {
          "title": "A Practical Model for Subsurface Light Transport",
          "authors": "Jensen, Marschner, Levoy, Hanrahan",
          "year": 2001,
          "url": "https://doi.org/10.1145/3596711.3596747"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "bsdf",
          "why": "light can leave far from where it entered"
        }
      ],
      "id": "bssrdf"
    },
    "bump-mapping": {
      "title": "Bump Mapping",
      "cluster": "geometry",
      "year": 1978,
      "summary": "Perturbs the shading normal from a height texture without moving any geometry. Almost free, and its limits are visible the moment a silhouette or a self-shadow is involved.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bump_mapping",
      "refs": [
        {
          "title": "Simulation of Wrinkled Surfaces",
          "authors": "Blinn",
          "year": 1978,
          "url": "https://doi.org/10.1145/280811.280982"
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "displacement-mapping",
          "why": "perturbs normals only; silhouettes stay flat"
        }
      ],
      "id": "bump-mapping"
    },
    "bvh": {
      "title": "Bounding Volume Hierarchy",
      "cluster": "geometry",
      "aka": [
        "BVH"
      ],
      "summary": "A tree of nested bounding boxes over primitives. Handles unevenly distributed geometry gracefully, refits cheaply under animation, and is what ray tracing hardware implements.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bounding_volume_hierarchy",
      "edges": [
        {
          "rel": "corrects",
          "to": "whitted-ray-tracing",
          "why": "testing every primitive per ray is linear in scene size"
        }
      ],
      "id": "bvh"
    },
    "byol": {
      "title": "BYOL",
      "cluster": "representation",
      "year": 2020,
      "aka": [
        "Bootstrap Your Own Latent"
      ],
      "summary": "An online network predicts the output of a slowly updated target copy of itself, with no negatives at all. Should collapse to a constant and does not, which took the field some time to explain.\n",
      "refs": [
        {
          "title": "Bootstrap your own latent: A new approach to self-supervised Learning",
          "authors": "Grill et al.",
          "year": 2020,
          "url": "https://arxiv.org/abs/2006.07733"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "contrastive-learning",
          "why": "negative pairs turn out not to be necessary"
        }
      ],
      "id": "byol"
    },
    "byte-pair-encoding": {
      "title": "Byte-Pair Encoding",
      "cluster": "language",
      "year": 2015,
      "aka": [
        "BPE",
        "Subword tokenization"
      ],
      "summary": "Merges frequent character pairs into subword units until the vocabulary is full. Any string stays representable, so rare and unseen words degrade into pieces instead of a single unknown token.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Byte-pair_encoding",
      "refs": [
        {
          "title": "Neural Machine Translation of Rare Words with Subword Units",
          "authors": "Sennrich, Haddow, Birch",
          "year": 2015,
          "url": "https://arxiv.org/abs/1508.07909"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "word-embedding",
          "why": "a fixed word vocabulary cannot represent anything unseen"
        }
      ],
      "id": "byte-pair-encoding"
    },
    "cache-hierarchy": {
      "title": "Cache Hierarchy",
      "cluster": "hardware",
      "summary": "Successive levels trade capacity for latency and bandwidth. Almost every optimisation below the algorithmic level is a rearrangement to make a working set fit one level higher up.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Cache_hierarchy",
      "id": "cache-hierarchy"
    },
    "cascaded-shadow-maps": {
      "title": "Cascaded Shadow Maps",
      "cluster": "shadows",
      "aka": [
        "CSM",
        "Parallel-split shadow maps"
      ],
      "summary": "Splits the view frustum by depth and gives each slice its own shadow map, so texel density roughly tracks screen-space size instead of being wasted on the far distance.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Shadow_mapping",
      "edges": [
        {
          "rel": "corrects",
          "to": "shadow-mapping",
          "why": "one map cannot cover a whole frustum's depth range"
        }
      ],
      "id": "cascaded-shadow-maps"
    },
    "catastrophic-cancellation": {
      "title": "Catastrophic Cancellation",
      "cluster": "numerics",
      "summary": "Subtracting two nearly equal values discards the leading digits they agree on and promotes rounding error into the result. The reason a mathematically exact rearrangement can be numerically disastrous.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Catastrophic_cancellation",
      "edges": [
        {
          "rel": "part-of",
          "to": "floating-point"
        }
      ],
      "id": "catastrophic-cancellation"
    },
    "catmull-clark": {
      "title": "Catmull-Clark Subdivision",
      "cluster": "geometry",
      "year": 1978,
      "summary": "Generalizes bicubic B-spline refinement to meshes of arbitrary topology. The standard modelling surface in film, and the reason quad topology is the convention it is.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface",
      "refs": [
        {
          "title": "Recursively Generated B-Spline Surfaces on Arbitrary Topological Meshes",
          "authors": "Catmull, Clark",
          "year": 1978,
          "url": "https://doi.org/10.1145/280811.280992"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "subdivision-surfaces",
          "why": "bicubic B-splines extended to arbitrary quad meshes"
        }
      ],
      "id": "catmull-clark"
    },
    "chinchilla-scaling": {
      "title": "Chinchilla Scaling",
      "cluster": "language",
      "year": 2022,
      "summary": "Refits the compute-optimal frontier and finds parameters and tokens should grow together in roughly equal proportion. Implied the models of the day were several times too large for the data they saw.\n",
      "refs": [
        {
          "title": "Training Compute-Optimal Large Language Models",
          "authors": "Hoffmann et al.",
          "year": 2022,
          "url": "https://arxiv.org/abs/2203.15556"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "scaling-laws",
          "why": "the earlier fits left models too large for their data"
        }
      ],
      "id": "chinchilla-scaling"
    },
    "circle-of-confusion": {
      "title": "Circle of Confusion",
      "cluster": "camera",
      "summary": "The blur disc a point source projects onto the sensor when it is out of focus. Its diameter is what depth-of-field effects actually compute.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Circle_of_confusion",
      "edges": [
        {
          "rel": "part-of",
          "to": "thin-lens-model"
        }
      ],
      "id": "circle-of-confusion"
    },
    "classifier-free-guidance": {
      "title": "Classifier-Free Guidance",
      "cluster": "generative",
      "year": 2022,
      "summary": "Trains one model both conditioned and unconditioned, then extrapolates away from the unconditional prediction at sampling time. Buys prompt adherence for a little diversity, with no second model.\n",
      "refs": [
        {
          "title": "Classifier-Free Diffusion Guidance",
          "authors": "Ho, Salimans",
          "year": 2022,
          "url": "https://arxiv.org/abs/2207.12598"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "diffusion-model",
          "why": "conditioning alone is too weak to follow a prompt"
        }
      ],
      "id": "classifier-free-guidance"
    },
    "clip": {
      "title": "CLIP",
      "cluster": "representation",
      "year": 2021,
      "summary": "Trains an image encoder and a text encoder so that a picture and its caption land together. Gives a shared space where a class can be named rather than trained.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Contrastive_Language%E2%80%93Image_Pre-training",
      "refs": [
        {
          "title": "Learning Transferable Visual Models From Natural Language Supervision",
          "authors": "Radford et al.",
          "year": 2021,
          "url": "https://arxiv.org/abs/2103.00020"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "contrastive-learning",
          "why": "the positive pair is an image and its own caption"
        }
      ],
      "id": "clip"
    },
    "clustered-shading": {
      "title": "Clustered / Tiled Shading",
      "cluster": "real-time-shading",
      "year": 2012,
      "summary": "Bins lights into screen tiles or view-space froxels so each pixel iterates only the lights that can reach it, making thousands of local lights affordable.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Deferred_shading",
      "refs": [
        {
          "title": "Clustered Deferred and Forward Shading",
          "authors": "Olsson, Billeter, Assarsson",
          "year": 2012
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "deferred-shading",
          "why": "every light otherwise touches every pixel it covers"
        }
      ],
      "id": "clustered-shading"
    },
    "condition-number": {
      "title": "Condition Number",
      "cluster": "numerics",
      "summary": "How much a problem amplifies error in its input. Separates a badly behaved problem from a badly written algorithm, which is a distinction worth making before optimising either.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Condition_number",
      "edges": [
        {
          "rel": "validates",
          "to": "floating-point",
          "why": "bounds how much accuracy a result can possibly retain"
        }
      ],
      "id": "condition-number"
    },
    "conservative-q-learning": {
      "title": "Conservative Q-Learning",
      "cluster": "reinforcement",
      "year": 2020,
      "aka": [
        "CQL"
      ],
      "summary": "Adds a term that pushes down the value of actions the dataset does not contain, so what comes out is a lower bound on the policy's true value rather than an optimistic guess.\n",
      "refs": [
        {
          "title": "Conservative Q-Learning for Offline Reinforcement Learning",
          "authors": "Kumar, Zhou, Tucker, Levine",
          "year": 2020,
          "url": "https://arxiv.org/abs/2006.04779"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "offline-rl",
          "why": "the critic overrates actions never seen, and the policy walks straight to them"
        }
      ],
      "id": "conservative-q-learning"
    },
    "contrastive-learning": {
      "title": "Contrastive Learning",
      "cluster": "representation",
      "year": 2020,
      "aka": [
        "SimCLR"
      ],
      "summary": "Pulls two augmented views of one image together in embedding space and pushes other images apart. Learns without labels, and the augmentations quietly decide what the features will ignore.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Self-supervised_learning",
      "refs": [
        {
          "title": "A Simple Framework for Contrastive Learning of Visual Representations",
          "authors": "Chen, Kornblith, Norouzi, Hinton",
          "year": 2020,
          "url": "https://arxiv.org/abs/2002.05709"
        }
      ],
      "id": "contrastive-learning"
    },
    "cook-torrance": {
      "title": "Cook-Torrance",
      "cluster": "materials",
      "year": 1982,
      "summary": "Brought microfacet theory into graphics, with spectral Fresnel and a proper distinction between metals and dielectrics. The direct ancestor of every physically based shading model in use today.\n",
      "refs": [
        {
          "title": "A Reflectance Model for Computer Graphics",
          "authors": "Cook, Torrance",
          "year": 1982,
          "url": "https://doi.org/10.1145/965161.806819"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "microfacet-model",
          "why": "first graphics-side instance of the framework"
        }
      ],
      "id": "cook-torrance"
    },
    "correlated-smith": {
      "title": "Height-Correlated Smith",
      "cluster": "materials",
      "year": 2014,
      "summary": "Accounts for the fact that a microfacet hidden from the light is likely to be hidden from the view as well, since both depend on the same height field.\n",
      "refs": [
        {
          "title": "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs",
          "authors": "Heitz",
          "year": 2014,
          "url": "https://jcgt.org/published/0003/02/03/paper.pdf"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "smith-masking",
          "why": "incident and exitant masks are related, not independent"
        }
      ],
      "id": "correlated-smith"
    },
    "cosine-schedule": {
      "title": "Cosine Learning-Rate Schedule",
      "cluster": "learning",
      "year": 2016,
      "summary": "Anneals the step size along a cosine from its peak to near zero, optionally restarting. The default decay shape, largely because it has no knobs worth tuning.\n",
      "refs": [
        {
          "title": "SGDR: Stochastic Gradient Descent with Warm Restarts",
          "authors": "Loshchilov, Hutter",
          "year": 2016,
          "url": "https://arxiv.org/abs/1608.03983"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "learning-rate-warmup",
          "why": "anneals after the ramp instead of holding the rate"
        }
      ],
      "id": "cosine-schedule"
    },
    "cosine-weighted-hemisphere": {
      "title": "Cosine-Weighted Hemisphere Sampling",
      "cluster": "sampling",
      "summary": "Samples directions with density proportional to the cosine of the angle from the normal, cancelling the geometry term in the rendering equation exactly.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Lambert%27s_cosine_law",
      "edges": [
        {
          "rel": "specializes",
          "to": "importance-sampling",
          "why": "cancels the cosine factor in the integrand exactly"
        }
      ],
      "id": "cosine-weighted-hemisphere"
    },
    "cross-entropy-loss": {
      "title": "Cross-Entropy Loss",
      "cluster": "learning",
      "summary": "Scores a predicted distribution by the log probability it assigned to the observed outcome. The standard classification objective, and the reason logits are trained rather than probabilities.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Cross-entropy",
      "edges": [
        {
          "rel": "requires",
          "to": "backpropagation",
          "why": "it is the scalar the backward pass differentiates"
        }
      ],
      "id": "cross-entropy-loss"
    },
    "data-parallelism": {
      "title": "Data Parallelism",
      "cluster": "distributed",
      "summary": "Every device holds a full replica and processes a slice of the batch, then the gradients are summed. The simplest way to scale, and it stops working when one replica no longer fits.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Data_parallelism",
      "edges": [
        {
          "rel": "requires",
          "to": "all-reduce",
          "why": "gradients must be summed across replicas every step"
        }
      ],
      "id": "data-parallelism"
    },
    "ddgi": {
      "title": "Dynamic Diffuse Global Illumination",
      "cluster": "real-time-shading",
      "year": 2019,
      "aka": [
        "DDGI"
      ],
      "summary": "Stores filtered depth alongside irradiance at each probe and weights probe contributions by a visibility test, so a probe on the far side of a wall stops contributing.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Global_illumination",
      "refs": [
        {
          "title": "Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields",
          "authors": "Majercik, Guertin, Nowrouzezahrai, McGuire",
          "year": 2019
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "light-probes",
          "why": "plain probe interpolation leaks light through walls"
        }
      ],
      "id": "ddgi"
    },
    "ddpg": {
      "title": "Deep Deterministic Policy Gradient",
      "cluster": "reinforcement",
      "year": 2015,
      "aka": [
        "DDPG"
      ],
      "summary": "Trains a deterministic actor by climbing the critic's gradient with respect to the action, which is what stands in for the max DQN cannot take over a continuous action space. Explores by adding noise to the actor's output, and is notoriously touchy about how much.\n",
      "refs": [
        {
          "title": "Continuous control with deep reinforcement learning",
          "authors": "Lillicrap et al.",
          "year": 2015,
          "url": "https://arxiv.org/abs/1509.02971"
        },
        {
          "title": "Deterministic Policy Gradient Algorithms",
          "authors": "Silver, Lever, Heess, Degris, Wierstra, Riedmiller",
          "year": 2014,
          "url": "https://proceedings.mlr.press/v32/silver14.html"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "deep-q-network",
          "why": "the max over actions has no closed form once an action is a vector"
        },
        {
          "rel": "specializes",
          "to": "actor-critic",
          "why": "a deterministic actor, so the critic differentiates straight into it"
        },
        {
          "rel": "requires",
          "to": "target-network",
          "why": "the same bootstrap divergence, now in the actor as well"
        }
      ],
      "id": "ddpg"
    },
    "deep-q-network": {
      "title": "Deep Q-Network",
      "cluster": "reinforcement",
      "year": 2013,
      "aka": [
        "DQN"
      ],
      "summary": "Replaces the Q table with a convolutional network reading pixels. The result that made reinforcement learning on raw sensory input look tractable.\n",
      "refs": [
        {
          "title": "Playing Atari with Deep Reinforcement Learning",
          "authors": "Mnih et al.",
          "year": 2013,
          "url": "https://arxiv.org/abs/1312.5602"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "q-learning",
          "why": "a table cannot cover a high-dimensional state space"
        }
      ],
      "id": "deep-q-network"
    },
    "deferred-shading": {
      "title": "Deferred Shading",
      "cluster": "real-time-shading",
      "summary": "Rasterize surface attributes into a G-buffer first, then light every visible pixel exactly once in a full-screen pass. Decouples lighting cost from scene complexity, at the price of bandwidth and awkward transparency.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Deferred_shading",
      "edges": [
        {
          "rel": "alternative-to",
          "to": "forward-shading",
          "why": "shades once per pixel, not once per overlapping fragment"
        }
      ],
      "id": "deferred-shading"
    },
    "delta-tracking": {
      "title": "Delta Tracking",
      "cluster": "volumetrics",
      "aka": [
        "Woodcock tracking"
      ],
      "summary": "Fills a heterogeneous medium with fictitious matter up to a uniform majorant so distances can be sampled analytically, then randomly rejects the fictitious collisions. Unbiased with no need to invert the optical depth.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Volume_rendering",
      "edges": [
        {
          "rel": "corrects",
          "to": "volumetric-path-tracing",
          "why": "heterogeneous media have no closed-form transmittance"
        }
      ],
      "id": "delta-tracking"
    },
    "diffuse-layering": {
      "title": "Layering with Diffuse Interfaces",
      "cluster": "materials",
      "year": 2022,
      "summary": "Extends statistical layering to stacks containing diffuse interfaces, which the lobe-variance formulation could not represent.\n",
      "refs": [
        {
          "title": "Rendering Layered Materials with Diffuse Interfaces",
          "year": 2022,
          "url": "https://arxiv.org/pdf/2203.11835.pdf"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "statistical-operators-layering",
          "why": "diffuse interfaces, not just rough specular ones"
        }
      ],
      "id": "diffuse-layering"
    },
    "diffuse-reflection": {
      "title": "Diffuse Reflection",
      "cluster": "materials",
      "summary": "Light that enters a surface, scatters under it and re-emerges in a broad distribution largely independent of the incoming direction.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Diffuse_reflection",
      "edges": [
        {
          "rel": "part-of",
          "to": "reflection"
        }
      ],
      "id": "diffuse-reflection"
    },
    "diffusion-model": {
      "title": "Diffusion Model",
      "cluster": "generative",
      "year": 2020,
      "aka": [
        "DDPM"
      ],
      "summary": "Learns to reverse a gradual noising process, generating by denoising repeatedly from pure noise. Trades sampling speed for stable training and far better mode coverage than adversarial methods.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Diffusion_model",
      "refs": [
        {
          "title": "Denoising Diffusion Probabilistic Models",
          "authors": "Ho, Jain, Abbeel",
          "year": 2020,
          "url": "https://arxiv.org/abs/2006.11239"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "generative-adversarial-network",
          "why": "a stable objective instead of a minimax game that collapses"
        },
        {
          "rel": "extends",
          "to": "neural-denoising",
          "why": "denoises repeatedly, from pure noise, to synthesise"
        }
      ],
      "id": "diffusion-model"
    },
    "dino": {
      "title": "DINO",
      "cluster": "representation",
      "year": 2021,
      "summary": "Self-distillation without labels: a student matches a momentum teacher across views, held away from collapse by centring and sharpening. Its attention maps segment objects nobody labelled.\n",
      "refs": [
        {
          "title": "Emerging Properties in Self-Supervised Vision Transformers",
          "authors": "Caron et al.",
          "year": 2021,
          "url": "https://arxiv.org/abs/2104.14294"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "byol",
          "why": "centring and sharpening in place of a prediction head"
        },
        {
          "rel": "requires",
          "to": "vision-transformer",
          "why": "the emergent segmentation lives in its attention maps"
        }
      ],
      "id": "dino"
    },
    "dinov2": {
      "title": "DINOv2",
      "cluster": "representation",
      "year": 2023,
      "summary": "Scales that recipe on a curated corpus into features good enough to use frozen, with no fine-tuning, across depth, segmentation and retrieval.\n",
      "refs": [
        {
          "title": "DINOv2: Learning Robust Visual Features without Supervision",
          "authors": "Oquab et al.",
          "year": 2023,
          "url": "https://arxiv.org/abs/2304.07193"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "dino",
          "why": "curated data and scale turn it into general features"
        }
      ],
      "id": "dinov2"
    },
    "dipole-diffusion": {
      "title": "Dipole Diffusion Approximation",
      "cluster": "materials",
      "year": 2001,
      "summary": "Approximates subsurface transport with a pair of virtual light sources straddling the surface, reducing a volumetric simulation to a closed- form falloff.\n",
      "refs": [
        {
          "title": "A Practical Model for Subsurface Light Transport",
          "authors": "Jensen, Marschner, Levoy, Hanrahan",
          "year": 2001,
          "url": "https://doi.org/10.1145/3596711.3596747"
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "bssrdf",
          "why": "a closed-form falloff instead of volumetric transport"
        }
      ],
      "id": "dipole-diffusion"
    },
    "direct-preference-optimization": {
      "title": "Direct Preference Optimization",
      "cluster": "language",
      "year": 2023,
      "aka": [
        "DPO"
      ],
      "summary": "Shows the preference objective can be optimised as a classification loss on the model itself, with no reward model and no rollouts.\n",
      "refs": [
        {
          "title": "Direct Preference Optimization: Your Language Model is Secretly a Reward Model",
          "authors": "Rafailov et al.",
          "year": 2023,
          "url": "https://arxiv.org/abs/2305.18290"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "rlhf",
          "why": "a reward model and an RL loop to fit a preference dataset"
        }
      ],
      "id": "direct-preference-optimization"
    },
    "disney-principled-brdf": {
      "title": "Disney Principled BRDF",
      "cluster": "materials",
      "year": 2012,
      "summary": "A single artist-facing parameter set, all normalized to zero-to-one, fitted against measured data. Its influence is mostly social: it made one vocabulary of material parameters near-universal across renderers.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Physically_based_rendering",
      "refs": [
        {
          "title": "Physically Based Shading at Disney",
          "authors": "Burley",
          "year": 2012
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "microfacet-model",
          "why": "wraps it in parameters artists can actually author"
        },
        {
          "rel": "requires",
          "to": "merl-database",
          "why": "the lobes were fitted against measured materials"
        }
      ],
      "id": "disney-principled-brdf"
    },
    "displacement-mapping": {
      "title": "Displacement Mapping",
      "cluster": "geometry",
      "year": 1984,
      "summary": "Moves surface points along the normal by a stored height, producing detail that occludes itself and changes the silhouette because the geometry really moved.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Displacement_mapping",
      "refs": [
        {
          "title": "Generalized Stochastic Subdivision",
          "authors": "Cook",
          "year": 1984,
          "url": "https://doi.org/10.1145/35068.35069"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "texture-mapping",
          "why": "the texture moves geometry rather than shading it"
        }
      ],
      "id": "displacement-mapping"
    },
    "distributional-rl": {
      "title": "Distributional Reinforcement Learning",
      "cluster": "reinforcement",
      "year": 2017,
      "aka": [
        "C51",
        "Categorical DQN"
      ],
      "summary": "Predicts the whole distribution of returns as a histogram over fixed atoms, and applies the Bellman backup to that. Actions are still chosen by its mean, so the gain is not risk sensitivity: the richer target is simply easier for a network to fit.\n",
      "refs": [
        {
          "title": "A Distributional Perspective on Reinforcement Learning",
          "authors": "Bellemare, Dabney, Munos",
          "year": 2017,
          "url": "https://arxiv.org/abs/1707.06887"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "q-learning",
          "why": "an expectation discards the shape of the returns that produced it"
        }
      ],
      "id": "distributional-rl"
    },
    "double-dqn": {
      "title": "Double DQN",
      "cluster": "reinforcement",
      "year": 2015,
      "aka": [
        "Double Q-learning",
        "DDQN"
      ],
      "summary": "Choose the next action with the online network, score it with the target copy. Two estimators disagree about which action noise flattered, so the optimism the single max was compounding largely cancels.\n",
      "refs": [
        {
          "title": "Deep Reinforcement Learning with Double Q-learning",
          "authors": "van Hasselt, Guez, Silver",
          "year": 2015,
          "url": "https://arxiv.org/abs/1509.06461"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "deep-q-network",
          "why": "one network both picks the next action and rates it, so noise reads as value"
        },
        {
          "rel": "requires",
          "to": "target-network",
          "why": "the independent second estimator is the frozen copy already kept"
        }
      ],
      "id": "double-dqn"
    },
    "dreamer": {
      "title": "Dreamer",
      "cluster": "world-models",
      "year": 2019,
      "summary": "Learns the latent dynamics and then optimises the policy by backpropagating through imagined rollouts inside it, never touching the environment during that step.\n",
      "refs": [
        {
          "title": "Dream to Control: Learning Behaviors by Latent Imagination",
          "authors": "Hafner, Lillicrap, Ba, Norouzi",
          "year": 2019,
          "url": "https://arxiv.org/abs/1912.01603"
        },
        {
          "title": "Mastering Diverse Domains through World Models",
          "authors": "Hafner, Pasukonis, Ba, Lillicrap",
          "year": 2023,
          "url": "https://arxiv.org/abs/2301.04104"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "world-model",
          "why": "trains the policy inside the model, not the environment"
        }
      ],
      "id": "dreamer"
    },
    "dropout": {
      "title": "Dropout",
      "cluster": "learning",
      "year": 2014,
      "summary": "Randomly zeroes units during training, so no unit can rely on any particular other one being present. Approximates averaging over an exponential family of thinned networks.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Dropout_(neural_networks)",
      "edges": [
        {
          "rel": "corrects",
          "to": "backpropagation",
          "why": "units co-adapt and memorise instead of generalising"
        }
      ],
      "id": "dropout"
    },
    "dual-contouring": {
      "title": "Dual Contouring",
      "cluster": "geometry",
      "year": 2002,
      "summary": "Places one vertex per cell by solving a least-squares fit to the surface normals it intersects, which lets it reproduce sharp creases that corner-sign tables average away.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Isosurface",
      "refs": [
        {
          "title": "Dual Contouring of Hermite Data",
          "authors": "Ju, Losasso, Schaefer, Warren",
          "year": 2002,
          "url": "https://doi.org/10.1145/566570.566586"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "marching-cubes",
          "why": "corner sign tables cannot reproduce sharp edges"
        }
      ],
      "id": "dual-contouring"
    },
    "dueling-network": {
      "title": "Dueling Network",
      "cluster": "reinforcement",
      "year": 2016,
      "summary": "Splits the head into a state-value stream and a per-action advantage stream, then adds them back. How good a state is gets learned once instead of separately inside every action's estimate.\n",
      "refs": [
        {
          "title": "Dueling Network Architectures for Deep Reinforcement Learning",
          "authors": "Wang, Schaul, Hessel, van Hasselt, Lanctot, de Freitas",
          "year": 2016,
          "url": "https://arxiv.org/abs/1511.06581"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "deep-q-network",
          "why": "in most states the action barely matters, yet each is estimated alone"
        }
      ],
      "id": "dueling-network"
    },
    "early-stopping": {
      "title": "Early Stopping",
      "cluster": "learning",
      "summary": "Halts training when held-out loss stops improving. The cheapest regulariser there is, and it needs a validation split you are not otherwise using.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Early_stopping",
      "edges": [
        {
          "rel": "alternative-to",
          "to": "weight-decay",
          "why": "stops before overfitting rather than penalising capacity"
        }
      ],
      "id": "early-stopping"
    },
    "energy-conservation": {
      "title": "Energy Conservation",
      "cluster": "foundations",
      "summary": "A surface may not reflect more energy than it receives. Violating it makes multi-bounce renders diverge into brightness rather than settle.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Conservation_of_energy",
      "edges": [
        {
          "rel": "validates",
          "to": "bsdf",
          "why": "the BSDF integrated over the sphere must not exceed 1"
        }
      ],
      "id": "energy-conservation"
    },
    "epsilon-greedy": {
      "title": "Epsilon-Greedy",
      "cluster": "reinforcement",
      "aka": [
        "\u03b5-greedy"
      ],
      "summary": "Take the best action known, except on an \u03b5 fraction of steps where the action is uniformly random. The cheapest exploration that still visits every action infinitely often, and the baseline anything cleverer has to beat.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Multi-armed_bandit",
      "refs": [
        {
          "title": "Reinforcement Learning: An Introduction",
          "authors": "Sutton, Barto",
          "year": 2018,
          "url": "http://incompleteideas.net/book/the-book-2nd.html"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "q-learning",
          "why": "acting greedily never revisits an action its first sample underrated"
        },
        {
          "rel": "part-of",
          "to": "multi-armed-bandit"
        }
      ],
      "id": "epsilon-greedy"
    },
    "experience-replay": {
      "title": "Experience Replay",
      "cluster": "reinforcement",
      "year": 2013,
      "summary": "Stores transitions in a buffer and samples them at random, so an update is not dominated by whatever just happened.\n",
      "refs": [
        {
          "title": "Playing Atari with Deep Reinforcement Learning",
          "authors": "Mnih et al.",
          "year": 2013,
          "url": "https://arxiv.org/abs/1312.5602"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "deep-q-network",
          "why": "consecutive transitions are correlated"
        }
      ],
      "id": "experience-replay"
    },
    "filmic-tonemapping": {
      "title": "Filmic Tone Mapping",
      "cluster": "color",
      "year": 2010,
      "summary": "An S-shaped curve with a toe and shoulder fitted to photographic film response, which holds saturation in the highlights where a simple ratio curve washes out.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Tone_mapping",
      "refs": [
        {
          "title": "Uncharted 2: HDR Lighting",
          "authors": "Hable",
          "year": 2010
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "reinhard-tonemapping",
          "why": "an S-curve with a toe, matching film response"
        }
      ],
      "id": "filmic-tonemapping"
    },
    "firefly-clamping": {
      "title": "Firefly Clamping",
      "cluster": "denoising",
      "summary": "Caps individual sample contributions at a threshold. Biased, unapologetically so: a single sample thousands of times brighter than its neighbours will not average out in any practical sample count.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Variance_reduction",
      "edges": [
        {
          "rel": "corrects",
          "to": "monte-carlo-integration",
          "why": "rare huge samples never average away in practice"
        }
      ],
      "id": "firefly-clamping"
    },
    "flash-attention": {
      "title": "FlashAttention",
      "cluster": "sequence-models",
      "year": 2022,
      "summary": "Tiles attention so the score matrix is never written to memory, recomputing it in fast on-chip storage instead. Exact, not approximate: the same result, bounded by arithmetic rather than bandwidth.\n",
      "refs": [
        {
          "title": "FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness",
          "authors": "Dao, Fu, Ermon, Rudra, Re",
          "year": 2022,
          "url": "https://arxiv.org/abs/2205.14135"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "attention",
          "why": "it is memory-bandwidth bound, not compute bound"
        },
        {
          "rel": "requires",
          "to": "cache-hierarchy",
          "why": "it tiles attention to fit in on-chip memory"
        }
      ],
      "id": "flash-attention"
    },
    "floating-point": {
      "title": "Floating-Point Arithmetic",
      "cluster": "numerics",
      "summary": "Numbers as sign, exponent and significand, so a fixed budget of bits spans a huge range at constant relative precision. Every result below is a consequence of that trade.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Floating-point_arithmetic",
      "id": "floating-point"
    },
    "forward-shading": {
      "title": "Forward Shading",
      "cluster": "real-time-shading",
      "summary": "Shade each fragment as its triangle is rasterized, looping over lights inside the shader. Simple and MSAA-friendly, but cost is paid again for every fragment later overdrawn.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Shading",
      "edges": [
        {
          "rel": "specializes",
          "to": "rasterization",
          "why": "shades each fragment as its triangle is filled"
        }
      ],
      "id": "forward-shading"
    },
    "fresnel": {
      "title": "Fresnel Equations",
      "cluster": "materials",
      "summary": "Give the fraction of light reflected rather than transmitted at an interface, as a function of angle and the two indices of refraction. Reflectance rises to one at grazing incidence for every material.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Fresnel_equations",
      "refs": [
        {
          "title": "Fresnel equations (lecture notes)",
          "url": "https://www.brown.edu/research/labs/mittleman/sites/brown.edu.research.labs.mittleman/files/uploads/lecture13_0.pdf"
        }
      ],
      "edges": [
        {
          "rel": "part-of",
          "to": "reflection"
        },
        {
          "rel": "requires",
          "to": "refraction",
          "why": "the split between the two is what it computes"
        }
      ],
      "id": "fresnel"
    },
    "frustum-culling": {
      "title": "Frustum Culling",
      "cluster": "visibility",
      "summary": "Rejects objects whose bounding volume lies wholly outside the viewing volume, before any of their triangles are touched.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Viewing_frustum",
      "edges": [
        {
          "rel": "extends",
          "to": "rasterization",
          "why": "geometry off screen still costs vertex work otherwise"
        }
      ],
      "id": "frustum-culling"
    },
    "fully-sharded-data-parallel": {
      "title": "Fully Sharded Data Parallel",
      "cluster": "distributed",
      "year": 2023,
      "aka": [
        "FSDP"
      ],
      "summary": "The sharded-everything form of ZeRO as a framework primitive, gathering each layer's parameters just before use and releasing them straight after.\n",
      "refs": [
        {
          "title": "PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel",
          "authors": "Zhao et al.",
          "year": 2023,
          "url": "https://arxiv.org/abs/2304.11277"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "zero-sharding",
          "why": "shards parameters as well as optimizer state, per layer"
        }
      ],
      "id": "fully-sharded-data-parallel"
    },
    "fxaa": {
      "title": "Fast Approximate Anti-Aliasing",
      "cluster": "antialiasing",
      "year": 2009,
      "aka": [
        "FXAA"
      ],
      "summary": "A single-pass luminance-gradient filter tuned to be almost free. Blurs some genuine detail, and shipped nearly everywhere because it needs nothing from the renderer but a finished frame.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Fast_approximate_anti-aliasing",
      "refs": [
        {
          "title": "FXAA",
          "authors": "Lottes",
          "year": 2009
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "mlaa",
          "why": "one heuristic pass instead of real pattern classification"
        }
      ],
      "id": "fxaa"
    },
    "gaussian-splatting": {
      "title": "3D Gaussian Splatting",
      "cluster": "neural",
      "year": 2023,
      "summary": "Represents the scene as anisotropic Gaussians with spherical harmonic colour and rasterizes them sorted by depth. Explicit primitives and a rasterizer instead of ray marching an implicit field, which is what makes it real time.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Gaussian_splatting",
      "refs": [
        {
          "title": "3D Gaussian Splatting for Real-Time Radiance Field Rendering",
          "authors": "Kerbl, Kopanas, Leimkuhler, Drettakis",
          "year": 2023,
          "url": "https://arxiv.org/abs/2308.04079"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "nerf",
          "why": "rasterizes explicit primitives instead of querying a field"
        },
        {
          "rel": "requires",
          "to": "rasterization",
          "why": "the speed comes from sorted alpha-blended splatting"
        },
        {
          "rel": "requires",
          "to": "stochastic-gradient-descent",
          "why": "the primitives are fitted to photographs by gradient descent"
        }
      ],
      "id": "gaussian-splatting"
    },
    "gbuffer": {
      "title": "G-Buffer",
      "cluster": "real-time-shading",
      "summary": "The set of screen-space textures holding albedo, normal, roughness and depth between the geometry pass and the lighting pass.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Deferred_shading",
      "edges": [
        {
          "rel": "part-of",
          "to": "deferred-shading"
        }
      ],
      "id": "gbuffer"
    },
    "generalized-advantage-estimation": {
      "title": "Generalized Advantage Estimation",
      "cluster": "reinforcement",
      "year": 2015,
      "aka": [
        "GAE"
      ],
      "summary": "Blends TD residuals over many horizons with an exponential weight, giving one knob that trades bias against variance in the advantage estimate.\n",
      "refs": [
        {
          "title": "High-Dimensional Continuous Control Using Generalized Advantage Estimation",
          "authors": "Schulman, Moritz, Levine, Jordan, Abbeel",
          "year": 2015,
          "url": "https://arxiv.org/abs/1506.02438"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "policy-gradient",
          "why": "raw returns are too noisy to learn from directly"
        },
        {
          "rel": "requires",
          "to": "actor-critic",
          "why": "the value function it leans on is the critic"
        }
      ],
      "id": "generalized-advantage-estimation"
    },
    "generative-adversarial-network": {
      "title": "Generative Adversarial Network",
      "cluster": "generative",
      "year": 2014,
      "aka": [
        "GAN"
      ],
      "summary": "Trains a generator against a discriminator that tries to tell real from fake. Produces sharp samples, and the minimax objective is notoriously unstable and prone to collapsing onto a few modes.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Generative_adversarial_network",
      "refs": [
        {
          "title": "Generative Adversarial Networks",
          "authors": "Goodfellow et al.",
          "year": 2014,
          "url": "https://arxiv.org/abs/1406.2661"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "variational-autoencoder",
          "why": "an adversarial critic instead of a likelihood bound"
        }
      ],
      "id": "generative-adversarial-network"
    },
    "genie": {
      "title": "Genie",
      "cluster": "world-models",
      "year": 2024,
      "summary": "Trains on unlabelled internet video and infers a latent action space, producing a model that can be driven frame by frame. A playable environment learned from footage of environments.\n",
      "refs": [
        {
          "title": "Genie: Generative Interactive Environments",
          "authors": "Bruce et al.",
          "year": 2024,
          "url": "https://arxiv.org/abs/2402.15391"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "world-model",
          "why": "infers latent actions from video, so none need labelling"
        },
        {
          "rel": "requires",
          "to": "v-jepa",
          "why": "the dynamics are learned over video representations"
        }
      ],
      "id": "genie"
    },
    "ggx": {
      "title": "GGX / Trowbridge-Reitz",
      "cluster": "materials",
      "year": 2007,
      "aka": [
        "Trowbridge-Reitz",
        "GTR2"
      ],
      "summary": "A microfacet normal distribution with a much longer tail than Beckmann. The tail is the whole point: it reproduces the soft, wide falloff around highlights that measured materials show and Beckmann clips off.\n",
      "refs": [
        {
          "title": "Microfacet Models for Refraction through Rough Surfaces",
          "authors": "Walter, Marschner, Li, Torrance",
          "year": 2007,
          "url": "http://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "microfacet-model",
          "why": "supplies a long-tailed slope distribution as D"
        },
        {
          "rel": "alternative-to",
          "to": "beckmann",
          "why": "longer tail fits measured materials better"
        }
      ],
      "id": "ggx"
    },
    "gradient-checkpointing": {
      "title": "Gradient Checkpointing",
      "cluster": "efficiency",
      "year": 2016,
      "summary": "Keeps only a subset of activations and recomputes the rest during the backward pass, trading arithmetic for memory at roughly the square root of the naive cost.\n",
      "refs": [
        {
          "title": "Training Deep Nets with Sublinear Memory Cost",
          "authors": "Chen, Xu, Zhang, Guestrin",
          "year": 2016,
          "url": "https://arxiv.org/abs/1604.06174"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "backpropagation",
          "why": "keeping every activation exhausts memory"
        }
      ],
      "id": "gradient-checkpointing"
    },
    "gradient-clipping": {
      "title": "Gradient Clipping",
      "cluster": "learning",
      "year": 2012,
      "summary": "Rescales the gradient when its norm exceeds a threshold. Crude, and it turns a run-ending weight update into a merely bad one.\n",
      "refs": [
        {
          "title": "On the difficulty of training Recurrent Neural Networks",
          "authors": "Pascanu, Mikolov, Bengio",
          "year": 2012,
          "url": "https://arxiv.org/abs/1211.5063"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "recurrent-network",
          "why": "exploding gradients destroy the weights in one step"
        }
      ],
      "id": "gradient-clipping"
    },
    "gradient-descent": {
      "title": "Gradient Descent",
      "cluster": "learning",
      "summary": "Step downhill along the negative gradient. Everything below is a modification of this one idea, made to survive contact with real objectives.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Gradient_descent",
      "id": "gradient-descent"
    },
    "grpo": {
      "title": "Group Relative Policy Optimization",
      "cluster": "reinforcement",
      "year": 2024,
      "aka": [
        "GRPO"
      ],
      "summary": "Samples a group of completions per prompt and uses their mean reward as the baseline, so the advantage is relative within the group. Drops the value network entirely.\n",
      "refs": [
        {
          "title": "DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models",
          "authors": "Shao et al.",
          "year": 2024,
          "url": "https://arxiv.org/abs/2402.03300"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "ppo",
          "why": "the critic is a second model the size of the policy"
        },
        {
          "rel": "alternative-to",
          "to": "actor-critic",
          "why": "a group-relative baseline instead of a learned one"
        }
      ],
      "id": "grpo"
    },
    "gtao": {
      "title": "Ground-Truth Ambient Occlusion",
      "cluster": "real-time-shading",
      "year": 2016,
      "aka": [
        "GTAO"
      ],
      "summary": "Reformulates horizon-based occlusion with the correct cosine weighting and normalization so it converges to reference ambient occlusion instead of a darker look that needs artist compensation.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Ambient_occlusion",
      "refs": [
        {
          "title": "Practical Real-Time Strategies for Accurate Indirect Occlusion",
          "authors": "Jimenez, Wu, Pesce, Jarabo",
          "year": 2016
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "hbao",
          "why": "earlier estimators were never normalized to ground truth"
        }
      ],
      "id": "gtao"
    },
    "hair-bsdf": {
      "title": "Hair Scattering Model",
      "cluster": "materials",
      "year": 2003,
      "summary": "Models a hair as a dielectric cylinder with a tilted cuticle, splitting scattering into reflection, transmission and internal reflection lobes. Explains the two offset highlights real hair shows.\n",
      "refs": [
        {
          "title": "Light Scattering from Human Hair Fibers",
          "authors": "Marschner, Jensen, Cammarano, Worley, Hanrahan",
          "year": 2003,
          "url": "https://doi.org/10.1145/1201775.882345"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "bsdf",
          "why": "a fibre scatters around its axis, not a normal"
        }
      ],
      "id": "hair-bsdf"
    },
    "half-precision": {
      "title": "Half Precision",
      "cluster": "numerics",
      "aka": [
        "fp16",
        "IEEE binary16"
      ],
      "summary": "Sixteen bits: five of exponent, ten of significand. Halves bandwidth and doubles the working set that fits in cache, at a range narrow enough to matter.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Half-precision_floating-point_format",
      "edges": [
        {
          "rel": "specializes",
          "to": "floating-point",
          "why": "half the bits, chosen for bandwidth rather than accuracy"
        }
      ],
      "id": "half-precision"
    },
    "halton-sequence": {
      "title": "Halton Sequence",
      "cluster": "sampling",
      "summary": "Uses the radical inverse in a different prime base for each dimension. Simple and progressive, but correlations between high dimensions show up as visible structure.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Halton_sequence",
      "edges": [
        {
          "rel": "specializes",
          "to": "quasi-monte-carlo",
          "why": "radical inverse in a different prime per dimension"
        }
      ],
      "id": "halton-sequence"
    },
    "hbao": {
      "title": "Horizon-Based Ambient Occlusion",
      "cluster": "real-time-shading",
      "year": 2008,
      "summary": "Marches the depth buffer to find the horizon angle in several directions and integrates the unoccluded wedge, which is a defensible approximation of the occlusion integral rather than a sample count.\n",
      "refs": [
        {
          "title": "Image-Space Horizon-Based Ambient Occlusion",
          "authors": "Bavoil, Sainz, Dimitrov",
          "year": 2008,
          "url": "https://doi.org/10.1145/1401032.1401061"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "ssao",
          "why": "point sampling ignores the actual horizon of the surface"
        }
      ],
      "id": "hbao"
    },
    "he-initialization": {
      "title": "He Initialization",
      "cluster": "learning",
      "year": 2015,
      "aka": [
        "Kaiming initialization"
      ],
      "summary": "Doubles the initial variance to account for a rectifier discarding half its input. The correction that made very deep rectified networks converge from scratch.\n",
      "refs": [
        {
          "title": "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification",
          "authors": "He, Zhang, Ren, Sun",
          "year": 2015,
          "url": "https://arxiv.org/abs/1502.01852"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "weight-initialization",
          "why": "the usual variance assumes a symmetric activation"
        },
        {
          "rel": "requires",
          "to": "relu",
          "why": "the factor of two is exactly what the rectifier discards"
        }
      ],
      "id": "he-initialization"
    },
    "helmholtz-reciprocity": {
      "title": "Helmholtz Reciprocity",
      "cluster": "foundations",
      "summary": "A physically valid BSDF gives the same value when incoming and outgoing directions are swapped. Bidirectional algorithms depend on it: without it, a path built from the light differs from the same path built from the camera.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Helmholtz_reciprocity",
      "edges": [
        {
          "rel": "validates",
          "to": "bsdf",
          "why": "swapping the directions must not change the value"
        }
      ],
      "id": "helmholtz-reciprocity"
    },
    "henyey-greenstein": {
      "title": "Henyey-Greenstein Phase Function",
      "cluster": "volumetrics",
      "year": 1941,
      "summary": "A one-parameter phase function, originally fitted to interstellar dust, whose single anisotropy value spans strong forward through isotropic to backward scattering. Cheap to evaluate and to sample.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Henyey%E2%80%93Greenstein_phase_function",
      "refs": [
        {
          "title": "Diffuse Radiation in the Galaxy",
          "authors": "Henyey, Greenstein",
          "year": 1941,
          "url": "https://doi.org/10.1086/144246"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "phase-function",
          "why": "one anisotropy parameter spans forward to backward"
        }
      ],
      "id": "henyey-greenstein"
    },
    "hero-wavelength-sampling": {
      "title": "Hero Wavelength Spectral Sampling",
      "cluster": "color",
      "year": 2014,
      "summary": "Carries several correlated wavelengths per path, one chosen and the rest derived from it, which removes most of the colour noise that sampling a single wavelength per path produces.\n",
      "refs": [
        {
          "title": "Hero Wavelength Spectral Sampling",
          "authors": "Wilkie, Nawaz, Droske, Weidlich, Hanika",
          "year": 2014,
          "url": "https://doi.org/10.1111/cgf.12419"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "spectral-rendering",
          "why": "one wavelength per path is unusably noisy"
        }
      ],
      "id": "hero-wavelength-sampling"
    },
    "hierarchical-z-buffer": {
      "title": "Hierarchical Z-Buffer",
      "cluster": "visibility",
      "year": 1993,
      "summary": "Keeps a mip pyramid of depth so a whole screen region can be rejected in one test against its coarsest level, instead of per pixel.\n",
      "refs": [
        {
          "title": "Hierarchical Z-Buffer Visibility",
          "authors": "Greene, Kass, Miller",
          "year": 1993,
          "url": "https://doi.org/10.1145/166117.166147"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "z-buffer",
          "why": "rejects a whole region against a depth pyramid"
        },
        {
          "rel": "specializes",
          "to": "occlusion-culling",
          "why": "the occluders are whatever the depth buffer already holds"
        }
      ],
      "id": "hierarchical-z-buffer"
    },
    "image-based-lighting": {
      "title": "Image-Based Lighting",
      "cluster": "real-time-shading",
      "aka": [
        "IBL",
        "Environment lighting"
      ],
      "summary": "Uses a captured or rendered environment map as the light source, so that ambient light carries the colour and directionality of a real location.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Image-based_lighting",
      "edges": [
        {
          "rel": "approximates",
          "to": "rendering-equation",
          "why": "distant incoming radiance baked into a single map"
        }
      ],
      "id": "image-based-lighting"
    },
    "impala": {
      "title": "IMPALA",
      "cluster": "reinforcement",
      "year": 2018,
      "aka": [
        "Importance Weighted Actor-Learner Architecture",
        "V-trace"
      ],
      "summary": "Actors ship trajectories to a central learner instead of gradients, so they never wait on a parameter sync, and V-trace corrects for how far the policy has moved by the time a batch is used. The shape distributed RL settled into.\n",
      "refs": [
        {
          "title": "IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures",
          "authors": "Espeholt et al.",
          "year": 2018,
          "url": "https://arxiv.org/abs/1802.01561"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "a3c",
          "why": "an actor that computes gradients stalls at every parameter sync"
        },
        {
          "rel": "requires",
          "to": "importance-sampling",
          "why": "the trajectory is off-policy by the time the learner gets to it"
        }
      ],
      "id": "impala"
    },
    "importance-sampling": {
      "title": "Importance Sampling",
      "cluster": "sampling",
      "summary": "Draw samples proportional to how much they contribute and divide by that density. Same expected value, far less variance, and the foundation every practical estimator in rendering is built on.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Importance_sampling",
      "edges": [
        {
          "rel": "corrects",
          "to": "monte-carlo-integration",
          "why": "uniform samples are wasted where the integrand is small"
        }
      ],
      "id": "importance-sampling"
    },
    "instant-ngp": {
      "title": "Instant NGP",
      "cluster": "neural",
      "year": 2022,
      "summary": "A fused CUDA implementation built on hash encoding that trains a usable radiance field in seconds rather than hours, which is what turned NeRF from a result into a tool.\n",
      "refs": [
        {
          "title": "Instant Neural Graphics Primitives with a Multiresolution Hash Encoding",
          "authors": "Muller, Evans, Schied, Keller",
          "year": 2022,
          "url": "https://arxiv.org/abs/2201.05989"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "multiresolution-hash-encoding",
          "why": "the speedup is the encoding, not the network"
        }
      ],
      "id": "instant-ngp"
    },
    "instant-radiosity": {
      "title": "Instant Radiosity",
      "cluster": "light-transport",
      "year": 1997,
      "aka": [
        "Virtual point lights",
        "VPL"
      ],
      "summary": "Represents indirect illumination by scattering a set of virtual point lights from the light sources, turning a bounce integral into ordinary direct lighting from many small lights.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Radiosity_%28computer_graphics%29",
      "refs": [
        {
          "title": "Instant Radiosity",
          "authors": "Keller",
          "year": 1997,
          "url": "https://doi.org/10.1145/258734.258769"
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "rendering-equation",
          "why": "collapses indirect bounces into a set of point lights"
        }
      ],
      "id": "instant-radiosity"
    },
    "intrinsic-motivation": {
      "title": "Intrinsic Motivation",
      "cluster": "reinforcement",
      "year": 2017,
      "aka": [
        "Curiosity",
        "ICM",
        "Random Network Distillation",
        "RND"
      ],
      "summary": "Pay the agent for reaching states its own predictor gets wrong, so novelty becomes a reward it can follow. What Montezuma's Revenge needed and what undirected exploration was never going to supply.\n",
      "refs": [
        {
          "title": "Curiosity-driven Exploration by Self-supervised Prediction",
          "authors": "Pathak, Agrawal, Efros, Darrell",
          "year": 2017,
          "url": "https://arxiv.org/abs/1705.05363"
        },
        {
          "title": "Exploration by Random Network Distillation",
          "authors": "Burda, Edwards, Storkey, Klimov",
          "year": 2018,
          "url": "https://arxiv.org/abs/1810.12894"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "epsilon-greedy",
          "why": "random actions never chain into the long sequence a sparse reward needs"
        }
      ],
      "id": "intrinsic-motivation"
    },
    "irradiance-caching": {
      "title": "Irradiance Caching",
      "cluster": "light-transport",
      "year": 1988,
      "summary": "Computes diffuse indirect irradiance at sparse points and interpolates between them, adding new samples only where the gradient estimate says the interpolation would be unreliable.\n",
      "refs": [
        {
          "title": "A Ray Tracing Solution for Diffuse Interreflection",
          "authors": "Ward, Rubinstein, Clear",
          "year": 1988,
          "url": "https://doi.org/10.1145/1401132.1401224"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "path-tracing",
          "why": "diffuse indirect is smooth, so per-pixel sampling is wasted"
        }
      ],
      "id": "irradiance-caching"
    },
    "jepa": {
      "title": "JEPA",
      "cluster": "representation",
      "year": 2023,
      "aka": [
        "Joint-Embedding Predictive Architecture",
        "I-JEPA"
      ],
      "summary": "Predicts the representation of a masked region rather than its pixels. The argument is that pixel reconstruction forces the model to model detail that is genuinely unpredictable and carries no meaning.\n",
      "refs": [
        {
          "title": "Self-Supervised Learning from Images with a Joint-Embedding Predictive Architecture",
          "authors": "Assran et al.",
          "year": 2023,
          "url": "https://arxiv.org/abs/2301.08243"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "masked-autoencoder",
          "why": "pixel targets spend capacity on unpredictable detail"
        }
      ],
      "id": "jepa"
    },
    "kahan-summation": {
      "title": "Kahan Summation",
      "cluster": "numerics",
      "year": 1965,
      "summary": "Carries a running compensation for the low-order bits lost in each addition, making the error of a long sum independent of its length.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Kahan_summation_algorithm",
      "edges": [
        {
          "rel": "corrects",
          "to": "catastrophic-cancellation",
          "why": "recovers the low-order bits each addition throws away"
        }
      ],
      "id": "kahan-summation"
    },
    "kd-tree": {
      "title": "kd-Tree",
      "cluster": "geometry",
      "summary": "Recursively splits space rather than objects with axis-aligned planes. Nodes never overlap, which makes traversal tight, but primitives straddling a plane must be referenced twice.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/K-d_tree",
      "edges": [
        {
          "rel": "alternative-to",
          "to": "bvh",
          "why": "splits space, not objects, so nodes never overlap"
        }
      ],
      "id": "kd-tree"
    },
    "knowledge-distillation": {
      "title": "Knowledge Distillation",
      "cluster": "efficiency",
      "year": 2015,
      "summary": "Trains a small model against the large model's full output distribution rather than the hard labels. The relative probabilities of the wrong answers carry most of the transferred information.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Knowledge_distillation",
      "refs": [
        {
          "title": "Distilling the Knowledge in a Neural Network",
          "authors": "Hinton, Vinyals, Dean",
          "year": 2015,
          "url": "https://arxiv.org/abs/1503.02531"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "cross-entropy-loss",
          "why": "the target is the teacher's whole distribution"
        }
      ],
      "id": "knowledge-distillation"
    },
    "kulla-conty": {
      "title": "Kulla-Conty Energy Compensation",
      "cluster": "materials",
      "year": 2017,
      "summary": "Precomputes the directional albedo a single-scattering microfacet BRDF loses and adds a fitted lobe back to make up the difference. Far cheaper than a random walk and close enough for production.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Specular_highlight",
      "refs": [
        {
          "title": "Revisiting Physically Based Shading at Imageworks",
          "authors": "Kulla, Conty",
          "year": 2017
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "multiple-scattering-microfacet",
          "why": "adds lost energy back from a table instead of walking"
        }
      ],
      "id": "kulla-conty"
    },
    "kv-cache": {
      "title": "KV Cache",
      "cluster": "efficiency",
      "summary": "Stores the keys and values already computed for the prefix so each generated token attends without recomputing them. Turns quadratic regeneration into linear, and makes memory the binding constraint.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Large_language_model",
      "edges": [
        {
          "rel": "corrects",
          "to": "transformer",
          "why": "generation would recompute the prefix per token"
        }
      ],
      "id": "kv-cache"
    },
    "label-smoothing": {
      "title": "Label Smoothing",
      "cluster": "learning",
      "year": 2015,
      "summary": "Replaces the one-hot target with a slightly softened distribution, so the model is never asked to be infinitely confident.\n",
      "refs": [
        {
          "title": "Rethinking the Inception Architecture for Computer Vision",
          "authors": "Szegedy, Vanhoucke, Ioffe, Shlens, Wojna",
          "year": 2015,
          "url": "https://arxiv.org/abs/1512.00567"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "cross-entropy-loss",
          "why": "a one-hot target pushes logits apart without bound"
        }
      ],
      "id": "label-smoothing"
    },
    "lambert": {
      "title": "Lambertian Diffuse",
      "cluster": "materials",
      "summary": "A constant BRDF: outgoing radiance is the same in every direction, so the surface looks equally bright from any viewpoint. Cheap, reciprocal, and the default diffuse term almost everywhere.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Lambertian_reflectance",
      "edges": [
        {
          "rel": "specializes",
          "to": "diffuse-reflection",
          "why": "the simplest case, a constant BRDF"
        }
      ],
      "id": "lambert"
    },
    "large-batch-training": {
      "title": "Large-Batch Training",
      "cluster": "learning",
      "year": 2017,
      "summary": "Scales the learning rate linearly with batch size so that many devices can share one step. Holds up to surprisingly large batches, and only with a warmup in front of it.\n",
      "refs": [
        {
          "title": "Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour",
          "authors": "Goyal et al.",
          "year": 2017,
          "url": "https://arxiv.org/abs/1706.02677"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "learning-rate-warmup",
          "why": "the scaled rate is unstable over the first epochs"
        },
        {
          "rel": "requires",
          "to": "data-parallelism",
          "why": "the batch is large because it is split across devices"
        }
      ],
      "id": "large-batch-training"
    },
    "latent-diffusion": {
      "title": "Latent Diffusion",
      "cluster": "generative",
      "year": 2021,
      "summary": "Runs the diffusion process in the compressed latent space of an autoencoder rather than on pixels. The reason text-to-image generation fits on consumer hardware.\n",
      "refs": [
        {
          "title": "High-Resolution Image Synthesis with Latent Diffusion Models",
          "authors": "Rombach, Blattmann, Lorenz, Esser, Ommer",
          "year": 2021,
          "url": "https://arxiv.org/abs/2112.10752"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "diffusion-model",
          "why": "denoising at pixel resolution is prohibitively expensive"
        },
        {
          "rel": "requires",
          "to": "variational-autoencoder",
          "why": "the latent space it works in comes from one"
        },
        {
          "rel": "requires",
          "to": "clip",
          "why": "the text conditioning comes from an image-text encoder"
        }
      ],
      "id": "latent-diffusion"
    },
    "layer-normalization": {
      "title": "Layer Normalization",
      "cluster": "learning",
      "year": 2016,
      "aka": [
        "LayerNorm"
      ],
      "summary": "Normalise across the features of a single example rather than across the batch, so the computation for one input never depends on which other inputs it was batched with.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Normalization_(machine_learning)",
      "refs": [
        {
          "title": "Layer Normalization",
          "authors": "Ba, Kiros, Hinton",
          "year": 2016,
          "url": "https://arxiv.org/abs/1607.06450"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "batch-normalization",
          "why": "batch statistics make training and inference disagree"
        }
      ],
      "id": "layer-normalization"
    },
    "layering": {
      "title": "Coated Layer Model",
      "cluster": "materials",
      "year": 2007,
      "aka": [
        "Weidlich-Wilkie"
      ],
      "summary": "Composes a stack of smooth or rough interfaces into a single BSDF by tracking attenuation between them, giving car paint and lacquered wood without simulating the layers explicitly.\n",
      "refs": [
        {
          "title": "Arbitrarily Layered Micro-Facet Surfaces",
          "authors": "Weidlich, Wilkie",
          "year": 2007,
          "url": "https://www.cg.tuwien.ac.at/research/publications/2007/weidlich_2007_almfs/weidlich_2007_almfs-paper.pdf"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "microfacet-model",
          "why": "microfacet layers stacked into a single BSDF"
        }
      ],
      "id": "layering"
    },
    "lbvh": {
      "title": "Linear BVH",
      "cluster": "geometry",
      "year": 2012,
      "summary": "Sorts primitives along a Morton curve and builds the hierarchy from the resulting bit patterns, which parallelizes perfectly and rebuilds in milliseconds at some cost in tree quality.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Bounding_volume_hierarchy",
      "refs": [
        {
          "title": "Maximizing Parallelism in the Construction of BVHs, Octrees, and k-d Trees",
          "authors": "Karras",
          "year": 2012
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "surface-area-heuristic",
          "why": "Morton order instead of a cost-driven split search"
        }
      ],
      "id": "lbvh"
    },
    "learning-rate-warmup": {
      "title": "Learning-Rate Warmup",
      "cluster": "learning",
      "year": 2017,
      "summary": "Ramps the step size up from near zero over the first few thousand updates instead of starting at full rate.\n",
      "refs": [
        {
          "title": "Attention Is All You Need",
          "authors": "Vaswani et al.",
          "year": 2017,
          "url": "https://arxiv.org/abs/1706.03762"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "adam",
          "why": "early steps are huge while the second moment is noisy"
        }
      ],
      "id": "learning-rate-warmup"
    },
    "level-of-detail": {
      "title": "Level of Detail",
      "cluster": "geometry",
      "aka": [
        "LOD"
      ],
      "summary": "Swaps in coarser geometry as an object shrinks on screen, keeping triangle density roughly constant in screen space.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Level_of_detail_%28computer_graphics%29",
      "edges": [
        {
          "rel": "corrects",
          "to": "rasterization",
          "why": "distant meshes otherwise cost far more than they show"
        }
      ],
      "id": "level-of-detail"
    },
    "light-probes": {
      "title": "Irradiance Probes",
      "cluster": "real-time-shading",
      "summary": "Samples indirect irradiance at a grid of points and interpolates between them for dynamic objects, decoupling indirect lighting cost from the number of things being lit.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Image-based_lighting",
      "edges": [
        {
          "rel": "approximates",
          "to": "irradiance-caching",
          "why": "a fixed grid instead of adaptively placed samples"
        }
      ],
      "id": "light-probes"
    },
    "light-transport": {
      "title": "Light Transport",
      "cluster": "foundations",
      "tags": [
        "root"
      ],
      "summary": "The problem of computing how radiance moves through a scene from emitters to the camera, accounting for every path it can take on the way.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Light_transport_theory",
      "id": "light-transport"
    },
    "lightmaps": {
      "title": "Lightmaps",
      "cluster": "real-time-shading",
      "summary": "Bakes static indirect lighting into textures parameterized over surfaces. Still the highest-quality option for static geometry, at the cost of build time and unique UVs.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Lightmap",
      "edges": [
        {
          "rel": "approximates",
          "to": "radiosity",
          "why": "bakes the converged solution into textures"
        }
      ],
      "id": "lightmaps"
    },
    "linear-workflow": {
      "title": "Linear Workflow",
      "cluster": "color",
      "summary": "Decode textures to linear light on read, do every lighting operation in linear space, and encode once on output. Blending or filtering encoded values is simply wrong arithmetic, and the errors show up as dark fringes.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Gamma_correction",
      "edges": [
        {
          "rel": "requires",
          "to": "srgb",
          "why": "inputs are encoded and must be decoded before any math"
        }
      ],
      "id": "linear-workflow"
    },
    "linearly-transformed-cosines": {
      "title": "Linearly Transformed Cosines",
      "cluster": "real-time-shading",
      "year": 2016,
      "aka": [
        "LTC"
      ],
      "summary": "Represents a GGX lobe as a linear transform of a clamped cosine, and cosines can be integrated over a polygon in closed form. Turns area- light shading into an analytic evaluation.\n",
      "refs": [
        {
          "title": "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines",
          "authors": "Heitz, Dupuy, Hill, Neubelt",
          "year": 2016,
          "url": "https://doi.org/10.1145/2897824.2925895"
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "microfacet-model",
          "why": "makes area-light integrals closed form"
        }
      ],
      "id": "linearly-transformed-cosines"
    },
    "loop-subdivision": {
      "title": "Loop Subdivision",
      "cluster": "geometry",
      "year": 1987,
      "summary": "The triangle counterpart of Catmull-Clark, built on box splines, for pipelines whose base meshes are triangular rather than quad.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Loop_subdivision_surface",
      "refs": [
        {
          "title": "Smooth Subdivision Surfaces Based on Triangles",
          "authors": "Loop",
          "year": 1987
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "subdivision-surfaces",
          "why": "box splines over triangles rather than quads"
        }
      ],
      "id": "loop-subdivision"
    },
    "lora": {
      "title": "LoRA",
      "cluster": "efficiency",
      "year": 2021,
      "aka": [
        "Low-rank adaptation"
      ],
      "summary": "Freezes the pretrained weights and learns a low-rank update beside them. Fine-tuning then costs a fraction of the memory, and the adapters can be swapped or merged afterwards.\n",
      "refs": [
        {
          "title": "LoRA: Low-Rank Adaptation of Large Language Models",
          "authors": "Hu et al.",
          "year": 2021,
          "url": "https://arxiv.org/abs/2106.09685"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "transformer",
          "why": "adapts a frozen model through small low-rank updates"
        }
      ],
      "id": "lora"
    },
    "lstm": {
      "title": "LSTM",
      "cluster": "sequence-models",
      "year": 1997,
      "aka": [
        "Long short-term memory"
      ],
      "summary": "Adds a cell state with multiplicative gates controlling what is written, kept and read. The gates give the gradient a route through time that neither vanishes nor explodes.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Long_short-term_memory",
      "edges": [
        {
          "rel": "corrects",
          "to": "recurrent-network",
          "why": "gradients vanish or explode over long sequences"
        }
      ],
      "id": "lstm"
    },
    "many-light-sampling": {
      "title": "Many-Light Sampling",
      "cluster": "light-transport",
      "year": 2018,
      "aka": [
        "Light BVH",
        "Light hierarchy"
      ],
      "summary": "Builds a hierarchy over the light sources and descends it stochastically using bounds on each cluster's contribution, so shading cost grows with the log of the light count instead of linearly.\n",
      "refs": [
        {
          "title": "Importance Sampling of Many Lights with Adaptive Tree Splitting",
          "authors": "Conty Estevez, Kulla",
          "year": 2018,
          "url": "https://doi.org/10.1145/3084363.3085028"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "instant-radiosity",
          "why": "cost grows linearly in the number of virtual lights"
        },
        {
          "rel": "extends",
          "to": "next-event-estimation",
          "why": "picks which light to sample when there are thousands"
        }
      ],
      "id": "many-light-sampling"
    },
    "marching-cubes": {
      "title": "Marching Cubes",
      "cluster": "geometry",
      "year": 1987,
      "summary": "Extracts a triangle mesh from a scalar field by table lookup on the sign pattern at each cell's corners. The reason volume data can be handed to ordinary triangle pipelines.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Marching_cubes",
      "refs": [
        {
          "title": "Marching Cubes: A High Resolution 3D Surface Construction Algorithm",
          "authors": "Lorensen, Cline",
          "year": 1987,
          "url": "https://doi.org/10.1145/37402.37422"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "sphere-tracing",
          "why": "converts the field to triangles instead of tracing it"
        }
      ],
      "id": "marching-cubes"
    },
    "markov-decision-process": {
      "title": "Markov Decision Process",
      "cluster": "reinforcement",
      "aka": [
        "MDP"
      ],
      "summary": "States, actions, transition probabilities and rewards, where the next state depends only on the present one. The formalism every method below is defined against.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Markov_decision_process",
      "id": "markov-decision-process"
    },
    "masked-autoencoder": {
      "title": "Masked Autoencoder",
      "cluster": "representation",
      "year": 2021,
      "aka": [
        "MAE"
      ],
      "summary": "Hides most of the patches, encodes only the visible ones and reconstructs the rest with a light decoder. The high mask ratio is what makes it both a hard task and a cheap one.\n",
      "refs": [
        {
          "title": "Masked Autoencoders Are Scalable Vision Learners",
          "authors": "He, Chen, Xie, Li, Dollar, Girshick",
          "year": 2021,
          "url": "https://arxiv.org/abs/2111.06377"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "autoencoder",
          "why": "reconstructs patches hidden from the encoder"
        },
        {
          "rel": "extends",
          "to": "bert",
          "why": "masked prediction moved from tokens to image patches"
        },
        {
          "rel": "requires",
          "to": "vision-transformer",
          "why": "the encoder can skip the masked patches entirely"
        }
      ],
      "id": "masked-autoencoder"
    },
    "maximum-entropy-rl": {
      "title": "Maximum Entropy RL",
      "cluster": "reinforcement",
      "year": 2017,
      "summary": "Add the policy's entropy to the objective, so it is paid to stay as random as the returns allow. Exploration stops being a schedule bolted on the outside and becomes part of what is optimised.\n",
      "refs": [
        {
          "title": "Reinforcement Learning with Deep Energy-Based Policies",
          "authors": "Haarnoja, Tang, Abbeel, Levine",
          "year": 2017,
          "url": "https://arxiv.org/abs/1702.08165"
        },
        {
          "title": "Maximum Entropy Inverse Reinforcement Learning",
          "authors": "Ziebart, Maas, Bagnell, Dey",
          "year": 2008,
          "url": "https://cdn.aaai.org/AAAI/2008/AAAI08-227.pdf"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "markov-decision-process",
          "why": "reward alone commits to one of several equally good actions and stops looking"
        }
      ],
      "id": "maximum-entropy-rl"
    },
    "memory-coalescing": {
      "title": "Memory Coalescing",
      "cluster": "hardware",
      "summary": "Lanes whose addresses fall in one cache line are served by a single transaction. Scattered addresses become one transaction each, which is the difference between using and wasting the memory bus.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads",
      "edges": [
        {
          "rel": "requires",
          "to": "simt",
          "why": "the lanes must issue their loads in the same cycle"
        }
      ],
      "id": "memory-coalescing"
    },
    "merl-database": {
      "title": "MERL BRDF Database",
      "cluster": "materials",
      "year": 2003,
      "summary": "Densely measured reflectance for a hundred real materials. The de facto ground truth that analytic models are fitted and compared against.\n",
      "refs": [
        {
          "title": "A Data-Driven Reflectance Model",
          "authors": "Matusik, Pfister, Brand, McMillan",
          "year": 2003,
          "url": "https://doi.org/10.1145/1201775.882343"
        }
      ],
      "edges": [
        {
          "rel": "validates",
          "to": "brdf",
          "why": "measured ground truth to fit analytic models against"
        }
      ],
      "id": "merl-database"
    },
    "meshlets": {
      "title": "Meshlets and Mesh Shaders",
      "cluster": "geometry",
      "summary": "Splits a mesh into small vertex-and-triangle clusters that can be culled and dispatched independently, replacing the fixed vertex-fetch pipeline with a programmable one.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Shader",
      "edges": [
        {
          "rel": "extends",
          "to": "rasterization",
          "why": "culls per cluster instead of per triangle or per object"
        },
        {
          "rel": "requires",
          "to": "simt",
          "why": "a cluster is sized to one workgroup's registers"
        }
      ],
      "id": "meshlets"
    },
    "metropolis-light-transport": {
      "title": "Metropolis Light Transport",
      "cluster": "light-transport",
      "year": 1997,
      "aka": [
        "MLT"
      ],
      "summary": "Once a path reaching the light is found, mutate it locally and accept mutations with a Metropolis-Hastings rule, so effort concentrates where transport actually happens instead of restarting blindly.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Metropolis_light_transport",
      "refs": [
        {
          "title": "Metropolis Light Transport",
          "authors": "Veach, Guibas",
          "year": 1997
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "bidirectional-path-tracing",
          "why": "explores near paths that already found light"
        }
      ],
      "id": "metropolis-light-transport"
    },
    "microfacet-model": {
      "title": "Microfacet Model",
      "cluster": "materials",
      "year": 2007,
      "summary": "Treats a rough surface as a statistical field of tiny perfect mirrors. The BSDF factors into a normal distribution D, a Fresnel term F and a masking-shadowing term G, and nearly every modern material model is an instance of it.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Specular_highlight",
      "refs": [
        {
          "title": "Microfacet Models for Refraction through Rough Surfaces",
          "authors": "Walter, Marschner, Li, Torrance",
          "year": 2007,
          "url": "http://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "bsdf",
          "why": "derives the BSDF from a statistical surface model"
        },
        {
          "rel": "requires",
          "to": "fresnel",
          "why": "each microfacet is a mirror, so needs its reflectance"
        },
        {
          "rel": "requires",
          "to": "smith-masking",
          "why": "microfacets occlude each other at grazing angles"
        }
      ],
      "id": "microfacet-model"
    },
    "microflake": {
      "title": "Microflake Theory",
      "cluster": "volumetrics",
      "year": 2010,
      "summary": "Applies microfacet reasoning to volumes: the medium is filled with oriented flakes rather than isotropic particles, so anisotropic materials like cloth and fur can be rendered as media.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Radiative_transfer",
      "refs": [
        {
          "title": "A Radiative Transfer Framework for Rendering Materials with Anisotropic Structure",
          "authors": "Jakob, Arbree, Moon, Bala, Marschner",
          "year": 2010,
          "url": "https://doi.org/10.1145/1833349.1778790"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "phase-function",
          "why": "oriented flakes give the medium a direction"
        }
      ],
      "id": "microflake"
    },
    "mip-nerf": {
      "title": "Mip-NeRF",
      "cluster": "neural",
      "year": 2021,
      "summary": "Encodes conical frusta rather than points, so the representation is aware of the footprint each sample covers and stops aliasing when rendered at a different scale than it was trained on.\n",
      "refs": [
        {
          "title": "Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields",
          "authors": "Barron, Mildenhall, Tancik, Hedman, Martin-Brualla, Srinivasan",
          "year": 2021,
          "url": "https://arxiv.org/abs/2103.13415"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "nerf",
          "why": "point samples alias when rendered at another scale"
        }
      ],
      "id": "mip-nerf"
    },
    "mipmapping": {
      "title": "Mipmapping",
      "cluster": "antialiasing",
      "year": 1983,
      "summary": "Stores a prefiltered pyramid and picks the level matching the screen- space footprint, turning texture minification from a sampling problem into a lookup.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Mipmap",
      "refs": [
        {
          "title": "Pyramidal Parametrics",
          "authors": "Williams",
          "year": 1983,
          "url": "https://doi.org/10.1145/280811.280977"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "texture-mapping",
          "why": "minified textures alias badly without prefiltering"
        }
      ],
      "id": "mipmapping"
    },
    "mixed-precision-training": {
      "title": "Mixed-Precision Training",
      "cluster": "efficiency",
      "year": 2017,
      "summary": "Stores and multiplies in sixteen bits while keeping a master copy of the weights and the accumulations in thirty-two, with a loss scale to keep small gradients representable.\n",
      "refs": [
        {
          "title": "Mixed Precision Training",
          "authors": "Micikevicius et al.",
          "year": 2017,
          "url": "https://arxiv.org/abs/1710.03740"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "half-precision",
          "why": "the halved bandwidth is the entire point"
        },
        {
          "rel": "corrects",
          "to": "stochastic-gradient-descent",
          "why": "full-precision training is bandwidth bound"
        }
      ],
      "id": "mixed-precision-training"
    },
    "mixture-of-experts": {
      "title": "Mixture of Experts",
      "cluster": "efficiency",
      "year": 2017,
      "aka": [
        "MoE"
      ],
      "summary": "Routes each token to a few of many expert subnetworks, so parameter count grows without the arithmetic growing with it. The routing is the hard part, and load balance is a training objective of its own.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Mixture_of_experts",
      "refs": [
        {
          "title": "Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer",
          "authors": "Shazeer et al.",
          "year": 2017,
          "url": "https://arxiv.org/abs/1701.06538"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "transformer",
          "why": "compute grows with capacity if every weight is used"
        }
      ],
      "id": "mixture-of-experts"
    },
    "mlaa": {
      "title": "Morphological Anti-Aliasing",
      "cluster": "antialiasing",
      "year": 2009,
      "aka": [
        "MLAA"
      ],
      "summary": "Finds edge patterns in the finished image and reconstructs a coverage estimate from their shape, adding anti-aliasing entirely as a post- process.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Morphological_antialiasing",
      "refs": [
        {
          "title": "Morphological Antialiasing",
          "authors": "Reshetov",
          "year": 2009,
          "url": "https://doi.org/10.1145/1572769.1572787"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "msaa",
          "why": "reconstructs edges from the final image, no extra samples"
        }
      ],
      "id": "mlaa"
    },
    "model-based-rl": {
      "title": "Model-Based RL",
      "cluster": "world-models",
      "summary": "Learns the environment's dynamics and plans against them, rather than caching what actions were worth. Buys sample efficiency and pays for it with whatever the model gets wrong.\n",
      "refs": [
        {
          "title": "Dream to Control: Learning Behaviors by Latent Imagination",
          "authors": "Hafner, Lillicrap, Ba, Norouzi",
          "year": 2019,
          "url": "https://arxiv.org/abs/1912.01603"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "q-learning",
          "why": "plans with learned dynamics instead of caching values"
        }
      ],
      "id": "model-based-rl"
    },
    "moller-trumbore": {
      "title": "Moller-Trumbore Intersection",
      "cluster": "geometry",
      "year": 1997,
      "summary": "Solves for barycentric coordinates directly with a scalar triple product, needing no precomputed plane equation and therefore no per- triangle storage.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm",
      "refs": [
        {
          "title": "Fast, Minimum Storage Ray-Triangle Intersection",
          "authors": "Moller, Trumbore",
          "year": 1997,
          "url": "https://doi.org/10.1145/1198555.1198746"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "ray-triangle-intersection",
          "why": "barycentric solve with nothing precomputed"
        }
      ],
      "id": "moller-trumbore"
    },
    "moment-shadow-maps": {
      "title": "Moment Shadow Maps",
      "cluster": "shadows",
      "year": 2015,
      "summary": "Keeps four moments of the depth distribution rather than two, which tightens the bound enough to suppress the light leaking that two moments cannot represent.\n",
      "refs": [
        {
          "title": "Moment Shadow Mapping",
          "authors": "Peters, Klein",
          "year": 2015,
          "url": "https://doi.org/10.1145/2699276.2699277"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "variance-shadow-maps",
          "why": "two moments light-leak between separated occluders"
        }
      ],
      "id": "moment-shadow-maps"
    },
    "momentum": {
      "title": "Momentum",
      "cluster": "learning",
      "year": 1964,
      "summary": "Accumulate a running average of past gradients and step along that. Damps the oscillation across a narrow valley while accelerating along its floor.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Stochastic_gradient_descent",
      "edges": [
        {
          "rel": "corrects",
          "to": "stochastic-gradient-descent",
          "why": "plain SGD oscillates across ravines and crawls along them"
        }
      ],
      "id": "momentum"
    },
    "momentum-contrast": {
      "title": "Momentum Contrast",
      "cluster": "representation",
      "year": 2019,
      "aka": [
        "MoCo"
      ],
      "summary": "Keeps a queue of embeddings from previous batches, encoded by a slowly moving copy of the network, so the pool of negatives is decoupled from the batch size.\n",
      "refs": [
        {
          "title": "Momentum Contrast for Unsupervised Visual Representation Learning",
          "authors": "He, Fan, Wu, Xie, Girshick",
          "year": 2019,
          "url": "https://arxiv.org/abs/1911.05722"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "contrastive-learning",
          "why": "negatives need a batch bigger than memory allows"
        }
      ],
      "id": "momentum-contrast"
    },
    "monte-carlo-integration": {
      "title": "Monte Carlo Integration",
      "cluster": "sampling",
      "summary": "Estimate an integral by averaging the integrand over random samples divided by their density. Converges as the inverse square root of sample count regardless of dimensionality, which is why it wins in path space.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Monte_Carlo_integration",
      "id": "monte-carlo-integration"
    },
    "monte-carlo-tree-search": {
      "title": "Monte Carlo Tree Search",
      "cluster": "world-models",
      "year": 2006,
      "aka": [
        "MCTS"
      ],
      "summary": "Grows a search tree unevenly, spending rollouts where the value estimate is most uncertain. Needs a simulator it can query, which is exactly what most real problems lack.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Monte_Carlo_tree_search",
      "edges": [
        {
          "rel": "requires",
          "to": "markov-decision-process",
          "why": "it searches the tree those transitions define"
        },
        {
          "rel": "requires",
          "to": "upper-confidence-bound",
          "why": "every node of the tree is its own bandit problem"
        }
      ],
      "id": "monte-carlo-tree-search"
    },
    "motion-blur": {
      "title": "Motion Blur",
      "cluster": "camera",
      "summary": "Integrates the scene over the shutter interval rather than sampling one instant. Removes temporal aliasing for the same reason spatial supersampling removes the spatial kind.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Motion_blur_(media)",
      "edges": [
        {
          "rel": "extends",
          "to": "pinhole-camera",
          "why": "the shutter is open for an interval, not an instant"
        },
        {
          "rel": "specializes",
          "to": "supersampling",
          "why": "the extra samples are spread over time instead of area"
        }
      ],
      "id": "motion-blur"
    },
    "msaa": {
      "title": "Multisample Anti-Aliasing",
      "cluster": "antialiasing",
      "summary": "Samples coverage and depth at several points per pixel but shades only once per covered primitive, which fixes geometric edges at a fraction of the cost and does nothing for shader aliasing.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Multisample_anti-aliasing",
      "edges": [
        {
          "rel": "approximates",
          "to": "supersampling",
          "why": "supersamples coverage but shades only once"
        }
      ],
      "id": "msaa"
    },
    "multi-armed-bandit": {
      "title": "Multi-Armed Bandit",
      "cluster": "reinforcement",
      "aka": [
        "Bandit problem"
      ],
      "summary": "One state, several arms, unknown payoffs. Strip an MDP of everything except the choice between gathering information and cashing it in, and this is what is left, which is why regret can be bounded here and almost nowhere above it.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Multi-armed_bandit",
      "refs": [
        {
          "title": "Reinforcement Learning: An Introduction",
          "authors": "Sutton, Barto",
          "year": 2018,
          "url": "http://incompleteideas.net/book/the-book-2nd.html"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "markov-decision-process",
          "why": "a single state, so no action changes what is faced next"
        }
      ],
      "id": "multi-armed-bandit"
    },
    "multiple-importance-sampling": {
      "title": "Multiple Importance Sampling",
      "cluster": "light-transport",
      "year": 1995,
      "aka": [
        "MIS",
        "Balance heuristic"
      ],
      "summary": "Combine several sampling strategies by weighting each sample according to the probability every strategy would have had of generating it. The balance heuristic makes the combination provably near-optimal.\n",
      "refs": [
        {
          "title": "Optimally Combining Sampling Techniques for Monte Carlo Rendering",
          "authors": "Veach, Guibas",
          "year": 1995,
          "url": "https://doi.org/10.1145/218380.218498"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "next-event-estimation",
          "why": "light sampling alone is terrible on near-specular surfaces"
        }
      ],
      "id": "multiple-importance-sampling"
    },
    "multiple-scattering-microfacet": {
      "title": "Multiple-Scattering Microfacet BSDF",
      "cluster": "materials",
      "year": 2016,
      "summary": "Random-walks light between microfacets instead of discarding whatever the masking term blocks. Rough metals stop going dark, which is the visible symptom of the energy single-scattering models throw away.\n",
      "refs": [
        {
          "title": "Multiple-Scattering Microfacet BSDFs with the Smith Model",
          "authors": "Heitz, Hanika, d'Eon, Dachsbacher",
          "year": 2016,
          "url": "https://doi.org/10.1145/2897824.2925943"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "smith-masking",
          "why": "some hits are lost in scatter, never re-emitted"
        }
      ],
      "id": "multiple-scattering-microfacet"
    },
    "multiresolution-hash-encoding": {
      "title": "Multiresolution Hash Encoding",
      "cluster": "neural",
      "year": 2022,
      "summary": "Replaces most of the network's capacity with trainable feature vectors in hash tables at several resolutions, so a tiny MLP suffices and collisions are resolved by the optimizer rather than avoided.\n",
      "refs": [
        {
          "title": "Instant Neural Graphics Primitives with a Multiresolution Hash Encoding",
          "authors": "Muller, Evans, Schied, Keller",
          "year": 2022,
          "url": "https://arxiv.org/abs/2201.05989"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "nerf",
          "why": "the deep MLP, not the idea, is what made it slow"
        }
      ],
      "id": "multiresolution-hash-encoding"
    },
    "muzero": {
      "title": "MuZero",
      "cluster": "world-models",
      "year": 2019,
      "summary": "Learns a model that predicts only reward, value and policy, never observations, and plans with it. Reaches AlphaZero's play without being told the rules of the game.\n",
      "refs": [
        {
          "title": "Mastering Atari, Go, Chess and Shogi by Planning with a Learned Model",
          "authors": "Schrittwieser et al.",
          "year": 2019,
          "url": "https://arxiv.org/abs/1911.08265"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "world-model",
          "why": "predicting observations is capacity planning cannot use"
        },
        {
          "rel": "requires",
          "to": "monte-carlo-tree-search",
          "why": "it plans by searching inside the learned model"
        }
      ],
      "id": "muzero"
    },
    "neighborhood-clamping": {
      "title": "Neighborhood Clamping",
      "cluster": "antialiasing",
      "summary": "Constrains the reprojected history to the colour range of the current frame's neighbouring pixels, so a history sample that no longer describes this surface is pulled back into range.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Temporal_anti-aliasing",
      "edges": [
        {
          "rel": "corrects",
          "to": "taa",
          "why": "wrong history ghosts and smears behind moving objects"
        }
      ],
      "id": "neighborhood-clamping"
    },
    "nerf": {
      "title": "Neural Radiance Fields",
      "cluster": "neural",
      "year": 2020,
      "aka": [
        "NeRF"
      ],
      "summary": "Fits an MLP mapping position and direction to density and colour, then renders it by volumetric ray marching. Optimizing a radiance field directly against photographs sidestepped reconstruction entirely.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Neural_radiance_field",
      "refs": [
        {
          "title": "NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis",
          "authors": "Mildenhall, Srinivasan, Tancik, Barron, Ramamoorthi, Ng",
          "year": 2020,
          "url": "https://arxiv.org/abs/2003.08934"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "radiative-transfer-equation",
          "why": "an MLP supplies density and colour along the ray"
        },
        {
          "rel": "requires",
          "to": "stochastic-gradient-descent",
          "why": "the field is fitted to photographs by gradient descent"
        }
      ],
      "id": "nerf"
    },
    "neural-denoising": {
      "title": "Learned Denoising",
      "cluster": "denoising",
      "year": 2017,
      "aka": [
        "OIDN",
        "OptiX denoiser"
      ],
      "summary": "Trains a network on noisy and converged pairs, taking auxiliary buffers such as albedo and normal as input. Reconstructs detail that hand-tuned filters smooth away, and can hallucinate detail that was never sampled.\n",
      "refs": [
        {
          "title": "Interactive Reconstruction of Monte Carlo Image Sequences using a Recurrent Denoising Autoencoder",
          "authors": "Chaitanya et al.",
          "year": 2017,
          "url": "https://doi.org/10.1145/3072959.3073601"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "svgf",
          "why": "learns the filter from data instead of hand-tuned weights"
        },
        {
          "rel": "requires",
          "to": "backpropagation",
          "why": "the filter is learned from noisy and converged pairs"
        }
      ],
      "id": "neural-denoising"
    },
    "neural-radiance-cache": {
      "title": "Neural Radiance Cache",
      "cluster": "neural",
      "year": 2021,
      "summary": "Trains a small network online, during rendering, to predict outgoing radiance, so paths can terminate into a learned estimate after a couple of bounces instead of continuing.\n",
      "refs": [
        {
          "title": "Real-time Neural Radiance Caching for Path Tracing",
          "authors": "Muller, Rousselle, Novak, Keller",
          "year": 2021,
          "url": "https://doi.org/10.1145/3450626.3459812"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "path-tracing",
          "why": "terminates paths into a cache learned while rendering"
        },
        {
          "rel": "alternative-to",
          "to": "irradiance-caching",
          "why": "a learned cache instead of an interpolated one"
        },
        {
          "rel": "requires",
          "to": "stochastic-gradient-descent",
          "why": "the cache is trained online, while rendering"
        }
      ],
      "id": "neural-radiance-cache"
    },
    "next-event-estimation": {
      "title": "Next Event Estimation",
      "cluster": "light-transport",
      "aka": [
        "Direct light sampling",
        "Shadow rays"
      ],
      "summary": "At every path vertex, additionally sample a point on a light and trace a shadow ray to it, rather than waiting for the random walk to wander onto an emitter by chance.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Path_tracing",
      "edges": [
        {
          "rel": "corrects",
          "to": "path-tracing",
          "why": "random walks almost never hit small light sources"
        }
      ],
      "id": "next-event-estimation"
    },
    "normal-mapping": {
      "title": "Normal Mapping",
      "cluster": "geometry",
      "summary": "Stores the perturbed normal directly in a tangent-space texture instead of deriving it from height differences, which removes the derivative computation and allows normals baked from a high-resolution mesh.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Normal_mapping",
      "edges": [
        {
          "rel": "specializes",
          "to": "bump-mapping",
          "why": "stores the normal itself rather than a height"
        }
      ],
      "id": "normal-mapping"
    },
    "normalized-diffusion": {
      "title": "Normalized Diffusion",
      "cluster": "materials",
      "year": 2015,
      "aka": [
        "Burley diffusion profile"
      ],
      "summary": "Replaces the dipole's physically derived profile with a two-exponential curve fitted directly to Monte Carlo ground truth, which matches measured skin far better near the entry point.\n",
      "refs": [
        {
          "title": "Approximate Reflectance Profiles for Efficient Subsurface Scattering",
          "authors": "Christensen, Burley",
          "year": 2015,
          "url": "https://doi.org/10.1145/2775280.2792555"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "dipole-diffusion",
          "why": "the dipole fits poorly close to the entry point"
        }
      ],
      "id": "normalized-diffusion"
    },
    "occlusion-culling": {
      "title": "Occlusion Culling",
      "cluster": "visibility",
      "summary": "Skips geometry hidden behind other geometry. The hard part is that the answer depends on what has already been drawn, so it is always an estimate made against partial information.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Hidden-surface_determination",
      "edges": [
        {
          "rel": "extends",
          "to": "frustum-culling",
          "why": "being inside the frustum does not make a thing visible"
        }
      ],
      "id": "occlusion-culling"
    },
    "offline-rl": {
      "title": "Offline RL",
      "cluster": "reinforcement",
      "year": 2020,
      "aka": [
        "Batch RL"
      ],
      "summary": "Learn from a fixed dataset with no further interaction, which is the setting wherever a mistake is too expensive to make on purpose: driving, treatment, a live recommender. Its promise over copying the data is stitching: good fragments of separate mediocre episodes joined into one policy.\n",
      "refs": [
        {
          "title": "Offline Reinforcement Learning: Tutorial, Review, and Perspectives on Open Problems",
          "authors": "Levine, Kumar, Tucker, Fu",
          "year": 2020,
          "url": "https://arxiv.org/abs/2005.01643"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "behavior-cloning",
          "why": "stitches better trajectories out of mediocre ones instead of copying them"
        },
        {
          "rel": "requires",
          "to": "experience-replay",
          "why": "the buffer is the whole world, and nothing is ever added to it"
        }
      ],
      "id": "offline-rl"
    },
    "oren-nayar": {
      "title": "Oren-Nayar",
      "cluster": "materials",
      "year": 1994,
      "summary": "Models a diffuse surface as a distribution of Lambertian V-cavities, which produces the flat, backscattering look of rough materials such as clay, concrete and the full moon.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Oren%E2%80%93Nayar_reflectance_model",
      "refs": [
        {
          "title": "Generalization of Lambert's Reflectance Model",
          "authors": "Oren, Nayar",
          "year": 1994,
          "url": "https://www1.cs.columbia.edu/CAVE/publications/pdfs/Oren_SIGGRAPH94.pdf"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "lambert",
          "why": "V-cavity distribution: rough surfaces flatten at grazing angles"
        }
      ],
      "id": "oren-nayar"
    },
    "owen-scrambling": {
      "title": "Owen Scrambling",
      "cluster": "sampling",
      "summary": "Randomizes a low-discrepancy sequence with a recursive permutation that preserves its stratification, restoring an unbiased estimator with a measurable error rather than a fixed deterministic pattern.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Low-discrepancy_sequence",
      "edges": [
        {
          "rel": "corrects",
          "to": "sobol-sequence",
          "why": "a fixed sequence gives structure and no error estimate"
        }
      ],
      "id": "owen-scrambling"
    },
    "painters-algorithm": {
      "title": "Painter's Algorithm",
      "cluster": "visibility",
      "summary": "Sort primitives by depth and draw back to front, letting later writes cover earlier ones. Needs no extra memory and fails on any arrangement without a consistent order.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Painter%27s_algorithm",
      "edges": [
        {
          "rel": "part-of",
          "to": "rasterization"
        }
      ],
      "id": "painters-algorithm"
    },
    "parallax-occlusion-mapping": {
      "title": "Parallax Occlusion Mapping",
      "cluster": "geometry",
      "year": 2006,
      "summary": "Ray-marches the height field in tangent space so texture features shift with view angle and occlude each other, recovering the parallax that normals alone cannot express.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Parallax_mapping",
      "refs": [
        {
          "title": "Dynamic Parallax Occlusion Mapping with Approximate Soft Shadows",
          "authors": "Tatarchuk",
          "year": 2006,
          "url": "https://doi.org/10.1145/1111411.1111423"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "normal-mapping",
          "why": "perturbed normals give no parallax or self-occlusion"
        }
      ],
      "id": "parallax-occlusion-mapping"
    },
    "participating-media": {
      "title": "Participating Media",
      "cluster": "volumetrics",
      "summary": "Volumes that absorb, emit and scatter light along a ray rather than only at surfaces: smoke, fog, clouds, skin interiors.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Volume_rendering",
      "edges": [
        {
          "rel": "part-of",
          "to": "scattering"
        }
      ],
      "id": "participating-media"
    },
    "path-guiding": {
      "title": "Path Guiding",
      "cluster": "light-transport",
      "year": 2017,
      "summary": "Learns an approximation of the incident radiance distribution during rendering and samples directions from it, so paths head toward light rather than being drawn from the BSDF alone.\n",
      "refs": [
        {
          "title": "Practical Path Guiding for Efficient Light-Transport Simulation",
          "authors": "Muller, Gross, Novak",
          "year": 2017,
          "url": "https://doi.org/10.1111/cgf.13227"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "path-tracing",
          "why": "BSDF sampling ignores where the light actually is"
        },
        {
          "rel": "requires",
          "to": "importance-sampling",
          "why": "the learned distribution is used as the sampling pdf"
        }
      ],
      "id": "path-guiding"
    },
    "path-tracing": {
      "title": "Path Tracing",
      "cluster": "light-transport",
      "year": 1986,
      "summary": "Solves the rendering equation by tracing random walks from the camera and averaging their contributions. Unbiased and simple, and the baseline every other transport algorithm is measured against.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Path_tracing",
      "refs": [
        {
          "title": "The Rendering Equation",
          "authors": "Kajiya",
          "year": 1986,
          "url": "https://doi.org/10.1145/280811.280987"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "rendering-equation",
          "why": "expands the recursive integral into random walks"
        },
        {
          "rel": "specializes",
          "to": "monte-carlo-integration",
          "why": "the sample space is the space of light paths"
        },
        {
          "rel": "extends",
          "to": "whitted-ray-tracing",
          "why": "randomizes every bounce instead of only mirrors"
        }
      ],
      "id": "path-tracing"
    },
    "percentage-closer-filtering": {
      "title": "Percentage-Closer Filtering",
      "cluster": "shadows",
      "year": 1987,
      "aka": [
        "PCF"
      ],
      "summary": "Takes several depth comparisons across the shadow map footprint and averages the binary results. Filtering the comparisons rather than the depths is the key: averaging depths is meaningless.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Shadow_mapping",
      "refs": [
        {
          "title": "Rendering Antialiased Shadows with Depth Maps",
          "authors": "Reeves, Salesin, Cook",
          "year": 1987,
          "url": "https://doi.org/10.1145/37402.37435"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "shadow-mapping",
          "why": "a single depth compare gives hard, aliased edges"
        }
      ],
      "id": "percentage-closer-filtering"
    },
    "percentage-closer-soft-shadows": {
      "title": "Percentage-Closer Soft Shadows",
      "cluster": "shadows",
      "year": 2005,
      "aka": [
        "PCSS"
      ],
      "summary": "Searches for blockers first and sizes the PCF kernel by how far away they are, so shadows sharpen near contact and soften with distance.\n",
      "refs": [
        {
          "title": "Percentage-Closer Soft Shadows",
          "authors": "Fernando",
          "year": 2005,
          "url": "https://doi.org/10.1145/1187112.1187153"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "percentage-closer-filtering",
          "why": "kernel width from blocker distance gives contact hardening"
        }
      ],
      "id": "percentage-closer-soft-shadows"
    },
    "phase-function": {
      "title": "Phase Function",
      "cluster": "volumetrics",
      "summary": "The volumetric analogue of a BRDF: the angular distribution of light after a single scattering event in a medium.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Phase_curve_%28astronomy%29",
      "edges": [
        {
          "rel": "part-of",
          "to": "participating-media"
        }
      ],
      "id": "phase-function"
    },
    "phong": {
      "title": "Phong",
      "cluster": "materials",
      "year": 1975,
      "summary": "An empirical specular lobe: the cosine between the reflection vector and the view, raised to a power. No physical basis, but it was the first shading model cheap enough to be ubiquitous.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Phong_reflection_model",
      "refs": [
        {
          "title": "Illumination for Computer Generated Pictures",
          "authors": "Phong",
          "year": 1975,
          "url": "https://doi.org/10.1145/280811.280980"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "specular-reflection",
          "why": "an ad hoc cosine-power lobe with no physical basis"
        }
      ],
      "id": "phong"
    },
    "photon-mapping": {
      "title": "Photon Mapping",
      "cluster": "light-transport",
      "year": 1996,
      "summary": "Trace particles from the lights, store their hits in a spatial structure, then estimate radiance at camera hit points by density estimation over nearby photons. Biased but consistent.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Photon_mapping",
      "refs": [
        {
          "title": "Global Illumination using Photon Maps",
          "authors": "Jensen",
          "year": 1996,
          "url": "https://doi.org/10.1007/978-3-7091-7484-5_3"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "path-tracing",
          "why": "caustics through glass essentially never converge"
        },
        {
          "rel": "alternative-to",
          "to": "bidirectional-path-tracing",
          "why": "caches light subpaths instead of connecting to them"
        }
      ],
      "id": "photon-mapping"
    },
    "pinhole-camera": {
      "title": "Pinhole Camera",
      "cluster": "camera",
      "summary": "Every ray passes through a single point, so the projection is a pure perspective divide. The default camera in rendering because it is the one with no extra parameters.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Pinhole_camera_model",
      "id": "pinhole-camera"
    },
    "pipeline-parallelism": {
      "title": "Pipeline Parallelism",
      "cluster": "distributed",
      "year": 2018,
      "summary": "Assigns consecutive layers to different devices and streams micro- batches through them. Communication is only at stage boundaries, at the cost of bubbles while the pipeline fills and drains.\n",
      "refs": [
        {
          "title": "GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism",
          "authors": "Huang et al.",
          "year": 2018,
          "url": "https://arxiv.org/abs/1811.06965"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "tensor-parallelism",
          "why": "splits between layers rather than inside one"
        }
      ],
      "id": "pipeline-parallelism"
    },
    "plenoxels": {
      "title": "Plenoxels",
      "cluster": "neural",
      "year": 2022,
      "summary": "Optimizes a sparse voxel grid of spherical harmonic coefficients with no network at all, matching NeRF quality and demonstrating that the neural part was never the essential ingredient.\n",
      "refs": [
        {
          "title": "Plenoxels: Radiance Fields without Neural Networks",
          "authors": "Fridovich-Keil, Yu, Tancik, Chen, Recht, Kanazawa",
          "year": 2022,
          "url": "https://arxiv.org/abs/2112.05131"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "nerf",
          "why": "a sparse grid works too; the network was not the point"
        }
      ],
      "id": "plenoxels"
    },
    "policy-gradient": {
      "title": "Policy Gradient",
      "cluster": "reinforcement",
      "summary": "Differentiates expected return with respect to the policy parameters directly, so stochastic and continuous action spaces need no argmax over actions.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Policy_gradient_method",
      "edges": [
        {
          "rel": "alternative-to",
          "to": "q-learning",
          "why": "optimises the policy itself instead of a value function"
        }
      ],
      "id": "policy-gradient"
    },
    "polygon-mesh": {
      "title": "Polygon Mesh",
      "cluster": "geometry",
      "summary": "Vertices, edges and faces. Explicit, cheap to rasterize and to intersect, and the representation essentially all hardware is built around.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Polygon_mesh",
      "edges": [
        {
          "rel": "part-of",
          "to": "surface-representation"
        }
      ],
      "id": "polygon-mesh"
    },
    "positional-encoding": {
      "title": "Positional Encoding",
      "cluster": "sequence-models",
      "year": 2017,
      "summary": "Injects each token's position into its representation, since attention alone sees an unordered set. Sinusoidal at first, later usually learned or applied as a rotation.\n",
      "refs": [
        {
          "title": "Attention Is All You Need",
          "authors": "Vaswani et al.",
          "year": 2017,
          "url": "https://arxiv.org/abs/1706.03762"
        }
      ],
      "edges": [
        {
          "rel": "part-of",
          "to": "transformer"
        }
      ],
      "id": "positional-encoding"
    },
    "potential-based-reward-shaping": {
      "title": "Potential-Based Reward Shaping",
      "cluster": "reinforcement",
      "year": 1999,
      "summary": "Add the difference of a potential function to the reward, and the optimal policy provably does not move. The result that turned reward engineering from guesswork into a statement about which extra signal is safe to give.\n",
      "refs": [
        {
          "title": "Policy Invariance Under Reward Transformations: Theory and Application to Reward Shaping",
          "authors": "Ng, Harada, Russell",
          "year": 1999,
          "url": "https://ai.stanford.edu/~ang/papers/shaping-icml99.pdf"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "markov-decision-process",
          "why": "dense guidance can be added to a sparse reward without moving its optimum"
        }
      ],
      "id": "potential-based-reward-shaping"
    },
    "ppo": {
      "title": "Proximal Policy Optimization",
      "cluster": "reinforcement",
      "year": 2017,
      "aka": [
        "PPO"
      ],
      "summary": "Clips the ratio between new and old policy so an update cannot move too far from the data it was collected under. Most of TRPO's stability with none of its second-order machinery.\n",
      "refs": [
        {
          "title": "Proximal Policy Optimization Algorithms",
          "authors": "Schulman, Wolski, Dhariwal, Radford, Klimov",
          "year": 2017,
          "url": "https://arxiv.org/abs/1707.06347"
        },
        {
          "title": "Trust Region Policy Optimization",
          "authors": "Schulman, Levine, Abbeel, Jordan, Moritz",
          "year": 2015,
          "url": "https://arxiv.org/abs/1502.05477"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "policy-gradient",
          "why": "an unconstrained step can collapse the policy"
        },
        {
          "rel": "requires",
          "to": "importance-sampling",
          "why": "the ratio it clips is the importance weight of reused data"
        },
        {
          "rel": "approximates",
          "to": "trpo",
          "why": "clipping instead of a constrained second-order solve"
        }
      ],
      "id": "ppo"
    },
    "prefiltered-environment-map": {
      "title": "Prefiltered Environment Map",
      "cluster": "real-time-shading",
      "summary": "Convolves the environment map against the BRDF lobe ahead of time, storing successively rougher versions in mip levels so a runtime lookup replaces a runtime integral.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Reflection_mapping",
      "edges": [
        {
          "rel": "approximates",
          "to": "image-based-lighting",
          "why": "prefilter per roughness instead of sampling at runtime"
        }
      ],
      "id": "prefiltered-environment-map"
    },
    "primary-sample-space-mlt": {
      "title": "Primary Sample Space MLT",
      "cluster": "light-transport",
      "year": 2002,
      "aka": [
        "PSSMLT",
        "Kelemen-style MLT"
      ],
      "summary": "Runs the Metropolis chain over the random numbers fed to an ordinary path tracer rather than over path space itself, so the mutation machinery becomes independent of the underlying integrator.\n",
      "refs": [
        {
          "title": "A Simple and Robust Mutation Strategy for the Metropolis Light Transport Algorithm",
          "authors": "Kelemen, Szirmay-Kalos, Antal, Csonka",
          "year": 2002,
          "url": "https://doi.org/10.1111/1467-8659.t01-1-00703"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "metropolis-light-transport",
          "why": "path-space mutations are hard to implement correctly"
        }
      ],
      "id": "primary-sample-space-mlt"
    },
    "prioritized-experience-replay": {
      "title": "Prioritized Experience Replay",
      "cluster": "reinforcement",
      "year": 2015,
      "aka": [
        "PER"
      ],
      "summary": "Draw a transition in proportion to the size of its last TD error, so the buffer keeps returning the surprising ones and stops returning the solved ones.\n",
      "refs": [
        {
          "title": "Prioritized Experience Replay",
          "authors": "Schaul, Quan, Antonoglou, Silver",
          "year": 2015,
          "url": "https://arxiv.org/abs/1511.05952"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "experience-replay",
          "why": "uniform sampling spends most updates on transitions with no error left"
        },
        {
          "rel": "requires",
          "to": "importance-sampling",
          "why": "drawing by error skews the expectation, and the weight puts it back"
        }
      ],
      "id": "prioritized-experience-replay"
    },
    "progressive-photon-mapping": {
      "title": "Progressive Photon Mapping",
      "cluster": "light-transport",
      "year": 2008,
      "aka": [
        "PPM"
      ],
      "summary": "Keeps camera hit points instead of photons and shrinks each one's search radius as more photon passes arrive, so the estimate converges to the correct answer in bounded memory.\n",
      "refs": [
        {
          "title": "Progressive Photon Mapping",
          "authors": "Hachisuka, Ogaki, Jensen",
          "year": 2008,
          "url": "https://doi.org/10.1145/1457515.1409083"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "photon-mapping",
          "why": "photon count is capped by memory, so bias never vanishes"
        }
      ],
      "id": "progressive-photon-mapping"
    },
    "q-learning": {
      "title": "Q-Learning",
      "cluster": "reinforcement",
      "year": 1989,
      "summary": "Learns the value of each state-action pair directly, converging to the optimal policy without ever modelling the transitions.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Q-learning",
      "edges": [
        {
          "rel": "specializes",
          "to": "temporal-difference-learning",
          "why": "the bootstrapped target is the best next action's value"
        }
      ],
      "id": "q-learning"
    },
    "quantization": {
      "title": "Quantization",
      "cluster": "efficiency",
      "year": 2022,
      "summary": "Represents weights, and sometimes activations, as low-bit integers with a scale. Most of the difficulty is the handful of outlier channels whose range the rest cannot share.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Quantization_(signal_processing)",
      "refs": [
        {
          "title": "LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale",
          "authors": "Dettmers, Lewis, Belkada, Zettlemoyer",
          "year": 2022,
          "url": "https://arxiv.org/abs/2208.07339"
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "floating-point",
          "why": "integers plus a scale, trading range for footprint"
        }
      ],
      "id": "quantization"
    },
    "quasi-monte-carlo": {
      "title": "Quasi-Monte Carlo",
      "cluster": "sampling",
      "aka": [
        "QMC",
        "Low-discrepancy sampling"
      ],
      "summary": "Replaces random points with deterministic low-discrepancy sequences that cover the domain more evenly, improving the convergence rate on smooth integrands beyond the inverse square root.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Quasi-Monte_Carlo_method",
      "edges": [
        {
          "rel": "alternative-to",
          "to": "monte-carlo-integration",
          "why": "deterministic even coverage converges faster"
        }
      ],
      "id": "quasi-monte-carlo"
    },
    "radiance": {
      "title": "Radiance",
      "cluster": "foundations",
      "summary": "Power per unit projected area per unit solid angle. It is the quantity that is constant along a ray in a vacuum, which is why renderers transport it rather than irradiance or flux.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Radiance",
      "edges": [
        {
          "rel": "part-of",
          "to": "light-transport"
        }
      ],
      "id": "radiance"
    },
    "radiative-transfer-equation": {
      "title": "Radiative Transfer Equation",
      "cluster": "volumetrics",
      "aka": [
        "RTE",
        "Volume rendering equation"
      ],
      "summary": "The volumetric counterpart of the rendering equation, describing how radiance changes along a ray through absorption, out-scattering, in- scattering and emission.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Radiative_transfer",
      "edges": [
        {
          "rel": "extends",
          "to": "rendering-equation",
          "why": "transport along a ray, not just across surfaces"
        },
        {
          "rel": "part-of",
          "to": "participating-media"
        }
      ],
      "id": "radiative-transfer-equation"
    },
    "radiosity": {
      "title": "Radiosity",
      "cluster": "light-transport",
      "year": 1984,
      "summary": "Discretizes the scene into patches and solves a linear system of form factors for diffuse interreflection. View-independent, so the solution can be walked through in real time, but it cannot represent specular transport.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Radiosity_%28computer_graphics%29",
      "refs": [
        {
          "title": "Modeling the Interaction of Light Between Diffuse Surfaces",
          "authors": "Goral, Torrance, Greenberg, Battaile",
          "year": 1984,
          "url": "https://doi.org/10.1145/280811.280985"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "rendering-equation",
          "why": "solves the diffuse-only case as a linear system"
        },
        {
          "rel": "alternative-to",
          "to": "path-tracing",
          "why": "view-independent solve instead of per-pixel sampling"
        }
      ],
      "id": "radiosity"
    },
    "rainbow": {
      "title": "Rainbow",
      "cluster": "reinforcement",
      "year": 2017,
      "summary": "Six DQN improvements in one agent: double, dueling, prioritized replay, multi-step returns, distributional values and noisy exploration, with an ablation for each. The result is mostly the finding that they address different problems and therefore add up.\n",
      "refs": [
        {
          "title": "Rainbow: Combining Improvements in Deep Reinforcement Learning",
          "authors": "Hessel et al.",
          "year": 2017,
          "url": "https://arxiv.org/abs/1710.02298"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "deep-q-network",
          "why": "every fix had been measured alone, against the same unimproved baseline"
        },
        {
          "rel": "requires",
          "to": "prioritized-experience-replay",
          "why": "no single ablation costs more than removing it"
        },
        {
          "rel": "requires",
          "to": "distributional-rl",
          "why": "it pays off only late in training, where shorter papers stopped looking"
        }
      ],
      "id": "rainbow"
    },
    "rasterization": {
      "title": "Rasterization",
      "cluster": "geometry",
      "summary": "Projects primitives to the screen and fills the pixels they cover. Cost scales with primitives times coverage, and visibility comes free from a depth buffer.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Rasterisation",
      "edges": [
        {
          "rel": "requires",
          "to": "polygon-mesh",
          "why": "it fills projected primitives, not implicit surfaces"
        },
        {
          "rel": "requires",
          "to": "z-buffer",
          "why": "per-pixel depth is what makes visibility local"
        }
      ],
      "id": "rasterization"
    },
    "ratio-tracking": {
      "title": "Ratio Tracking",
      "cluster": "volumetrics",
      "year": 2014,
      "summary": "Instead of accepting or rejecting each collision outright, accumulates a continuous transmittance ratio, which removes the binary outcome that makes delta tracking noisy in optically thin media.\n",
      "refs": [
        {
          "title": "Residual Ratio Tracking for Estimating Attenuation in Participating Media",
          "authors": "Novak, Selle, Jarosz",
          "year": 2014,
          "url": "https://doi.org/10.1145/2661229.2661292"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "delta-tracking",
          "why": "the binary accept/reject outcome is high variance"
        }
      ],
      "id": "ratio-tracking"
    },
    "ray-traced-shadows": {
      "title": "Ray-Traced Shadows",
      "cluster": "shadows",
      "summary": "Traces a ray toward the light per shaded point. No resolution, bias or cascade artifacts at all, replaced by sampling noise and a per-pixel tracing cost.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Ray_tracing_%28graphics%29",
      "edges": [
        {
          "rel": "alternative-to",
          "to": "shadow-mapping",
          "why": "no resolution or bias artifacts, but noise instead"
        },
        {
          "rel": "specializes",
          "to": "next-event-estimation",
          "why": "the visibility term of a direct lighting sample"
        }
      ],
      "id": "ray-traced-shadows"
    },
    "ray-triangle-intersection": {
      "title": "Ray-Triangle Intersection",
      "cluster": "geometry",
      "summary": "The innermost operation of every ray tracer, so constant factors and numerical robustness here dominate both performance and correctness.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm",
      "edges": [
        {
          "rel": "requires",
          "to": "polygon-mesh",
          "why": "the primitive being intersected"
        }
      ],
      "id": "ray-triangle-intersection"
    },
    "recurrent-network": {
      "title": "Recurrent Network",
      "cluster": "sequence-models",
      "aka": [
        "RNN"
      ],
      "summary": "Carry a hidden state forward one step at a time. The natural shape for sequences, and the source of every problem the rest of this cluster fixes.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Recurrent_neural_network",
      "id": "recurrent-network"
    },
    "reflection": {
      "title": "Reflection",
      "cluster": "foundations",
      "summary": "Light leaving a surface on the same side it arrived from.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Reflection_%28physics%29",
      "edges": [
        {
          "rel": "part-of",
          "to": "light-transport"
        }
      ],
      "id": "reflection"
    },
    "refraction": {
      "title": "Refraction",
      "cluster": "foundations",
      "summary": "Light crossing into a medium with a different index of refraction, bending by Snell's law and changing radiance by the squared IOR ratio.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Refraction",
      "edges": [
        {
          "rel": "part-of",
          "to": "light-transport"
        }
      ],
      "id": "refraction"
    },
    "reinforce": {
      "title": "REINFORCE",
      "cluster": "reinforcement",
      "year": 1992,
      "aka": [
        "Score function estimator",
        "Likelihood ratio method"
      ],
      "summary": "Scale each action's log-probability gradient by the return that followed it. The whole policy-gradient family starts here, and so does its variance problem: one lucky episode is indistinguishable from a better action.\n",
      "refs": [
        {
          "title": "Simple statistical gradient-following algorithms for connectionist reinforcement learning",
          "authors": "Williams",
          "year": 1992,
          "url": "https://link.springer.com/article/10.1007/BF00992696"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "policy-gradient",
          "why": "the coefficient is the episode's own return, with nothing subtracted"
        },
        {
          "rel": "requires",
          "to": "monte-carlo-integration",
          "why": "the gradient is an expectation over trajectories it can only sample"
        }
      ],
      "id": "reinforce"
    },
    "reinhard-tonemapping": {
      "title": "Reinhard Tone Mapping",
      "cluster": "color",
      "year": 2002,
      "summary": "A simple rational curve that maps zero to zero and infinity to one, so nothing ever clips. Desaturates highlights and leaves images looking flat, but it is the reference everyone starts from.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Tone_mapping",
      "refs": [
        {
          "title": "Photographic Tone Reproduction for Digital Images",
          "authors": "Reinhard, Stark, Shirley, Ferwerda",
          "year": 2002,
          "url": "https://doi.org/10.1145/3596711.3596781"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "tone-mapping",
          "why": "a rational curve that never clips"
        }
      ],
      "id": "reinhard-tonemapping"
    },
    "relu": {
      "title": "ReLU",
      "cluster": "learning",
      "aka": [
        "Rectified linear unit"
      ],
      "summary": "Passes positives through unchanged and zeroes negatives. The derivative is exactly one on the active half, so nothing attenuates the gradient there.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Rectified_linear_unit",
      "edges": [
        {
          "rel": "corrects",
          "to": "backpropagation",
          "why": "saturating activations drive the gradient toward zero"
        }
      ],
      "id": "relu"
    },
    "rendering-equation": {
      "title": "The Rendering Equation",
      "cluster": "foundations",
      "year": 1986,
      "summary": "States outgoing radiance at a point as emission plus the integral of incoming radiance weighted by the BSDF. Unified the previously separate ray tracing and radiosity traditions as approximations of one integral.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Rendering_equation",
      "refs": [
        {
          "title": "The Rendering Equation",
          "authors": "Kajiya",
          "year": 1986,
          "url": "https://doi.org/10.1145/280811.280987"
        }
      ],
      "edges": [
        {
          "rel": "part-of",
          "to": "light-transport"
        },
        {
          "rel": "requires",
          "to": "radiance",
          "why": "the unknown it solves for is a radiance field"
        }
      ],
      "id": "rendering-equation"
    },
    "resampled-importance-sampling": {
      "title": "Resampled Importance Sampling",
      "cluster": "light-transport",
      "year": 2005,
      "aka": [
        "RIS"
      ],
      "summary": "Draw a pool of cheap candidates, then pick one from the pool with probability proportional to a better target function. Approximates sampling from a distribution you cannot sample from directly.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Importance_sampling",
      "refs": [
        {
          "title": "Importance Resampling for Global Illumination",
          "authors": "Talbot, Cline, Egbert",
          "year": 2005
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "importance-sampling",
          "why": "approximates a pdf that cannot be sampled directly"
        }
      ],
      "id": "resampled-importance-sampling"
    },
    "residual-connection": {
      "title": "Residual Connection",
      "cluster": "learning",
      "year": 2015,
      "aka": [
        "ResNet",
        "Skip connection"
      ],
      "summary": "Add a layer's input to its output so the layer only has to learn a correction. Gradients then reach early layers along a path that does not attenuate, and depth stops being a liability.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Residual_neural_network",
      "refs": [
        {
          "title": "Deep Residual Learning for Image Recognition",
          "authors": "He, Zhang, Ren, Sun",
          "year": 2015,
          "url": "https://arxiv.org/abs/1512.03385"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "backpropagation",
          "why": "gradients vanish through a deep stack of layers"
        }
      ],
      "id": "residual-connection"
    },
    "restir": {
      "title": "ReSTIR",
      "cluster": "light-transport",
      "year": 2020,
      "aka": [
        "Spatiotemporal reservoir resampling"
      ],
      "summary": "Keeps a small reservoir of chosen light samples per pixel and repeatedly resamples it against neighbours and the previous frame, so each pixel effectively inherits thousands of candidates for a handful of rays.\n",
      "refs": [
        {
          "title": "Spatiotemporal Reservoir Resampling for Real-Time Ray Tracing with Dynamic Direct Lighting",
          "authors": "Bitterli, Wyman, Pharr, Rayfield, Jarosz, Novak",
          "year": 2020,
          "url": "https://doi.org/10.1145/3386569.3392481"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "resampled-importance-sampling",
          "why": "reuses candidate pools across pixels and frames"
        },
        {
          "rel": "requires",
          "to": "temporal-reprojection",
          "why": "the previous frame's reservoir must be located"
        }
      ],
      "id": "restir"
    },
    "restir-gi": {
      "title": "ReSTIR GI",
      "cluster": "light-transport",
      "year": 2021,
      "summary": "Applies reservoir resampling to indirect paths by storing sample points and their outgoing radiance, extending the technique past direct lighting.\n",
      "refs": [
        {
          "title": "ReSTIR GI: Path Resampling for Real-Time Path Tracing",
          "authors": "Ouyang, Liu, Kettunen, Pharr, Pantaleoni",
          "year": 2021,
          "url": "https://doi.org/10.1111/cgf.14378"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "restir",
          "why": "reuses indirect paths, not just direct light samples"
        }
      ],
      "id": "restir-gi"
    },
    "reward-model": {
      "title": "Reward Model",
      "cluster": "language",
      "year": 2022,
      "summary": "A model trained on pairwise human preferences to score responses, standing in for the objective nobody can write down. Also the component that gets gamed once the policy optimises against it hard enough.\n",
      "refs": [
        {
          "title": "Training language models to follow instructions with human feedback",
          "authors": "Ouyang et al.",
          "year": 2022,
          "url": "https://arxiv.org/abs/2203.02155"
        }
      ],
      "edges": [
        {
          "rel": "part-of",
          "to": "rlhf"
        }
      ],
      "id": "reward-model"
    },
    "rlhf": {
      "title": "RLHF",
      "cluster": "language",
      "year": 2022,
      "aka": [
        "Reinforcement learning from human feedback"
      ],
      "summary": "Fits a reward model to human preference comparisons, then optimises the language model against it. The step that turned a next-token predictor into something that follows instructions.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Reinforcement_learning_from_human_feedback",
      "refs": [
        {
          "title": "Training language models to follow instructions with human feedback",
          "authors": "Ouyang et al.",
          "year": 2022,
          "url": "https://arxiv.org/abs/2203.02155"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "autoregressive-language-model",
          "why": "aligns to preferences that next-token loss cannot express"
        },
        {
          "rel": "requires",
          "to": "ppo",
          "why": "the reward model is not differentiable through text"
        },
        {
          "rel": "requires",
          "to": "supervised-fine-tuning",
          "why": "the policy is initialised from a supervised pass"
        }
      ],
      "id": "rlhf"
    },
    "rms-norm": {
      "title": "RMS Normalization",
      "cluster": "learning",
      "year": 2019,
      "aka": [
        "RMSNorm"
      ],
      "summary": "Drops the mean-subtraction step and rescales by the root mean square alone. Matches LayerNorm's quality, which is the finding: the re- centring was never doing the work.\n",
      "refs": [
        {
          "title": "Root Mean Square Layer Normalization",
          "authors": "Zhang, Sennrich",
          "year": 2019,
          "url": "https://arxiv.org/abs/1910.07467"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "layer-normalization",
          "why": "re-centring costs time and contributes nothing measurable"
        }
      ],
      "id": "rms-norm"
    },
    "roofline-model": {
      "title": "Roofline Model",
      "cluster": "hardware",
      "year": 2009,
      "summary": "Plots attainable performance against arithmetic intensity, bounded by peak compute on one side and memory bandwidth on the other. Tells you which of the two you are actually fighting before you optimise the wrong one.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Roofline_model",
      "id": "roofline-model"
    },
    "russian-roulette": {
      "title": "Russian Roulette",
      "cluster": "light-transport",
      "summary": "Terminate a path with some probability and divide the survivors by the survival probability. Bounds path length without the bias that a hard depth cutoff introduces.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Russian_roulette",
      "edges": [
        {
          "rel": "corrects",
          "to": "path-tracing",
          "why": "cutting paths at a fixed depth loses energy"
        }
      ],
      "id": "russian-roulette"
    },
    "sarsa": {
      "title": "SARSA",
      "cluster": "reinforcement",
      "year": 1994,
      "aka": [
        "State-Action-Reward-State-Action"
      ],
      "summary": "Q-learning's update with one substitution: the target uses the action the policy actually took, not the best one on offer. So the values include the cost of exploring, and the agent walks the safe path along a cliff where Q-learning walks the edge and occasionally falls off.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/State%E2%80%93action%E2%80%93reward%E2%80%93state%E2%80%93action",
      "refs": [
        {
          "title": "On-line Q-learning using connectionist systems",
          "authors": "Rummery, Niranjan",
          "year": 1994,
          "url": "http://mi.eng.cam.ac.uk/reports/svr-ftp/auto-pdf/rummery_tr166.pdf"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "temporal-difference-learning",
          "why": "the bootstrapped target is the action the behaviour policy chose"
        },
        {
          "rel": "alternative-to",
          "to": "q-learning",
          "why": "on-policy, so the risk of its own exploration is priced into the values"
        }
      ],
      "id": "sarsa"
    },
    "scaling-laws": {
      "title": "Scaling Laws",
      "cluster": "language",
      "year": 2020,
      "summary": "Loss falls as a power law in parameters, data and compute, over many orders of magnitude. Turned model design into a budgeting exercise with a predictable return.\n",
      "refs": [
        {
          "title": "Scaling Laws for Neural Language Models",
          "authors": "Kaplan et al.",
          "year": 2020,
          "url": "https://arxiv.org/abs/2001.08361"
        }
      ],
      "edges": [
        {
          "rel": "validates",
          "to": "autoregressive-language-model",
          "why": "predicts the loss a given budget will reach"
        }
      ],
      "id": "scaling-laws"
    },
    "scattering": {
      "title": "Scattering",
      "cluster": "foundations",
      "summary": "Light redirected inside a medium rather than at a surface boundary.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Scattering",
      "edges": [
        {
          "rel": "part-of",
          "to": "light-transport"
        }
      ],
      "id": "scattering"
    },
    "schlick": {
      "title": "Schlick's Approximation",
      "cluster": "materials",
      "year": 1994,
      "summary": "Approximates Fresnel reflectance as a fifth-power interpolation between normal incidence reflectance and one. Accurate enough for dielectrics and cheap enough for a pixel shader.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Schlick%27s_approximation",
      "refs": [
        {
          "title": "An Inexpensive BRDF Model for Physically-based Rendering",
          "authors": "Schlick",
          "year": 1994,
          "url": "http://igorsklyar.com/system/documents/papers/28/Schlick94.pdf"
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "fresnel",
          "why": "a fifth-power curve instead of the full equations"
        }
      ],
      "id": "schlick"
    },
    "screen-space-reflections": {
      "title": "Screen-Space Reflections",
      "cluster": "real-time-shading",
      "aka": [
        "SSR"
      ],
      "summary": "Ray-marches the depth buffer to find reflected surfaces. Convincing while the reflected geometry is on screen, and falls back to an environment map the moment it is not.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Reflection_%28computer_graphics%29",
      "edges": [
        {
          "rel": "approximates",
          "to": "specular-reflection",
          "why": "reuses the frame buffer instead of tracing the scene"
        }
      ],
      "id": "screen-space-reflections"
    },
    "sggx": {
      "title": "SGGX Microflake Distribution",
      "cluster": "volumetrics",
      "year": 2015,
      "summary": "A microflake distribution parameterized by a symmetric matrix, so it stays in the same family under linear transforms and can be filtered and interpolated across levels of detail.\n",
      "refs": [
        {
          "title": "The SGGX Microflake Distribution",
          "authors": "Heitz, Dupuy, Crassin, Dachsbacher",
          "year": 2015,
          "url": "https://research.nvidia.com/sites/default/files/pubs/2015-08_The-SGGX-microflake/sggx.pdf"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "microflake",
          "why": "microflake distribution closed under linear transforms"
        }
      ],
      "id": "sggx"
    },
    "shadow-mapping": {
      "title": "Shadow Mapping",
      "cluster": "shadows",
      "year": 1978,
      "summary": "Renders depth from the light's point of view, then compares each shaded point against it. Image-based, so cost is independent of geometric complexity, and every artifact it has traces back to that finite resolution.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Shadow_mapping",
      "refs": [
        {
          "title": "Casting Curved Shadows on Curved Surfaces",
          "authors": "Williams",
          "year": 1978,
          "url": "https://doi.org/10.1145/280811.280975"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "rasterization",
          "why": "the depth image comes from an ordinary raster pass"
        }
      ],
      "id": "shadow-mapping"
    },
    "shadow-volumes": {
      "title": "Shadow Volumes",
      "cluster": "shadows",
      "year": 1977,
      "summary": "Extrudes silhouette edges away from the light and uses the stencil buffer to count entries and exits. Geometrically exact, with no resolution artifacts, but fill-rate cost scales badly.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Shadow_volume",
      "refs": [
        {
          "title": "Shadow Algorithms for Computer Graphics",
          "authors": "Crow",
          "year": 1977,
          "url": "https://doi.org/10.1145/965141.563901"
        }
      ],
      "edges": [
        {
          "rel": "alternative-to",
          "to": "shadow-mapping",
          "why": "exact silhouettes, but fill-rate bound"
        }
      ],
      "id": "shadow-volumes"
    },
    "signed-distance-field": {
      "title": "Signed Distance Field",
      "cluster": "geometry",
      "aka": [
        "SDF"
      ],
      "summary": "Stores distance to the nearest surface, negative inside. Booleans, offsets and blends become arithmetic on the field, and the distance value itself is a safe step length for tracing.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Signed_distance_function",
      "edges": [
        {
          "rel": "part-of",
          "to": "surface-representation"
        }
      ],
      "id": "signed-distance-field"
    },
    "simd": {
      "title": "SIMD",
      "cluster": "hardware",
      "aka": [
        "Single instruction",
        "multiple data"
      ],
      "summary": "One instruction applied to many data lanes at once. The arrangement that makes throughput hardware cheap: fetch and decode are paid once for a whole vector.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Single_instruction,_multiple_data",
      "id": "simd"
    },
    "simt": {
      "title": "SIMT",
      "cluster": "hardware",
      "aka": [
        "Single instruction",
        "multiple threads"
      ],
      "summary": "Lanes are presented as independent threads sharing an instruction stream. Lets ordinary branching code be written for vector hardware, at the cost of hiding when that code stops being vector-friendly.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads",
      "edges": [
        {
          "rel": "extends",
          "to": "simd",
          "why": "lanes get their own program counter, so branches compile"
        }
      ],
      "id": "simt"
    },
    "smaa": {
      "title": "Subpixel Morphological Anti-Aliasing",
      "cluster": "antialiasing",
      "year": 2012,
      "aka": [
        "SMAA"
      ],
      "summary": "Adds proper pattern classification, sharper edge detection and optional multi-sample or temporal inputs, recovering the detail that cheap morphological filters blur away.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Spatial_anti-aliasing",
      "refs": [
        {
          "title": "SMAA: Enhanced Subpixel Morphological Antialiasing",
          "authors": "Jimenez, Echevarria, Sousa, Gutierrez",
          "year": 2012,
          "url": "https://doi.org/10.1111/j.1467-8659.2012.03014.x"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "mlaa",
          "why": "morphological filtering alone blurs and misses subpixel detail"
        }
      ],
      "id": "smaa"
    },
    "smith-masking": {
      "title": "Smith Masking-Shadowing",
      "cluster": "materials",
      "year": 1967,
      "summary": "Derives the fraction of microfacets visible from a given direction from the normal distribution itself, rather than being an independent invented function. Consistency with D is what makes it the standard choice.\n",
      "refs": [
        {
          "title": "Geometrical Shadowing of a Random Rough Surface",
          "authors": "Smith",
          "year": 1967,
          "url": "https://ieeexplore.ieee.org/document/1138991"
        }
      ],
      "edges": [
        {
          "rel": "part-of",
          "to": "microfacet-model"
        }
      ],
      "id": "smith-masking"
    },
    "sobol-sequence": {
      "title": "Sobol Sequence",
      "cluster": "sampling",
      "summary": "A base-two low-discrepancy construction with good high-dimensional properties and very fast incremental evaluation, which is why renderers reach for it first.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Sobol_sequence",
      "edges": [
        {
          "rel": "specializes",
          "to": "quasi-monte-carlo",
          "why": "base-2 construction, cheap to evaluate incrementally"
        }
      ],
      "id": "sobol-sequence"
    },
    "soft-actor-critic": {
      "title": "Soft Actor-Critic",
      "cluster": "reinforcement",
      "year": 2018,
      "aka": [
        "SAC"
      ],
      "summary": "Off-policy actor-critic on the maximum-entropy objective, with twin critics and a temperature tuned automatically against a target entropy. The default for continuous control: DDPG's sample efficiency without DDPG's habit of collapsing when a hyperparameter moves.\n",
      "refs": [
        {
          "title": "Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor",
          "authors": "Haarnoja, Zhou, Abbeel, Levine",
          "year": 2018,
          "url": "https://arxiv.org/abs/1801.01290"
        },
        {
          "title": "Soft Actor-Critic Algorithms and Applications",
          "authors": "Haarnoja et al.",
          "year": 2018,
          "url": "https://arxiv.org/abs/1812.05905"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "maximum-entropy-rl",
          "why": "the critic prices entropy alongside reward, so the actor stays stochastic"
        },
        {
          "rel": "corrects",
          "to": "ddpg",
          "why": "a deterministic actor explores only as far as the noise someone tuned for it"
        },
        {
          "rel": "alternative-to",
          "to": "ppo",
          "why": "off-policy, so a transition is reused for the rest of training instead of dropped after one batch"
        },
        {
          "rel": "requires",
          "to": "experience-replay",
          "why": "its updates come from the buffer, not from the latest rollout"
        }
      ],
      "id": "soft-actor-critic"
    },
    "spectral-rendering": {
      "title": "Spectral Rendering",
      "cluster": "color",
      "summary": "Transports light at wavelengths rather than as RGB triples. Required for dispersion, fluorescence and correct metamerism under unusual illuminants, where RGB gives an answer that is simply the wrong colour.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Spectral_rendering",
      "edges": [
        {
          "rel": "corrects",
          "to": "linear-workflow",
          "why": "RGB math cannot express dispersion or metamerism"
        }
      ],
      "id": "spectral-rendering"
    },
    "specular-reflection": {
      "title": "Specular Reflection",
      "cluster": "materials",
      "summary": "Light reflected about the surface normal, concentrated in a lobe whose width is set by how rough the interface is.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Specular_reflection",
      "edges": [
        {
          "rel": "part-of",
          "to": "reflection"
        }
      ],
      "id": "specular-reflection"
    },
    "speculative-decoding": {
      "title": "Speculative Decoding",
      "cluster": "efficiency",
      "year": 2022,
      "summary": "A small draft model proposes several tokens and the large model verifies them in one batched pass, keeping the longest correct prefix. Exact: the output distribution is unchanged.\n",
      "refs": [
        {
          "title": "Fast Inference from Transformers via Speculative Decoding",
          "authors": "Leviathan, Kalman, Matias",
          "year": 2022,
          "url": "https://arxiv.org/abs/2211.17192"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "kv-cache",
          "why": "decoding stays serial, one token per pass"
        }
      ],
      "id": "speculative-decoding"
    },
    "sphere-tracing": {
      "title": "Sphere Tracing",
      "cluster": "geometry",
      "year": 1996,
      "summary": "Marches along a ray by exactly the distance value at each point, which can never overshoot the surface. Renders implicit geometry without ever tessellating it.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Ray_marching",
      "refs": [
        {
          "title": "Sphere Tracing: A Geometric Method for the Antialiased Ray Tracing of Implicit Surfaces",
          "authors": "Hart",
          "year": 1996,
          "url": "https://doi.org/10.1007/s003710050084"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "signed-distance-field",
          "why": "the step length is the distance value itself"
        }
      ],
      "id": "sphere-tracing"
    },
    "spherical-harmonics": {
      "title": "Spherical Harmonics Irradiance",
      "cluster": "real-time-shading",
      "year": 2001,
      "summary": "Projects distant lighting onto low-order spherical harmonics. Nine coefficients reproduce diffuse irradiance from any environment to within a percent, because the cosine lobe is itself a strong low-pass filter.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Spherical_harmonics",
      "refs": [
        {
          "title": "An Efficient Representation for Irradiance Environment Maps",
          "authors": "Ramamoorthi, Hanrahan",
          "year": 2001,
          "url": "https://doi.org/10.1145/383259.383317"
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "image-based-lighting",
          "why": "nine coefficients capture all diffuse irradiance"
        }
      ],
      "id": "spherical-harmonics"
    },
    "split-sum-approximation": {
      "title": "Split-Sum Approximation",
      "cluster": "real-time-shading",
      "year": 2013,
      "summary": "Factors the specular IBL integral into a prefiltered radiance lookup times a precomputed BRDF response table. Both halves fit in textures, which is what made physically based specular affordable in real time.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Image-based_lighting",
      "refs": [
        {
          "title": "Real Shading in Unreal Engine 4",
          "authors": "Karis",
          "year": 2013
        }
      ],
      "edges": [
        {
          "rel": "approximates",
          "to": "microfacet-model",
          "why": "splits the integral into two precomputable factors"
        },
        {
          "rel": "requires",
          "to": "prefiltered-environment-map",
          "why": "one of the two factors is the prefiltered map"
        }
      ],
      "id": "split-sum-approximation"
    },
    "srgb": {
      "title": "sRGB Transfer Function",
      "cluster": "color",
      "year": 1996,
      "tags": [
        "encoding"
      ],
      "summary": "The near-gamma-2.2 encoding almost all image files and displays use. It allocates more precision to darks, matching human contrast sensitivity, and is an encoding rather than a light-linear quantity.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/SRGB",
      "id": "srgb"
    },
    "ssao": {
      "title": "Screen-Space Ambient Occlusion",
      "cluster": "real-time-shading",
      "year": 2007,
      "summary": "Estimates occlusion by sampling the depth buffer around each pixel, making ambient occlusion fully dynamic and independent of scene complexity.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Screen_space_ambient_occlusion",
      "refs": [
        {
          "title": "Finding Next Gen: CryEngine 2",
          "authors": "Mittring",
          "year": 2007
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "ambient-occlusion",
          "why": "estimated from the depth buffer at runtime"
        }
      ],
      "id": "ssao"
    },
    "statistical-operators-layering": {
      "title": "Statistical Operators Layering",
      "cluster": "materials",
      "year": 2018,
      "summary": "Represents each layer's effect as an operator on the mean and variance of a lobe, so light scattering between interfaces is carried through the stack instead of being ignored.\n",
      "refs": [
        {
          "title": "Efficient Rendering of Layered Materials using an Atomic Decomposition with Statistical Operators",
          "authors": "Belcour",
          "year": 2018,
          "url": "https://hal.archives-ouvertes.fr/hal-01785457/document"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "layering",
          "why": "scattering between interfaces, tracked as variance"
        }
      ],
      "id": "statistical-operators-layering"
    },
    "stochastic-gradient-descent": {
      "title": "Stochastic Gradient Descent",
      "cluster": "learning",
      "year": 1951,
      "aka": [
        "SGD"
      ],
      "summary": "Estimate the gradient from a small batch instead of the whole dataset. The estimate is noisy, and that noise turns out to help escape sharp minima as well as making each step affordable.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Stochastic_gradient_descent",
      "edges": [
        {
          "rel": "corrects",
          "to": "gradient-descent",
          "why": "a full-batch gradient costs the entire dataset per step"
        }
      ],
      "id": "stochastic-gradient-descent"
    },
    "stochastic-progressive-photon-mapping": {
      "title": "Stochastic Progressive Photon Mapping",
      "cluster": "light-transport",
      "year": 2009,
      "aka": [
        "SPPM"
      ],
      "summary": "Regenerates the camera hit points every pass rather than fixing them once, which restores depth of field, motion blur and glossy reflection.\n",
      "refs": [
        {
          "title": "Stochastic Progressive Photon Mapping",
          "authors": "Hachisuka, Jensen",
          "year": 2009,
          "url": "https://doi.org/10.1145/1661412.1618487"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "progressive-photon-mapping",
          "why": "a fixed hit point set cannot express a pixel-wide integral"
        }
      ],
      "id": "stochastic-progressive-photon-mapping"
    },
    "stratified-sampling": {
      "title": "Stratified Sampling",
      "cluster": "sampling",
      "summary": "Partition the domain and take one sample per cell, so samples cannot clump. Cheap, and effective in low dimensions before the number of strata explodes.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Stratified_sampling",
      "edges": [
        {
          "rel": "corrects",
          "to": "monte-carlo-integration",
          "why": "independent random samples clump and leave gaps"
        }
      ],
      "id": "stratified-sampling"
    },
    "subdivision-surfaces": {
      "title": "Subdivision Surfaces",
      "cluster": "geometry",
      "summary": "Defines a smooth limit surface as the result of infinitely refining a control mesh, giving a single representation that is both editable at low resolution and smooth at render time.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Subdivision_surface",
      "edges": [
        {
          "rel": "part-of",
          "to": "surface-representation"
        }
      ],
      "id": "subdivision-surfaces"
    },
    "supersampling": {
      "title": "Supersampling",
      "cluster": "antialiasing",
      "aka": [
        "SSAA"
      ],
      "summary": "Render at higher resolution and downsample. Correct by construction, and linearly expensive in both shading and bandwidth, which is why everything below exists.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Supersampling",
      "edges": [
        {
          "rel": "corrects",
          "to": "rasterization",
          "why": "point-sampled coverage aliases on every edge"
        }
      ],
      "id": "supersampling"
    },
    "supervised-fine-tuning": {
      "title": "Supervised Fine-Tuning",
      "cluster": "language",
      "year": 2021,
      "aka": [
        "SFT",
        "Instruction tuning"
      ],
      "summary": "Continues next-token training on curated demonstrations of the behaviour wanted. Cheap, stable, and bounded by how well the desired behaviour can be written down.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Fine-tuning_(deep_learning)",
      "refs": [
        {
          "title": "Finetuned Language Models Are Zero-Shot Learners",
          "authors": "Wei et al.",
          "year": 2021,
          "url": "https://arxiv.org/abs/2109.01652"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "autoregressive-language-model",
          "why": "trains on demonstrations of the behaviour wanted"
        },
        {
          "rel": "specializes",
          "to": "behavior-cloning",
          "why": "the demonstrations are text and the actions tokens, but the loss is the same"
        }
      ],
      "id": "supervised-fine-tuning"
    },
    "surface-area-heuristic": {
      "title": "Surface Area Heuristic",
      "cluster": "geometry",
      "year": 1990,
      "aka": [
        "SAH"
      ],
      "summary": "Chooses each split by estimating traversal cost from the probability a random ray hits each child, which is proportional to its surface area. Still the quality baseline for acceleration structure builds.\n",
      "refs": [
        {
          "title": "Heuristics for Ray Tracing Using Space Subdivision",
          "authors": "MacDonald, Booth",
          "year": 1990,
          "url": "https://doi.org/10.1007/bf01911006"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "bvh",
          "why": "median splits ignore the actual cost of traversal"
        }
      ],
      "id": "surface-area-heuristic"
    },
    "surface-representation": {
      "title": "Surface Representation",
      "cluster": "geometry",
      "tags": [
        "root"
      ],
      "summary": "How a surface is stored before anything is rendered: explicitly as primitives, or implicitly as a function whose zero set is the surface.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/3D_modeling",
      "id": "surface-representation"
    },
    "svgf": {
      "title": "Spatiotemporal Variance-Guided Filtering",
      "cluster": "denoising",
      "year": 2017,
      "aka": [
        "SVGF"
      ],
      "summary": "Estimates per-pixel variance from the temporal history and drives the spatial filter width from it, so converged regions stay sharp while noisy ones are blurred hard.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Noise_reduction",
      "refs": [
        {
          "title": "Spatiotemporal Variance-Guided Filtering: Real-Time Reconstruction for Path-Traced Global Illumination",
          "authors": "Schied et al.",
          "year": 2017
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "a-trous-filter",
          "why": "drives filter width from measured variance"
        },
        {
          "rel": "requires",
          "to": "temporal-reprojection",
          "why": "the variance estimate comes from accumulated history"
        }
      ],
      "id": "svgf"
    },
    "taa": {
      "title": "Temporal Anti-Aliasing",
      "cluster": "antialiasing",
      "aka": [
        "TAA"
      ],
      "summary": "Jitters the projection each frame and blends the reprojected history, giving supersampled quality at one sample per pixel. Now the default, and the source of most complaints about modern image softness.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Temporal_anti-aliasing",
      "edges": [
        {
          "rel": "specializes",
          "to": "antialiasing-over-time",
          "why": "jitters the subpixel offset every frame"
        },
        {
          "rel": "requires",
          "to": "temporal-reprojection",
          "why": "the history must be aligned to this frame"
        }
      ],
      "id": "taa"
    },
    "target-network": {
      "title": "Target Network",
      "cluster": "reinforcement",
      "year": 2015,
      "summary": "Compute the bootstrap target from a frozen copy of the Q-network, refreshed every few thousand steps. Two lines of code, and the difference between DQN converging and DQN diverging.\n",
      "refs": [
        {
          "title": "Human-level control through deep reinforcement learning",
          "authors": "Mnih et al.",
          "year": 2015,
          "url": "https://www.nature.com/articles/nature14236"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "deep-q-network",
          "why": "a target computed from the weights being updated moves with every step"
        }
      ],
      "id": "target-network"
    },
    "td3": {
      "title": "Twin Delayed DDPG",
      "cluster": "reinforcement",
      "year": 2018,
      "aka": [
        "TD3"
      ],
      "summary": "Take the smaller of two critics, update the actor every other step, and smooth the target over nearby actions. Three small changes aimed at one failure: the actor's gradient ascent finds whatever the critic overrates and goes there.\n",
      "refs": [
        {
          "title": "Addressing Function Approximation Error in Actor-Critic Methods",
          "authors": "Fujimoto, van Hoof, Meger",
          "year": 2018,
          "url": "https://arxiv.org/abs/1802.09477"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "ddpg",
          "why": "the actor is trained to maximise exactly the critic's own errors"
        },
        {
          "rel": "extends",
          "to": "double-dqn",
          "why": "carries the two-estimator fix into continuous actions, as a min over the pair"
        }
      ],
      "id": "td3"
    },
    "temporal-difference-learning": {
      "title": "Temporal Difference Learning",
      "cluster": "reinforcement",
      "summary": "Updates a value estimate toward a later estimate rather than waiting for the final return. Learns from incomplete episodes, which is what makes online learning possible at all.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Temporal_difference_learning",
      "edges": [
        {
          "rel": "specializes",
          "to": "markov-decision-process",
          "why": "estimates the value function the MDP defines"
        },
        {
          "rel": "approximates",
          "to": "bellman-equation",
          "why": "samples one transition where the equation averages over every next state"
        }
      ],
      "id": "temporal-difference-learning"
    },
    "temporal-reprojection": {
      "title": "Temporal Reprojection",
      "cluster": "antialiasing",
      "summary": "Uses per-pixel motion vectors to find where this pixel's surface was in the previous frame, making last frame's result available as an input to this one.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Temporal_anti-aliasing",
      "edges": [
        {
          "rel": "part-of",
          "to": "antialiasing-over-time"
        }
      ],
      "id": "temporal-reprojection"
    },
    "temporal-upscaling": {
      "title": "Temporal Upscaling",
      "cluster": "antialiasing",
      "aka": [
        "DLSS",
        "FSR",
        "TSR"
      ],
      "summary": "Renders below display resolution and reconstructs the full frame from jittered history, treating anti-aliasing and upscaling as the same reconstruction problem.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Deep_Learning_Super_Sampling",
      "edges": [
        {
          "rel": "extends",
          "to": "taa",
          "why": "the same history also fills in resolution, not just edges"
        }
      ],
      "id": "temporal-upscaling"
    },
    "tensor-parallelism": {
      "title": "Tensor Parallelism",
      "cluster": "distributed",
      "year": 2019,
      "summary": "Splits individual weight matrices across devices so one layer is computed jointly. Communication lands inside every layer, so it wants the fastest interconnect available.\n",
      "refs": [
        {
          "title": "Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism",
          "authors": "Shoeybi et al.",
          "year": 2019,
          "url": "https://arxiv.org/abs/1909.08053"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "data-parallelism",
          "why": "one replica of the model must still fit on one device"
        }
      ],
      "id": "tensor-parallelism"
    },
    "texture-mapping": {
      "title": "Texture Mapping",
      "cluster": "geometry",
      "year": 1974,
      "summary": "Assigns surface parameters from an image indexed by per-vertex coordinates, decoupling material detail from geometric density.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Texture_mapping",
      "refs": [
        {
          "title": "Computer Display of Curved Surfaces",
          "authors": "Catmull",
          "year": 1974,
          "url": "https://doi.org/10.1145/280811.280920"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "polygon-mesh",
          "why": "needs a surface parameterization to index into"
        }
      ],
      "id": "texture-mapping"
    },
    "thin-film-iridescence": {
      "title": "Thin-Film Iridescence",
      "cluster": "materials",
      "year": 2017,
      "summary": "Models wave interference in a coating a few wavelengths thick, which makes reflectance shift with angle and produces the colours of soap films, oil slicks and anodized metal.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Thin-film_interference",
      "refs": [
        {
          "title": "A Practical Extension to Microfacet Theory for the Modeling of Varying Iridescence",
          "authors": "Belcour, Barla",
          "year": 2017,
          "url": "https://doi.org/10.1145/3072959.3073620"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "fresnel",
          "why": "interference in a thin coat makes reflectance shift"
        }
      ],
      "id": "thin-film-iridescence"
    },
    "thin-lens-model": {
      "title": "Thin Lens Model",
      "cluster": "camera",
      "summary": "Gives the camera an aperture of finite size, so only one distance is in focus and everything else spreads. The cheapest model that produces depth of field at all.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Depth_of_field",
      "edges": [
        {
          "rel": "corrects",
          "to": "pinhole-camera",
          "why": "a pinhole holds everything in focus, unlike any real lens"
        }
      ],
      "id": "thin-lens-model"
    },
    "tone-mapping": {
      "title": "Tone Mapping",
      "cluster": "color",
      "summary": "Maps unbounded scene radiance into the range a display can emit. Every renderer needs one, and the choice of curve is as much a look decision as a technical one.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Tone_mapping",
      "edges": [
        {
          "rel": "requires",
          "to": "linear-workflow",
          "why": "compressing radiance only makes sense in linear light"
        }
      ],
      "id": "tone-mapping"
    },
    "torrance-sparrow": {
      "title": "Torrance-Sparrow",
      "cluster": "materials",
      "year": 1967,
      "summary": "The optics paper that introduced the microfacet formulation, developed to explain off-specular peaks in measured reflectance that mirror models could not account for.\n",
      "refs": [
        {
          "title": "Theory for Off-Specular Reflection From Roughened Surfaces",
          "authors": "Torrance, Sparrow",
          "year": 1967,
          "url": "https://doi.org/10.1364/josa.57.001105"
        }
      ],
      "edges": [
        {
          "rel": "part-of",
          "to": "microfacet-model"
        }
      ],
      "id": "torrance-sparrow"
    },
    "transformer": {
      "title": "Transformer",
      "cluster": "sequence-models",
      "year": 2017,
      "summary": "Drops recurrence entirely and stacks self-attention with feed-forward layers. Because no step waits on the previous one, the whole sequence trains in parallel, which is what let model size scale.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Transformer_(deep_learning)",
      "refs": [
        {
          "title": "Attention Is All You Need",
          "authors": "Vaswani et al.",
          "year": 2017,
          "url": "https://arxiv.org/abs/1706.03762"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "lstm",
          "why": "recurrence forbids parallelism across sequence positions"
        },
        {
          "rel": "requires",
          "to": "attention",
          "why": "it is the only operation left that mixes positions"
        },
        {
          "rel": "requires",
          "to": "layer-normalization",
          "why": "the residual stack does not converge without it"
        }
      ],
      "id": "transformer"
    },
    "trpo": {
      "title": "Trust Region Policy Optimization",
      "cluster": "reinforcement",
      "year": 2015,
      "aka": [
        "TRPO"
      ],
      "summary": "Constrains each update so the KL divergence between the old and new policy stays inside a trust region, giving a monotonic improvement guarantee at the cost of a second-order solve every step.\n",
      "refs": [
        {
          "title": "Trust Region Policy Optimization",
          "authors": "Schulman, Levine, Abbeel, Jordan, Moritz",
          "year": 2015,
          "url": "https://arxiv.org/abs/1502.05477"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "policy-gradient",
          "why": "a parameter-space step moves the policy unpredictably"
        }
      ],
      "id": "trpo"
    },
    "upper-confidence-bound": {
      "title": "Upper Confidence Bound",
      "cluster": "reinforcement",
      "year": 2002,
      "aka": [
        "UCB",
        "UCB1"
      ],
      "summary": "Pick the arm with the highest optimistic estimate: its mean plus a term that grows the less it has been tried. Exploration follows from uncertainty rather than from a coin flip, and the regret grows with the logarithm of time where a fixed exploration rate makes it linear.\n",
      "refs": [
        {
          "title": "Finite-time Analysis of the Multiarmed Bandit Problem",
          "authors": "Auer, Cesa-Bianchi, Fischer",
          "year": 2002,
          "url": "https://link.springer.com/article/10.1023/A:1013689704352"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "epsilon-greedy",
          "why": "uniform exploration keeps re-trying arms already measured as bad"
        },
        {
          "rel": "part-of",
          "to": "multi-armed-bandit"
        }
      ],
      "id": "upper-confidence-bound"
    },
    "v-jepa": {
      "title": "V-JEPA",
      "cluster": "representation",
      "year": 2024,
      "summary": "Extends the same idea to video, predicting the features of masked spacetime regions. Learns motion and object permanence from unlabelled footage alone.\n",
      "refs": [
        {
          "title": "Revisiting Feature Prediction for Learning Visual Representations from Video",
          "authors": "Bardes et al.",
          "year": 2024,
          "url": "https://arxiv.org/abs/2404.08471"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "jepa",
          "why": "predicts masked spacetime regions across video frames"
        }
      ],
      "id": "v-jepa"
    },
    "vanishing-gradient": {
      "title": "Vanishing Gradient",
      "cluster": "learning",
      "summary": "Repeated multiplication by factors below one drives the gradient toward zero as it travels back through layers or time steps, so early parameters stop moving.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Vanishing_gradient_problem",
      "edges": [
        {
          "rel": "part-of",
          "to": "backpropagation"
        }
      ],
      "id": "vanishing-gradient"
    },
    "variance-shadow-maps": {
      "title": "Variance Shadow Maps",
      "cluster": "shadows",
      "year": 2006,
      "aka": [
        "VSM"
      ],
      "summary": "Stores depth and squared depth so that Chebyshev's inequality bounds the occluded fraction. The map becomes linearly filterable, so it can be blurred and mipmapped like an ordinary texture.\n",
      "refs": [
        {
          "title": "Variance Shadow Maps",
          "authors": "Donnelly, Lauritzen",
          "year": 2006,
          "url": "https://doi.org/10.1145/1111411.1111440"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "percentage-closer-filtering",
          "why": "PCF cost grows with filter width; this prefilters"
        }
      ],
      "id": "variance-shadow-maps"
    },
    "variational-autoencoder": {
      "title": "Variational Autoencoder",
      "cluster": "generative",
      "year": 2013,
      "aka": [
        "VAE"
      ],
      "summary": "Learns an encoder to a latent distribution and a decoder back, trained on a lower bound of the likelihood. Gives a latent space you can interpolate in, at the cost of blurry samples.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Variational_autoencoder",
      "refs": [
        {
          "title": "Auto-Encoding Variational Bayes",
          "authors": "Kingma, Welling",
          "year": 2013,
          "url": "https://arxiv.org/abs/1312.6114"
        }
      ],
      "edges": [
        {
          "rel": "requires",
          "to": "monte-carlo-integration",
          "why": "the bound is estimated by sampling the latent"
        },
        {
          "rel": "specializes",
          "to": "autoencoder",
          "why": "adds a probabilistic latent and a likelihood bound"
        }
      ],
      "id": "variational-autoencoder"
    },
    "verifiable-rewards": {
      "title": "Reinforcement Learning from Verifiable Rewards",
      "cluster": "language",
      "year": 2025,
      "aka": [
        "RLVR"
      ],
      "summary": "Replaces the learned reward with a programmatic check \u2014 does the proof verify, do the tests pass, is the answer right. Works only where correctness is decidable, and there the signal cannot be gamed.\n",
      "refs": [
        {
          "title": "DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning",
          "authors": "DeepSeek-AI",
          "year": 2025,
          "url": "https://arxiv.org/abs/2501.12948"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "rlhf",
          "why": "a learned reward can be gamed; a checked answer cannot"
        },
        {
          "rel": "requires",
          "to": "grpo",
          "why": "one scalar per completion, with no critic to fit"
        }
      ],
      "id": "verifiable-rewards"
    },
    "vertex-connection-and-merging": {
      "title": "Vertex Connection and Merging",
      "cluster": "light-transport",
      "year": 2012,
      "aka": [
        "VCM",
        "UPS"
      ],
      "summary": "Treats photon merging as just another sampling technique alongside bidirectional connection, and MIS-weights the two together, so one integrator handles both diffuse interreflection and caustics.\n",
      "refs": [
        {
          "title": "Light Transport Simulation with Vertex Connection and Merging",
          "authors": "Georgiev, Krivanek, Davidovic, Slusallek",
          "year": 2012,
          "url": "https://doi.org/10.1145/2366145.2366211"
        },
        {
          "title": "Progressive Expectation-Maximization for Hierarchical Volumetric Photon Mapping",
          "authors": "Hachisuka, Pantaleoni, Jensen",
          "year": 2012,
          "url": "https://doi.org/10.1111/j.1467-8659.2011.01988.x"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "bidirectional-path-tracing",
          "why": "adds photon merging as an extra connection strategy"
        },
        {
          "rel": "requires",
          "to": "multiple-importance-sampling",
          "why": "connection and merging must be weighted against each other"
        }
      ],
      "id": "vertex-connection-and-merging"
    },
    "virtual-geometry": {
      "title": "Virtualized Geometry",
      "cluster": "geometry",
      "year": 2021,
      "aka": [
        "Nanite"
      ],
      "summary": "Builds a hierarchy of pre-simplified clusters and chooses the cut through it per frame, so level of detail changes per cluster and streams from disk rather than switching whole objects.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Level_of_detail_%28computer_graphics%29",
      "refs": [
        {
          "title": "Nanite: A Deep Dive",
          "authors": "Karis, Stubbe, Wihlidal",
          "year": 2021
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "level-of-detail",
          "why": "discrete per-object LOD pops and cannot stream"
        },
        {
          "rel": "requires",
          "to": "meshlets",
          "why": "the cut through the hierarchy is expressed as clusters"
        }
      ],
      "id": "virtual-geometry"
    },
    "visibility-buffer": {
      "title": "Visibility Buffer",
      "cluster": "real-time-shading",
      "year": 2013,
      "summary": "Stores only a triangle id per pixel and refetches attributes during shading, trading arithmetic for a dramatic reduction in the memory traffic a fat G-buffer costs.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Deferred_shading",
      "refs": [
        {
          "title": "The Visibility Buffer: A Cache-Friendly Approach to Deferred Shading",
          "authors": "Burns, Hunt",
          "year": 2013
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "deferred-shading",
          "why": "fat G-buffers are bandwidth-bound at high resolution"
        }
      ],
      "id": "visibility-buffer"
    },
    "vision-transformer": {
      "title": "Vision Transformer",
      "cluster": "representation",
      "year": 2020,
      "aka": [
        "ViT"
      ],
      "summary": "Cuts an image into fixed patches, embeds each as a token and runs a plain transformer. Discards the convolutional priors entirely, and beats them once the data is large enough to replace them.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Vision_transformer",
      "refs": [
        {
          "title": "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale",
          "authors": "Dosovitskiy et al.",
          "year": 2020,
          "url": "https://arxiv.org/abs/2010.11929"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "transformer",
          "why": "an image becomes a sequence of patch embeddings"
        }
      ],
      "id": "vision-transformer"
    },
    "vndf": {
      "title": "Visible Normal Distribution Sampling",
      "cluster": "materials",
      "year": 2018,
      "aka": [
        "VNDF"
      ],
      "summary": "Samples the distribution of microfacet normals actually visible from the view direction, rather than the full distribution. Every sample is usable, and variance at high roughness drops sharply.\n",
      "refs": [
        {
          "title": "Sampling the GGX Distribution of Visible Normals",
          "authors": "Heitz",
          "year": 2018,
          "url": "https://jcgt.org/published/0007/04/01/paper.pdf"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "ggx",
          "why": "can't hit back-facing normals"
        }
      ],
      "id": "vndf"
    },
    "volumetric-path-tracing": {
      "title": "Volumetric Path Tracing",
      "cluster": "volumetrics",
      "summary": "Extends path tracing with sampled scattering events inside media, choosing a distance along each ray and then a new direction from the phase function.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Volumetric_path_tracing",
      "edges": [
        {
          "rel": "extends",
          "to": "path-tracing",
          "why": "paths can scatter inside a volume, not only at surfaces"
        },
        {
          "rel": "specializes",
          "to": "radiative-transfer-equation",
          "why": "solves it by random walks through the medium"
        }
      ],
      "id": "volumetric-path-tracing"
    },
    "ward-anisotropic": {
      "title": "Ward Anisotropic Model",
      "cluster": "materials",
      "year": 1992,
      "summary": "An early reflectance model with separate roughness along two tangent directions, capturing brushed metal and other surfaces whose highlight stretches along the grain.\n",
      "refs": [
        {
          "title": "Measuring and Modeling Anisotropic Reflection",
          "authors": "Ward",
          "year": 1992,
          "url": "https://doi.org/10.1145/142920.134078"
        }
      ],
      "edges": [
        {
          "rel": "extends",
          "to": "specular-reflection",
          "why": "roughness differs along two tangent directions"
        }
      ],
      "id": "ward-anisotropic"
    },
    "watertight-ray-triangle": {
      "title": "Watertight Ray-Triangle Intersection",
      "cluster": "geometry",
      "year": 2013,
      "summary": "Reorders the arithmetic so that a ray crossing an edge shared by two triangles is guaranteed to hit exactly one of them, closing the pinhole leaks that rounding otherwise produces.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm",
      "refs": [
        {
          "title": "Watertight Ray/Triangle Intersection",
          "authors": "Woop, Benthin, Wald",
          "year": 2013
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "moller-trumbore",
          "why": "rounding lets rays leak through shared edges"
        }
      ],
      "id": "watertight-ray-triangle"
    },
    "weight-decay": {
      "title": "Weight Decay",
      "cluster": "learning",
      "summary": "Shrinks weights toward zero every step. The oldest regulariser, and the one whose interaction with adaptive optimisers turned out to be subtler than anyone assumed.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Ridge_regression",
      "edges": [
        {
          "rel": "alternative-to",
          "to": "dropout",
          "why": "constrains weight magnitude rather than co-adaptation"
        }
      ],
      "id": "weight-decay"
    },
    "weight-initialization": {
      "title": "Weight Initialization",
      "cluster": "learning",
      "year": 2010,
      "summary": "Chooses the starting variance so activations neither shrink nor blow up as they propagate. A deep network started wrong does not train slowly; it does not train.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Weight_initialization",
      "id": "weight-initialization"
    },
    "white-furnace-test": {
      "title": "White Furnace Test",
      "cluster": "foundations",
      "summary": "Render a material under uniform unit illumination with no absorption. A conserving, non-absorbing BSDF disappears against the background; anything visible is energy the model is losing or inventing.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Conservation_of_energy",
      "edges": [
        {
          "rel": "validates",
          "to": "energy-conservation",
          "why": "a lossless material must vanish into a uniform background"
        }
      ],
      "id": "white-furnace-test"
    },
    "whitted-ray-tracing": {
      "title": "Whitted Ray Tracing",
      "cluster": "light-transport",
      "year": 1980,
      "summary": "Recursive ray tracing with perfect mirror reflection, refraction and a single shadow ray per light. The first algorithm to get interreflection right, and restricted to ideal specular paths.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Ray_tracing_%28graphics%29",
      "refs": [
        {
          "title": "An Improved Illumination Model for Shaded Display",
          "authors": "Whitted",
          "year": 1980,
          "url": "https://doi.org/10.1145/1198555.1198743"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "rendering-equation",
          "why": "only mirror and refraction bounces, plus one shadow ray"
        }
      ],
      "id": "whitted-ray-tracing"
    },
    "word-embedding": {
      "title": "Word Embedding",
      "cluster": "language",
      "year": 2013,
      "aka": [
        "word2vec"
      ],
      "summary": "Maps words to dense vectors trained so that context predicts the word. Gave the field the observation that direction in the space carries meaning.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Word2vec",
      "refs": [
        {
          "title": "Efficient Estimation of Word Representations in Vector Space",
          "authors": "Mikolov, Chen, Corrado, Dean",
          "year": 2013,
          "url": "https://arxiv.org/abs/1301.3781"
        }
      ],
      "id": "word-embedding"
    },
    "world-model": {
      "title": "World Model",
      "cluster": "world-models",
      "year": 2018,
      "summary": "Compresses observations into a latent with an autoencoder and learns a recurrent model of how that latent evolves. A controller can then be trained entirely inside it.\n",
      "refs": [
        {
          "title": "World Models",
          "authors": "Ha, Schmidhuber",
          "year": 2018,
          "url": "https://arxiv.org/abs/1803.10122"
        }
      ],
      "edges": [
        {
          "rel": "specializes",
          "to": "model-based-rl",
          "why": "the learned model is a latent-space simulator"
        },
        {
          "rel": "requires",
          "to": "variational-autoencoder",
          "why": "the latent its dynamics run in comes from one"
        }
      ],
      "id": "world-model"
    },
    "z-buffer": {
      "title": "Z-Buffer",
      "cluster": "visibility",
      "year": 1974,
      "summary": "Keeps the nearest depth seen per pixel and rejects fragments behind it. Turns visibility from a global sorting problem into a local comparison, which is why it is in every GPU.\n",
      "wikipedia": "https://en.wikipedia.org/wiki/Z-buffering",
      "edges": [
        {
          "rel": "corrects",
          "to": "painters-algorithm",
          "why": "cyclically overlapping polygons have no correct draw order"
        }
      ],
      "id": "z-buffer"
    },
    "zero-sharding": {
      "title": "ZeRO Sharding",
      "cluster": "distributed",
      "year": 2019,
      "aka": [
        "ZeRO"
      ],
      "summary": "Partitions optimizer state, gradients and parameters across data- parallel ranks instead of replicating them, gathering each shard only while it is needed.\n",
      "refs": [
        {
          "title": "ZeRO: Memory Optimizations Toward Training Trillion Parameter Models",
          "authors": "Rajbhandari, Rasley, Ruwase, He",
          "year": 2019,
          "url": "https://arxiv.org/abs/1910.02054"
        }
      ],
      "edges": [
        {
          "rel": "corrects",
          "to": "data-parallelism",
          "why": "every replica redundantly stores the same optimizer state"
        },
        {
          "rel": "alternative-to",
          "to": "gradient-checkpointing",
          "why": "shards state across devices instead of recomputing it"
        }
      ],
      "id": "zero-sharding"
    }
  },
  "domains": [
    {
      "id": "shared",
      "title": "Shared Foundations",
      "blurb": "Mathematical ground that more than one field stands on. A concept belongs here once a second domain needs it, not before."
    },
    {
      "id": "graphics",
      "title": "Computer Graphics",
      "blurb": "Rendering: how light is transported, what surfaces do to it, and how any of that is made to fit in a frame budget."
    },
    {
      "id": "ai",
      "title": "AI and Machine Learning",
      "blurb": "Training and architecture: the lineage of optimisers, normalisation, sequence models and generative methods."
    }
  ],
  "clusters": [
    {
      "id": "foundations",
      "domain": "graphics",
      "title": "Foundations",
      "blurb": "The quantities everything else is defined in terms of."
    },
    {
      "id": "light-transport",
      "domain": "graphics",
      "title": "Light Transport",
      "blurb": "Algorithms that solve the rendering equation, and the estimators they are built from."
    },
    {
      "id": "materials",
      "domain": "graphics",
      "title": "Materials and BSDFs",
      "blurb": "Models for what a surface does to light that hits it."
    },
    {
      "id": "volumetrics",
      "domain": "graphics",
      "title": "Participating Media",
      "blurb": "Transport through a volume rather than across a surface."
    },
    {
      "id": "sampling",
      "domain": "shared",
      "title": "Sampling",
      "blurb": "Where to put the samples, and how the error is distributed when you cannot afford enough of them."
    },
    {
      "id": "real-time-shading",
      "domain": "graphics",
      "title": "Real-Time Shading",
      "blurb": "Getting a usable approximation of the above inside a frame budget."
    },
    {
      "id": "shadows",
      "domain": "graphics",
      "title": "Shadows",
      "blurb": "Visibility from the light, and the artifacts of every way of caching it."
    },
    {
      "id": "antialiasing",
      "domain": "graphics",
      "title": "Anti-Aliasing and Filtering",
      "blurb": "Reconstruction, in space and over time."
    },
    {
      "id": "denoising",
      "domain": "graphics",
      "title": "Denoising",
      "blurb": "Trading variance for bias so that low sample counts are shippable."
    },
    {
      "id": "geometry",
      "domain": "graphics",
      "title": "Geometry and Intersection",
      "blurb": "Representing surfaces and finding where a ray meets them."
    },
    {
      "id": "color",
      "domain": "graphics",
      "title": "Color and Tone",
      "blurb": "Turning radiance into pixels a display can show."
    },
    {
      "id": "neural",
      "domain": "graphics",
      "title": "Neural Representations",
      "blurb": "Learned scene representations, and their reconstruction lineage."
    },
    {
      "id": "learning",
      "domain": "ai",
      "title": "Training and Optimisation",
      "blurb": "How the weights actually get set, and what each step of that lineage fixed."
    },
    {
      "id": "sequence-models",
      "domain": "ai",
      "title": "Sequence Models",
      "blurb": "Carrying information across a sequence, and the successive removal of bottlenecks."
    },
    {
      "id": "generative",
      "domain": "ai",
      "title": "Generative Models",
      "blurb": "Learning to sample from a distribution rather than to label one."
    },
    {
      "id": "hardware",
      "domain": "shared",
      "title": "Execution Hardware",
      "blurb": "What the machine is actually good at, and which of its limits a technique is fighting."
    },
    {
      "id": "numerics",
      "domain": "shared",
      "title": "Numerics",
      "blurb": "What finite precision does to an otherwise correct algorithm."
    },
    {
      "id": "visibility",
      "domain": "graphics",
      "title": "Visibility",
      "blurb": "Deciding what can be seen before paying to shade it."
    },
    {
      "id": "camera",
      "domain": "graphics",
      "title": "Camera and Motion",
      "blurb": "The aperture and the shutter, and the effects that come from each being finite."
    },
    {
      "id": "efficiency",
      "domain": "ai",
      "title": "Efficiency and Deployment",
      "blurb": "Fitting training and inference into the memory and bandwidth actually available."
    },
    {
      "id": "language",
      "domain": "ai",
      "title": "Language Models",
      "blurb": "Pretraining, scaling and alignment of models over text."
    },
    {
      "id": "reinforcement",
      "domain": "ai",
      "title": "Reinforcement Learning",
      "blurb": "Learning from a reward signal rather than from labelled answers."
    },
    {
      "id": "distributed",
      "domain": "ai",
      "title": "Distributed Training",
      "blurb": "Splitting a model and its optimizer state across devices once neither fits on one."
    },
    {
      "id": "representation",
      "domain": "ai",
      "title": "Representation Learning",
      "blurb": "Learning what an image or a signal means without anyone labelling it."
    },
    {
      "id": "world-models",
      "domain": "ai",
      "title": "World Models",
      "blurb": "Learning the dynamics of an environment so a policy can be trained inside the model."
    }
  ],
  "relations": {
    "part-of": "is a subtopic of",
    "specializes": "is a specific case of",
    "approximates": "is a cheaper stand-in for",
    "corrects": "fixes a defect in",
    "extends": "adds capability to",
    "requires": "does not work without",
    "alternative-to": "is a competing approach to",
    "validates": "is a test for"
  }
}