Skip to content

Nodes · Blacksmith

BS_Damage

Blacksmithv4coreNeeds full inputForge

Overview

EXPERIMENTAL — still being built. Procedural damage on a surface — cuts, tears, frays, worn holes, squib hits, metal gashes — where the roto says. Wire the plate into in and a roto into cut: its shape IS the damage (the node never invents a location; it gives the artist's shape a material edge). matte bounds the surface so fray and threads stay on the garment; under is what shows through. The output is the plate with the damage on it; the views (damage.hole/fray/threads/lip/debris/reveal) ride along as layers. Twist torn and age for severity, pick a material preset from the strip, then tune the fine knobs.

How to

How-to

  1. Wire the plate into in and draw a roto for the damage into cut: its shape IS the hole.
  2. Wire a matte of the surface (the garment, the panel) into matte so fray and threads stay on it, and what shows through into under.
  3. Pick a material preset (Linen tear, Canvas slash, Bullet hole – metal, Burnt…), then twist torn and age for severity.
  4. For a squib, set animate with hit_frame and open_frames; output shows the damage views on their own.

Inputs

InputWhat it takes
inthe image this node works on
cut—
mattethe alpha that drives this node
under—

Parameters

ParameterTypeDefaultWhat it does
profileChoicetearThe material edge applied to the roto's boundary. slash: a tight edge sharpened toward the spine's ends (the dress slit). tear: a jagged edge, wider on the far side of direction. hole: an isotropic rough hole. worn: the hole plus moth-eaten satellite holes eroded around it (the tattered cloth). impact: radial creases and a star-tear from the centre (a bullet hit). gash: metal — the boundary bends and the rim flares toward direction (the exit side of a blade). slashtearholewornimpactgash
directionFloat0.0Which way the damage travels, in degrees (0 = image right, 90 = image down). The tear's wide side, the gash's exit lip, the propagating tear's sweep direction under animate = tear.
tornFloat0.5How badly: 0 = a clean fresh cut, 0.5 = worked-at edges with fray, 1 = shredded — wide fray, long and many threads, satellite holes, a rougher edge. A severity macro over the fine knobs: it scales their effect and never moves the roto.
ageFloat0.0Fresh (0) to old (1): old damage frays wider, threads sag and mat, and their colour dulls toward the plate's dirt.
raggednessFloat0.5How rough the edge is: 0 keeps the roto's own edge, 1 breaks it into fBm jags of scale size. torn scales it.
scaleFloat24.0The size in pixels of the largest edge feature — jags, satellite holes, the burn halo, the reveal's shadow depth.
seedInt0The variation seed: every thread, jag and fibre bit is a pure function of the seed and the frame, so the same seed is the same damage on every machine.
fray_widthFloat6.0Fabric: the band in pixels outside the hole where the edge dissolves into fibre fuzz. 0 for metal and paper. torn and age widen it.
thread_countFloat40.0How many loose threads hang across and off the opening, at torn = 0.5 (fewer when fresh, many when shredded). 0 for no threads.
thread_lengthFloat24.0How long the threads grow, in pixels, before the loose end.
thread_widthFloat1.0The threads' thickness in pixels; they taper toward the loose end.
curlFloat0.5How much the threads wander: 0 straight along the weave, 1 curling and kinking.
weave_autoBooltrueOn: the weave direction is read from the plate's own texture (the structure tensor around the cut) — stripes and visible weave set it. Off: weave_angle sets it. Either way threads run across the gap: a weave parallel to the slit is turned to cross it, because the threads that show are the ones that were cut.
weave_angleFloat0.0The weave direction in degrees when weave_auto is off, or the fallback when the plate has no readable texture.
gravityFloat90.0Which way loose threads and fibre bits droop and fall, in degrees (90 = image down). Change it for a tilted camera.
droopFloat0.5How strongly threads sag toward gravity: 0 hangs straight along the weave, 1 drapes.
lip_liftFloat0.0Metal and leather: the rim bends outward this many pixels, catching the key from up-left on the exit side and darkening on the other. 0 for fabric.
burnFloat0.0A charred halo on the surface outside the edge, burn × scale wide, fBm-broken. For burnt holes and bullet scorches.
revealChoicefillWhat shows through the hole. fill: fill_color with the interior shading. under: the under input (a lining, skin, an underlayer plate), offset by parallax; falls back to fill when nothing is wired. transparent: the hole is alpha 0, for Merge over anything. fillundertransparent
fill_colorColor[0.05, 0.04, 0.04, 1.0]The interior colour under reveal = fill — a dark cavity by default.
interiorFloat0.6How dark the cavity shading is: darkest against the lips (the lip's shadow onto what is beneath), half-shaded at depth. Applies to fill and under alike.
parallaxFloat2[0.0, 0.0]Pixel offset applied to the under input as seen through the hole — a slit shows the layer beneath slightly displaced as it opens.
animateChoicenonenone: the cut is fully open on every frame (an animated roto animates it). squib: the hole opens from the cut's centre outward over open_frames starting at hit_frame, with a puff of fibre bits. tear: the cut propagates along direction from its rear end, start to start + duration. nonesquibtear
hit_frameFloat1.0squib: the frame the impact lands. Nothing is open before it.
open_framesFloat3.0squib: how many frames the hole takes to open fully — 2–4 is the practical-element beat.
startFloat1.0tear: the frame the tear begins at the cut's rear end (the end opposite direction).
durationFloat24.0tear: frames from the first opening to the cut fully open at its far end.
puffFloat0.5squib: how much fabric fibre bursts out on impact and falls, in the plate's colour, alive for eight frames. 0 for none.
outputChoiceresultWhat the rgba shows. result: the damaged plate. hole / fray / threads / reveal: that view alone, for checking — the same views are always there as damage.* layers whatever this says. resultholefraythreadsreveal
disabledBoolfalseBypass: the node passes its first input through untouched (D in the graph). The knobs keep their values for when it comes back.
labelTextA note shown under the node in the graph — what this node is FOR. Never affects the render or the cache.
hide_inputBoolfalseDraw the node without its input wire — a tidy graph for a node whose source is obvious (a Dot, a viewer tap).