Tools Programming

Graduate project adapted into a working game dev tool. A WPF C# interface sends user parameters to a C++ DirectX erosion simulation, returning heightmaps for Unreal Engine.

Created to practise tools programming concepts and connect a simulation project to a real workflow

This started as a university honours project on water erosion. I refactored it into a simple tool so that artists or designers could generate and tweak terrain without touching code. The UI is built in WPF (C#) and talks to a C++ DirectX 11 backend to run the erosion simulation before exporting the results as Unreal-compatible heightmaps.

Skills Practiced

While developing this tool, I had the opportunity to work across both managed and unmanaged environments. On the frontend, I created a WPF interface in C# with adjustable parameters such as erosion strength, number of passes, and random seed values. This interface was designed to be clear and responsive, allowing quick iteration without overwhelming the user.

Behind the scenes, I implemented communication between the C# UI and a native C++ DirectX application. This required launching the simulation process with user-defined parameters and ensuring the results were passed back efficiently. I also worked with file handling and export automation so the generated heightmaps were saved in a format that Unreal Engine could import directly.

Through this, I practised:

  • Building user interfaces with WPF and C#.

  • Integrating managed code with native C++ for performance.

  • Using DirectX for visualising simulation results.

  • Automating export steps for a smoother content pipeline.

  • Designing workflows with non-programmer users in mind.

What I Learned

This project was my first real step into turning a technical simulation into something that could fit within a game development pipeline. I learned how to adapt my honours project into a tool that others could use without touching the underlying code.

I discovered how important UI design is in tools programming, especially when the end user might not be technical. Keeping controls intuitive while still offering flexibility was a balancing act that shaped how I approached the layout and parameter options.

On the technical side, I gained experience in managing data between C# and C++ applications, which meant learning about process launching, parameter passing, and file-based data exchange. I also had to make sure that what the simulation produced worked exactly as expected in Unreal Engine, which involved testing output formats, scale, and import settings.

By the end of the project, I had a much clearer understanding of how a tools programmer supports other disciplines — not just by writing code, but by building reliable, easy-to-use systems that fit neatly into existing workflows.