Skip to Content
DocumentationURP ModulesBlob Shadow

Blob Shadow

Blob Shadow draws a soft disk under every registered transform. It is inexpensive, art-directable, and reads well in stylized games where physically correct shadows would clash with the rest of the look. Use it as the only shadow on mobile, or as a layer on top of cascade shadows for crowd actors. Blob Shadow is an optional module added through the Renderer Feature Installer.

Video

A crowd of stylized characters running across uneven terrain, each with a soft shadow disk draping over the bumps in the ground beneath them rather than reading as a flat decal.

modules/blob-shadow/blob-crowd.mp4

Soft shadow disks conforming to uneven ground under a moving crowd.

When to use it

  • Mobile projects that cannot afford a shadow cascade.
  • Crowds and swarms where individual cast shadows would alias.
  • Stylized art directions where a clean disk reads better than realistic penumbras.
  • VR titles that need stable stereo without shadow shimmer.

How it works

A single full-screen pass reads the Depth Texture and the registered blob transforms. For each pixel inside a blob’s world-space radius, it darkens the result with a configurable falloff. Because it reads depth, blobs drape over uneven ground rather than rendering as flat decals. Registered blobs are batched into a single structured buffer and drawn in one pass after opaques.

Renderer Feature setup

  1. Open Window → Genesis → Renderer Feature Installer and enable Blob Shadow.
  2. Attach a GenesisBlobShadow component to each transform you want shadowed.
  3. Tune the per-component Radius and Strength, or drive them from the Animation API.
  4. Enter Play mode to confirm the blobs draw after opaques and conform to the ground.

Settings

Inspector labelShader propertyTypeDefaultDescription
Radius_BlobRadiusFloat0.5World-space radius of the disk. Scale with the actor's footprint.
Strength_BlobStrengthFloat (0–1)0.6How much the shadow darkens the ground (0 = none, 1 = black).
Falloff_BlobFalloffFloat2.0Edge softness curve exponent. Higher is a harder edge.
Max Distance_BlobMaxDistanceFloat20Distance at which blobs fade out and skip the pass.
Color_BlobColorColorRGB(0, 0, 0)Tint multiplied onto the floor. A desaturated brown reads well in warm scenes.
Max Blobs_MaxBlobsInt256Capacity of the structured buffer. Raise for large crowds.

Performance & quality

  • Cost scales with screen coverage, not blob count. Distant crowds are effectively free.
  • Restrict receivers with the Receiver Layer Mask to skip surfaces you do not care about.
  • Pair with Stylized Fog — soft disks plus height fog ground the actor without a cascade.

Tips & gotchas

  • Blobs are opaque-only receivers; transparent water uses the Volume override instead.
  • For tall objects (trees, lamp posts), increase the radius and lower the strength so the disk reads as ambient occlusion rather than a hard shadow.
  • The component can be driven from the Animation API to stretch and squash on landing — see Animation API.
Last updated on