SUPER EVIL MEGACORP
Role
Render Engineer.
Work Period
April 2023 - Present.
Technical Environment
In-house C/C++ engine.
Platforms
Windows, MacOS, Android, iOS, Xbox X, Nintendo Switch.
Personal Work
I was employed by Super Evil Megacorp in 2023 as an Associative Render Engineer to be part of the Core Tech Team. I was hired to develop and implement new graphics techniques and to mantain our existing tech in our in-house C/C++ engine. Also, I have worked on implementing tools to improve the usage of our engine and to offer new possibilities in it. Although when I was hired we were mainly focused on mobile development, now our engine is ported to almost all platforms/consoles, a process I was lucky to be able to work on too.
These are some of the highlights of the work I did at SEMC:
- Port our in-house engine to Vulkan to release our game in Android in the spare of 3 months. We already had our engine working in Android using OpenGL ES, but there were a couple of reasons of why we wanted to change our API to Vulkan:
- First of all, although OpenGL ES is an API that is supported in almost every Android device, I believe it is a very outdated and deprecated API that carries with it a lot of restrictions and that lives mostly on extensions, Vulkan, on the other side, is widely supported nowadays in Android too (at least the 1.0 version), and although being more verbose, it has the advantages of modern APIs and offers more features that were of our interest.
- Secondly, because of all the work that OpenGL does under the hood and how it interacts with the GPU it ends up causing weird issues between different GPUs, chipsets and devices, with Vulkan, as it gets rid of a lot of overhead this is reduced, which helped a lot with testing and debugging.
- Finally, one of the biggest restrictions with OpenGL is that it only allows to make API calls from where the original GL context was created, which was something we wanted to change to have the possibility to have multithreaded rendering and asset loading in android devices.
- Port our in-house engine to the Nintendo Switch Graphics API (NVN) to release our game in Nintendo Switch with improved performance and memory usage. When we received the devkit for the Switch, we already had our rasterizer working with OpenGL, so we didn't need to focus on that part, but once the first version of the engine was running on the Switch we decided to to port the rasterizer to NVN mainly for the following reasons:
- First of all, we wanted to use the lowest level API offered by the console because we thought it was going to work better in general, primarly because the API was designed for the console, so it makes sense to think that it would offer better performance, but also because we would get rid of the overhead added by OpenGL.
- Also, one of our bottlenecks was how we were loading assets, specifically shaders, which required us a cache to store compiled shaders reduce load times, but it was something that required special permision from Nintendo, and with NVN we could precompile the shaders to avoid using the cache at all.
- Research and implement graphics techniques in our in-house engine across our various APIs (OpenGL, Vulkan, D3D12, Metal, and NVN), some examples are:
- PBR Bloom: Implemented the Bloom algorithm used in COD: Advanced Warfare.
- Cascaded Shadow Maps: Implemented first the classical approach and then modified it to suit the needs for our projects.
- Atmospheric Height Fog: Implemented it as a tool for the art team to give a nice setting to our scenes.
- HBAO+: Implemented Nvidia's original documentation.
- Global Ilumination and SSAO Spatial and Time Denoiser: Implemented it to have cleaner outputs while keeping the number of samples/rays at a low number
- Upscaler: Implemented it to be able to run our Switch game in docked mode at higher resolutions while running at a higher framerate.
- GPU Queries: Implemented different types of queries to have working glares using occlusion queries, multiple picking in the editor, and timestamp queries for the GPU Profiler.
- Antialiasing: Implemented some approaches (LXAA, FXAA) to reduce jagged edges for our Switch game.
- Implement tools in our games and editor, some examples are:
- GPU Profiler: Implemented GPU Timestamp Queries for this task to be able to track the time of our renderpasses and draw calls.
- Shadegraph Nodes: Worked closely with the art and VFX team to implement some nodes (like dithering and screen color buffer nodes) to allow them to create more visual effects.
- Post-Processing Volumes: Implemented volumes where post process effects were blended when entering or exiting them.
- ID Based Picking and Marquee Selection: Sampled and ID buffer to have precise picking and used GPU Occlusion Queries and scissoring to determine when multiple objects were picked.
- Outline for selected objects: Draw a customizable width outline similar to the Unreal Engine one for selected objects based on their ID.
- Improve performance, fix bugs, implement quality of life changes, and maintain our technology and code across PC, Mac, Android, iOS, Nintendo Switch, and Xbox X.
Games
Here you will find the games I have worked on since I joined SEMC.
Bloodline: A Rebel Moon Game
- Platforms: Android, iOS
- My work:
- Ported our engine rasterizer to Vulkan so that we could get the best performance from Android devices.
- Implemented new techniques and tools to improve the game graphics, performance, and development.
Teenage Mutant Ninja Turtles: Splintered Fate
- Platforms: Windows, MacOS, Nintendo Switch, Xbox Series X, Xbox Series S, PS4, PS5, Android, iOS.
- My work:
- Ported our engine rasterizer to the Nintendo Switch Graphics API (NVN).
- Implemented an Upscaler and some Antialiasing (LXAA and FXAA) techniques.