Sign in

Sebastian Schöner

@sschoener.bsky.social
727 followers 54 following 327 posts

Programming! - previously at Epic Games, Unity Technologies, Paradox Dev Studios blog.s-schoener.com

PostsRepliesMedia
Sebastian Schöner @sschoener.bsky.social · 15/09/2026
What if Vampire: Survivors was an incremental game? I'm making a game with a huge tech tree (600+ techs), ridiculous events, and screenfilling spectacle. www.youtube.com/watch?v=7ijL... store.steampowered.com/app/5224020/...
youtube.com
FORTRESS FULL FURY TRAILER
YouTube video by Sebastian Schöner
131
Sebastian Schöner @sschoener.bsky.social · 11/06/2026
I have just pushed out an experimental update to my profiler with a feature that I have wanted for a long time: dynamic instrumentation. Add instrumentation to programs at runtime without recompiling them.
110
Sebastian Schöner @sschoener.bsky.social · 27/04/2026
I have built a Windows x64 sampling profiler for native code+C# to be used by coding agents. Why? Because it is irresponsible to let computers write code but give them no tools to evaluate the performance of their code. Stop guessing, start measuring. -> profiler.kerntief.net
profiler.kerntief.net
kerntief Profiler
3332
Sebastian Schöner @sschoener.bsky.social · 16/04/2026
I wanted Zig's nice toys. My DLL hot reload setup wanted an ABI. We met somewhere in the middle, and now I have the worst of both worlds. Return of the Header File 2, now live: blog.s-schoener.com/2026-04-16-z...
060
Sebastian Schöner @sschoener.bsky.social · 13/04/2026
More learnings from turning Mono into an optimizing compiler. This time: Why not LLVM? Was it a good idea to start with x64 peepholes? Plus some thoughts about aliasing. blog.s-schoener.com/2026-04-13-m...
blog.s-schoener.com
What I learned from improving Unity's Mono codegen, part 2 | Sebastian Schöner
My current sidequest is to improve the codegen for Unity games (and the editor) running on Mono. This post is a continuation of last week’s post about this journey. To LLVM or not to LLVM? The first d...
180
Sebastian Schöner @sschoener.bsky.social · 07/04/2026
Why does a tiny float4 function blow up into 400 lines of assembly on Mono? Value types, lowering, and lots of unnecessary copies. I wrote up a step-by-step walkthrough from C# to IR to final codegen. blog.s-schoener.com/2026-04-07-m...
blog.s-schoener.com
What I learned from improving Unity's Mono codegen, part 1 | Sebastian Schöner
My current sidequest is to improve the codegen for Unity games (and the editor) running on Mono. This post and the next two are about this process and what I learned. In this post, I am going to give ...
083
Sebastian Schöner @sschoener.bsky.social · 31/03/2026
I have spent some time on a little project to improve codegen for Unity's Mono runtime, which is used in the editor and is even what some games ship on: blog.s-schoener.com/2026-03-31-b...
blog.s-schoener.com
Better codegen for Unity games on Mono | Sebastian Schöner
tl;dr: I am tinkering with improved codegen for Mono to get better performance in the Unity Editor and in Unity games that ship with Mono as their runtime. Not done yet, but please do get in touch if ...
0100
Sebastian Schöner @sschoener.bsky.social · 27/03/2026
How trying out Zig made me miss header files blog.s-schoener.com/2026-03-27-h...
blog.s-schoener.com
I miss header files | Sebastian Schöner
I am currently on a side quest to write some Zig code, or more specifically: take some C++ code that is written in a I-can’t-believe-it’s-not-C style and turn it into Zig. This entire adventure starte...
0100
Sebastian Schöner @sschoener.bsky.social · 18/03/2026
It has never been about the typing blog.s-schoener.com/2026-03-18-n...
blog.s-schoener.com
It has never been about the typing | Sebastian Schöner
My friend Stefan Reinalter is asking: I find this extremely worrying, with many of people I respect saying things like “I no longer write code” or “let LLMs do it”. Why did you start programming? Was ...
161
Sebastian Schöner @sschoener.bsky.social · 09/02/2026
What I've learned over the last 1.5months of writing a GUI library: blog.s-schoener.com/2026-02-09-g...
1204
Sebastian Schöner @sschoener.bsky.social · 28/01/2026
Putting slim locks on a diet blog.s-schoener.com/2026-01-28-r...
blog.s-schoener.com
Putting slim locks on a diet | Sebastian Schöner
Let’s talk about reader-writer locks. Reader-writer locks are what you employ when you know that multiple readers can safely access a resource concurrently, but once there is a single writer that writ...
040
Reposted by Sebastian Schöner
Clément Grégoire @lectem.bsky.social · 27/01/2026
Ever wrote spin-locks or had to debug them? I have, and I got tired of seeing (and writing) crappy ones, so I did a real investigation this time. Spoiler: trust your OS. siliceum.com/en/blog/post...
siliceum.com
Spinning around: Please don't! - siliceum
Embark on a journey about why you should sometimes trust your OS more than yourself.
1239
Sebastian Schöner @sschoener.bsky.social · 14/01/2026
A piece on how I learned to appreciate the brainless enthusiasm of AI agents. blog.s-schoener.com/2026-01-14-c...
blog.s-schoener.com
Clauded optimism | Sebastian Schöner
This post is a continuation of my last post about programming with AI agents. I wanted to specifically talk about one property of Claude Code: The constant “Yes, of course!” and “That’s a brilliant id...
140
Sebastian Schöner @sschoener.bsky.social · 19/12/2025
An early good bye to 2025: blog.s-schoener.com/2025-12-19-y...
blog.s-schoener.com
An early good bye to 2025 | Sebastian Schöner
There are less than 2 weeks left in 2025 and this means it is time to look back at the last year. In last year’s review I ended on this note: For the next year, I hope to spend more timing painting in...
1100
Sebastian Schöner @sschoener.bsky.social · 04/12/2025
I wrote a few words about when improving codegen actually leads to better performance, motivated by my experiences with cpp2better: blog.s-schoener.com/2025-12-04-w...
blog.s-schoener.com
When better codegen doesn't help | Sebastian Schöner
I want to write a few words about what sorts of games benefit from my build postprocessor for Unity il2cpp builds, cpp2better. It’s not the case that every game unconditionally benefits from it to the...
1100
Sebastian Schöner @sschoener.bsky.social · 24/11/2025
How do you figure out why your C# projects are rebuilding, and how does the MSBuild log help? blog.s-schoener.com/2025-11-24-m...
blog.s-schoener.com
How to figure out why C# projects are rebuilding | Sebastian Schöner
A friend recently joked that all my blog posts are to some level just trauma processing. He is not entirely wrong. Today’s trauma is “why does it take 12s to recompile C# when nothing has changed?” I ...
071
Sebastian Schöner @sschoener.bsky.social · 13/11/2025
Every once in a while, I check the reviews on my games on Steam. It's always nice when a game finds the exact player it was made for. New review from July: "We Love this game, it plays as advertised." (store.steampowered.com/app/1584170/...) How I advertise it:
0100
Reposted by Sebastian Schöner
Live++ @liveplusplus.bsky.social · 06/11/2025
Is your company interested in trying Live++? Want to know what it can do for you? Curious about its features? You can now request a live demo through our website - free of charge! liveplusplus.tech/request_live... #cpp
143
Sebastian Schöner @sschoener.bsky.social · 04/11/2025
Do you want to improve the performance of your il2cpp Unity projects, without changing your code or your assets? My il2cpp build processor cpp2better is now officially available (on request). Reach out to me, details here: blog.s-schoener.com/2025-11-04-c...
blog.s-schoener.com
cpp2better, an il2cpp postprocessor | Sebastian Schöner
It’s been a while since I last talked about cpp2better. Time for an official “here it is” post. What is cpp2better? cpp2better is a tool that hooks into your build pipeline for Unity to achieve better...
0147
Sebastian Schöner @sschoener.bsky.social · 30/09/2025
Do you want to know about what things might go wrong when cross-compiling from Linux to Windows? No? Ah, too bad. Then don't click the link below. blog.s-schoener.com/2025-09-29-c...
blog.s-schoener.com
What can go wrong in cross compilation | Sebastian Schöner
I have been unfortunate enough to embark on a journey of C++ cross-compilation, by choice nonetheless. In my case, I use clang to compile on a Linux machine to get binaries for a Windows machine. This...
1141
Sebastian Schöner @sschoener.bsky.social · 23/09/2025
Async, too much blog.s-schoener.com/2025-09-22-a...
Bilbo: "After all, why not? Why shouldn't I make this async?"
1348
Sebastian Schöner @sschoener.bsky.social · 17/09/2025
How I accidentally served as the control group for an AI experiment blog.s-schoener.com/2025-09-17-c...
blog.s-schoener.com
How I became the control group in an AI experiment | Sebastian Schöner
At the risk of alienating almost everyone reading this blog, I wanted to report some first hand experience of interacting with AI for programming. I specifically want to talk about how I accidentally ...
091
Sebastian Schöner @sschoener.bsky.social · 10/09/2025
How my attitude to "unfinished" code changed blog.s-schoener.com/2025-09-08-t...
blog.s-schoener.com
TODO TITLE | Sebastian Schöner
In the past, I used to work in a codebase that had a lot of // @TODO: comments in it. Those TODOs would rank from obvious, small improvements to calls for features that would require an entire rewrite...
273
Sebastian Schöner @sschoener.bsky.social · 29/08/2025
Unreasonable within reason blog.s-schoener.com/2025-08-29-r...
blog.s-schoener.com
Unreasonable within reason | Sebastian Schöner
Over the years I have come to appreciate “unreasonable” coworkers. What a weird sentence to write, right? When it comes to programming, you are usually fairly well advised to be “reasonable.” For exam...
182
Sebastian Schöner @sschoener.bsky.social · 19/08/2025
On a quest to become more naive. blog.s-schoener.com/2025-08-19-s...
blog.s-schoener.com
Speaking with curiosity | Sebastian Schöner
I had two interactions recently that surprised me in light of how I think about this blog. In the first interaction, someone referred to me as a “performance expert.” Thank you, that’s very kind of yo...
191
Sebastian Schöner @sschoener.bsky.social · 13/08/2025
Toying around with C vs. C++ compile times: blog.s-schoener.com/2025-08-13-c...
blog.s-schoener.com
Does C compile faster than C++? | Sebastian Schöner
I recently found myself wondering whether it is faster to compile C than C++. On some level, the answer to this is an obvious “yes”: You can’t accidentally summon cthulhu SFINAE-thulhu in your C code,...
2171
Sebastian Schöner @sschoener.bsky.social · 07/08/2025
What I learned about debug performance of C++ vector math: blog.s-schoener.com/2025-08-07-v...
blog.s-schoener.com
Vector types and debug performance | Sebastian Schöner
For reasons, I have found myself writing a vector math library. Like Aras some time ago I’ve found an unpleasant surprise when looking at the debug performance of some vector types. There is no point ...
080
Sebastian Schöner @sschoener.bsky.social · 29/07/2025
How to speed up random memory accesses blog.s-schoener.com/2025-07-28-r...
blog.s-schoener.com
How to speed up random memory accesses | Sebastian Schöner
At some point when optimizing software, you are left with a soup of pointers that you just have to dereference, even though you know that you are going to suffer a cache miss for every single read. Co...
1243
Sebastian Schöner @sschoener.bsky.social · 15/07/2025
How to iterate over section data in C++, and a disappointing conclusion blog.s-schoener.com/2025-07-14-s...
blog.s-schoener.com
How to iterate over section data in C++ | Sebastian Schöner
Last time, we looked at callbacks you can directly embed into your binaries on Windows that are then called for every thread on start/end. The runtime is using this to initialize thread-locals that re...
180
Sebastian Schöner @sschoener.bsky.social · 07/07/2025
How to get thread create/exit callbacks on Windows, and learn a little bit about TLS on the way blog.s-schoener.com/2025-07-07-t...
blog.s-schoener.com
How to get thread create/exit callbacks on Windows | Sebastian Schöner
I recently needed to run a callback on thread shutdown and creation, on Windows. For exiting, you can apparently use FlsAlloc (MSDN), which is a part of the Fiber API. I’ve tried that, it works. But t...
080
Sebastian Schöner @sschoener.bsky.social · 04/07/2025
Making stupid mistakes: blog.s-schoener.com/2025-07-04-s...
blog.s-schoener.com
Stupid mistakes | Sebastian Schöner
Quite often, I see this: Forget it, I’m stupid, this is all wrong. or Sorry, I broke it, it was a stupid and unnecessary mistake. While some mistakes are actually unnecessary and completely avoidable,...
170
Sebastian Schöner @sschoener.bsky.social · 15/06/2025
I had to debug a crash that turned out to be caused by a misunderstanding of how the Windows linker deals with data imports, and I did not find this documented anywhere. So I fixed it: blog.s-schoener.com/2025-06-15-w...
blog.s-schoener.com
How does the Windows linker handle exported data? | Sebastian Schöner
I recently had to understand the details of what happens when on Windows you have a global variable in a DLL and try to use it from another. I did not find this spelled-out anywhere, so let’s change t...
080
Sebastian Schöner @sschoener.bsky.social · 19/05/2025
How The Mods Made Me: An unexpected blast from the past turned into a retrospective on creating games as a kid of the early 90s. blog.s-schoener.com/2025-05-18-m...
blog.s-schoener.com
How The Mods Made Me | Sebastian Schöner
Recently I got a message from someone that ran into a performance problem with a tool I wrote 15 years ago. On shutdown, the program would completely grind the entire machine to a halt for 3 minutes. ...
271
Sebastian Schöner @sschoener.bsky.social · 08/05/2025
Invisible loads and a case for non-member functions blog.s-schoener.com/2025-05-08-i...
blog.s-schoener.com
Invisible loads and why I like free-standing functions | Sebastian Schöner
I have been grappling with a really silly C++ problem for a long time: I don’t like member functions, but I need to write member functions to get a decent programming UX. Member functions give me two ...
5143
Sebastian Schöner @sschoener.bsky.social · 30/04/2025
A few words intended to end any romantic notions of how much effort your compiler can even put into passing stuff by value: blog.s-schoener.com/2025-04-30-b...
blog.s-schoener.com
Passing stuff by value and ABIs | Sebastian Schöner
I have in the past had this very romantic belief that when you pass a struct by value the compiler will lovingly select the right combination of registers to carefully craft the perfect packing of you...
0101
Sebastian Schöner @sschoener.bsky.social · 25/04/2025
My notes about how Unity's ECS handles dependencies, or "Data-soup with long noodles." blog.s-schoener.com/2025-04-25-d...
blog.s-schoener.com
Data-soup with long noodles | Sebastian Schöner
This is a post about Unity’s ECS (as of Unity 6) and how it handles dependencies between jobs. The other day a friend asked: “Why are the different methods of scheduling work in Unity’s ECS so inconsi...
0100
Sebastian Schöner @sschoener.bsky.social · 17/04/2025
Optimization at the speed of 1.6 Kilo-Fredriksson with cpp2better blog.s-schoener.com/2025-04-17-k...
blog.s-schoener.com
Optimization at the speed of 1.6 Kilo-Fredriksson | Sebastian Schöner
I have already introduced my latest project cpp2better in a previous post. I have made good progress and wanted to share some results. I have had the chance to test my tool on more projects now and ca...
1101
Sebastian Schöner @sschoener.bsky.social · 15/04/2025
Did you know that engines like Unity aren't build from scratch and have dependencies? For example the excellent tundra build system. In the spirit of supporting some of the bedrock of our industry, I am now sponsoring Tundra development. github.com/deplinenoise
github.com
deplinenoise - Overview
deplinenoise has 39 repositories available. Follow their code on GitHub.
050
Sebastian Schöner @sschoener.bsky.social · 08/04/2025
GPU Hang Adventures and the things I learned that you, the graphics programmer, probably already know blog.s-schoener.com/2025-04-08-g...
blog.s-schoener.com
GPU hang adventures | Sebastian Schöner
After the last post, you might think that I have spent most of my time lately with IL2CPP. That, however, is untrue: I have actually mostly been looking at GPU hangs. I would by no means call myself a...
0100
Sebastian Schöner @sschoener.bsky.social · 07/04/2025
A mini-announcement about Unity games, performance, and IL2CPP codegen: blog.s-schoener.com/2025-04-07-c...
blog.s-schoener.com
IL2CPP, but better | Sebastian Schöner
IL2CPP is Unity’s AOT solution for C#, which takes compiled C# in the form of IL-code and turns it into C++ code, which can then be compiled using regular native toolchains. I have looked at a lot of ...
3376
Sebastian Schöner @sschoener.bsky.social · 02/04/2025
Bool4 and some unexpected new perspective blog.s-schoener.com/2025-03-31-b...
blog.s-schoener.com
bool4 and an unexpected new perspective | Sebastian Schöner
This blog post is 20 paragraphs exposition and 2 paragraphs punchline. It is a follow-up to my previous post on vectorization. I mentioned there that Unity’s math package implements bool4 like this: s...
070
Sebastian Schöner @sschoener.bsky.social · 25/03/2025
Nobody cares about vectorization blog.s-schoener.com/2025-03-25-v...
blog.s-schoener.com
Nobody cares about vectorization? | Sebastian Schöner
In a recent discussion around auto-vectorization someone suggested: “What if users could tell the compiler that they expect a loop to be vectorized?” We are in luck, that experiment has already been c...
1121
Sebastian Schöner @sschoener.bsky.social · 21/03/2025
Should Unity be making games? A blog post with no clear answers. blog.s-schoener.com/2025-03-21-e...
blog.s-schoener.com
Should Unity be making games? | Sebastian Schöner
There is this general assumption that engines get better just by having the engine maker also use the engine to make games. I want to add some thoughts to that. At Unity, one of the main arguments aga...
091
Sebastian Schöner @sschoener.bsky.social · 13/03/2025
I have been waiting for Visual Studio 2022 to unfreeze for the last 30min, and now you get to read about it. In blog form here: blog.s-schoener.com/2025-03-13-y...
blog.s-schoener.com
Yet another VS freeze | Sebastian Schöner
I have been waiting for Visual Studio 2022 to unfreeze for the last 30min, and now you get to read about it. Curiously, this freeze has appeared more or less spontaneously after I opened a solution, t...
1131
Sebastian Schöner @sschoener.bsky.social · 10/03/2025
What is a reasonable performance target for a general purpose game engine? And no, it's not specified in milliseconds. blog.s-schoener.com/2025-03-10-n...
blog.s-schoener.com
Not Obviously Bad, and Obviously Not Bad | Sebastian Schöner
Someone asked the other day what a reasonable performance target is for a general purpose engine. This is an interesting question, so let’s discuss it a bit. When you build some subsystem in the conte...
1131
Sebastian Schöner @sschoener.bsky.social · 04/03/2025
What's a "performance theory", and how do you apply it? blog.s-schoener.com/2025-03-04-p...
blog.s-schoener.com
Performance theories | Sebastian Schöner
Last time, I wrote about data and decision making, and some frustrations when people pretend like “data” is always the solution. Now let’s look at a place where data very often is (part of) the answer...
060
Sebastian Schöner @sschoener.bsky.social · 27/02/2025
Prematurely quoting papers you clearly did not read is the root of all evil.
092
Sebastian Schöner @sschoener.bsky.social · 26/02/2025
A non-exhaustive list of faults in Unity's Cache Server integration blog.s-schoener.com/2025-02-26-u...
blog.s-schoener.com
A non-exhaustive list of faults in Unity's Cache Server | Sebastian Schöner
I recently looked into setting up a Unity cache server (“Accelerator”). It is quickly becoming clear that the accelerator is not, in fact, accelerating Unity. Here is a list of shortcomings: Some of t...
190
Sebastian Schöner @sschoener.bsky.social · 20/02/2025
Why my heart sinks a little bit every time a leader says "we're data-driven and data should determine all of our decisions": blog.s-schoener.com/2025-02-20-d...
blog.s-schoener.com
What does the data say? | Sebastian Schöner
Data! Everybody loves Data! Let’s use data to make all our decisions. The worst leaders that I have seen are leaders that refuse to actively set direction. They say things like “we should be data-driv...
0152
Sebastian Schöner @sschoener.bsky.social · 17/02/2025
Someone asked me: "Why did you leave Epic, is it really such a terrible place?" TL;DR: no, not a terrible place at all! Find the full response here: blog.s-schoener.com/2025-02-17-l...
blog.s-schoener.com
Why I left Epic Games | Sebastian Schöner
I recently had someone reach out to me and ask this question: I see a lot of people that were at Unity, left, went to Epic, and a year later they are independent. Is Epic really such a terrible place ...
0344