--- name: shade title: Shade a sprite description: Add light and shadow with proper hue shifting, one step at a time, so the sprite gains form without gaining the flat-luminance look that marks generated pixel art. Use when flat art needs volume. --- # Shade a sprite Flat shading — the same hue, darker — is the clearest signal that a sprite was made by moving a brightness slider. Real shading shifts hue. ## The rule - **Shadows** rotate toward blue/purple and desaturate slightly. - **Highlights** rotate toward yellow/orange and saturate slightly. `recolor` op `shade` implements this. Use it instead of choosing darker hex values yourself. ## Procedure 1. **Fix the light direction** and state it. Upper-left is the safe default. It does not move again — not across the sprite, not across animation frames. 2. **Confirm the flat art is right first.** `look` op `preview`. Shading a bad silhouette wastes the effort. 3. **One shadow step.** Select the region away from the light, then: ``` select op="rect" rect={…} recolor op="shade" amount=-0.2 selectionOnly=true ``` Or draw the shadow shape directly with `draw` if it needs to follow a form the selection tools cannot describe. 4. **Look.** `look op="preview"`. Does it read as volume, or as a stain? A shadow that follows the form's cross-section reads; one that follows the outline does not. 5. **One light step**, on the side facing the light: `amount=0.2`. 6. **Look again.** Most sprites are finished here. 7. **Only if it needs it**: a deep shadow (`amount=-0.4`) in occluded crevices, a specular highlight of one or two pixels on the hardest material, or reflected light — a faint cool step on the shadow side's outer edge, which makes metal read as metal. ## Ramps If you will shade a material more than once, put its ramp in the palette: ``` palette op="ramp" base="#c04030" steps=5 ``` Then draw with ramp entries directly. Reuse the darkest step across materials — it ties a sprite together and costs no palette slots. ## Dithering Only on 32px+ and only in large flat areas. Use `bayer4`, keep the two colours adjacent in a ramp, and stop if it reads as noise. See `rules://02-shading-and-light`. ## Checks - Is the light in exactly one place? - Do the shadows hue-shift, or are they the same hue darker? - Any banding — long parallel stripes of adjacent steps? - Any semi-transparent pixels? (`validate` will tell you.) ## Related `rules://02-shading-and-light`, `rules://01-palette-and-color`, `rules://22-materials-hard`, `rules://23-materials-soft`, `rules://24-lighting-scenarios`, `rules://72-3d-forms`.