I make games and teach practical Unreal Engine C++, gameplay programming, and performance across CPU and GPU. 17+ years of experience, formerly at Epic Games.

Amsterdam
What began as a simple UE5 upgrade, turned into a year-long rebuild. I’m proud of the result and grateful for all the support on the original course. The Anniversary Sale ends in a few hours (23:59 UTC), save $100 using “FIVEYEARS” and get the upcoming multiplayer module free.
Five years ago today, I launched my Unreal Engine C++ course. Today, the completely rebuilt UE5 edition is LIVE! With 30+ hours of newly recorded lessons, redesigned code and gameplay systems, and a new curriculum. Existing C++ students get it for FREE! tomlooman.com/courses/unreal…
2
6
84
5,238
You can watch the Data-oriented Design intro as a preview: courses.tomlooman.com/course… The lesson also contains links to interesting talks on subject.
1
1
40
11,274
Thousands of pickups don’t need thousands of Actors. By building a coin pickup system with plain data arrays rather than one Actor per coin, we can add thousands of pickups to the world in microseconds, not milliseconds. The code remains simple to understand and maintain. We store each coin’s location, credit reward, and mesh instance ID in three synchronized arrays. A single Instanced Static Mesh Component represents the coins in the world. This layout, known as a Structure of Arrays, is one way to apply Data-Oriented Design to your gameplay systems. It lets us process thousands of pickups with less memory overhead and is more cache friendly than using Actors and Components, which is important for performance. During the lessons in the new UE5 C++ Course we go into detail on how and when to apply this in your own projects. Data-oriented Design is nothing new and Unreal Engine has a similar data-oriented system called Mass. But I often see developers learn this approach very late in the process as Unreal Engine is so heavily biased to OOP (object oriented programming). OOP is convenient, but not always the right approach. In the C++ course we explain and apply both.
31
61
1,013
304,406
I have just published a video on optimizing lights & shadows for UE5! Showing the process and tools for auditing lights in your scene and what you can tweak to improve performance. piped.video/watch?v=1uFR9lXr…
2
45
265
17,535
You can jump straight into the new lessons here: courses.tomlooman.com/course… ...or if you are not enrolled yet, you can learn more about the course: tomlooman.com/courses/unreal…
6
743
I have added another 7 new lessons to the C++ course - finishing the enemy spawn logic and building out the monster behaviors with Perception System. We're getting very close to finishing the Core Module with over 30 hours of content completed!
3
6
108
4,550
I've added 5 more lessons to the UE5 C++ Course! This time we build a Monster Spawn System with multiple "Directors" using DataTables, seeded random, selection weights, EQS, async asset loading, and more valuable game programming concepts.
4
15
141
7,744
I've added two Nanite Optimization lessons to the Game Optimization Course! We use Far Far West as a real-production example of things that can go wrong and ways to improve Nanite performance.
2
16
138
6,644
Don't miss any updates on Orion or my UE5 tutorials by signing up for my newsletter right here: tomlooman.kit.com/posts/13-n…
9
1,130
"Project Orion" (My UE5 C++ Open-source Game) continues to be expanded, I recently added State Trees for an Enemy Spawn Director feature with a mix of C++ and Blueprint. State Trees have a bunch of domain specific knowledge on handling and passing around data...having an example available can save you a lot of time! It's a WIP as I was experimenting with the feature myself, let me know if you find any issues!
2
18
159
8,567
I've added another 13 lessons to the UE5 C++ Course! Expanding the pickup system, doing profiling and optimizing the C++ code. We then add a buff system with stunning and damage over time effects. Link to all lessons below!
2
12
98
4,051
Check out the full video on YouTube piped.video/watch?v=3qgd4glf… !
1
5
65
13,526
I have re-written my article on adding cycle stats and counters to your C++ game code for both Unreal Insights and the “old” Stats System. Focusing on the most practical and commonly used macros to decorate your code and gather valuable insights in your game’s performance!
2
29
201
9,573
Just added new lessons about Data-Oriented Design to my UE5 C++ Course! Exciting subject to work on where we end up spawning and iterating thousands of loot-able coins using simple arrays of data as opposed to trying that with "full fat" Actors.
5
28
302
14,411
I have written a C++ setup guide for Rider and UE5. Including the errors you might run into during installation or first compiling your Unreal project. A few personal preferences were included…depending on how minimalist you like your code editors.
8
26
215
15,391
It's now 8 years ago that I released my first Unreal Engine course. This was my setup in 2017 to record it. It would overheat and shut off randomly during recording, it was not ideal but it got me started on something amazing! Thanks everyone who has been a part of it so far! Looking forward to many more years of learning and teaching game development.
15
4
212
8,735
I wrote about the best performance improvements in Unreal Engine 5.7 Nanite Foliage, Lumen Hardware Raytracing for 60hz, MegaLights, and many more under the radar optimizations and fixes you should be aware of!
5
36
228
14,644
Black Friday is here! This time with a limited availability 40% discount on all my courses! Get the Unreal Engine C++ Course and Game Optimization Courses at the lowest price ever! Use "BLACKFRIDAYEARLY" for 40% discount (first 100 students only!)
2
8
67
11,342
I have just added 4 new case study optimization lessons to my UE5 course! A completely unique insight into optimizations from real game production using The Forever Winter. The first lessons include Nanite, Memory profiling, scalability tuning and map auditing. I have a lot more lessons planned including demonstrating Significance Manager and C++ optimizations for the giant Mechs roaming the map and more! Thanks to Fun Dog Studios for allowing me to share these insights!
9
43
449
22,524
Having trouble optimizing your game? I have been working on a complete game optimization course for Unreal Engine 5, and its on sale right now! Recent lesson additions include a deep look at Unreal Insights's graph track and using Light Mixer to quickly audit your lighting for performance wins. See below for all the discount links!
10
80
762
39,308
Replying to @lemire
This is what I see, that "you may..." text is clickable to a deadlink on mailchimp
1
117
This is only 1 Niagara emitter to handle thousands of decals as particles using Data Channels! Significantly lower overhead on the GameThread and only a single component per grid cell. This also adds instancing to the decals which is normally not supported for individual decal components. Working on this as part of data-oriented projectiles that run without Actors, asynchronous collision and supporting multiplayer (incl. client side prediction). Removes a huge amount of overhead from the CPU, more on that soon!
16
39
587
31,600
I made an overview of all the great performance improvements for UE 5.6. Lumen HWRT for 60hz, GPU Profiler 2.0, Renderer Parallelization, Massive world streaming improvements, Insights, there is a lot of great stuff to explore!
10
120
495
30,009
UnrealFest Stream 3, Day 1 is blocked...
6
1
19
3,031
The Code & Reason
3
8
1,269
TIL the new software VRS does not work while any Lumen feature (diffuseindirect / reflection) is enabled. It will fallback to the hardware implementation instead (shown)...quite the (unspecified) limitation!
5
5
55
4,109
Watch me optimize Dark Ruins Sample project for an hour: piped.video/watch?v=c2MH20OP… This was mostly unscripted, so hope it's useful! We need many more hours to run this on a steam deck though lol.
5
40
245
17,684
Recorded an hour of performance profiling of the new MegaScans Dark Ruins sample project. Wondering if people are OK with 60minutes of me rambling about optimizations or if the people demand more scripted content...Thoughts?
34
11
360
12,806
TIL that UE 5.5 new Tick Batching does not sort by class at all, and is completely different from what I thought. It instead checks for things like matching tick prerequisites, start/end tick group , !bIsHighPriority, and bAllowTickBatching on that particular tick function. So you'll find all sorts of different classes together in a single batch unlike what most folks would attempt when rolling their own tick batching/aggregation.
6
21
137
8,658
My PC woke itself during the night and now I have a 175 GB Unreal Insights trace file It may take a while to open...
2
48
2,842
I wrote about Animating in C++ with Curves and Easing Functions. It's a starting point for your own animation subsystem to expand on with examples provided on GitHub.
5
31
341
23,561
Updating the player animations in the Action Roguelike Sample Project! Besides strafing and that cool leaning "Travel Mode" from Gideon, it now supports turn-in-place.
6
24
421
21,537
Dash ability feels pretty slick imo
14
23
466
25,085
You can now also find me on the other place!
9
4
78
6,524
We're getting a new form of Vertex Painting for Nanite in 5.5 which is a big deal! "Mesh Texture Color Painting" portal.productboard.com/epic…
7
26
197
11,401
You can visualize buffers/textures in Unreal while playing using the VisualizeTexture command. Example: "vis CustomDepth" for a picture-in-picture view of the custom depth buffer. (vis CustomDepth uv1 for full-screen). Use "vis pool" or "vis *" to find names to use.
1
44
273
11,042
Did you know instantiating Actors is slower when it has components added via the Blueprint Editor compared to adding via C++? You can get some performance back by enabling bOptimizeBPComponentData on the class which adds a slight memory overhead in favor of initialization speed.
6
50
265
18,915
I've opened up early enrollment to my UE5 Performance Optimization Course for my existing (C++) students. Bigger announcement will follow next week! Check your inbox or the C++ course curriculum for details and discount!
7
53
427
18,456
Replying to @JB_Briant
piped.video/watch?v=QGEV8YjB… This is practically the only info on it. Replaces your bloated gameplay actor with a lightweight actor that mainly holds mesh + transform data. It can then be swapped on the fly once full functionality is needed.
1
7
27
1,776
I'll be at UnrealFest Prague next week, looking forward to meeting everyone! @UnrealEngine
6
4
59
3,644
It may be time for an update...
1
3
143
Great to see timers finally have the 'max once per frame' option in 5.4 to avoid 'catch up' behavior running it multiple times. Was quite easy to fall into that trap!
14
24
265
22,591
So what's changed with 5.4 PSO Precaching? Also what does this graph mean? #UE5
6
3
51
9,166
New video on #UE5 Size Map, including some caveats and limitations and how to investigate your content (sizes, references) in Unreal. Part of upcoming course, uploading this to gather some feedback! piped.video/watch?v=jLDPMXh5…
2
22
136
7,419
For Nanite, ISM (InstancedStaticMeshComponent) doesn't have the same render benefits as with non-nanite. It still massively reduces the number of components that need to be streamed and registered which is *slow*. May also see some benefits of using less (cpu) memory compared to (many) individual mesh components. Epic demos continue to use it for foliage, rocks and modular buildings. What has been your experience with (H)ISM and Nanite in #UE5?
8
13
78
8,657
Started messing around with Variable Rate Shading, there is so little available about this. New with 5.2 and it's pretty amazing and simple to use. Created by the fine folks at The Coalition. #UE5
8
30
251
22,797
Nearly done...!
Added PSO Precaching + Bundled PSOs to the Action Roguelike sample project! Practically hitch free now in cooked builds running DX12. Working on a blog post detailing how to actually deal with PSOs, hopefully getting rid of #StutterStruggle for UE5 titles...
4
6
96
12,311
Added an implementation example of SparseClassData to Projectiles of my Action Roguelike sample project. It reduces memory footprint for commonly-used Actor types. github.com/tomlooman/ActionR… #ue5 #UE5Study
3
6
65
7,853
In UE 5.2 you can finally find your "Hello" printstrings with ease using "bp.BlamePrintString 1". It prints the Blueprint object + function (doesnt seem to properly show when its on the main event graph) #UE5
14
53
286
25,090
My @JetBrains talk on Game Optimization in @UnrealEngine is now online as an individual talk! Have a look and written notes are available on my site! piped.video/watch?v=G51QWcit… #UnrealEngine #gamedev
1
38
137
#UE5 Lyra has an entire top-down mini-game ("TopDownArena") as another example of the Modular Gameplay flexibility. Pretty rad! #gamedev
8
14
136
Didn't know you could create custom profile page on GitHub by naming a repo as your username...pretty neat! github.com/tomlooman
13
99
My new C++ guide is getting large enough that I am contemplating splitting (some of) it into multiple posts or whether one mega-post is still the way to go.
8
21
217
Been writing a little something UE4 C++, what's missing from this list: (Attempting to demystify some core concepts for those jumping into unreal's C++ shenanigans) #UE4 #gamedev
19
30
180