logo80lv
Articlesclick_arrow
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_login
Log in
0
Save
Copy Link
Share

Recreating a 19th Century Magneto-Electric Shock Machine for a Prop Challenge

Kyle Michel explains how he kept the poly count in Blender low without sacrificing detail in the Magneto-Electric Shock Machine project, discusses the actual math behind setting up a realistic Control Rig system in Unreal Engine, and shares his experience with Unreal Engine 5's Substrate material system.

Introduction

Hi everyone, I’m Kyle Michel. My passion for 3D game art began in college with my major in Game Art and Design, back when The Art Institute of California – San Diego was still a premier spot to learn the craft. Upon graduation, I didn’t get my foot in the door at a game studio but ended up working as a 3D mapping specialist for almost ten years, creating highly accurate map samples for autonomous driving.

After that, I worked at a small studio doing legal animation for one year, modeling and texturing content for demonstrative courtroom videos, until work dried up. I then built haunted house sets right here in San Diego for a few seasons. In 2023, after some complacency in those various roles, I began focusing heavily on leveling up my skills in environment and prop art.

I was fortunate to land a job at Dream Foundry Games as an environment artist after that, where I helped ship two titles. Sadly, production was halted toward the end of 2025 on our larger, ongoing early-access project. I was quite bummed not to see the game reach its true potential.

My wheelhouse focuses on realism paired with optimization, alongside visual storytelling through textures, lighting, and composition. Lately, I’ve prioritized individual hero props to refine my workflow and push my detailing ability, all of which are intended for a greater composition: my Evil Dead project. Seeing how studios continually push boundaries to create stunning and, more importantly, playable worlds is what constantly inspires my own projects, so much so that it is often difficult to keep up with the rapid rate of tech improvements coming left and right!

Magneto-Electric Shock Machine

When Sierra Division announced the Back in Time: Antique Props Challenge, I used it as an excuse to pause an ongoing project, engage with the community, and challenge myself. A few factors drove my choice of asset:

  • I wanted to make something quirky, weird, and indicative of the strange inventions of that era, and something I felt confident no one else would attempt.
  • Having just wrapped up my Book of the Dead asset, I missed hard-surface modeling and wanted a switch from a sculpting workflow.
  • Since the intent for all my work is real-time presentation, it needed features that could be animated for final renders.
  • It had to be small to accommodate the texture size restrictions in the submission guidelines – one single 2K texture set.
  • I wanted a relatively simple model so I could devote most of the challenge window to texturing and final presentation.

When collecting references, it initially seemed like there wouldn't be much out there. However, I found a YouTube video showing one of these machines being taken apart. I took dozens of screenshots to assemble a reference board covering all sides and the intricate inner workings.

My toolset for this project included:

  • Blender (modeling, UV unwrapping, rigging)
  • Marmoset Toolbag (baking)
  • ZBrush
  • Substance 3D Painter
  • Unreal Engine (lighting, presentation, animation, rendering)

Modeling

When blocking out the model, I started with the large elements and worked my way down. The first piece was the chest and lid; once I confirmed their scale, the rest was straightforward. Next came the crank, the brass grounding frames, the velvet spinner, and the gears. Most of these machine components were unique, aside from the handles, bolts, and hooks for the braided copper wires, so I couldn't rely on mirroring much to speed things up.

I prefer starting from a mid-poly model, so I begin working with bevels once a blocked-out shape looks right. I use a weighted bevel workflow to refine and iterate edges quickly. This becomes incredibly useful when deciding how many edges to assign to the low- and high-poly versions generated from the mid-poly mesh.

The Hard Ops add-on handled my Boolean and radial array needs for elements like bolts, hinges, gear teeth, and cavities. Most of these details were baked down to minimize the low-poly tri-count. The challenge rules stipulated a maximum of 25,000. Even after adding spline-based, 3-sided cylinders for the low-poly cords, I easily kept the entire asset under 15,000 triangles.

Sculpting

For sculpted details, I deliberately chose to focus only on the wooden chest and leave everything else as hard surfaces. To avoid any post-sculpt retopology, I kept the details subtle, adding small nicks and chips to introduce micro-variation to the clean edges.

Here's my method centered around the Morph Target brush:

  1. Import the mid-poly chest elements > Subdivide > DynaMesh, then smooth out any bad geometry.
  2. Store a Morph Target. I used ClayBuildup for a broad edge-variance pass, skipping areas that would be covered or invisible in the bake.
  3. Add deliberate chips and scratches using the DamStandard brush.
  4. Use the Morph brush to bring back roughly 80% of the original shape, reducing unwanted noise.
  5. Run ZRemesher with the DynaMesh version saved to history, then project the details over the clean subdivision levels.

Additionally, I decided to spice up the bake by incorporating dovetail joints on the wood. I added these to the high-poly model in Blender beforehand. These details added a lot of visual interest to what would otherwise be just a basic box.

Animation

This process began in Blender with a basic armature setup, adding bones for every moving part. With any rig, the goal is to make it user-friendly so anyone can pick it up and use it with ease.

With that in mind, the bone setup was kept simple, allowing weights to be fully flooded for entire elements. For the gears, velvet spinner, and crank, I placed the bones exactly where momentum would naturally generate them. Another bone was placed at the primary hinge location for the lid, so it could be viewed open or closed. Handle bones were placed centrally, giving me the freedom to arrange them naturally on surfaces. Everything was then parented to the root armature modifier.

I used the Auto-Rig Pro add-on, which is incredibly helpful for translating orientations to fit Unreal Engine’s Y-up arrangement when exporting from Blender. From there, I set up the Control Rig functionality in-engine to test the movement.

At this stage, I had to dive into how gears worked. Understanding gear ratios and torque generation is a fascinating subject for sure. Knowing the tooth count of each gear determined how they spun together and how many revolutions they made relative to one another.

By measuring the distance between the central origins of each gear against the overall shape of the rubber belt pulley, I calculated the belt speed based on the torque generated from the crank control down to the spinner.

After working out the math, it was time to dive into the Unreal Control Rig system, where I set up several Transform nodes alongside exposed parameters to start plugging in those values to simulate the increase in torque that generates the electric current on the velvet spinner.

The reference video mentioned above showing the machine teardown was of massive help in understanding its functionality. Once the controls were working together, I tuned the strength and torque values until the crank spun naturally and, more importantly, properly drove the growing momentum of the velvet spinner based on how fast the crank was turned.

UVs & Texturing

The challenge limited us to a single 2K texture set, which was tricky for mine since many elements required unique UV space. My seam strategy is always a mix of hiding seams, relaxing islands with undesirable stretching to keep them straight, and quadrifying the rest. Straighter islands pack much better, though relaxed islands offer more consistent texel density for organic shapes.

To maximize detail where it mattered, I scaled down less visible areas. Since the bottom and back of the interior parts of the box would never really be viewed, I shrunk the bottom of the chest, the back of the magnet, and the undersides of the brass frame islands. This freed up more space for primary surfaces. I also stacked identical elements, most notably the gears.

On a side note: if you ever encounter a baking issue with stacked UVs and can’t for the life of you figure out what the issue is, try shifting one of the stacked islands over to an adjacent 1:1 UDIM tile momentarily and rebake – it usually fixes things.

Once my islands are ready, I like to average the relevant islands, then use the Zen UV add-on to quadrify and relax them, followed by UVPackmaster for packing. Using the Advanced Heuristic option with mixed scales, while tweaking precision and margin values, yields excellent results quickly.

Because I intentionally breezed through modeling, optimization, and UVs, texturing is where I spent the most time, and my workflow follows these steps:

  1. Base material: dial in the correct PBR values right out of the gate to ground the different materials.
  2. Adding more Color and Roughness variation: this step is where I start adding a lot more interest to the base pass and start thinking of any special considerations, like the painted magnet in this case, which very clearly had to transition from shiny metal to a rougher painted blue to exposed metal.
  3. Edgewear, lightning, and curvature accents: this step adds great variation and emphasizes the shape language through contrast and masks that start out with basic generators and get more varied with grunge masks.
  4. Dirt, grunge, and rust: I push the wear heavily here to make the machine look poorly maintained and start treating areas where I see more or less dirt build up accordingly. As an example, I treated the dirt surrounding the label on its own, then spent time only on the interior bottom portion of the wood chest, and so on.
  5. Unique storytelling elements: adding signs of history – who owned it, where the high-use areas, spills, or scratches are. This is the "cherry-on-top" pass.
  6. PBR validation: confirm everything stays within real-world PBR ranges with a validator. In this case, I used an ACES PBR validator to ensure everything remained within real-world values.

Wood was my starting point since it was the dominant material. Grain direction is vital for realistic wood; understanding how the panels and dovetails were cut and assembled drove my layout choices. Because UV packing randomizes island rotation, I often create a duplicate wood layer/folder that is rotated 90 degrees to correct the grain direction where needed. To avoid this issue, I could have assigned all the necessary islands to a group, then disabled Allow Rotation in UVPackmaster in my final packing pass. I gave it a glossy varnish that was rich in color variation but smooth in height, save for the sculpted nicks and scratches.

For the label, I luckily found a high-resolution, mostly orthographic reference image. I layered details over it to add age, wear, a distinct paper texture, and storytelling elements like writing, tears, odd black stains like the ones in my reference, etc.

I used the velvet spinner as an excuse to explore UE5's Substrate Slab system. Given that, I spent minimal time on it in Substance 3D Painter – I just had to add basic color and roughness variation. I then generated a custom mask in the packed texture's usual Mixed AO channel to isolate the spinner, as this wasn’t doing much for me otherwise.

While I am still new to Substrate, the core logic, I think, is to picture layers: placing one slab at the base, mixing a second slab on top, checking their interaction under in-engine lighting, and adding further layers as needed. The procedural potential for material types is truly massive.

It’s a huge upgrade for glass and transparent materials that can produce great layered mineral effects, like a jade stone with internal fractures and an ethereal core, as an example. For this asset, I utilized Fuzz, Glint, and Anisotropy slab types alongside a bump texture for noise, exposing these parameters to refine them directly within the material instance.

Lighting & Rendering

Given how beautifully Lumen works with ray tracing in UE5 now, I always render my final assets in-engine rather than in Marmoset Toolbag. However, I still prefer Marmoset for texture breakdowns due to its easy transparency and Cull Wireframe options.

I like to push through a quick base texture pass early on so I can pull the static mesh into Unreal. This lets me jump-start final renders and catch any materials that read poorly. Utilizing a template scene turns production into a smooth, iterative loop between Blender, Substance 3D Painter, and in-engine updates.

While working on the Reel-to-Reel Tape Recorder prop for an ongoing Evil Dead fan art environment, I built out my own base project, referencing a look-development setup from a former mentor. This means I can use the same project for practically anything I do for future projects. In it, I have a neutral lookdev setup with a standard white 3-point light rig and a CineCam that has adjustable backdrop and floor static meshes.

The second version is my final render scene. Its lighting is tailored specifically to the asset to create an atmospheric, in-context look, often incorporating Exponential Height Fog and EasyAtmos dust. My Post Process Volume complements the exposure values of the camera and gets a low-setting color grading LUT, whichever fits the mood I’m after. The challenge allowed for contextual submissions, so I used the Post Soviet Hospital Corridor environment from Fab to quickly build out the background. I stripped out excess lights and unnecessary assets to keep the folder structure lean, keeping only what I needed to frame the primary desk.

Once the asset is framed and lit, I use Level Sequences paired with spawnable Blueprints. This keeps independent renders nicely clustered. Any object placed in the scene can be added to the active sequence and converted to spawnable, letting you swap rapidly between different sequence setups. I frequently add empty actors to use as focus targets for my cameras, ensuring the asset stays perfectly centered and sharply in focus. These can also be used to do a 360-degree rotation of your lighting setup universally.

Movie Render Queue is a fantastic add-on in Unreal that works beautifully with the default Sequencer. It features numerous override options, though I primarily use Export, Anti-Aliasing, and Output. Rendering still images as EXRs and animations as PNG sequences yields the cleanest results for me.

I bring the still shots into Adobe Photoshop for final but subtle adjustments – tweaking brightness, contrast, vibrancy, and sometimes levels and luminosity. I also apply a little Smart Sharpen to crisp up the pixels before exporting the final PNGs.

For animations, I load the completed PNG sequence into DaVinci Resolve. It seamlessly composites the frames into a cohesive, high-quality UHD MP4 export.

Conclusion

The Magneto box took about two weeks to complete. Setting up the Control Rig to accurately simulate the gear spin and torque effect was the hardest part, as rigging isn't my primary specialty. The second major milestone was diving into UE5’s new Substrate Slab system to achieve the right velvet look, which took a lot of trial and error due to the current lack of documentation.

The industry is going through a rough patch right now. But if you love creating things to scratch that creative itch and push your craft, my advice is to keep working and keep learning. Engage with the community and share your work on socials. From my perspective, artists stand a much better chance of getting hired if someone at the studio is already familiar with you and can vouch for your work ethic and skills.

And in closing, I’d like to thank 80 Level for reaching out to me to cover this project, and I hope these insights help anyone tackling similar projects. Cheers to everyone, and all the best!

Kyle Michel, Prop & Environment Artist

Interview conducted by Stephanie Almogabar

Subscribe to 80 Level Newsletters

Latest news, hand-picked articles, and updates

Built for the Game & Digital Art Industry
Get Our Media Kit

Comments

0

arrow
Type your comment here
Leave Comment
Built for the Game & Digital Art Industry
Get Our Media Kit