Card Normals

A free Blender add-on that makes flat cards shade as one volume. Hair cards borrow the scalp, leaves borrow the canopy, grass points at the sky — over every selected object at once.

FreeGPL-3.0, Blender 4.2+
Get it from Blender Extensions →

Also installable from a downloaded .zip.

Not on Blender Extensions yet. The add-on is finished and tested; the listing is still to come, and the button above goes to the platform rather than to a page for this add-on.

Two identical bushes of flat cards under the same light. The left,
            using the cards' own normals, is evenly bright and reads flat. The
            right, with normals taken from the sphere underneath, shades from
            light at the top left to dark at the lower right and reads round.
The same 420 cards under the same light. Only the normals differ.

The problem

Hair cards, foliage and grass are flat planes with an alpha texture. Lit by their own geometry, they read as flat planes: each card catches light on its own, and a head of hair breaks up into separate quads instead of holding together as one mass.

The fix is to stop using the card's own normals and borrow the shading of the volume the card belongs to — the scalp under the hair, the canopy of the tree, the ground under the grass.

What it does

SourceNormals come fromFor
SurfaceThe closest point on a proxy mesh, interpolated across the faceHair on a scalp, leaves on a trunk
PivotA point — the object's own origin, or an empty you pickBushes, canopies, anything read as a sphere
AxisOne fixed directionGrass and ground cover

Using it

  1. Sidebar in the 3D viewport (N) → Cards tab.
  2. Pick a source. For hair, choose Surface and set the proxy to the head or scalp mesh.
  3. Select your cards and press Set Card Normals.

The proxy is sampled after its modifiers, so a subdivided or shrinkwrapped scalp is read at the shape you see.

Compared with doing it by hand

Blender can already do this with a Data Transfer modifier, and that is the honest comparison. The modifier needs Face Corner Data enabled, Custom Normals ticked, the mapping switched off its default, the source object set, and the whole thing applied — per object. This is the same result with the mapping already correct, over a selection, plus the pivot and axis sources the modifier has no equivalent for.

Getting the cards themselves is the other half of the job.

Hair Cards for Blender — turn hair curves into game-ready cards with atlas UVs, in one operator. $29 one-time, in development.

Requirements