MILES GERMER · TECHNICAL ARTIST · CINEMATIC SYSTEMS · AI-AUGMENTED PRODUCTION
← All work

Body Glow, Damage Feedback in the Character Material

Hit a fighter and the part of the body that took the damage lights up. Three painted masks, a scalar per region, and four blueprint nodes per event.

A fighter taking a kick in a candle-lit temple, his torso glowing orange where the attack landed
01 · Problem

Rift Fighters splits damage into three targets: Stamina in the torso, Balance in the limbs, Flow in the head. A player has to know which one an attack just hit, and has to know it at the moment of contact, without reading a number off the HUD. The clearest place to say it is on the body that took the hit.

The body glow system running in sequence. WATCH ON YOUTUBE →
02 · The material side

Three greyscale masks are painted against a dedicated UV layout, one per damage region: torso, limbs, head. Each is sampled on UV channel 2, and the red channel of each sample is multiplied by a scalar parameter and then by a color parameter, both held in that fighter's material parameter collection. The three products add together, and the sum joins the rim light and the underlighting on the way into Emissive Color.

The scalars sit at 0. The masks are in the material every frame and contribute nothing, because anything multiplied by zero is off. Setting one scalar to 1 reveals that region in its assigned color. That is the whole switch.

The Attack Target Masks section of the character material, three mask samples each multiplied by a scalar and a color parameter
Three chains, identical apart from which mask and which pair of parameters they read.
The full character material graph, showing the attack target masks, rim light, and underlighting blocks feeding the output node
Where it sits in the full material. Attack target masks top left.
03 · The timing side

Timing is split in two on purpose. The sequence decides when a glow fires. The director blueprint decides what happens once it does.

In the sequence, an event track fires a custom event on SQ_UE4_Attack_02_DirectorBP at the frame of contact. The event runs four nodes: set that region's scalar to 1, read the state-duration parameter out of the same collection, feed that value into a Delay, then set the scalar back to 0. Because the duration is a parameter rather than a number typed into the node, how long a hit reads is one value in one place, and changing it does not mean reopening a sequence.

Each fighter has its own parameter collection, so the two characters hold independent state and one director blueprint drives both. A second group of events covers the defense window and lights individual limbs rather than whole damage regions, with a single event able to set more than one at once: the right elbow event lights the joint and the arm together.

The full sequencer director blueprint, with grouped sections for attack glows and defense window limb glows
The full director blueprint. Every event in it is the same four nodes.
The attack glow section of the director blueprint, three events per fighter for stamina, balance, and flow
Attack glows. Three events per fighter, one per damage region.
Detail of the defense window limb glow events, showing set scalar, get duration, delay, set scalar back to zero Detail of the limb glow section of the director blueprint
04 · Credits
Character material system, body glow material logic, sequencer event wiring, scene lightingMiles Germer
Character design, character models, textures, skinningJoel Blakely
Character art implementation, FX, additional lightingAngel Grajeda
05 · AI's role

I used AI to learn how to do this in Unreal: how a sequencer event track reaches a director blueprint, and how a blueprint writes into a material parameter collection. I placed and wired every node myself, and I tuned every value by looking at the result.

06 · Result

Every damage region on both fighters lights in its own color for a tuned duration, out of three textures, seven parameters per fighter, and four nodes per event. Adding a new hit is one key on an event track and one custom event. Retiming every hit in the fight is one number.

07 · What I learned

Keeping the state in a parameter collection rather than on the character means the material carries no combat logic at all. It samples three masks and multiplies them by whatever the numbers currently are. The combat lives in the blueprint and the shading lives in the material, so I can retime a hit without touching how it looks and retune how it looks without touching when it fires.