ALI LIN
03Ali Lin Lab
2026

Skeletal Silk

A vision model can describe silk. This makes it drive one.

The Skeletal Silk preview surface, a large grey sphere lit from the upper left and centred on black, with an export shader and parameters button beneath it.

Problem

Ask a model to describe silk and you get a paragraph, which no renderer can use.

Solution

This turns a photograph into four numbers that drive one fixed shader.

Methods

The model returns four material parameters, one of them a colour triple, not prose.

Next Step

I have not isolated how much of each reading is vision and how much is priors.

03/05
← IndexAli Lin

SKELETAL SILK

a vision model reads a fabric photo into four numbers that drive a material shader: live, and exportable

material toolClaude Vision / GLSL / Three.js2026live

A vision model can describe silk. This makes it drive one.

loading live …
upload a material · Claude Vision reads four properties · they drive the shader in real time: try it
open live ↗

WHAT

Ask a model to describe silk and you get a paragraph, which no renderer can use.

WHY

Matching a real fabric today means hand-tuning sliders or settling for a preset. This turns a photograph into the four numbers a renderer needs.

HOW

One fixed GLSL shader; the model writes uniforms, never GLSL. Mapping an open-ended vision output onto a fixed parameter set is the tool's core.

Phase 1 · What the model returns

The model returns four material parameters, one a colour triple, not prose. A paragraph cannot drive a shader; four parameters can.

{ "rigidity": 0.48, "flow": 0.38,
  "specular": 0.12,
  "color": [0.8627450980392157,
            0.8431372549019608,
            0.8823529411764706] }

  rigidity  ->  uRigidity
  flow      ->  uFlow
  specular  ->  uSpecular
  color     ->  uColor

  cotton.jpg, values as returned
the model's reading, wired straight to the shader's uniforms. These are the endpoint's own key names: specular, not specularity, and color as three normalised channels · raw-responses.json
Phase 2 · The pipeline

Rigidity, flow, specular and a colour triple feed one shader as uniforms. Two photos do not make two shaders, only two materials.

Phase 3 · The control

The read is what changes: a forest photo and a fabric close-up return rigidity 0.20 and 0.75, flow 0.90 and 0.35, and the material responds accordingly.

INPUT      RIGIDITY   FLOW   SPECULAR   COLOR
flat         0.45     0.40     0.15     [0.5882352941176471, 0.5882352941176471, 0.5647058823529412]
cotton       0.48     0.38     0.12     [0.8627450980392157, 0.8431372549019608, 0.8823529411764706]
knit         0.48     0.38     0.12     [0.13725490196078433, 0.13725490196078433, 0.1568627450980392]
brocade      0.78     0.22     0.52     [0.5686274509803921, 0.45098039215686275, 0.37254901960784315]

flat is a neutral grey square, the control, not a material.
cotton and knit differ only in color.
tested on, values as returned · raw-responses.json

PROOF

  • NOTHING HERE IS RETYPED

    Four images, one call each, every response logged with its timestamp and HTTP status. The bodies are published exactly as the endpoint returned them, unedited and unreordered, so all twelve scalar axes on this page can be read back off the file instead of taken on trust.

    raw-responses.json, _note and records[0..3]

  • A BLANK CONTROL

    A neutral grey square with no texture and no hue returned 0.45 / 0.40 / 0.15. Cotton and knit landed within 0.03 of that on every axis. Brocade separated on all three. The control is what makes the brocade row believable instead of self-reported.

    raw-responses.json, records[0..3]: brocade.jpg, knit.jpg, cotton.jpg, flat.png

    rigidity / flow / specular, top to bottom0.00.51.0flatCONTROL0.450.400.15cotton0.480.380.12knit0.480.380.12brocade0.780.220.52
    measured against the live endpoint, values as returned. The three rules are the control's own numbers: cotton and knit sit on them, brocade does not · raw-responses.json
  • WHAT THE SEPARATION ACTUALLY MEANS

    Cotton and knit returned identical physics, 0.48 / 0.38 / 0.12 for both, and differ only in colour. So this resolves coarse structure, not material identity. That is a smaller claim than the one I started with, and it is the one the measurements support.

    raw-responses.json, cotton.jpg and knit.jpg

A vision model's loose reading, pinned to four numbers you can drive and carry away.

the case is the tool → try it

Ali Lin