Beginner · Intermediate · Advanced authoring · Samples

Built-in Shader Catalogue

Illustrated guide: game uses, working samples and before/after screenshots.

All aliases are case-insensitive, load packaged bytecode, and need no HLSL beside a standalone game. Float/vector values use the units shown; colours use 0..255. Quality is 0 low, 1 balanced, or 2 high. Optional buffers are allocated only while an enabled effect requests them.

Fur

builtin:fur adds short fur, plush or fuzzy fabric to a mesh through EntityShader or BrushShader. Normals and useful UVs are required. The base and 0–32 outer shells share the posed geometry. Length is in world units, including on scaled or animated meshes. Apply to coat brushes to retain separate eyes, teeth and clothing materials. It replaces that material; it does not layer over an existing shader.

Interactive gallery · Animated plush workshop.

ParameterDefault and meaning
Lengthfloat .08; finite, nonnegative world-unit length. Zero leaves the base. Extremely large finite values are capped at float maximum / 4 to keep the envelope finite.
ShellCountint 16; outer shells excluding the base, clamped 0–32. More shells cost more draws in every view and shadow map.
Density / Thicknessfloat .7 / .35; retained root fraction / width in a UV cell, both 0–1. Zero leaves only the base.
Tiling / Taperfloat 32 / .8; cells per transformed UV unit (1–1024) / narrowing at tips (0–1).
RootDarkening / TipColorfloat .35 (0–1) / color white; artistic root shading and RGB tip multiplier. Tip alpha is ignored.
Roughness / Sheenfloat .8 (.04–1) / .25 (0–1); lit surface response.
BendDirection / BendStrengthvector (0,-1,0,0) / float .15 (0–1); world-space droop direction and maximum offset as a fraction of Length.
WindDirection / WindStrength / WindSpeedvector (1,0,0,0) / float .1 (0–1) / float 1 (finite radians/second, clamped 0–1,000,000). Wind uses frame time; speed zero selects a static phase. The large upper guard keeps phase arithmetic finite.
Seed / AlphaCutoffint 0 / float .5 (0–1); reproducible roots / base-texture alpha threshold.
BaseTextureOptional colour texture; alpha cuts holes in base and coat. Missing is white. Its transformed UVs also place procedural roots.
FurMapOptional linear RGB data: R length, G density, B wind response; alpha ignored. Missing is white; sampled channels clamp to 0–1. Its own UV set and transforms apply.

Directions normalize XYZ; zero disables that displacement and W is unused. Non-finite values produce a shader error and retain the previous setting. CopyShader creates independent settings. Entity and vertex alpha fade cutout coverage; additive or multiplied blending is incompatible with the opaque depth-writing coat. Sprites, particles, terrain and post/canvas effects are not supported. Picking and collision retain the original mesh.

Use short coats at ordinary viewing distances. Sparse roots, UV seams, silhouette gaps and individual shell layers can show at grazing angles or very long lengths. This is neither long hair nor strand physics. The sample chooses .045 length, 64 tiling and .6 thickness for its particular mesh; tune these together. Start at 8–16 shells and reduce shells or disable fur in distant LODs. Lights with several shadow views and reflections multiply the coat's draw cost.

Planar reflection service

builtin:planar-reflection is an opaque mirror receiver. It needs CreatePlanarReflection and EntityPlanarReflection to capture a scene view. Existing builtin:water accepts the same service for its reflection component.

Parameters: Color (255,255,255,255), Strength (float=1, clamped 0–1), FresnelPower (float=0), FallbackColor (128,128,128,255), FallbackIntensity (float=1), and optional FallbackTexture. Power zero gives constant mirror weight; positive power favours grazing views. The fallback texture is a panoramic sRGB RGB image, with alpha ignored. Its live texture transforms apply to the generated reflection-direction lookup; mesh UV selection does not.

The camera must face the declared plane's local +Y side. Captures update only for enabled, potentially visible planar receivers. Disabled, back-facing or unavailable views use the explicit fallback. Two enabled planes per camera and one reflection bounce are supported. Other reflectors inside a capture use their fallback. The capture has its own clipping, lighting and shadows; no post stack, highlights, temporal history or multisampling. Curved, skinned and morphed receivers are unsupported.

PlanarReflectionSettings sets scale (.25–1, default .5) and clip bias (default .02 scene units). Half dimensions use one quarter of the pixels, but geometry and shadow work remain. Use PlanarReflectionEnabled to stop capture work and FreePlanarReflection to release a handle. Camera/plane/world deletion invalidates it safely. This does not replace CreateMirror. See the illustrated guide and observatory study.

Entity material operations

EntityColorOverlay entity,red,green,blue,amount,emission=0 adds a colour flash or pulse while retaining the entity's assigned materials. Amount zero clears it; copies start without an overlay. Existing EntityColor, EntityAlpha, EntityFX and blend commands still apply. Classic, Standard and compatible built-ins support the operation; custom shaders need an explicit hook. See the illustrated explanation and repair-bay sample.

Surface materials

Alias and queuePurpose and exact parameters (type=default)Renderer input / sample
builtin:unlit
opaque/masked
Lighting-independent colour. Texture (texture).None; sample.
builtin:toon
opaque/masked
Banded diffuse and rim. Bands (float=4), ShadowColor (color=51,64,89), RimStrength (float=.15), LightingMode (int=1: per-light colour; 0: legacy brightness), Texture.Independent lights/shadows; sample.
builtin:rim-light
opaque/masked
View-edge light. RimColor (color=77,166,255), RimPower (float=3), Strength (float=1), Texture.Camera/lights; sample 04.
builtin:dissolve
masked
Noise cut-out with emissive edge. Amount (float=0), EdgeWidth (float=.08), EdgeColor (color), Texture, NoiseMap. An authored noise map replaces the smooth procedural fallback.Shadow casting does not reproduce the pixel cut-out; disable casting when needed. Study.
builtin:foliage
masked/two-sided
Wind and translucency. BaseTexture, NormalTexture, WindDirection (vector=1,0,0), WindStrength (float=.15), GustStrength (float=.5), WindSpeed (float=1), WindScale (float=1), NormalStrength (float=1), AlphaCutoff (float=.5), Translucency (float=.35).Visible and shadow displacement; sample 13.
builtin:triplanar
opaque
World-projected seam-free mapping. SideTexture, TopTexture, Scale (float=.25), BlendSharpness (float=4), SlopeBias (float=1), Roughness (float=.8), Metallic (float=0).No UV required; sample 13.
builtin:parallax
opaque
View-dependent relief. BaseTexture, NormalTexture, HeightTexture, HeightScale (float=.04, UV units), MinimumSteps (int=8), MaximumSteps (int=24), NormalStrength (float=1), Roughness (float=.65). White height values recess; black stays at the surface.UVs; tangent directions are derived automatically. Sample 13.
builtin:hologram
transparent
Scan/rim emission. Color, Opacity (float=.65), ScanDensity (float=14), ScanSpeed (float=1), Noise (float=.2), Flicker (float=.15), RimPower (float=2).No shadows/depth writes; sample 13.
builtin:wet-surface
opaque
Wet roughness, puddles and ripples. BaseTexture, NormalTexture, PuddleMap, Wetness (float=.6), PuddleLevel (float=.5), DryRoughness (float=.75), WetRoughness (float=.12), RippleScale (float=8), RippleSpeed (float=1), RippleStrength (float=.03).Standard PBR; sample 13.
builtin:snow
opaque
Slope/height accumulation. BaseTexture, Coverage (float=.75), Direction (vector=0,1,0), HeightBlend (float=.1), SlopeSharpness (float=4), NoiseScale (float=1), SnowColor, BaseRoughness (float=.7), Sparkle (float=.08).Standard PBR; sample 13.
builtin:water
transparent
Waves, reflection, refraction, depth fade and foam. NormalMapA, NormalMapB, ShallowColor, DeepColor, WaveScale (float=.08), WaveSpeed (float=.04), Roughness (float=.18), Reflection (float=.65), Refraction (float=1), DepthFade (float=4), FoamWidth (float=.35), FoamStrength (float=.8), Transmission (float=.9), IOR (float=1.333). Alpha is coverage; Reflection scales surface highlights and any assigned planar reflection.
Planar-only controls: FallbackColor (128,128,128,255), FallbackIntensity (float=1), optional FallbackTexture (panoramic RGB; alpha ignored), and ReflectionDistortion (float=.08 scene units). These controls are inactive without a planar association. Fallback colour/panorama replaces an unavailable capture; distortion bends its lookup using wave normals.
Opaque colour + read-only depth; sample.
builtin:glass
transparent
Refractive glass approximation. Tint, Roughness (float=.08), Transmission (float=.95), IOR (float=1.5), Thickness (float=.1; authored scene-unit distance, 0 neutral, negative uses opaque depth), AttenuationColor, AttenuationDistance (float=2; 0 disables absorption). Tint alpha is coverage, independent of Transmission.Opaque colour + read-only depth; sample 14.
builtin:force-field
transparent
Rim/intersection energy. Color, Opacity (float=.7), RimPower (float=2.5), Emission (float=1.5), IntersectionWidth (float=.01; legacy device depth), IntersectionWidthWorld (float=0; positive values use scene units), NoiseSpeed (float=1), NoiseStrength (float=.2).Resolved read-only depth; sample 13.
builtin:soft-particle
transparent, unlit
BaseTexture (colour/opacity; white if absent), Color (white), Opacity (1), SoftDistance (.5 scene units), NearFadeDistance (.2 beyond the near plane), Emission (1, linear intensity).Opaque depth only. Use EntityShader on an existing particle emitter or sprite. Alpha, additive and multiply blends remain available; mode 0 defaults to alpha. Zero distances disable their respective fades.

Matcap lighting

builtin:matcap supplies camera-relative baked lighting for stylised props. MatcapTexture is an sRGB RGB lighting image; its alpha is ignored. Missing lighting gives the neutral material colour. Color defaults to white and Intensity to 1 (non-negative; HDR values above 1 are useful). NormalTexture is optional linear normal data; NormalStrength defaults to 1 and zero restores the geometric normal.

A camera-up normal reads the top of the matcap image. The generated lookup clamps at the image edges, including mip footprints. PositionTexture, ScaleTexture, RotateTexture and TextureScroll transform that lookup; TextureCoords does not change its generated coordinates. The normal map uses its own mesh UV set and transforms. Supported TextureBlend colour operations apply to decoded lighting RGB; mode 0 disables that lighting layer. EntityColor, EntityAlpha, vertex colour, fog and EntityColorOverlay remain available. Scene lights and EntityShininess do not relight a matcap. Alpha/blend/culling follow ordinary material defaults; camera and shadow coverage use material/vertex alpha. The renderer receives roughness 1 to avoid adding a polished SSR response to this authored look. See the illustrated guide and inspection studio.

Flowing materials and texture scrolling

builtin:heat-haze distorts an opaque background through a transparent mesh or sprite. DistortionPixels defaults to 6 display pixels and clamps to 0–32; Opacity defaults to 1 (0–1), and SoftDistance to .3 scene units (zero disables contact fading). DistortionMap uses linear RG data: red/green above mid-grey read right/down, below read left/up; bytes 127 and 128 are neutral. Missing distortion is neutral. MaskTexture uses alpha and defaults to full coverage. Both maps keep independent live UV transforms and support TextureScroll.

Heat haze uses alpha blending, with no depth writes or shadows, and preserves scene alpha. EntityAlpha and vertex alpha multiply coverage; EntityColor RGB, lighting and fog do not recolour the captured background. TextureBlend colour arithmetic does not apply to these data maps. Other explicit EntityBlend modes are diagnosed and fall back to alpha. Zero opacity or displacement adds no visible contribution, although an attached material still requests its capture buffers. Opaque foreground objects reject displaced lookups; intervening transparent glass/water and other haze surfaces are absent from the capture. See the guide and engine test bay.

builtin:uv-flow supplies lit, opaque/masked directional flow. It supports the ordinary alpha, multiply and additive EntityBlend modes when explicitly selected. No camera buffers are required. See the illustrated guide and the salvage transfer line.

ParametersDefaults and meaning
BaseTexture, NormalTexture, FlowMap White base, flat normal and zero flow when absent. Flow RG is linear direction data: 0 points negatively, 1 positively; mid-grey is stationary. In an 8-bit image, 127 and 128 both encode neutral. Directions use the transformed base texture UV axes. Each map has its own live PositionTexture, ScaleTexture, RotateTexture and TextureCoords settings.
FlowStrength, FlowSpeed, Time 0 UV displacement, 1 cycle/second, -1 engine time. Negative speed reverses the flow. Zero strength preserves ordinary texturing and texture scrolling. Two overlapping phases blend as they restart. Supply non-negative Time in seconds for deterministic playback or pause.
Color, Emission, NormalStrength, Roughness White (255,255,255,255), 0 non-negative emission, 1 normal strength, .6 roughness.

TextureScroll moves a texture uniformly on classic, Standard and compatible shader materials. It does not require uv-flow. PositionTexture immediately rebases its offset while the chosen speed continues. PauseTextureScroll freezes only that texture clock; hold the shader Time separately to pause directional flow. BaseTexture uses ordinary TextureBlend colour-layer rules; NormalTexture and FlowMap are data roles.

Flow changes sampled colour, normals and opacity. It does not move geometry, simulate fluids or refract the background. Large strengths can reveal the two details being blended; use moderate values and inspect moving samples as well as screenshots.

Camera effects

Alias / stage / passesExact parametersInputs and ordering
builtin:grayscale
display-linear / 1
Strength (float=1).Scene colour; place near grading.
builtin:vignette
presentation / 1
Strength (.65), Radius (.45), Softness (.3), Color.Scene colour; after tone mapping.
builtin:bloom
scene-linear / 4 passes
Intensity (.65), Threshold (.65), Radius (2), SoftKnee (.5), Scatter (1), Quality (int=1).HDR/LDR scene colour; before tone map.
builtin:color-adjust
display-linear / 1
Exposure (0 stops), Contrast (1), Saturation (1), Tint (vector=1,1,1,1).Scene colour.
builtin:lut-grade
display-linear / 1
LUT (texture, 16x16x16 stored 256x16), Strength (1), Exposure (0), Temperature (0), Tint (0).Scene colour + custom LUT; sample 11 HDR.
builtin:ssao
scene-linear / 4 half-res
Radius (.6 world units), Strength (1), Bias (.02), Power (1.5), Quality (int=1).Depth and blue noise; geometric normals reconstructed from depth. Works with ordinary materials; before fog/DOF.
builtin:depth-fog
scene-linear / 1
FogColor, Density (.025), Start (0), Height (0), HeightFalloff (.2), Mode (int=1).Depth and inverse matrices.
builtin:depth-of-field
scene-linear / 4 passes
FocusDistance (5 scene units along the camera view), FocusRange (2), Aperture (1), MaxBlur (8 internal render pixels; 0–32), NearStrength (1), FarStrength (1), Quality (int=1; 8/16/32 taps per layer).HDR colour + point depth. Separate near coverage and far blur, with foreground-aware half-resolution metadata. At RenderScale 0.5 the same radius spans about twice as many display pixels.
builtin:outline
scene-linear / 1
Color, Thickness (1 pixel), DepthThreshold (.002), NormalThreshold (.15), Strength (1).Depth, normals, object mask.
builtin:sharpen
presentation / 1
Strength (.2), Clamp (.1).Place after upscale/tone map.
builtin:lens
presentation / 1
Grain (.025), ChromaticAberration (1 pixel), Distortion (0), Scanlines (0), TimeScale (1).Scene colour + deterministic blue noise.
builtin:motion-blur
scene-linear / 1
ShutterAngle (180 degrees), MaximumRadius (24 pixels), CameraWeight (1), ObjectWeight (1), Quality (int=1).Depth, velocity, reactive/object mask; best with TAA.
builtin:ssr
scene-linear / 6 passes
Strength (.6), MaxDistance (20), Thickness (.01), RoughnessFade (.7), EdgeFade (1.5), Quality (int=1), TemporalWeight (.7).Depth hierarchy, normals, validity, velocity and dedicated reflection history; misses preserve the underlying material. TemporalWeight zero disables persistent accumulation.
builtin:volumetric-fog
scene-linear / 5 passes
Density (.025), Height (0), HeightFalloff (.2), Distance (50), Anisotropy (.2), Steps (int=24), TemporalWeight (0), Quality (int=1), Color, ShadowStrength (1).Depth, blue noise, optional dedicated history and selected-light shadow map; bounded quarter-resolution ray march.
builtin:light-shafts
scene-linear / 1
Source (vector=.5,.3), Density (.8), Decay (.95), Exposure (.35), MaxDistance (.8 screen units).Colour + depth; selected screen-space light source.

Selected-entity presentation

EntityHighlight entity draws a default amber outline without a shader setup. builtin:highlight is its optional camera style, attached with CameraEffect. It runs after scene filters and AA, before the HUD, and stays outside bloom and temporal history.

StyleParametersUse and limits
builtin:highlightColor (255,190,48,255), Width (2 display pixels; 1–6), Strength (1; 0–1), FillOpacity (0; 0–1).Visible opaque/cutout entities with a camera-coverage stage. One style per camera. Disabling an attached style suppresses highlighting; removing it restores the default. Foreground objects hide the outline. No through-wall or per-object colour mode. See EntityHighlight.

Compatibility, cost, and fallbacks

FXAA, TAA, render scale, camera viewports, and 4x MSAA are supported; MSAA depth uses a minimum-sample resolve. Transparent scene capture is scoped to the current presentation target. Layout-3 built-ins remain loadable. Surface shaders support instancing and GPU skinning through the generated wrapper. Raw custom shaders which do not declare auxiliary output use safe defaults and one coalesced diagnostic.

Reduced-resolution target formats and memory formulae, supported hardware, approximations, and measured validation results are recorded in docs/BUILTIN_SHADER_EFFECTS_SUPPORT.md. Use DrawRenderStats 8,8,1023 for pass count, auxiliary mask, target memory, HDR/AA state, and temporal-history status.