An overview of what I’m hoping to achieve during the second week of third year, as well as first week’s progress.


I’ve made massive progress on both of my projects last week and I’m happy with the pace I’m working at right now. Doing both projects at once was a really good call, as whenever I get too tired of programming I can go into Unreal and play around with shaders, and the other way around.

LOD Tool Progress

I’ve now added functionality for the tool to be able to output the number of LODs, the number of materials and the name of each mesh into a CSV file (an Excel file format). This was quite a big step, as it implied using multiple python libraries that I’m not particularly familiar with, but Google was my best friend.

We also had the great opportunity to have Malachi Duncan (technical artist @Epic Games) come in as a guest speaker last Friday, which was honestly a dream come true. I got to talk to an industry professional about my goals for each project and he gave me very valuable tips, like learning Houdini before I go into full time work. He also took one good look at my code and fixed a bug within 2 minutes. It was pretty mindblowing.

Shader Museum Progress

Huge progress on this project last week. I made around 4 shaders, a snow one, an ice one, a northern lights one and a glass one. Other than that, I also made the snow particle system that I’ll be using to create the interactive blueprint. I feel like moving forward, I should focus more on presentation, as I was told it matters just as much as your technical abilities. I have the layout of my museum in mind and I’m really excited to make it a real thing.

I subconsciously set the theme for my museum to be Winter (or something like that), as all my shaders seem to have to do with the season. I really have no clue how that happened, but I’ll go with it. I’m a huge Christmas person anyway.


My biggest goal for this week is to make the interactive snow globe blueprint. I want it to be able to generate snow when you walk up to it and press E. The snow should burst from one spawn location and fill up the entire globe, as well as be able to collide with the globe mesh.

For a stretch goal, it would be cool for it to be able to alter the level of snow on the ground, so that when the snow falls the ground texture scales up on the Z axis. I think I know just how to do that with a reference to my Tesselation mask multiplier from my snow shader.

If I’m able to change this value from within the blueprint as the snow falls, that should be all I need to do.

A python newbie’s approach

Why I chose the project

Going into this project was a bit of a leap of faith. Faith that I’ll be able to pick up a new programming language and use it with the Unreal Enginge Python API to create a tool according to the project brief.

All in all, I’m more than willing to put in all the effort it will take to teach myself this stuff now, as I know it will be really helpful knowledge to have before going into the industry. I had a quick chat with someone the other day, and they said something among the lines of “If you’re a good technical artist, I can basically guarantee you a job”. Needless to say, that really motivated me.


Due to the restrictions university enforced on all campus computers, I ran into a million issues while setting up for the project. Tech support was amazing and stayed by my side during what should’ve been a straight-forward process (installing git, Visual Studio Code, poetry etc.), but ended up taking such a long time and a lot of brain power for troubleshooting.

It’s all working now though, and I really hope I won’t need to ask for more help, because I’m sure every time Craig from IT sees my purple hair he wants to run away.

Getting the script to run in UE4

I wasn’t exactly aware that you need to enable some extra plugins in Unreal to be able to run Python scripts, but we live and we learn.


After that, all you need to do is go into the context menu and select File>Python>Execute Python Script. If you’re lucky enough and your script doesn’t run into any runtime issues, you should be able to see it doing its thing in the Output Log that you can access in the same context menu, by selecting Window>Developer Tools>Output Log.

contextmenu contextmenu

The First Function

I decided to start the projects by making a function that takes the number of LODs a mesh has from the engine, and outputs it neatly next to the mesh name.

    def check_lods(static_mesh):
        lod_no = unreal.EditorStaticMeshLibrary.get_lod_count(static_mesh)
        print(f"current LOD count: {lod_no}")

Surprisingly enough, this just worked straight away.


I think as a beginner, project structure is something I really struggle with. For now, the plan is to keep making functions and testing that they work as I go, and then work on a UI for the tool and potentially some extra functionality. The most important thing is to first get all the data I require from the engine and then be able to put it all into a spreadsheet. I hear technical artists really like spreadsheets so I’m gonna join the fun.

Preferred outcomes and goals

My main goal with this project is to get more comfortable using Python and to get used to the Unreal API, as I’m sure I’ll be using it in the future too. Beyond that, I want to test my ability to time manage a project that I have no rough estimate how long it’s actually going to take, given that I have to learn so many new things.

Another goal of mine is to finally keep my development diary (aka this blog) up to date with every issue, fix or implementation that I make.

My next post will be about starting the Shader Museum project, as I wish to work on both at the same time, mainly to be able to take a break from code when I need it, or take a break from shader spaghetti nodes.

So then.. final year

After facing major burnout throughout the summer, I was excited to come back to university for the final year of my course.

The first week has been quite fun so far, we’ve all recieved the briefs for our first semester and surprisingly enough, there were 4 different tech art briefs that I got to choose 2 from. I say surprisingly because I know not many people want to specialise in that area (as far as I’m aware I’m the only one), so it was really nice seeing that it was still included.

After thoroughly reading through all of them, I decided I wanted to do the Shader Museum brief (pretty self explanatory, just a nice way of presenting shader assets that I created) and the LOD tool brief. Now, the latter is way out of my comfort zone, but I decided I want to challenge myself this year and try doing something new.

For the LOD tool I decided I’m going to write it all in Python, a programming language that I have a little bit of experience in after finishing my personal summer project Curby, a discord bot. Even so, I’m looking forward to working with the Unreal Engine API and learning more about how it works.

On a separate note, now that I’ve finally set up my own professional blog, I’ll keep updating it with progress on both projects, as I’m sure it’ll be quite the ride!