Шейдеры

· 8019 words · 38 minute read

Recommended Parameter Values 🔗

1a. Glossy / Smooth Leather 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.24 0.24
ksDiffuse 0.24 0.24
ksSpecular 0.20 0.32
ksSpecularEXP 35 56
fresnelC 0.03 0.03
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.078 0.078
sunSpecular 0.08
sunSpecularEXP 80

Why: Glossy leather (e.g. smooth-finished steering wheels, luxury seat bolsters, shoe-polish-finish leather) has a visible sheen — the surface fibers are compressed and coated, creating a smoother microstructure than raw leather. This gives it a tighter specular highlight and more visible fresnel reflections at grazing angles. At reflBlur ≈ 3.8, the cubemap is blurred to near-uniform sky color. The shader’s energy conservation (sqrt(fresnel) diffuse dimming at line 673) amplifies the perceived tint disproportionately — at fresnel = 0.078, diffuse is dimmed by 28% while a sky-blue tint is added on top. The effective cap of 0.006 keeps the reflection contribution imperceptible in shade. Slightly below-neutral diffuse (0.24) because the glossy finish absorbs slightly less, but the specular/reflection contribution compensates.

Note on dyed leather: Dyeing (red, tan, blue, etc.) changes only the diffuse texture color, not the specular/fresnel behavior. Use these same parameters regardless of dye color.

1b. Matte Leather 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.25 0.25
ksDiffuse 0.25 0.25
ksSpecular 0.10 0.16
ksSpecularEXP 15 24
fresnelC 0.02 0.02
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.04 0.04
sunSpecular 0.03
sunSpecularEXP 30

Why: Matte leather (e.g. raw/natural-finish seats, aged leather, nubuck) has a rough fibrous microstructure that scatters light broadly. Almost no visible specular reflection head-on — just a faint, very wide sheen. The low ksSpecularEXP produces a broad, soft highlight and blurry cubemap reflections (reflBlur ≈ 5.1). At this blur level the cubemap degrades to averaged sky color; combined with the energy conservation term’s sqrt(fresnel) diffuse dimming, even small effective caps produce visible tinting in shade. The effective cap of 0.0016 keeps matte leather looking flat and diffuse with no environmental coloration.

1c. Coated Textured Surface (vinyl, faux leather, varnished/painted wood) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.23 0.23
ksDiffuse 0.23 0.23
ksSpecular 0.18 0.29
ksSpecularEXP 50 80
fresnelC 0.04 0.04
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.10 0.10
sunSpecular 0.14
sunSpecularEXP 120

Why: This covers any material where a smooth dielectric coating sits over a visible texture: vinyl/PU faux leather (dashboard covers, armrests, door cards), varnished or lacquered wood (steering wheel rims, furniture panels, painted fence boards), and similar coated surfaces. The coating (IOR ~1.5) dominates the specular and fresnel behavior, while the underlying texture is visible through it in the diffuse. At reflBlur ≈ 2.9, cubemap reflections are transitioning from recognizable to tint-like. The energy conservation term’s sqrt(fresnel) diffuse dimming amplifies the sky-color tint in shade — the effective cap of 0.01 keeps the grazing-angle contribution subtle without introducing environmental coloration. For smooth/ungrained vinyl (e.g. gloss dashboard trim) or high-gloss lacquer, use Glossy Plastic values instead.

2. Glossy Plastic 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.22 0.22
ksDiffuse 0.22 0.22
ksSpecular 0.22 0.35
ksSpecularEXP 90 144
fresnelC 0.08 0.08
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.40 0.40
sunSpecular 0.25
sunSpecularEXP 200

Why: Glossy plastic (ABS, polycarbonate) has IOR ≈ 1.46–1.58, giving a physical F0 ≈ 0.03–0.05. The effective fresnelC of 0.0064 is low but non-zero — you see a faint reflection head-on, ramping up to the effective cap of 0.16 at grazing angles. The high effective specular exponent (144) produces a tight, crisp sun highlight and relatively sharp cubemap reflections (reflBlur ≈ 1.1). At this blur level the cubemap is recognizable but already soft enough that the energy conservation dimming (sqrt(0.16) = 0.40 → 40% diffuse reduction at grazing) visibly tints the surface in shade — especially car interiors where the cubemap picks up blue sky through the windshield. The previous effective cap of 0.49 caused 70% dimming, which was far too aggressive. The diffuse values at neutral (0.22) give a clean sRGB→linear conversion of the texture color without over-brightening.

2b. Satin Plastic 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.23 0.23
ksDiffuse 0.23 0.23
ksSpecular 0.15 0.24
ksSpecularEXP 50 80
fresnelC 0.05 0.05
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.18 0.18
sunSpecular 0.12
sunSpecularEXP 120

Why: Satin plastic is the most common car interior finish — centre consoles, door panel mid-sections, column trim, glovebox lids, A/B/C pillar trim. The surface has a soft sheen: you can see a broad sun reflection and vague environmental highlights, but nothing sharp enough to read text in. At reflBlur ≈ 2.7, the cubemap is blurry and transitional — environmental shapes are just barely discernible. The effective cap of 0.032 keeps the energy conservation dimming to sqrt(0.032) = 0.18 → 18% at grazing, which prevents the shade-tinting problem while still giving the surface a subtle edge sheen that distinguishes it from fully matte plastic. Slightly above-neutral diffuse (0.23) adds warmth to compensate for the moderate specular.

3. Rough Plastic 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.25 0.25
ksDiffuse 0.25 0.25
ksSpecular 0.10 0.16
ksSpecularEXP 25 40
fresnelC 0.03 0.03
fresnelEXP 1.8 1.8
fresnelMaxLevel 0.048 0.048
sunSpecular 0.06
sunSpecularEXP 60

Why: Same base material as glossy plastic (same IOR), but the rough microstructure scatters specular and reflected light across a much wider cone. The low effective specular exponent (40) gives a broad, soft highlight, and the low ksSpecularEXP of 25 pushes reflBlur to ~5.1, making cubemap reflections very blurry — essentially averaging to sky color. The energy conservation term’s sqrt(fresnel) diffuse dimming amplifies this sky-color tint in shade; the effective cap of 0.0023 keeps it invisible. Slightly above-neutral diffuse (0.25) adds a touch of brightness to compensate for the reduced specular contribution. Sun specular is soft and dim (0.06 at exp 60) — roughness scatters the sun highlight into a faint, broad glow rather than a defined spot.

3c. Smooth Painted Surface (bumpers, signs, body panels, smooth painted metal/plastic) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.22 0.22
ksDiffuse 0.22 0.22
ksSpecular 0.20 0.32
ksSpecularEXP 75 120
fresnelC 0.07 0.07
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.38 0.38
sunSpecular 0.22
sunSpecularEXP 180

Why: This covers any smooth substrate with a paint coat: painted bumpers, mirror housings, road signs, guardrails with fresh paint, painted steel panels, exterior body panels on plastic-bodied parts. The paint is a smooth dielectric layer (IOR ~1.5) that dominates the optical behavior — the substrate material (metal vs plastic) is irrelevant underneath. Tight specular with visible grazing-angle reflections. At reflBlur ≈ 1.7, the cubemap is soft but recognizable — yet the energy conservation dimming (sqrt(0.144) = 0.38 → 38% diffuse reduction at grazing) is enough to cause visible shade tinting with the old value of 0.63 (eff. 0.40, 63% dimming). The reduced cap keeps reflections present without overwhelming the surface color. For high-reflectivity retroreflective signs, push fresnelMaxLevel to 0.60+. For paint on a rough/textured substrate, use Rough Painted Surface (17) instead.

Note on metallic car paint (CSP smCarPaint): Although smCarPaint is based on ksPerPixelMultiMap, it re-applies the ×1.6 gamma boost internally (via its own getSpecValue/getSpecValueSun). Use the ksPerPixelReflection column values for ksSpecular and ksSpecularEXP — do not pre-multiply by 1.6. Everything that makes the paint look “metallic” — colored specular, flake sparkle, high fresnel, ambient specular, clear coat — is added by the CSP override template (Material_CarPaint_Metallic), not the base cbuffer. The clear coat is the optically dominant layer, and it’s a smooth dielectric — physically identical to any other smooth painted surface. CSP also overrides fresnelC and fresnelMaxLevel via the template, so those ksEditor values only matter as a non-CSP fallback.

4. Smooth Metal 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.15 0.15
ksDiffuse 0.10 0.10
ksSpecular 0.70 1.00
ksSpecularEXP 150 240
fresnelC 0.50 0.50
fresnelEXP 1.4 1.4
fresnelMaxLevel 0.95 0.95
sunSpecular 0.80
sunSpecularEXP 400

Why: Metals are conductors — photons are absorbed and re-emitted almost immediately rather than scattering diffusely. This is why ksDiffuse is well below neutral at 0.10: the diffuse contribution should be minimal, just enough to pick up some color from the texture (oxidation, anodization, surface treatment). The effective fresnelC of 0.25 is high — metals have F0 ranging from ~0.5 (iron) to ~0.95 (silver). The 0.25 effective value is a reasonable middle ground (corresponding to something like aluminum or steel). The effective fresnelMaxLevel of 0.90 means near-total reflection at grazing angles. The very high effective specular exponent (240) gives razor-sharp highlights and near-mirror cubemap reflections (reflBlur ≈ 0.6). Use extColoredReflection > 0 to tint reflections for gold, copper, etc. The sun specular lobe (0.80 at exp 400) gives an intense, razor-sharp pinpoint sun reflection — polished metal produces a near-point-source sun highlight.

5. Rough Metal 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.18 0.18
ksDiffuse 0.12 0.12
ksSpecular 0.40 0.64
ksSpecularEXP 35 56
fresnelC 0.45 0.45
fresnelEXP 1.4 1.4
fresnelMaxLevel 0.16 0.16
sunSpecular 0.35
sunSpecularEXP 100

Why: Same base material as smooth metal (same high F0), but the rough microstructure spreads energy. The effective fresnelC (0.20) is still high — it’s still metal — but fresnelMaxLevel is much lower than smooth metal because at reflBlur ≈ 4.6, the cubemap is heavily blurred to near-uniform sky color. The energy conservation term’s sqrt(fresnel) diffuse dimming amplifies sky-color tinting in shade — the effective cap of 0.026 keeps the blurred cubemap contribution subtle while still giving rough metal a hint of grazing-angle sheen that distinguishes it from painted or plastic surfaces. The specular highlight is broad and soft (effective exp 56). Diffuse is slightly higher than smooth metal (0.12 vs 0.10) because rough metal surfaces often have oxide layers, dirt, or patina. Think brushed steel, cast iron, or weathered aluminum. The sun specular (0.35 at exp 100) is softer and dimmer than smooth metal — roughness broadens the sun highlight significantly, but it’s still noticeably metallic in intensity.

6a. Grass 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.28 0.28
ksDiffuse 0.28 0.28
ksSpecular 0.05 0.08
ksSpecularEXP 8 13
fresnelC 0.01 0.01
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.02 0.02
sunSpecular 0.02
sunSpecularEXP 15

Why: Grass is a rough, diffuse organic surface. Individual blades scatter light in all directions. There’s almost no specular response — just a faint waxy sheen at extreme grazing angles (plant cuticle wax has IOR ~1.4, but the chaotic blade geometry destroys any coherent specular). The ksSpecularEXP of 8 is very low, giving maximally blurred reflections (reflBlur ≈ 5.7) — effectively killing any visible cubemap contribution. The effective cap of 0.0004 makes reflections invisible. Diffuse is slightly above neutral to give the green texture some vibrancy under sunlight. When wet (via rain FX), the shader’s built-in RAINFX_WET and RAINFX_SHINY macros will increase specular and reflection automatically. Sun specular is negligible (0.02 at exp 15) — grass doesn’t produce a recognizable sun highlight.

6b. Grass Multilayer 🔗

Parameter Value
ksAmbient 0.28
ksDiffuse 0.28
ksSpecular 0 (unused)
ksSpecularEXP 5
fresnelC 0.01
fresnelEXP 2.3
fresnelMaxLevel 0.12
tarmacSpecularMultiplier 0.4
magicMult 2.2

Effective values after gamma transforms: Blinn-Phong exp 8, fresnel base pow(0.01, 1.75) = 0.0003, fresnel exp 5.06, fresnel max pow(0.12, 2) = 0.014.

Why: Grass has essentially zero coherent specular. The tarmacSpecularMultiplier at 0.4 combined with the effective fresnel max of 0.014 means the specular contribution is negligible — exactly right for a chaotic organic surface. The very low ksSpecularEXP (5) makes the residual highlight maximally broad and diffuse-like. Higher diffuse values (0.28) and magicMult (2.2) keep the green foliage textures vibrant after the gamma pipeline. The MODE_GRASSFX path (lines 101-105) will override specular to 0.3 with exp 40 when rain is active, so the dry values can be very low.

7a. Gravel 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.26 0.26
ksDiffuse 0.26 0.26
ksSpecular 0.08 0.13
ksSpecularEXP 10 16
fresnelC 0.01 0.01
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.03 0.03
sunSpecular 0.03
sunSpecularEXP 20

Why: Gravel is a collection of rough, randomly-oriented mineral fragments. Each stone has IOR ~1.5 (quartz, feldspar), but the macro-surface chaos means no coherent specular or reflection. It’s essentially fully diffuse from a distance. Slightly higher specular than grass (0.08 vs 0.05) because mineral surfaces are harder and shinier than waxy plant tissue, but still very subdued. The very low ksSpecularEXP maximizes blur. Effective fresnelMaxLevel of 0.03 makes reflections invisible under dry conditions. The real visual interest in gravel comes entirely from the diffuse texture. Sun specular is barely present (0.03 at exp 20) — gravel doesn’t produce a recognizable sun highlight.

7b. Gravel Multilayer 🔗

Parameter Value
ksAmbient 0.26
ksDiffuse 0.26
ksSpecular 0 (unused)
ksSpecularEXP 10
fresnelC 0.01
fresnelEXP 2.3
fresnelMaxLevel 0.16
tarmacSpecularMultiplier 0.5
magicMult 2.0

Effective values after gamma transforms: Blinn-Phong exp 16, fresnel base pow(0.01, 1.75) = 0.0003, fresnel exp 5.06, fresnel max pow(0.16, 2) = 0.026.

Why: Gravel is rougher than sand but made of similar mineral material. The larger stone fragments have more chaotic orientations than fine sand grains, so the aggregate specular is even less coherent. tarmacSpecularMultiplier at 0.5 (same as concrete) keeps it subdued. Slightly higher ksSpecularEXP (10) than grass (5) because mineral surfaces are harder and produce slightly more defined micro-highlights than fibrous organic material. Otherwise very similar to concrete — it’s fundamentally a rough, diffuse mineral surface.

8a. Sand 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.27 0.27
ksDiffuse 0.27 0.27
ksSpecular 0.12 0.19
ksSpecularEXP 10 16
fresnelC 0.02 0.02
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.04 0.04
sunSpecular 0.05
sunSpecularEXP 20

Why: Sand is similar to gravel but with finer grains. Individual quartz grains are actually quite reflective (IOR 1.54), and sand can produce a faint aggregate sparkle in direct sunlight — hence slightly higher ksSpecular (0.12) than gravel. However, the random orientation still kills coherent reflections. The effective values are nearly identical to gravel. The slightly higher specular accounts for the characteristic “glittery” quality of sand in direct sun, where individual grains catch the light. Still essentially a diffuse material at the macro level. Sun specular slightly higher than gravel (0.05 at exp 20) to hint at the sparkle from individual grains catching direct sun.

8b. Sand Multilayer 🔗

Parameter Value
ksAmbient 0.27
ksDiffuse 0.27
ksSpecular 0 (unused)
ksSpecularEXP 8
fresnelC 0.02
fresnelEXP 2.3
fresnelMaxLevel 0.18
tarmacSpecularMultiplier 0.6
magicMult 2.0

Effective values after gamma transforms: Blinn-Phong exp 12.8, fresnel base pow(0.02, 1.75) = 0.0008, fresnel exp 5.06, fresnel max pow(0.18, 2) = 0.032.

Why: Sand has slightly more specular than grass or concrete because individual quartz grains are quite reflective (IOR 1.54). At the macro level this manifests as a faint aggregate sparkle in direct sun. tarmacSpecularMultiplier at 0.6 is higher than concrete (0.5) or grass (0.4) to capture this. The effective fresnel max of 0.032 is still low — you don’t see environment reflections in sand, just a subtle brightness at low sun angles. The fresnelC is slightly higher (0.02) to add a tiny base-level specular that simulates the faint sparkle even at moderate viewing angles.

9a. Raw Wood 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.25 0.25
ksDiffuse 0.25 0.25
ksSpecular 0.08 0.13
ksSpecularEXP 12 19
fresnelC 0.01 0.01
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.04 0.04
sunSpecular 0.03
sunSpecularEXP 25

Why: Raw/unfinished wood is a rough, fibrous, porous organic material. It’s almost entirely diffuse. The grain structure scatters light broadly. There’s a faint surface sheen (IOR ~1.5 for cellulose) but the porous texture breaks up any coherent specular. These values suit rough, untreated wood like a pit-lane barrier or track-side fencing. For painted or varnished wood, use Coated Textured Surface (1c) values.

10a. Rough Concrete 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.25 0.25
ksDiffuse 0.25 0.25
ksSpecular 0.06 0.10
ksSpecularEXP 8 13
fresnelC 0.01 0.01
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.02 0.02
sunSpecular 0.02
sunSpecularEXP 15

Why: Rough concrete (exposed aggregate, broom-finished, or weathered) is one of the most diffuse man-made surfaces. The macro-roughness from aggregate stones and the micro-roughness from the cement paste both scatter all light diffusely. This covers pit walls, barriers, run-off areas, and most outdoor concrete structures.

10a-ii. Smooth Concrete 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.24 0.24
ksDiffuse 0.24 0.24
ksSpecular 0.12 0.19
ksSpecularEXP 18 29
fresnelC 0.02 0.02
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.026 0.026
sunSpecular 0.05
sunSpecularEXP 35

Why: Smooth/polished concrete (trowel-finished floors, precast panels, polished garage floors) has a much flatter surface than rough concrete. The cement paste forms a continuous smooth layer with minimal exposed aggregate. This gives it a subtle sheen — you can see a faint sun highlight and a hint of environmental reflection. At reflBlur ≈ 4.7, the effective fresnelMaxLevel of 0.026 keeps the blurred cubemap contribution negligible. Still much more diffuse than plastic or painted surfaces, but noticeably glossier than rough concrete.

10a-iii. Painted Rough Concrete 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.24 0.24
ksDiffuse 0.24 0.24
ksSpecular 0.14 0.22
ksSpecularEXP 15 24
fresnelC 0.02 0.02
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.032 0.032
sunSpecular 0.06
sunSpecularEXP 35

Why: Paint over rough concrete (e.g. painted pit walls, garage floors, building facades). The paint fills micro-porosity but the underlying texture still dominates. Specular is slightly higher than bare rough concrete because paint adds a dielectric sheen layer, but the roughness keeps it subdued. At reflBlur ≈ 5.1 the cubemap is nearly maximally blurred; the effective cap of 0.001 keeps the sky-color contribution invisible.

10a-iv. Painted Concrete (kerbs, painted floors, painted walls) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.24 0.24
ksDiffuse 0.24 0.24
ksSpecular 0.16 0.26
ksSpecularEXP 25 40
fresnelC 0.04 0.04
fresnelEXP 2.0 2.0
fresnelMaxLevel 0.048 0.048
sunSpecular 0.10
sunSpecularEXP 55

Why: This covers paint applied to concrete surfaces: race track kerbs (red/white, blue/yellow), painted garage floors, painted pit walls, painted precast panels. The paint coat adds a dielectric sheen over the concrete texture. The underlying concrete roughness still shows through, keeping specular broader than painted plastic/metal (reflBlur ≈ 4.4). The effective cap of 0.0023 prevents the blurred cubemap from tinting the surface in shade. The specular intensity (0.16) sits between rough painted concrete (0.14) and asphalt new (0.15) — paint over a smooth-ish concrete substrate is shinier than paint over rough aggregate, but the broad highlight (low EXP) means total energy is modest. Heavily worn or scuffed kerbs should use slightly lower specular values (~15% less). The color (red/white kerbs, colored floors) comes entirely from the diffuse texture.

Note: Painted tyre rubber (white-letter tyre markings) is optically very similar — paint over a rough substrate. Use these values for tyre lettering.

10b. Concrete Multilayer 🔗

Parameter Value
ksAmbient 0.25
ksDiffuse 0.25
ksSpecular 0 (unused)
ksSpecularEXP 8
fresnelC 0.01
fresnelEXP 2.3
fresnelMaxLevel 0.15
tarmacSpecularMultiplier 0.5
magicMult 2.0

Effective values after gamma transforms: Blinn-Phong exp 12.8, fresnel base pow(0.01, 1.75) = 0.0003, fresnel exp 5.06, fresnel max pow(0.15, 2) = 0.023.

Why: Concrete is the most diffuse of the three road surfaces. The very low tarmacSpecularMultiplier (0.5) means the fresnel-driven specular is heavily attenuated — concrete barely has any specular response, it’s almost entirely Lambertian. The very low ksSpecularEXP (8) makes whatever specular remains extremely broad and soft, matching the porous aggregate surface. This is visually close to zero specular in practice. Concrete run-off areas should look flat and matte until rain FX activates.

11a. Asphalt — Smooth New Tarmac 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.24 0.24
ksDiffuse 0.24 0.24
ksSpecular 0.15 0.24
ksSpecularEXP 20 32
fresnelC 0.03 0.03
fresnelEXP 2.0 2.0
fresnelMaxLevel 0.09 0.09
sunSpecular 0.10
sunSpecularEXP 50

Why: Fresh, smooth tarmac has a bitumen binder that gives it a slightly glossy, almost oily appearance. Bitumen has IOR ~1.5–1.6 and when freshly laid, the surface is relatively smooth before traffic wear. This gives it noticeably more specular response than concrete or old tarmac — you can see faint sun reflections on a new road surface. The ksSpecularEXP of 20 gives moderately soft highlights and fairly blurry reflections (reflBlur ≈ 5.1), which is correct — even fresh tarmac doesn’t show recognizable cubemap reflections, just a vague brightness gradient. The effective cap of 0.0081 keeps reflections subtle but present, especially at low sun angles where fresh tarmac develops that characteristic slight sheen. Sun specular (0.10 at exp 50) adds a slightly tighter sun highlight on top of the broad base specular — new tarmac does catch the sun in a visible but soft spot.

11b. Asphalt - Smooth New Tarmac Multilayer 🔗

Parameter Value
ksAmbient 0.24
ksDiffuse 0.24
ksSpecular 0 (unused)
ksSpecularEXP 25
fresnelC 0.03
fresnelEXP 2.0
fresnelMaxLevel 0.30
tarmacSpecularMultiplier 1.2
magicMult 2.0

Effective values after gamma transforms: Blinn-Phong exp 40, fresnel base pow(0.03, 1.75) = 0.0013, fresnel exp 4.4, fresnel max pow(0.30, 2) = 0.09.

Why: Fresh tarmac has a bitumen sheen that creates a visible sun reflection, especially at low sun angles. The tarmacSpecularMultiplier at 1.2 gives a moderate boost to the angle-dependent specular, so the road surface glints when the sun is near the horizon. The effective fresnel max of 0.09 keeps the specular restrained — fresh tarmac isn’t a mirror, just slightly glossy. ksSpecularEXP at 25 gives a moderately soft Blinn-Phong highlight matching the slightly textured surface. magicMult at 2.0 compensates for the multiplicative blending of detail layers (which typically average below 1.0 since they’re blended by mask weights), keeping the overall brightness correct after the gamma pipeline processes it.

12a. Asphalt — Grainy Old Tarmac 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.26 0.26
ksDiffuse 0.26 0.26
ksSpecular 0.08 0.13
ksSpecularEXP 10 16
fresnelC 0.01 0.01
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.03 0.03
sunSpecular 0.03
sunSpecularEXP 20

Why: Worn, old tarmac has lost its bitumen sheen — the aggregate stones are exposed and the surface is rough and granular. Visually it behaves almost identically to gravel or concrete: fully diffuse, no coherent specular, no visible reflections. The slightly higher diffuse (0.26) compensates for the loss of specular energy — worn tarmac looks slightly lighter/brighter than fresh tarmac because the exposed aggregate is lighter than dark bitumen. When wet, rain FX will dramatically change this — filling the rough texture with water creates a smooth reflective surface. Sun specular is negligible (0.03 at exp 20) — old tarmac doesn’t catch the sun.

12b. Asphalt - Grainy Old Tarmac Multilayer 🔗

Parameter Value
ksAmbient 0.26
ksDiffuse 0.26
ksSpecular 0 (unused)
ksSpecularEXP 12
fresnelC 0.01
fresnelEXP 2.3
fresnelMaxLevel 0.18
tarmacSpecularMultiplier 0.7
magicMult 2.2

Effective values after gamma transforms: Blinn-Phong exp 19.2, fresnel base pow(0.01, 1.75) = 0.0003, fresnel exp 5.06, fresnel max pow(0.18, 2) = 0.032.

Why: Worn tarmac has lost its bitumen sheen — the aggregate is exposed and the surface is rough. tarmacSpecularMultiplier drops to 0.7, significantly reducing the angle-dependent specular brightness. The effective fresnel max of 0.032 means the specular is barely visible even at grazing angles. Lower ksSpecularEXP (12) gives a broader, softer highlight matching the rough surface. Slightly higher magicMult (2.2) because old tarmac detail textures tend to be lighter (exposed aggregate is lighter than dark bitumen), and the extra boost compensates for the gamma pipeline. Slightly above-neutral diffuse (0.26) since old tarmac appears lighter than fresh.

13. Billboard Trees (Leaves) — ksTree shader 🔗

Parameter Value
ksAmbient 0.18
ksDiffuse 0.18
ksSpecular 0.00
ksSpecularEXP 1

Why: See the gotchas page

14. Natural Fabric — cotton, wool, felt (headliner, pillars, cloth seats) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.26 0.26
ksDiffuse 0.26 0.26
ksSpecular 0.03 0.05
ksSpecularEXP 5 8
fresnelC 0.005 0.005
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.006 0.006
sunSpecular 0.01
sunSpecularEXP 10

Why: Natural fiber fabrics (cotton, wool, felt, linen) are among the most diffuse materials. The irregular, absorbent fibers scatter light in every direction — virtually zero specular or reflection. This covers headliner felt, A/B/C pillar trim, cloth seat inserts, cotton-based upholstery, and wool carpeting. The effective cap of 0.000036 makes reflections completely invisible. fresnelC is also lowered to 0.005 (effective 0.000025) to stay below the cap — at these extreme values the two are nearly identical. This material’s entire visual character comes from the diffuse texture and ambient occlusion.

Note: Dyed natural fabrics (any color) use the same parameters — dye changes only the diffuse texture color, not specular behavior. For rough cloth seats that feel slightly smoother/denser than headliner felt, stay with these values — the visual difference at gaming distances is negligible.

15. Synthetic Fabric — polyester, nylon, Alcantara (seats, door cards, sport trim) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.25 0.25
ksDiffuse 0.25 0.25
ksSpecular 0.08 0.13
ksSpecularEXP 12 19
fresnelC 0.02 0.02
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.026 0.026
sunSpecular 0.03
sunSpecularEXP 25

Why: Synthetic fabrics (polyester, nylon, microfiber, Alcantara/suede) have smoother, more uniform fibers than natural materials, producing a subtle but visible sheen under direct light. The tighter weave and plastic-based fibers (IOR ~1.5 for polyester) give slightly more specular than cotton or wool. At reflBlur ≈ 5.4, the effective cap of 0.0007 keeps the blurred cubemap tint negligible. This covers racing seat bolsters, Alcantara dash wraps, nylon harness webbing, and polyester door card inserts. For Alcantara specifically, use the upper end of these values; for rough synthetic cloth, use values closer to Natural Fabric.

16. Painted White Lines on Road 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.24 0.24
ksDiffuse 0.24 0.24
ksSpecular 0.15 0.24
ksSpecularEXP 25 40
fresnelC 0.04 0.04
fresnelEXP 2.0 2.0
fresnelMaxLevel 0.09 0.09
sunSpecular 0.10
sunSpecularEXP 60

Why: Road markings use thermoplastic paint or preformed tape, both of which have a smoother, more reflective surface than the surrounding asphalt. Thermoplastic road paint contains glass beads for retroreflection (IOR ~1.5). Fresh markings have a noticeable glossy sheen — you can see them glinting in headlights and sunlight. The ksSpecularEXP of 25 gives a moderately soft highlight — paint is smoother than asphalt but still textured from wear and aggregate beneath. At reflBlur ≈ 4.8, the cubemap is near-maximally blurred; the effective cap of 0.0081 keeps the energy conservation dimming to 9%, matching the level of new asphalt which sits at the same blur range. The specular intensity (0.15) is slightly above asphalt — road markings catch the sun more visibly than surrounding tarmac due to the smoother, glass-bead-filled surface, but the broad highlight (low EXP) shouldn’t overpower the diffuse. These values represent moderately worn markings; freshly applied would have higher specular.

17. Rough Painted Surface (textured plastic, weathered metal, rough painted trim) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.24 0.24
ksDiffuse 0.24 0.24
ksSpecular 0.18 0.29
ksSpecularEXP 28 45
fresnelC 0.04 0.04
fresnelEXP 2.0 2.0
fresnelMaxLevel 0.048 0.048
sunSpecular 0.11
sunSpecularEXP 65

Why: This covers any rough substrate with a paint coat: textured bumper trim, crinkle-finish interior panels, weathered/textured painted guardrails, galvanized then painted fencing, rough painted exterior cladding. The paint adds a sheen that the bare substrate lacks, but at reflBlur ≈ 4.2 the cubemap is heavily blurred. The effective cap of 0.0023 prevents the averaged sky color from tinting the surface in shade. The substrate material (plastic vs metal) is optically irrelevant under paint — what matters is the surface texture. For smooth painted surfaces, use Smooth Painted Surface (3c) instead.

18a. Window Glass (windscreen, side windows, rear glass) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.10 0.10
ksDiffuse 0.05 0.05
ksSpecular 0.05 0.08
ksSpecularEXP 200 320
fresnelC 0.07 0.07
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.90 0.90
isAdditive 1 1
sunSpecular 0.50
sunSpecularEXP 500

Why: Window glass is a large, flat surface where the Blinn-Phong specular model produces an unrealistically broad highlight blob. Real window glass has almost no diffuse specular — what you see is environment reflections (handled by the fresnel/cubemap system) and a tiny pinpoint sun reflection. The very low ksSpecular of 0.05 suppresses the Blinn-Phong blob while keeping a minimal highlight for the few cases where it matters. The fresnel values remain high because the direction-dependent cubemap reflections are what make glass look like glass — the effective fresnelMaxLevel of 0.81 means near-total reflection at grazing angles, which is physically correct. isAdditive = 1 disables the energy conservation diffuse-darkening term: glass reflecting the environment should not darken whatever is behind/through it — the reflection is purely additive. ksDiffuse is very low (0.05) because clear glass barely colors light. For best results, apply Material_Glass on top — CSP’s glass extension handles proper thin-surface reflections and refraction, and these base values serve as a passable standalone fallback.

18b. Headlight / Tail Light Outer Glass (small curved lenses) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.10 0.10
ksDiffuse 0.05 0.05
ksSpecular 0.45 0.72
ksSpecularEXP 200 320
fresnelC 0.07 0.07
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.90 0.90
isAdditive 1 1
sunSpecular 0.50
sunSpecularEXP 500

Why: Headlight and tail light outer glass is small and curved, so the Blinn-Phong specular produces a compact, physically plausible highlight that moves with the curvature. Unlike window glass, the higher ksSpecular of 0.45 works well here — the small surface area means the highlight never becomes an unrealistic blob. The very high ksSpecularEXP of 200 gives razor-sharp highlights and near-mirror cubemap reflections (reflBlur ≈ 0.2). The effective fresnelMaxLevel of 0.81 means the glass becomes highly reflective at grazing angles. These are optically identical to window glass (IOR ~1.5, F0 ≈ 0.04) — the only difference is the ksSpecular intensity, which is a practical concession to the Blinn-Phong model’s limitations on different surface geometries.

18c. Gauge / Instrument Glass with Material_Glass 🔗

Parameter ksPerPixelReflection / ksPerPixelNM
ksAmbient 0.30
ksDiffuse 0.30
ksSpecular 2.00
ksSpecularEXP 550
fresnelC 0.10
fresnelEXP 2.5
fresnelMaxLevel 0.70

Why: This section is specifically for gauge/instrument glass that has Material_Glass applied on top of the base shader. The CSP glass extension applies its own energy conservation and fresnel, which fundamentally changes the rendering context — the base shader parameters must compensate for the extension’s behavior rather than stand alone.

The high ksAmbient/ksDiffuse of 0.30 (well above neutral) compensates for the glass extension’s energy subtraction. Without this, opaque elements behind the glass (vinyl stickers, printed markings, gauge faces) turn near-black at grazing angles where the glass extension’s reflection is strongest. The very high ksSpecular of 2.00 and ksSpecularEXP of 550 are needed to punch through the glass extension’s specular handling — the extension attenuates the base specular, so extreme input values produce reasonable output. The resulting effective EXP of 880 is above the reflBlur formula’s 255 divisor, clamping to mirror-sharp reflections — this makes scratches and surface imperfections visible as sharp reflection perturbations. The higher fresnelC of 0.10 (effective 0.01) adds head-on reflection that helps surface scratches catch light at all viewing angles. fresnelMaxLevel of 0.70 (effective 0.49) is lower than the other glass types — scratched/worn glass is less reflective at grazing angles.

Note: These values were tested with a scratched/worn gauge glass texture that includes semi-transparent cracks and an opaque vinyl sticker. Clean, pristine gauge glass under Material_Glass may need lower ksAmbient/ksDiffuse and ksSpecular — test and adjust. Without Material_Glass, these values will produce extreme overexposure; use 18b values instead for standalone rendering.

19. Refracted Glass (Tail Light Inner Patterned Glass) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.12 0.12
ksDiffuse 0.08 0.08
ksSpecular 0.30 0.48
ksSpecularEXP 80 128
fresnelC 0.06 0.06
fresnelEXP 2.0 2.0
fresnelMaxLevel 0.75 0.75
isAdditive 1 1
sunSpecular 0.25
sunSpecularEXP 180

Why: Patterned/textured glass (the square or prismatic molded lens found inside tail light housings) has the same base IOR as clear glass (~1.5), but the molded faceted surface scatters both transmitted and reflected light. Each tiny square or prism is individually smooth, but the aggregate surface behaves much rougher than flat glass. This is why ksSpecularEXP drops from 200 to 80 — the specular highlight is still fairly defined (you can see sun reflections on these lenses) but softer and broader than flat glass. The cubemap reflections are noticeably blurrier (reflBlur ≈ 1.8). fresnelMaxLevel is lower (0.75 → effective 0.56) because the faceted geometry means fewer surface points are at true grazing angle simultaneously. Diffuse is slightly higher than clear glass because the refractive pattern scatters some light back as a diffuse-like glow, especially when the light behind is on. The slight reddish/orange color would come from the diffuse texture or from the emissive term when the light is active. Sun specular (0.25 at exp 180) is softer than clear glass but still produces a visible, moderately tight sun highlight on the faceted surface.

20. Frosted Glass (Modern Car Tail Lights) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.15 0.15
ksDiffuse 0.12 0.12
ksSpecular 0.15 0.24
ksSpecularEXP 35 56
fresnelC 0.04 0.04
fresnelEXP 2.0 2.0
fresnelMaxLevel 0.40 0.40
isAdditive 1 1
sunSpecular 0.08
sunSpecularEXP 60

Why: Frosted/smoked glass (like on modern LED tail light bars — Audi, BMW, etc.) has a deliberately roughened or semi-opaque surface. The microstructure scatters light strongly, creating a soft, diffused glow when lit from behind rather than point-like refraction. Optically it’s still glass (IOR ~1.5) but the effective roughness is much higher. ksSpecularEXP at 35 gives broad, soft specular highlights and blurry reflections (reflBlur ≈ 3.8) — matching the frosted appearance where you can’t see distinct reflections, just a vague environmental brightness. The higher diffuse compared to clear glass (0.12 vs 0.05) accounts for the translucent scattering — frosted glass has a visible “body” color even when unlit. isAdditive = 1 is correct here — frosted glass is still glass, light passes through it, and the reflection should not darken the transmitted glow behind it. With additive reflections, the effective cap of 0.16 adds a visible but soft environmental brightness at grazing angles without the diffuse-dimming problem that would occur without isAdditive. The specular intensity is modest (0.15) because the frosted surface scatters light broadly. These look like they glow rather than reflect when active, which comes from the emissive term, not from these reflection parameters.

21. Headlight / Tail Light / Indicator Reflector 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.12 0.12
ksDiffuse 0.08 0.08
ksSpecular 0.80 1.00
ksSpecularEXP 220 352
fresnelC 0.55 0.55
fresnelEXP 1.2 1.2
fresnelMaxLevel 0.97 0.97
sunSpecular 0.90
sunSpecularEXP 500

Why: Light reflectors are vacuum-metallized plastic — a thin aluminum or chrome coating deposited on a molded plastic parabola. Optically they behave like polished metal: very high F0 (aluminum F0 ≈ 0.91), near-mirror specular, minimal diffuse. The effective fresnelC of 0.30 and fresnelMaxLevel of 0.94 produce a highly reflective surface at all angles, with near-total reflection at grazing. The extremely high effective specular exponent (352) and reflBlur ≈ 0.05 give virtually perfect mirror reflections in the cubemap — which is exactly what you see when you look into a headlight housing. ksDiffuse is very low because the metallic coating doesn’t scatter light. The small remaining diffuse accounts for the slight color of the reflector base (chrome-silver, or sometimes painted silver/gold). The reflector texture itself should be bright silver/white. Use extColoredReflection > 0 if you want reflections tinted by the reflector color (e.g., chrome has neutral color, gold reflectors would need tinting). These values are more aggressive than “smooth metal” because reflectors are specifically engineered to be as mirror-like as possible. Sun specular (0.90 at exp 500) gives the most intense, sharpest possible sun reflection — mirror-like reflectors produce a near-point-source sun image.

22. Blacked-Out Headlight Reflector (Glossy Black Painted) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.15 0.15
ksDiffuse 0.15 0.15
ksSpecular 0.40 0.64
ksSpecularEXP 130 208
fresnelC 0.07 0.07
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.75 0.75
sunSpecular 0.40
sunSpecularEXP 300

Why: This is glossy black paint over plastic — not exposed metal. The key distinction from the mirror reflector above is that the paint layer is a dielectric (IOR ~1.5, F0 ≈ 0.04), not a conductor. The surface underneath might be metal or plastic, but optically you’re seeing the paint. Glossy black paint is one of the most “revealing” surfaces for reflections because the near-black diffuse base doesn’t compete with reflected light — any reflection stands out prominently against the dark background. This is why the effective fresnelMaxLevel of 0.56 feels very reflective in practice, even though it’s lower than the mirror reflector’s 0.94. The high ksSpecularEXP of 130 gives sharp highlights and clean cubemap reflections (reflBlur ≈ 0.9), matching the piano-black appearance. Diffuse is moderate (0.15) rather than very low — glossy black paint still has a visible body when lit by ambient light; it’s very dark but not zero. The diffuse texture should be very dark gray or black. The visual result is something like a dark mirror — dim when viewed straight-on but increasingly reflective at grazing angles, with sharp highlight spots from point lights. Sun specular (0.40 at exp 300) gives a bright, tight sun pinpoint — against the dark background, this sun spot is highly visible and defines the “piano black” look.

23. Tyre Rubber — ksTyres shader 🔗

The ksTyres shader uses the CARPAINT_NM lighting path with reflectanceModel(), so the ×1.6 gamma boost applies to the Lambert factor and ksSpecularEXP inside the Blinn-Phong calculation. However, it defines FORCE_BLURREST_REFLECTIONS, which forces cubemap reflections to maximum blur (level 15) regardless of ksSpecularEXP. This means ksSpecularEXP only controls the sun specular highlight sharpness, not reflection clarity. The cubemap always contributes a diffuse ambient-like tint (typically sky-blue), controlled solely by the fresnel parameters.

The shader has its own cbuffer (INCLUDE_TYRE_CB) with blurLevel and dirtyLevel parameters that modulate the surface in real-time. Specular is modulated by dirtyInv × txDiffuseValue.a — if the diffuse texture has no alpha (all white / missing), specular is completely unattenuated. These recommendations assume no specular mask in the diffuse alpha.

Critical note on FORCE_BLURREST_REFLECTIONS: Because the cubemap is sampled at maximum blur, the fresnel-driven reflection contribution is essentially the average sky color — typically a blue-ish tint. On dark rubber, even modest fresnelMaxLevel values produce visible coloration in shade (where diffuse lighting is too dim to overpower it). This is why the fresnel values below are significantly more conservative than equivalent materials on other shaders.

23a. Fresh Tyre with Tyre Shine 🔗

Parameter Value
ksAmbient 0.22
ksDiffuse 0.22
ksSpecular 0.14
ksSpecularEXP 25
fresnelC 0.02
fresnelEXP 2.0
fresnelMaxLevel 0.058

Effective values after gamma transforms: Blinn-Phong exp 40 with ×1.6 Lambert boost, fresnel base 0.0004, fresnel exp 4.4, fresnel max 0.0034.

Why: A fresh tyre coated in tyre shine (silicone/polymer dressing) has a smooth, wet-look surface. Tyre shine fills the rubber’s micro-texture with a slick dielectric film (IOR ~1.4–1.5), creating a noticeably glossy finish — you can see a defined sun highlight and a subtle environmental sheen at grazing angles. The effective ksSpecularEXP of 40 gives a moderately tight sun highlight — tyre shine creates a clear sun spot that’s broader than glossy plastic but much more defined than bare rubber. With FORCE_BLURREST_REFLECTIONS the cubemap is always at maximum blur, averaging to a uniform sky color; the energy conservation term then amplifies this as a tint by dimming the dark diffuse further. The effective cap of 0.0034 produces a barely perceptible sheen at grazing angles without introducing sky-color cast. fresnelC at 0.02 (effective 0.0004) keeps head-on reflection negligible. Neutral diffuse (0.22) keeps the dark rubber texture correct.

23b. Worn Tyre without Tyre Shine 🔗

Parameter Value
ksAmbient 0.22
ksDiffuse 0.22
ksSpecular 0.07
ksSpecularEXP 12
fresnelC 0.01
fresnelEXP 2.3
fresnelMaxLevel 0.023

Effective values after gamma transforms: Blinn-Phong exp 19 with ×1.6 Lambert boost, fresnel base 0.0001, fresnel exp 5.06, fresnel max 0.0005.

Why: A worn tyre has lost its mold-release agents and any applied dressing. The surface is abraded, exposing the raw vulcanized rubber compound — rough, matte, and dark. The low effective ksSpecularEXP of 19 produces a very broad, soft sun highlight that’s barely distinguishable from diffuse lighting — worn rubber doesn’t produce a recognizable sun spot. The effective cap of 0.0005 makes the maximally-blurred cubemap contribution invisible — worn tyres look flat and matte with no environmental sheen or sky-color tint. fresnelC at 0.01 (effective 0.0001) means zero head-on reflection. The same neutral diffuse (0.22) keeps the texture rendering consistent — the visual difference between fresh and worn comes entirely from the specular and fresnel response, not the diffuse.

24. Rubber Trim (weather strips, wipers, interior seals) 🔗

Parameter ksPerPixelReflection / ksPerPixelNM ksPerPixelMultiMap
ksAmbient 0.22 0.22
ksDiffuse 0.22 0.22
ksSpecular 0.22 0.35
ksSpecularEXP 40 64
fresnelC 0.04 0.04
fresnelEXP 2.3 2.3
fresnelMaxLevel 0.12 0.12
sunSpecular 0.12
sunSpecularEXP 80

Why: Rubber trim pieces (door weather strips, window seals, wiper blades, interior rubber gaskets) are manufactured smooth-molded EPDM or silicone rubber — significantly smoother and glossier than tyre rubber. They never contact the road, so they retain their factory surface finish. IOR ~1.5–1.6, same as tyre rubber, but the smoother surface produces a much more coherent specular. The ksSpecularEXP of 40 gives a moderately tight highlight — you can see a clear sun reflection on a wiper blade or door seal. At reflBlur ≈ 3.4, the cubemap is heavily blurred — the effective cap of 0.014 keeps the energy conservation dimming to sqrt(0.014) = 0.12 → 12% at grazing, preventing shade tinting while preserving a subtle edge sheen. These values sit between rough plastic and satin plastic — smooth moulded rubber is essentially a slightly soft plastic optically.


Summary Table 🔗

ksPerPixelReflection / ksPerPixelNM 🔗

Parameter Glossy Leather Matte Leather Coated Textured Glossy Plastic Satin Plastic Sm. Painted Surface Rough Plastic Smooth Metal Rough Metal
ksAmbient 0.24 0.25 0.23 0.22 0.23 0.22 0.25 0.15 0.18
ksDiffuse 0.24 0.25 0.23 0.22 0.23 0.22 0.25 0.10 0.12
ksSpecular 0.20 0.10 0.18 0.22 0.15 0.20 0.10 0.70 0.40
ksSpecularEXP 35 15 50 90 50 75 25 150 35
fresnelC 0.03 0.02 0.04 0.08 0.05 0.07 0.03 0.50 0.45
fresnelEXP 2.3 2.3 2.3 2.3 2.3 2.3 1.8 1.4 1.4
fresnelMaxLevel 0.078 0.04 0.10 0.40 0.18 0.38 0.048 0.95 0.16
Parameter Grass Gravel Sand Raw Wood Rough Concrete Smooth Concrete Painted Rgh. Concrete Painted Concrete
ksAmbient 0.28 0.26 0.27 0.25 0.25 0.24 0.24 0.24
ksDiffuse 0.28 0.26 0.27 0.25 0.25 0.24 0.24 0.24
ksSpecular 0.05 0.08 0.12 0.08 0.06 0.12 0.14 0.16
ksSpecularEXP 8 10 10 12 8 18 15 25
fresnelC 0.01 0.01 0.02 0.01 0.01 0.02 0.02 0.04
fresnelEXP 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.0
fresnelMaxLevel 0.02 0.03 0.04 0.04 0.02 0.026 0.032 0.048
Parameter Asphalt New Asphalt Old Natural Fabric Synthetic Fabric Road Lines Rgh. Painted Surface
ksAmbient 0.24 0.26 0.26 0.25 0.24 0.24
ksDiffuse 0.24 0.26 0.26 0.25 0.24 0.24
ksSpecular 0.15 0.08 0.03 0.08 0.15 0.18
ksSpecularEXP 20 10 5 12 25 28
fresnelC 0.03 0.01 0.005 0.02 0.04 0.04
fresnelEXP 2.0 2.3 2.3 2.3 2.0 2.0
fresnelMaxLevel 0.09 0.03 0.006 0.026 0.09 0.048
Parameter Window Glass Light Glass Refracted Glass Frosted Glass Reflector Black Reflector Tyre Rubber Rubber Trim
ksAmbient 0.10 0.10 0.12 0.15 0.12 0.15 0.22 0.22
ksDiffuse 0.05 0.05 0.08 0.12 0.08 0.15 0.22 0.22
ksSpecular 0.05 0.45 0.30 0.15 0.80 0.40 0.12 0.22
ksSpecularEXP 200 200 80 35 220 130 15 40
fresnelC 0.07 0.07 0.06 0.04 0.55 0.07 0.02 0.04
fresnelEXP 2.3 2.3 2.0 2.0 1.2 2.3 2.0 2.3
fresnelMaxLevel 0.90 0.90 0.75 0.40 0.97 0.75 0.058 0.12
isAdditive 1 1 1 1

Gauge/instrument glass with Material_Glass uses special values — see §18c.

ksPerPixelMultiMap / ksPerPixelMultiMap_NMDetail 🔗

ksSpecular and ksSpecularEXP are ×1.6 higher to compensate for the missing gamma boost. sunSpecular/sunSpecularEXP are only available in ksPerPixelMultiMap (non-NMDetail variant).

Parameter Glossy Leather Matte Leather Coated Textured Glossy Plastic Satin Plastic Sm. Painted Surface Rough Plastic Smooth Metal Rough Metal
ksAmbient 0.24 0.25 0.23 0.22 0.23 0.22 0.25 0.15 0.18
ksDiffuse 0.24 0.25 0.23 0.22 0.23 0.22 0.25 0.10 0.12
ksSpecular 0.32 0.16 0.29 0.35 0.24 0.32 0.16 1.00 0.64
ksSpecularEXP 56 24 80 144 80 120 40 240 56
fresnelC 0.03 0.02 0.04 0.08 0.05 0.07 0.03 0.50 0.45
fresnelEXP 2.3 2.3 2.3 2.3 2.3 2.3 1.8 1.4 1.4
fresnelMaxLevel 0.078 0.04 0.10 0.40 0.18 0.38 0.048 0.95 0.16
sunSpecular 0.08 0.03 0.14 0.25 0.12 0.22 0.06 0.80 0.35
sunSpecularEXP 80 30 120 200 120 180 60 400 100
Parameter Grass Gravel Sand Raw Wood Rough Concrete Smooth Concrete Painted Rgh. Concrete Painted Concrete
ksAmbient 0.28 0.26 0.27 0.25 0.25 0.24 0.24 0.24
ksDiffuse 0.28 0.26 0.27 0.25 0.25 0.24 0.24 0.24
ksSpecular 0.08 0.13 0.19 0.13 0.10 0.19 0.22 0.26
ksSpecularEXP 13 16 16 19 13 29 24 40
fresnelC 0.01 0.01 0.02 0.01 0.01 0.02 0.02 0.04
fresnelEXP 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.0
fresnelMaxLevel 0.02 0.03 0.04 0.04 0.02 0.026 0.032 0.048
sunSpecular 0.02 0.03 0.05 0.03 0.02 0.05 0.06 0.10
sunSpecularEXP 15 20 20 25 15 35 35 55
Parameter Asphalt New Asphalt Old Natural Fabric Synthetic Fabric Road Lines Rgh. Painted Surface
ksAmbient 0.24 0.26 0.26 0.25 0.24 0.24
ksDiffuse 0.24 0.26 0.26 0.25 0.24 0.24
ksSpecular 0.24 0.13 0.05 0.13 0.24 0.29
ksSpecularEXP 32 16 8 19 40 45
fresnelC 0.03 0.01 0.005 0.02 0.04 0.04
fresnelEXP 2.0 2.3 2.3 2.3 2.0 2.0
fresnelMaxLevel 0.09 0.03 0.006 0.026 0.09 0.048
sunSpecular 0.10 0.03 0.01 0.03 0.10 0.11
sunSpecularEXP 50 20 10 25 60 65
Parameter Window Glass Light Glass Refracted Glass Frosted Glass Reflector Black Reflector Tyre Rubber Rubber Trim
ksAmbient 0.10 0.10 0.12 0.15 0.12 0.15 0.22 0.22
ksDiffuse 0.05 0.05 0.08 0.12 0.08 0.15 0.22 0.22
ksSpecular 0.08 0.72 0.48 0.24 1.00 0.64 0.19 0.35
ksSpecularEXP 320 320 128 56 352 208 24 64
fresnelC 0.07 0.07 0.06 0.04 0.55 0.07 0.02 0.04
fresnelEXP 2.3 2.3 2.0 2.0 1.2 2.3 2.0 2.3
fresnelMaxLevel 0.90 0.90 0.75 0.40 0.97 0.75 0.058 0.12
isAdditive 1 1 1 1
sunSpecular 0.50 0.50 0.25 0.08 0.90 0.40 0.05 0.12
sunSpecularEXP 500 500 180 60 500 300 30 80

Gauge/instrument glass with Material_Glass uses special values — see §18c.

ksTree (Billboard Trees) 🔗

Parameter Value
ksAmbient 0.18
ksDiffuse 0.18
ksSpecular 0.00
ksSpecularEXP 1

ksTyres 🔗

Uses CARPAINT_NM lighting path (×1.6 gamma boost applies). FORCE_BLURREST_REFLECTIONS means ksSpecularEXP only controls sun highlight, not reflection blur.

Parameter Fresh + Tyre Shine Worn
ksAmbient 0.22 0.22
ksDiffuse 0.22 0.22
ksSpecular 0.14 0.07
ksSpecularEXP 25 12
fresnelC 0.02 0.01
fresnelEXP 2.0 2.3
fresnelMaxLevel 0.058 0.023

Summary Table - Mutilayer 🔗

Parameter New Tarmac Old Tarmac Concrete Grass Sand Gravel
ksAmbient 0.24 0.26 0.25 0.28 0.27 0.26
ksDiffuse 0.24 0.26 0.25 0.28 0.27 0.26
ksSpecular 0 0 0 0 0 0
ksSpecularEXP 25 12 8 5 8 10
fresnelC 0.03 0.01 0.01 0.01 0.02 0.01
fresnelEXP 2.0 2.3 2.3 2.3 2.3 2.3
fresnelMaxLevel 0.30 0.18 0.15 0.12 0.18 0.16
tarmacSpecularMultiplier 1.2 0.7 0.5 0.4 0.6 0.5
magicMult 2.0 2.2 2.0 2.2 2.0 2.0

Key takeaway: in this shader, tarmacSpecularMultiplier is the primary “how shiny” knob, and it acts as a pre-multiplier on the fresnel angle term before the fresnelC base and fresnelMaxLevel cap are applied. For terrain and road surfaces, the range of 0.4–1.2 covers everything from fully matte (grass) to slightly glossy (fresh tarmac). The fresnel parameters work differently than in ksPerPixelReflection because they drive specular highlights, not cubemap reflections — so the visual sensitivity is different (a specular highlight is a small bright spot; a cubemap reflection is a broad environmental tint).