A polyurethane that's also a thermoplastic — meltable, moldable, and elastic. The flex case on a phone, the sole of a sneaker, the elastic band on a wearable, the flexible 3D-printing filament that bends with the part rather than cracking. Tunable across a wide range of hardness (Shore 60A to 75D) by tweaking the ratio of soft and hard segments in the polymer.
Block copolymer of alternating soft segments (polyether or polyester polyol) and hard segments (urethane diisocyanate-derived). Density ~1.2 g/cm³. Hardness Shore 60A to 75D depending on hard-segment ratio. Tensile strength 25–60 MPa, elongation 400–600%. Excellent abrasion resistance — the highest of any common elastomer. Solvent and oil resistant in polyester-grade variants; polyether grades hydrolytically stable.
Principled BSDF defaults derived from the sphere matte finish. Reasonable seed for Blender, Substance, Keyshot, Rhino — tune per material. Or grab the whole library at once: ForMaterials library →
# finish: matte albedo #3a4858 metallic 0.00 roughness 0.75 ior 1.45 transmission 0.00 clearcoat 0.00 sheen 0.00 anisotropic 0.00
{
"albedo": "#3a4858",
"metallic": 0.0,
"roughness": 0.75,
"ior": 1.45,
"transmission": 0.0,
"clearcoat": 0.0,
"sheen": 0.0,
"anisotropic": 0.0
}
# Blender 4.x — Principled BSDF
# Thermoplastic Polyurethane (TPU) · finish: matte
import bpy
mat = bpy.data.materials.new(name="mat_polyurethane_tpu")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
bsdf.inputs["Base Color"].default_value = (0.0423, 0.0648, 0.0976, 1.0)
bsdf.inputs["Metallic"].default_value = 0.000
bsdf.inputs["Roughness"].default_value = 0.750
bsdf.inputs["IOR"].default_value = 1.450
bsdf.inputs["Transmission Weight"].default_value = 0.000
bsdf.inputs["Coat Weight"].default_value = 0.000
bsdf.inputs["Sheen Weight"].default_value = 0.000
bsdf.inputs["Anisotropic"].default_value = 0.000
# KeyShot 11+ — lux Python API, Generic material
# Thermoplastic Polyurethane (TPU) · finish: matte
# Run from Window → Scripting Console
import lux
mat = lux.createMaterial(name="mat_polyurethane_tpu", materialType="Generic")
mat.setProperty("diffuse", (58, 72, 88)) # 8-bit sRGB
mat.setProperty("metallic", 0.000)
mat.setProperty("roughness", 0.750)
mat.setProperty("indexOfRefraction", 1.450)
mat.setProperty("transparency", 0.000)
mat.setProperty("coatingWeight", 0.000)
{
"_format": "Substance Designer / Painter \u2014 pbrMetalRough constants",
"_about": "Thermoplastic Polyurethane (TPU) \u00b7 finish: matte",
"baseColor": {
"r": 0.0423,
"g": 0.0648,
"b": 0.0976
},
"metallic": 0.0,
"roughness": 0.75,
"ior": 1.45,
"opacity": 1.0,
"anisotropyLevel": 0.0,
"_notes": "Channels listed are the standard Substance pbrMetalRough output. Drop into a Uniform Color node per channel, or as the constant input on a layered stack."
}
{
"asset": {
"version": "2.0",
"generator": "ForMatter"
},
"materials": [
{
"name": "mat_polyurethane_tpu",
"pbrMetallicRoughness": {
"baseColorFactor": [
0.0423,
0.0648,
0.0976,
1.0
],
"metallicFactor": 0.0,
"roughnessFactor": 0.75
},
"extensions": {
"KHR_materials_ior": {
"ior": 1.45
}
}
}
]
}
# USD Preview Surface — UsdShade.MaterialLook prim attributes
# Thermoplastic Polyurethane (TPU) · finish: matte
def Material "mat_polyurethane_tpu" {
token outputs:surface.connect = </mat_polyurethane_tpu/PreviewSurface.outputs:surface>
def Shader "PreviewSurface" {
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.0423, 0.0648, 0.0976)
float inputs:metallic = 0.000
float inputs:roughness = 0.750
float inputs:ior = 1.450
float inputs:opacity = 1.000
float inputs:clearcoat = 0.000
token outputs:surface
}
}
BASF / Lubrizol TPU technical literature; SABIC TPU datasheets.
House vocabulary — terms ForMatter uses with intent.
Materials and processes for people who design and make things.
A local-first library of materials, processes, applications, and finishes — equal weight, citable everywhere, so a student can move from "what is this" toward "what's actually buildable here, now, by me." Part of the renato.design ecosystem — sibling of Plenum, Specimen, Ingenue, gesture, graf, and the Renato Rhino plug-ins. Form and matter, inseparable.
Half of teaching materials is teaching how the material is made into the thing. The standard subscription library was always light on that half. The wedge here isn't better samples or a prettier interface — it's treating Process as a peer entity, not a footnote.
Conway, Lefteri, Forty, Sparke, ASM, GIA. Every voice: Voices.
Local to this browser. No telemetry.