Render Targets as Material masks

Render Targets (RTs) are a special use-case tech in Unreal for when you need a texture to be able to update at runtime, or even in editor. They’re used for minimaps, portals, live monitors, dynamic painting in VR, depth maps, snow and material edits and plenty of other custom solutions. Typi...
Published on January 26, 2026 | 3 min read

Using Bifrost Scatters in Unreal

Seasons’ greetings!So I’ve been experimenting a lot with Bifrost in Maya lately and came up with some interesting things I’d like to share concerning scattering foliage.  Typically I think most game companies do this sort of thing in Houdini, but since that’s a separate package with e...
Published on November 19, 2025 | 5 min read

Async QThreads in PyQt

While making Unreal UI tools with PySide, I sometimes come across a problem of needing to create long-running tasks that can operate in the background while I do other things. Especially the case when I want to run Unreal headlessly to say loop over all assets and change properties, or load l...
Published on October 06, 2025 | 2 min read

P4 Mapping Views to Streams

Earlier this year at Halon, we participated in a case study with Perforce to talk about how we manage our Unreal master material library and custom plugins. The material library is a centrally-managed package of shaders that we previously had to manually migrate from project to project, and w...
Published on June 07, 2025 | 2 min read

CSV Importer & Asset Tagging

Many times when dealing with converting data in-engine into lightweight gameplay assets or when having to do execute small tasks on many types of assets all at once, we utilize Python. Depending on the project and requirement we may run this headlessly through the UE4Editor-Cmd.exe, or throug...
Published on April 29, 2025 | 1 min read

Asset Renderer for Turntable Automation

In some projects, the sheer amount of static mesh and skeletal mesh content used to make a show, movie or a game can be substantial. For times when lots of custom art is being updated, it will also be important to produce new renders for review. This widget is a python script configuration t...
Published on September 03, 2024 | 0 min read

Static Mesh Masking

For a KSP2 trailer I worked on, we needed a cheap easy way to animate a time-lapse building up of a moon base. The assets in the environment all used basic default collision and were laid out in-engine with centered pivots. Easy work!<a href="https://david-miller.life/images/tags_po...
Published on October 08, 2023 | 0 min read

Foliage Converter

The purpose of this tool is to provide a simple work around for being able to re-use instances of meshes by copying in-engine painted foliage into new actors that we can control as normal.Many Tools already exist for this on the marketplace, especially ones more powerful like the Inst...
Published on August 12, 2023 | 1 min read

Sequence Pass Generator

Sometimes in post-viz, its necessary to bake out other unreal passes so they could be used in editing for extra shadow, reflections and effects work. This becomes a huge task when there are hundreds of cameras and episodes, so finding a means of automating the changing of level sequencer trac...
Published on February 17, 2023 | 1 min read

Screenshot Tool

A editor widget serves as a selector of cameras that it searches and finds in the level. As you select cameras from its list, the bottom of the Tool will display the preconstructed directory and name of each image to be exported. It will create this from the path beginning with the show:...
Published on November 03, 2022 | 0 min read

Deterministic Ocean Buoyancy

Implementing walkable boats for player &amp; AIThe result at a flat z=26000I began with using a hidden static mesh as physical collision...
Published on May 22, 2021 | 2 min read

Data Layering with Image to CSV Conversion

This was my first testing method of writing game data like zone triggers, fauna spawn types, and random spawn generators into textures that I can edit back and forth from png to csv.<img src="https://david-miller.life/im...
Published on March 26, 2018 | 0 min read