Another cool MSVC flag: /d1reportTime
A while ago I found about a fairly useful Visual C++ flag that helps to investigate where the compiler backend/optimizer spends time – /d2cgsummary, see blog post. Turns out, there is a flag that...
View Article'Infinite' sky shader for Unity
I saw a discussion today that lamented lack of “infinite projection” in Unity, so here’s a quick post about that. Unity today (at least in 2017/2018 versions) uses “reversed Z” projection, but does not...
View ArticleTwo years in a build team!
Whoa! Has it been two years already since I stopped doing graphics programming?! How does one end up on a build team? I switched to the “build system” team by having two extremely short chats: …and...
View ArticleReplacing a live system is really hard
So! Turns out my “two years in a build team” post was almost the end of my time there :) I’ve started a new thing & new work area, and am wrapping up some of my leftover build team work as we...
View ArticleClang Build Analyzer
So! A while ago I worked on adding -ftime-trace support for Clang. That landed and shipped in Clang 9.0 in September of 2019, so \(^O^)/ Looks like it will also be coming to Sony development tools soon...
View ArticleIt's Raining Cubes
So a dozen years ago I wrote “hey, 4 kilobyte intros are starting to get interesting”. Fast forward to 2019, and we made an attempt to make a 4KB demo with my team at work. None of us have any previous...
View ArticleFourteen years at Unity o_O
Looks like I’ve been working at Unity for 14 years. What?!?! So here’s another blog post that looks at the past without presenting any useful information, similar to the ones from two, four, ten,...
View ArticleVarious details about Handles
I wanted to fix one thing about Unity editor Handles, and accidentally ended up fixing some more. So here’s more random things about Handles than you can handle! What I wanted to fix For several years...
View ArticleBlack Hole Demo
I made a demo with my kid, and it somehow managed to get 1st place at a (small) demoparty! The story of this demo started around year 2006 (!). I had just started working at Unity in Copenhagen, and...
View ArticleTexture Compression in 2020
I’ve spent some time looking at various texture compression formats and libraries (the ones meant for GPUs, i.e. “ASTC, BC7” kind, not the “PNG, JPG” kind). Here’s a fully incomprehensible chart to set...
View ArticleTexture Compression on Apple M1
In the previous post I did a survey of various GPU format compression libraries. I just got an Apple M1 MacMini to help port some of these compression libraries to it, and of course decided to see some...
View ArticleEXR: Lossless Compression
One thing led to another, and I happened to be looking at various lossless compression options available in OpenEXR image file format. EXR has several lossless compression options, and most of the...
View ArticleEXR: Zip compression levels
In the previous blog post I looked at lossless compression options that are available in OpenEXR. The Zip compression in OpenEXR is just the standard DEFLATE algorithm as used by Zip, gzip, PNG and...
View ArticleEXR: Zstandard compression
In the previous blog post I looked at OpenEXR Zip compression level settings. Now, Zip compression algorithm (DEFLATE) has one good thing going for it: it’s everywhere. However, it is also from the...
View ArticleEXR: libdeflate is great
Previous blog post was about adding Zstandard compression to OpenEXR. I planned to look into something else now, but a github comment from Miloš Komarčević and a blog post from Matt Pharr reminded me...
View ArticleEXR: Filtering and ZFP
In the previous blog post I looked at using libdeflate for OpenEXR Zip compression. Let’s look at a few other things now! Prediction / filtering As noticed in the zstd post, OpenEXR does some filtering...
View ArticleGradients in linear space aren't better
People smarter than me have already said it (Bart Wronski on twitter), but here’s my take in a blog post form too. (blog posts? is this 2005, grandpa?!) When you want “a gradient”, interpolating colors...
View ArticleSpeeding up Blender .obj export
This tweet by @zeuxcg sparked my interest: If you think of Ryu as the gold standard of shortest correctly rounded floating point output, note that there’s still active research happening in this area,...
View ArticleCurious lack of sprintf scaling
Some days ago I noticed that on a Mac, doing snprintf calls from multiple threads shows curious lack of scaling (see tweet). Replacing snprintf with {fmt} library can speed up the OBJ exporter in...
View ArticleOptimizing Oklab gradients
An example how one might optimize Oklab color space gradients by… not doing anything related to Oklab itself! The case at hand I wrote about Oklab previously in the “gradients in linear space aren’t...
View ArticleSpeeding up Blender .obj import
A while ago I wrote about speeding up Blender’s Wavefront OBJ exporter. All that landed into Blender 3.2. And since that was quite a nice experience, I started to look into the OBJ importer… Existing...
View ArticleComparing .obj parse libraries
Wavefront .obj file format is a funny one. Similar to GIF, it’s a format from the 1990s, that absolutely should not be widely used anymore, yet it refuses to go away. Part of the appeal of OBJ is...
View ArticleComparing BCn texture decoders
PC GPUs use “BCn” texture compression formats (see “Understanding BCn Texture Compression Formats” by Nathan Reed or “Texture Block Compression in Direct3D 11” by Microsoft). While most of the interest...
View ArticleSwallowing the elephant into Blender
Some years ago Matt Pharr wrote an excellent blog post series, “Swallowing the elephant”, in which he describes various optimizations done in pbrt using Disnay’s Moana Island Scene. Recently I was...
View ArticleFloat Compression 0: Intro
I was playing around with compression of some floating point data, and decided to write up my findings. None of this will be any news for anyone who actually knows anything about compression, but eh,...
View ArticleFloat Compression 1: Generic
Introduction and index of this series is here. We have 94.5MB worth of data, and we want to make it smaller. About the easiest thing to do: use one of existing lossless data compression libraries, or...
View ArticleFloat Compression 2: Oodleflate
Introduction and index of this series is here. In the previous part I looked at generic lossless data compressors (zlib, lz4, zstd, brotli), and was thinking of writing about data filtering next. But...
View ArticleFloat Compression 3: Filters
Introduction and index of this series is here. In the previous parts we saw that using generic data compression libraries, we can get our 94.5MB data down to 33.8MB (zstd level 7) or 29.6MB (oodle...
View ArticleFloat Compression 4: Mesh Optimizer
Introduction and index of this series is here. The previous post investigated some lossless filtering of data, before passing it to a regular compression library. Our result so far is: 94.5MB of data...
View ArticleFloat Compression 5: Science!
Introduction and index of this series is here. Previous post was about mis-using meshoptimizer compression for compressing totally non-mesh data, for pretty good results. This time, let’s look at...
View ArticleFloat Compression 6: Filtering Optimization
Introduction and index of this series is here. Several posts ago we learned that filtering the data can make it more compressible. Out of several simple filters that I tried, “reorder data items...
View ArticleFloat Compression 7: More Filtering Optimization
Introduction and index of this series is here. In the previous post I explored how to make data filters a bit faster, using some trivial merging of filters, and a largely misguided attempt at using...
View ArticleFloat Compression 8: Blosc
Introduction and index of this series is here. Several people have asked whether I have tried Blosc library for compressing my test data set. I was aware of it, but have not tried it! So this post is...
View ArticleFloat Compression 9: LZSSE and Lizard
Introduction and index of this series is here. Some people asked whether I have tested LZSSE or Lizard. I have not! But I have been aware of them for years. So here’s a short post, testing them on “my”...
View ArticleGaussian Splatting is pretty cool!
SIGGRAPH 2023 just had a paper “3D Gaussian Splatting for Real-Time Radiance Field Rendering” by Kerbl, Kopanas, Leimkühler, Drettakis, and it looks pretty cool! Check out their website, source code...
View ArticleMaking Gaussian Splats smaller
In the previous post I started to look at Gaussian Splatting. One of the issues with it, is that the data sets are not exactly small. The renders look nice: But each of the “bike”, “truck”, “garden”...
View ArticleMaking Gaussian Splats more smaller
Previous post was about making Gaussian Splatting data sizes smaller (both in-memory and on-disk). This one is still about the same topic! Now we look into clustering / VQ. Spherical Harmonics take up...
View ArticleGaussian explosion
Over the past month it seems like Gaussian Splatting (see my first post) is experiencing a Cambrian Gaussian explosion of new research. The seminal paper came out in July 2023, and starting about...
View ArticleTwo years ago: left Unity
I left Unity at start of 2022. So for this lazy Tuesday afternoon, figured I can share the rambles I wrote in my goodbye email. No big insights there, just old man reminiscing. And hey the text is...
View ArticleI accidentally Blender VSE
Two months ago I started to contribute a bit of code to Blender’s Video Sequence Editor (VSE). Did you know that Blender has a suite of video editing tools? Yeah, me neither :) Even the feature page...
View ArticleCrank the World: Playdate demo
You know Playdate, the cute yellow console with a crank? I think I saw it in person last year via Inês, and early this year they started to have Lithuania as a shipping destination, so I got one. And...
View ArticleKyrgyzstan Trip 2024
Just spent 10 days around in Kyrgyzstan, so here’s a bunch of pictures! Overall this was a “botanical trip”. There’s a local group of gardeners and related people, who do journeys through various...
View ArticleMore Blender VSE stuff for 4.2
I did a bunch of work for Blender 4.1 video sequence editor, and since no one revoked my commit access, I continued in the same area for Blender 4.2. Are you one of the approximately seven Blender VSE...
View ArticleRandom thoughts about Unity
Unity has a problem From the outside, Unity lately seems to have a problem or two. By “lately”, I mean during the last decade, and by “a problem or two”, I mean probably over nine thousand problems....
View ArticleVector math library codegen in Debug
This will be about how when in your C++ code you have a “vector math library”, and how the choices of code style in there affect non-optimized build performance.Backstory A month ago I got into the...
View ArticleA year in Blender VSE land
Turns out, now is exactly one year of me working on the video sequence editor (VSE).Going pretty well so far! What I managed to put into Blender 4.1 and 4.2 is in the previous blog posts. Blender 4.3...
View ArticleVerbosity of coding styles
Everyone knows that different code styles have different verbosity. You can have very dense code that implements a path tracer in 99 lines of C, or on the back of a business card (one, two). On the...
View ArticleDoom in Blender VSE
You know how in Blender Video Sequence Editor (VSE) you can create Color strips, and then their color is displayed in the timeline? You can create many of them, and when sufficiently zoomed out, the...
View ArticleSurface-Stable Fractal Dither on Playdate
Rune Skovbo Johansen has a really sweet Surface-Stable Fractal Dithering technique, where the dither dots “stick” to 3D surfaces, yet the dot density adapts to the view distance and zoom level.Some...
View ArticleUS New Orleans Trip 2025
We just spent a week-and-a-bit in southern part of United States, so here’s a bunch of photos and some random thoughts!Aistė went for a work related conference in New Orleans, and we (myself and our...
View Article