Lattice is a high-performance visual scripting system targeting Unity ECS. Read more here . Lattice 0.6 just released! This is a stability and performance update, with one big exception: automatic parallelization of Lattice scripts. What does that mean? A Lattice Script looks like this: Before 0.6, the Lattice compiler generated .NET IL that executed each node one at a time, serially. While that…
Unlike RGB, the CIELab color space And the more modern variants like CIECAM02 and Oklab. is designed to be perceptually uniform. This is a broad goal, which roughly means that we would like changes in the numbers to match same changes that we observe when performing various studies of human perception. It’s a bit less 'math’ and more ‘modeling’. We try to fit equations to the observed data with…
Lattice is a high-performance visual scripting system targeting Unity ECS. Read more here . I wanted to write a few posts on the design of Lattice as a language. Today, let's focus on “composability”. This is intuitively something we desire in programming languages. Some systems feel like they are effortlessly reconfigurable, recombinable, and then others.. just don’t. Some languages seem to…
Lattice is a high-performance visual scripting system targeting Unity ECS. Read more here . I’ve tried several times to write blog posts about Lattice, and each time I’ve gotten lost in the weeds. It’s hard to pick a point to start. So instead, I’ve resolved to just start writing — quantity over quality, as they say. Lattice has met a major milestone this week: programs now fully compile to .NET…
The other day, I was helping a friend learn Python. They were writing a simple HTTP request to an API, and at one point they asked me "what does requests.get(...).json() return? A string or a parsed JSON object?” I thought this would be a good "teach a man to fish" sort of lesson: look it up the docs. requests is a massively popular library that forms the bedrock of many Python scripts. Here's…
Entity Components Systems are hot stuff right now in the world of game engine design. Most of Unity’s new engine workflows is based on ECS, and there are other junior up-starts like the open-source Bevy Engine . They’re extremely fast, and well suited to today’s machines with many cores. But they can be a real pain sometimes when implementing gameplay code. Every now and then, I stumble on a…
Twitter is going downhill fast. First they banned Mastodon promotion (and then reversed it), and now it’s Substack in it’s entirety. We all want to move off, and yet.. here we are. I’ve been doing some thinking and I see two fairly obvious problems that have been keeping everyone on Twitter: The Chicken/Egg : Nobody wants to leave Twitter for a place that has no community, but there can’t be…
When I began learning Rust, I had several expectations. I figured that I would be a little less productive writing code, in exchange for memory safety and C-like performance. What I did not expect, was that I would actually be more productive writing code. So much has that been the case, that for all of the one-off scripts I used to write in Python, I now write in Rust. And it’s not out of casual…
One of the earliest effects I implemented for The Last Clockwinder was HDR Tonemapping and Color Grading. We had decided from an early stage that the game was going to be lit entirely with static lightmapping The entire environment is lit with a single, massive bounced area light! , and post processing goes hand-in-hand with that approach. The Last Clockwinder uses ACES tonemapping and a…
Recently, I’ve been implementing hot reloading for a new game engine I’m writing in Rust. If you’re interested in the subject, you may have seen the Faster Than Lime article , which is one of the most detailed sources out there. Although Amos encountered major issues implementing hot reloading on Linux, I was surprised to discover that hot reloading works just fine on Windows! What makes these…
In the Unity Universal Render Pipeline, the scene view debug shader list is fairly empty. There aren’t any of the standard view modes you would expect for debugging PBR materials (Normal, Albedo, etc). So I added them, here you go. Download Here Installation : Unzip the folder into the path Assets/Editor/SceneDebugViews/ or modify SceneDebugViewsAsset.cs to point to the correct installation…
Whenever you make a change in a Unity project, the Editor will freeze while it swaps in your new code. This process is called a Domain Reload. While it only takes a few seconds in an small project, domain reloads are the bane of all large Unity projects. As a project grows, reloads can take 10 seconds, 20 seconds, and sometimes minutes. But this doesn’t have to be the case. As an engineer, you…
With every new update, Unity changes their command line interface a bit, and this is still the case with 2020.1. I spent a few hours getting Unity up and running again within Linux Docker, and wanted to document it for those that follow. Running Unity within Docker is current unsupported, but seems to work if you know the correct incantation of commands. You can read our general approach in this…
We’ve been working on a project targeting the Oculus Quest, which comes with some tricky constraints. The device is essentially a beefy Android phone, but must render a 2880 × 1600 display at 72fps. Compared to a standard 1080p/30fps console game, that’s a factor of 5.3x more pixels that must be shaded per second, and on mobile-grade hardware. Because of this, everything we do graphically must be…
We’ve recently been putting work into quick automated builds for our Unity projects at A Stranger Gravity. Our builds, which run Unity tests and build a Windows standalone, are now down to 2 minutes, using a combination of Docker, Google Cloud, and Azure Pipelines. This kind of work involves stumbling through arcane documentation and using services that really don’t want you to have 20 Gb of data…
Unreal Engine has a convenient feature known as “Construction Scripts”: simple scripts that run when an Actor is modified, letting you quickly procedurally generate an object and see the results immediately in the editor. Unity has a similar feature, ExecuteInEditMode , but it comes with a number of downsides: Changes made to objects in the scene are saved to the scene file, generating nasty merge…
I first worked at Google back in 2012. Thinking back to the way the company was run then, it seems like an entirely different era. It was a place of radical transparency, where any employee could stand up at a weekly TGIF meeting, and have an earnest conversation directly with the founders. It was just a company, but it really felt like a company with heart. This year has been a bombshell for…
Houdini really is the swiss-army knife of 3D asset pipelines. Recently a friend asked around on twitter: I'd think in the year of ahh-lawwd two thousand and nineteen there would be a straightforward solution out there.... hey, take these half-dozen meshes and their associated maps and poop out UV-corrected meshes and a set of mongo-atlassed maps. — Eric A Anderson (@edoublea) October 22,…
The preeminent article on game timesteps is Gaffer On Games: “Fix Your Timestep!” . Cached version, as the article occasionally goes down. The article gives a great amount of context for implementing a game engine time step in a couple of different ways. Unfortunately, while this is useful, it is aimed at those writing their own engine, not using an existing one. On top of that, there is…