SKELETAL SILK
a vision model reads a fabric photo into four numbers that drive a material shader: live, and exportable
A vision model can describe silk. This makes it drive one.
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 returnedPhase 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.
PROOF
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.
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.
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 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.
A vision model's loose reading, pinned to four numbers you can drive and carry away.
