Beginner · Intermediate · Advanced authoring · Samples
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.
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.
| Parameter | Default and meaning |
|---|---|
| Length | float .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. |
| ShellCount | int 16; outer shells excluding the base, clamped 0–32. More shells cost more draws in every view and shadow map. |
| Density / Thickness | float .7 / .35; retained root fraction / width in a UV cell, both 0–1. Zero leaves only the base. |
| Tiling / Taper | float 32 / .8; cells per transformed UV unit (1–1024) / narrowing at tips (0–1). |
| RootDarkening / TipColor | float .35 (0–1) / color white; artistic root shading and RGB tip multiplier. Tip alpha is ignored. |
| Roughness / Sheen | float .8 (.04–1) / .25 (0–1); lit surface response. |
| BendDirection / BendStrength | vector (0,-1,0,0) / float .15 (0–1); world-space droop direction and maximum offset as a fraction of Length. |
| WindDirection / WindStrength / WindSpeed | vector (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 / AlphaCutoff | int 0 / float .5 (0–1); reproducible roots / base-texture alpha threshold. |
| BaseTexture | Optional colour texture; alpha cuts holes in base and coat. Missing is white. Its transformed UVs also place procedural roots. |
| FurMap | Optional 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.
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.
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.
| Alias and queue | Purpose and exact parameters (type=default) | Renderer input / sample |
|---|---|---|
builtin:unlitopaque/masked | Lighting-independent colour. Texture (texture). | None; sample. |
builtin:toonopaque/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-lightopaque/masked | View-edge light. RimColor (color=77,166,255), RimPower (float=3), Strength (float=1), Texture. | Camera/lights; sample 04. |
builtin:dissolvemasked | 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:foliagemasked/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:triplanaropaque | 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:parallaxopaque | 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:hologramtransparent | 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-surfaceopaque | 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:snowopaque | 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:watertransparent | 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:glasstransparent | 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-fieldtransparent | 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-particletransparent, 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. |
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.
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.
| Parameters | Defaults 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.
| Alias / stage / passes | Exact parameters | Inputs and ordering |
|---|---|---|
builtin:grayscaledisplay-linear / 1 | Strength (float=1). | Scene colour; place near grading. |
builtin:vignettepresentation / 1 | Strength (.65), Radius (.45), Softness (.3), Color. | Scene colour; after tone mapping. |
builtin:bloomscene-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-adjustdisplay-linear / 1 | Exposure (0 stops), Contrast (1), Saturation (1), Tint (vector=1,1,1,1). | Scene colour. |
builtin:lut-gradedisplay-linear / 1 | LUT (texture, 16x16x16 stored 256x16), Strength (1), Exposure (0), Temperature (0), Tint (0). | Scene colour + custom LUT; sample 11 HDR. |
builtin:ssaoscene-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-fogscene-linear / 1 | FogColor, Density (.025), Start (0), Height (0), HeightFalloff (.2), Mode (int=1). | Depth and inverse matrices. |
builtin:depth-of-fieldscene-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:outlinescene-linear / 1 | Color, Thickness (1 pixel), DepthThreshold (.002), NormalThreshold (.15), Strength (1). | Depth, normals, object mask. |
builtin:sharpenpresentation / 1 | Strength (.2), Clamp (.1). | Place after upscale/tone map. |
builtin:lenspresentation / 1 | Grain (.025), ChromaticAberration (1 pixel), Distortion (0), Scanlines (0), TimeScale (1). | Scene colour + deterministic blue noise. |
builtin:motion-blurscene-linear / 1 | ShutterAngle (180 degrees), MaximumRadius (24 pixels), CameraWeight (1), ObjectWeight (1), Quality (int=1). | Depth, velocity, reactive/object mask; best with TAA. |
builtin:ssrscene-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-fogscene-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-shaftsscene-linear / 1 | Source (vector=.5,.3), Density (.8), Decay (.95), Exposure (.35), MaxDistance (.8 screen units). | Colour + depth; selected screen-space light source. |
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.
| Style | Parameters | Use and limits |
|---|---|---|
builtin:highlight | Color (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. |
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.