• HOME
  • WHAT WE DO
  • PORTFOLIO
  • WHO WE ARE
  • CAREERS
  • CONTACT
  • BLOG

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Cookie Policy

Mobile Logo

Slate

Slate 101 – Building a Leaderboard

June 10, 2020June 10, 2020
Programming

Figuring out the basics of UE4's Slate syntax is sometimes daunting for programmers when they first use it. In this post we discuss some core concepts in order to help out new Slate users, and possibly refresh the memories of those who don't use it all that often!

More
Video Game

Getting Into Games Dev – Part 2

March 24, 2020June 10, 2020
Business

So, yeah, I started writing this story in July 2017 with Part 1 ... and intended to finish it a month later. It's now March 2020 ... nearly 3 years have passed ... and the world has most definitely moved on from wondering what happened next in my route to the games industry!

So, yeah, let's pick right up where we left off...

More
Woman's Hand Holding Gift Wrapped With Banknotes

The Curious Incident of the Archive Corruption

October 2, 2019May 27, 2020
Programming

During an optimisation pass on an internal project we spotted a few areas in UE4 deserialization code that could be hardened up. This post presents those fixes.

More

Blueprint Extension: Hide Unrelated Nodes

February 13, 2019September 23, 2019
ALL/Programming

This is a new feature for both the blueprint editor and the material editor. When selecting regular nodes (except comment nodes, document nodes and the material output node) in the editor, this feature will fade out nodes which don't affect the selected nodes and nodes which are not affected by the selected nodes to make sure that users can focus on the nodes which are related to the selected nodes.

More

Loops and Bubbles

June 19, 2018June 19, 2018
Programming

Some quick fixes for mini bugs. A superfluous for loop, and some visual tweaks to comment bubbles!

More

Be Vewwwy Vewwwy Quiet, We’re Hunting UObjects

May 23, 2018May 23, 2018
Programming

While hunting down some mysteriously vanishing UObjects we stumbled across a more fundamental problem in the garbage collector.

More

Trash Compactor

April 12, 2018April 12, 2018
ALL/Programming

We recently found a huge leak in the UE4 garbage collector, particularly rearing its head on dedicated servers for large open-world games. Servers for arena type games with short play times (<1 hour) seem to be little affected, and clients don’t see the problem much either. “Huge” is not hyperbole here – we’re talking the garbage collector alone using up to 10 GB of ram in under 24 hours of server operation!

More

Placating The Natives

January 8, 2018January 8, 2018
ALL/Programming

In this article we delve into Blueprint Nativization, a relatively new feature of UE4 that offers significant performance improvements for many projects. Sadly, it often doesn't work out of the box - we've spent some time fixing and improving it for a particular project that we were working on. We have a LOT of changes to present here - some of which have already been implemented into UE4.

More

PhysX: The Case Of The Leaky Cloth

August 28, 2017January 8, 2018
ALL/Programming

We found quite a large leak within Apex 3.4 (currently used in Unreal Engine 4, amongst others) - in a relatively short run of the title that we were working on, we saw over 150mb of leaked memory. Here, we present some changes that will fix this

More

Getting Into Games Development (Part 1)

July 26, 2017June 10, 2020
ALL/Business

In this post our MD, Robert Troughton, starts his story about how he got into the games industry

More

So Long MAX_PATH… And Thanks For All The Fish!

June 30, 2017June 10, 2020
ALL/Programming

Almost every developer that we've spoken to seems to have, at some point, encountered the MAX_PATH limit problem... this post talks about how to PROPERLY fix it

More

Is It A Drive? Is It A Directory? No, It’s…

June 28, 2017June 10, 2020
ALL/Programming

In this post, we look into why IPlatformFileCreateDirectory() was responsible for nearly 1 million allocations during a full cook of KiteDemo and why FPaths::IsDrive(), a huge 100-line function, is being used just to determine whether a filepath begins with a drive mapping... all for the purpose of further speeding up Unreal's cook process just a little bit more

More

Cache-ing Up, Cache-ing In

June 22, 2017June 10, 2020
ALL/Programming

As part of modifying the file profiler we looked at the file IO activity on starting the UE4 editor with one of the lightweight sample projects, noticing that certain files were being read multiple times. Each was being read in their entirety up to 200 times simply opening the editor. In this post we show you why this was happening and how it can be fixed

More

The Improvement of the File Profiler

June 19, 2017January 8, 2018
ALL/Programming

UE4 has a little-known profiler for analysing file operations (with the intention that this information can then be used to make optimisations). In this post we take a look at that - and we make some improvements to make it (even more) useful

More

The Quickening Of The Light Map UV Generation

June 19, 2017June 12, 2018
ALL/Programming

Lightmap UV generation in UE4 can take a considerable amount of time. Here, we take a look at it and present some optimisations that can yield 5x faster performance

More

The Long and Winding Path of the Cook

February 27, 2017June 10, 2020
ALL/Programming

Long file path problems are commonplace when cooking with UE4. We took a look at it - and found that the engine was being too aggressive with its checks for whether or not a path really was too long

More

The Case of the Locked File

February 27, 2017January 11, 2018
ALL/Programming

We were seeing frequent file IO errors in relation to temporary files created during cooking (particularly when compiling shaders). Our findings for why this were happening were surprising. Here we present a clean way to fix the issues

More

Static Code Analysis With PVS-Studio (Part 6)

February 24, 2017January 11, 2018
ALL/Programming

The sixth part in our series looking at coding errors found by using the static code analysis tool PVS-Studio

More

It’s A Size, Jim, But Not As We Know It, Not As We Know It…

February 24, 2017January 11, 2018
ALL/Programming

A really small bug fix is presented here - with a lot of Trekkie banter to fluff the piece out... and why not?

More

Clear And Reset Danger

February 23, 2017January 3, 2018
ALL/Programming

A common programming mistake is fixed here, this time in the FBX importer

More

Sign Of The Times

February 23, 2017January 11, 2018
ALL/Programming

PVS-Studio pointed us toward some code with suspiciously mixed signed/unsigned math. This was actually causing some issues - and here we tell you how to fix them

More

Static Code Analysis With PVS-Studio (Part 5)

November 20, 2016January 11, 2018
ALL/Programming

The fifth part in our series looking at coding errors found by using the static code analysis tool PVS-Studio

More

The Sadness of the Ignored Null Pointer

July 14, 2016January 3, 2018
ALL/Programming

In this post we present an optimization coming from removing some pointless null pointer checks. The way that we found this was quite interesting

More

Speeding Up The Time Limit Controls

July 13, 2016January 3, 2018
ALL/Programming

When a process takes a long time to complete, it makes absolute sense to put some time limit checks in so that you're not starving other work. What you don't want to do, of course, is to have those checks slow your original task down further by any considerable amount - here, we found that exactly this was happening .. so we present a solution

More

The Battle of the Lean and the Inlined Bone Functions

July 12, 2016January 11, 2018
ALL/Programming

We took a look at the inlining of a certain part of the codebase and were shocked with what we found... we then went about improving it

More

ToString() Or Not ToString()… Wait, What’s The Question?

July 6, 2016January 11, 2018
ALL/Programming

ToString() is one of the most commonly called functions in UE4 - certainly across the editor, the content cooker and such. Here we take a look at it and make it over twice as fast

More

Tiny Code Fixes – Part 1

July 4, 2016January 11, 2018
ALL/Programming

Here we present several small code fixes and improvements in a nice little package

More

Package Versioning… How It Works… And An Optimization

June 29, 2016January 3, 2018
ALL/Programming

UE4's Package Versioning is a bit of a dark art for most.. here we try to remove some of the confusion around it - while, again, offering some improvements through optimization

More

Portrait Of A Serialize Perf Killer

June 21, 2016January 3, 2018
ALL/Programming

With performance critical editor and cooker code, it's well advised to consider performance when adding tests for rare errors. Here we take a look at this and show by, by considering the CPU pipeline and code cache, a simple change can yield a significant performance improvement without reducing stability

More

Sweeping Up And Disassembling A Physics Macro

June 20, 2016January 3, 2018
ALL/Programming

Macros can often be useful to make certain programming tasks simpler - but they can also cause hidden performance headaches that might otherwise be avoided. Here we look at one of those - and how to improve it

More

Static Code Analysis With PVS-Studio (Part 4)

June 10, 2016January 11, 2018
ALL/Programming

The fourth part in our series looking at coding errors found by using the static code analysis tool PVS-Studio

More

When Are Shopping Lists A Waste of Time?

June 3, 2016January 3, 2018
ALL/Programming

We take a look at some list generating code with UE4 - and why it was completely pointless

More

Using The Disassembler To Highlight Optimization Targets

May 23, 2016January 3, 2018
ALL/Programming

We use the debugger's disassembly view to look at FPaths::IsRelative() after it shows up in our profiling tests. Then we optimize it

More

Static Code Analysis With PVS-Studio (Part 3)

May 16, 2016January 11, 2018
ALL/Programming

The third part in our series looking at coding errors found by using the static code analysis tool PVS-Studio

More

The Cook, The Resave, His Garbage And Her Optimization

May 4, 2016January 11, 2018
ALL/Programming

We present here a way to improve cook times by reducing the frequency of garbage collection

More

The Case Of The ExportHash String Monster

April 29, 2016January 3, 2018
ALL/Programming

We found CreateExportHash() was showing up in profiling the cooker - so we optimized it. Our findings and changes are presented here

More

Static Code Analysis With PVS-Studio (Part 2)

April 27, 2016January 11, 2018
ALL/Programming

The second part in our series looking at coding errors found by using the static code analysis tool PVS-Studio

More

Patch Content Early – NOT At Runtime

April 25, 2016January 3, 2018
ALL/Programming

We present an optimization that removes a significant amount of memory churn from the animation code

More

Static Code Analysis With PVS-Studio (Part 1)

April 19, 2016January 3, 2018
ALL/Programming

The first part in our series looking at coding errors found by using the static code analysis tool PVS-Studio

More

A Huge PhysX Memory Churn Reduction

April 18, 2016January 3, 2018
ALL/Programming

Here we implement a scratch buffer to reduce temporary memory churn passing through PhysX

More

The Smallest, Coolest Optimization

April 17, 2016January 3, 2018
ALL/Programming

While profiling a game's runtime, we found that 40% of memory allocations were coming from a single function. The fix/optimization involves adding a single character

More

The Clue In The Code Comments

April 17, 2016January 11, 2018
ALL/Programming

We present a tiny little fix for a simple - but serious - coding error in the UE4 codebase

More

FACEBOOK

FACEBOOK

Twitter

My Tweets

Recent Comments

  • Marc on Blueprint Extension: Hide Unrelated Nodes
  • Cooper on Blueprint Extension: Hide Unrelated Nodes
  • Gareth Martin on Placating The Natives
  • JeremyC on Placating The Natives
  • Gareth Martin on Trash Compactor

Recent Posts

  • Slate 101 – Building a Leaderboard
  • Getting Into Games Dev – Part 2
  • The Curious Incident of the Archive Corruption
  • Blueprint Extension: Hide Unrelated Nodes
  • Loops and Bubbles
  • Be Vewwwy Vewwwy Quiet, We’re Hunting UObjects
  • Trash Compactor
  • Placating The Natives

Subscribe

Enter your email address to subscribe to this blog.

(c) 2015-2020 Coconut Lizard Limited
We are part of Keywords Studios

  • HOME
  • WHAT WE DO
  • PORTFOLIO
  • WHO WE ARE
  • CAREERS
  • CONTACT
  • BLOG
Go toTop