Name Last modified Size Description| aras-p.info
This is about an update to Blender video editing Scopes (waveform, vectorscope, etc.), and a detour into rendering many points on a GPU.| Aras' website
Back in 2021 I looked at OpenEXR lossless compression options (and I think| Aras' website
Sergey from Blender asked me to look into why trying to manually sprinkle some SIMD into Cycles renderer Voronoi| Aras' website
Sergey from Blender asked me to look into why trying to manually sprinkle some SIMD into Cycles renderer Voronoi| Aras' website
Three years ago I found myself speeding up Blender OBJ importer,| Aras' website
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 other side of the spectrum, you can have very elaborate code where it can take you weeks to figure out where does the actual work happen, digging through all the abstraction layers and indirections.| Aras' website
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 has just shipped, and everything related to Video Sequence Editor is listed on this page. Items related to performance or thumbnails are my doing. Some of the work I happened to do for VSE over this past year ended up improving other areas of Blender.| Aras' website
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 rabbit hole of trying to “sanitize” the various ways that images can be resized within Blender codebase. There were at least 4 different functions to do that, with different filtering modes (expected), but also different corner case behaviors and other funkiness, that was not well document...| Aras' website
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. Fun! But what are they, how serious they are, and what can be done about it? Unity is a “little engine that could”, that started out in the year 2004. Almost everything about games and related industries was different compared to today (Steam did not exist for 3rd party games!| Aras' website
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 users? Read on then! Blender 4.2 has just shipped, and everything related to Video Sequence Editor is listed on this page. Probably half of that is my fault work, and since 4.2 is a long term support (LTS) release, this means I’ll have to fix any bugs or issues about that for three more years,...| Aras' website
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 famous and beautiful gardens, and so on. This year, they decided to not go through literal gardens, but rather visit foots and valleys of Tian Shan, where a lot of decorative plants originate from and/or just grow in the wilderness.| Aras' website
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 for it on the website looks… a bit empty lol. Do I know anything at all about video editing, timelines, sequencers, color grading, ffmpeg, audio mixing and so on? Of course not! So naturally, that means I should start to tinker with it.| Aras' website
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 already written, so that makes it easy to copy-pasta it into the blog: It’s now exactly 16 years of me working at Unity. And as everyone knows, if you don’t leave after 16 years, you have to wait until 32 years for your next chance (look, I don’t make the rules).| Aras' website
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 mid-November, it feels like every day there’s a new paper or two coming out, related to Gaussian Splatting in some way. @MrNeRF and @henrypearce4D maintain an excellent list of all things related to 3DGS, check out their Awesome 3D Gaussian Splatting Resources.| Aras' website
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. Teaser: this scene (garden tools from my own shed) is just 7.5 megabytes of data now. And it represents the metal shading (anisotropy / brushed metal parts) quite well! Spherical Harmonics take up a lot of space! In raw uncompressed Gaussian Splat data, majority of the data is Spherical Harmonics coefficients.| Aras' website
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” data sets is respectively a 1.42GB, 0.59GB, 1.35GB PLY file. And they are loaded pretty much as-is into GPU memory as giant structured buffers, so at least that much VRAM is needed too (plus more for sorting, plus in the official viewer implementation the tiled splat rasterizer uses so...| Aras' website
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 repository, data sets and so on (I should note that it is really, really good to see full source and full data sets being released. Way to go!). I’ve decided to try to implement the realtime visualization part (i.e. the one that takes already-produced gaussian splat “model” file) in Unity.| Aras' website
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” data set. Note that at least currently both of these compressors do not seem to be actively developed or updated. LZSSE and Lizard, without data filtering Here they are on Windows (VS2022, Ryzen 5950X).| Aras' website
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 SIMD. People smarter than me pointed out that getting good SIMD performance requires a different approach. Which is kinda obvious, and another thing that is obvious is that I have very little SIMD programming experience, and thus very little intuition of what’s a good approach.| Aras' website
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 can get filtered+compressed down to 23.0MB in one second (split/shuffle bytes, delta encode, zstd or kraken compression). It decompresses back in about 0.15 seconds (which quite a bit slower than without data filtering, but that’s something for later day).| Aras' website
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 then, libdeflate and Oodle entered the chat! libdeflate libdeflate is an independent implementation of zlib/deflate compression, that is heavily optimized. I’ve seen it before (EXR blog post), and indeed it is very impressive, considering it produces completely zlib-compatible data, but much fa...| Aras' website
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 optimizing Blender’s OBJ importer, and the state of it in the end was “the bottlenecks are not OBJ specific anymore”. I was looking for some larger test scene to import, noticed that the Moana scene got a USD version done in 2022, and started to wonder how well that would import into Ble...| Aras' website
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 is in developing BCn compressors (see “Texture Compression in 2020” post), I decided to look into various available BCn decompressors. Why would you want that? After all, isn’t that done by the GPU, magically and efficiently? Normally, yes. Except if for “some reason” you ...| Aras' website
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 relative simplicity, I guess. In the previous blog post I asked myself a question, “is this new Blender OBJ parsing code even good?” Which means, time to compare it with some other existing libraries for parsing Wavefront OBJ files.| Aras' website
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 better” post. Now, let’s assume that the use case we have is this: We have some gradients, We need to evaluate them on a lot of things (particles, pixels, etc.), Gradient colors are specified in sRGB (sometimes called “gamma space”), as 8-bit/channel values, The evaluated gradient co...| Aras' website
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 Blender 3.2 by 3-4 times. This could have been the end of the story, filed under a “eh, sprintf is bad!” drawer, but I started to wonder why it shows this lack of scaling. Test case A simple test: convert two million integers into strings.| Aras' website
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 performance numbers. As everyone already noticed, M1 CPU is quite impressive. I’m comparing three setups here: MacBookPro (2019 16", 8 cores / 16 threads). This is basically the “top” MacBook Pro you can get in 2020, with 9th generation Coffee Lake Core i9 9980HK CPU.| Aras' website
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 was renting a tiny room (it was like 12 square meters; back then that’s all I could afford). The guy I was renting from was into writing and music. One of his stories was narrated into a music track, and that’s what I wanted to make a demo from… so we agreed that I would make a demo, using h...| Aras' website
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 now, I wanted built-in tool (Move/Scale/Rotate) handle lines to be thicker than one pixel. One pixel might have been fine when displays were 96 DPI, but these days a pixel is a tiny little non-square.| Aras' website
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, eleven years. A year ago I wrote how I started mentoring several juniors at work, and then how I’ve spent two years on the build system team. What happened next is that I somehow managed to convince others (or someone else has convinced me – it’s a blur) that I should stop being on the buil...| Aras' website
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 size-limited demo experience? ✅ We have no idea what the demo would be about? ✅ Does it have a high chance of being totally “not good”? ✅ So we did the only thing that made sense in this situation – try to do it!| Aras' website
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 (see SN Systems blog post). All that is good, but it works on one compiled file at a time. If you know which source files are problematic in your whole build, then great. But what if you don’t, and just want to see things like “which headers are most expensive to include across whol...| Aras' website
We just spent a week-and-a-bit in southern part of United States, so here’s a bunch| Aras' website
Rune Skovbo Johansen has a really sweet Surface-Stable Fractal Dithering| Aras' website
You know how in Blender Video Sequence Editor (VSE) you can create Color strips,| Aras' website
You know Playdate, the cute yellow console with a crank? I think I saw it in person last| Aras' website
Introduction and index of this series is here.| Aras' website
Introduction and index of this series is here.| Aras' website
Introduction and index of this series is here.| Aras' website
Introduction and index of this series is here.| Aras' website
I was playing around with compression of some floating point data, and decided to write up| Aras' website
Introduction and index of this series is here.| Aras' website
A while ago I wrote about speeding up| Aras' website
This tweet by @zeuxcg sparked my interest:| Aras' website
People smarter than me have already said it| Aras' website
In the previous blog post I looked at| Aras' website
Previous blog post was about| Aras' website
In the previous blog post I looked at| Aras' website
Update 2021 October: default zip compression level was switched from 6 to 4,| Aras' website
One thing led to another, and I happened to be looking at various lossless compression options available in| Aras' website
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 the stage (click for a semi-interactive page):| Aras' website
Whoa! Has it been two years already since I stopped doing graphics| Aras' website
Update: this has landed to LLVM/Clang mainline! So if all goes well, Clang 9.0 should contain this| Aras' website
TL;DR: if you want to use -ftime-report Clang flag to help you figure out where or why your code is slow to compile…| Aras' website
So! For three months by now, I’m mentoring three junior engineers at work.| Aras' website