<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Aras&#39; website</title>
    <link>https://aras-p.info/</link>
    <description>Recent content on Aras&#39; website</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>&lt;small&gt;Text content © Aras Pranckevičius. Code snippets are public domain, unless specified otherwise.&lt;/small&gt;</copyright>
    <lastBuildDate>Sat, 07 Mar 2026 20:42:10 +0300</lastBuildDate>
    <atom:link href="https://aras-p.info/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Rapidhash Unity port</title>
      <link>https://aras-p.info/blog/2026/03/07/Rapidhash-Unity-port/</link>
      <pubDate>Sat, 07 Mar 2026 20:42:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2026/03/07/Rapidhash-Unity-port/</guid>
      <description>Ten years ago I was writing about various non-cryptographic hash functions. Back then xxHash was new (introduced in 2014)! However, quite some things have changed since then. xxHash itself got a new &amp;ldquo;XXH3&amp;rdquo; version (2020); &amp;ldquo;wyhash&amp;rdquo; appeared (2020+), and eventually evolved into &amp;ldquo;rapidhash&amp;rdquo; (2024+). Many others too, but this is about rapidhash.&#xA;It is small and beautiful. Yes, current (V3) version is over 500 lines of C code, but that is three hash function variants and several tweaking options.</description>
    </item>
    <item>
      <title>Two years of Blender VSE</title>
      <link>https://aras-p.info/blog/2025/11/23/Two-years-of-Blender-VSE/</link>
      <pubDate>Sun, 23 Nov 2025 13:35:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/11/23/Two-years-of-Blender-VSE/</guid>
      <description>So, Blender 5.0 has shipped while I was away at the excellent Graphics Programming Conference, but while all that was happening, I realized it has been two years since I mostly work on the Blender Video Sequence Editor (VSE). Perhaps not surprisingly, a year ago it was one year of that :)&#xA;Just like two years ago when I started, I am still mostly flailing my arms around, without realizing what I&amp;rsquo;m actually doing.</description>
    </item>
    <item>
      <title>OpenEXR vs tinyexr</title>
      <link>https://aras-p.info/blog/2025/11/22/OpenEXR-vs-tinyexr/</link>
      <pubDate>Sat, 22 Nov 2025 12:25:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/11/22/OpenEXR-vs-tinyexr/</guid>
      <description>tinyexr is an excellent simple library for loading and saving OpenEXR files. It has one big advantage, in that it is very simple to start using: just one source file to compile and include! However, it also has some downsides, namely that not all features of OpenEXR are supported (for example, it can&amp;rsquo;t do PXR24, B44/B44A, DWAA/DWAB, HTJ2K compression modes), and performance might be behind the official library. It probably can&amp;rsquo;t do some of more exotic EXR features either (e.</description>
    </item>
    <item>
      <title>This many points is surely out of scope!</title>
      <link>https://aras-p.info/blog/2025/08/24/This-many-points-is-surely-out-of-scope/</link>
      <pubDate>Sun, 24 Aug 2025 17:10:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/08/24/This-many-points-is-surely-out-of-scope/</guid>
      <description>This is about an update to Blender video editing Scopes (waveform, vectorscope, etc.), and a detour into rendering many points on a GPU.&#xA;Making scopes more ready for HDR Current Blender Studio production, Singularity, needed improvements to video editing visualizations, particularly in the HDR area. Visualizations that Blender can do are: histogram, waveform, RGB parade, vectorscope, and &amp;ldquo;show overexposed&amp;rdquo; (&amp;ldquo;zebra stripes&amp;rdquo;) overlay. Some of them were not handling HDR content in a useful way, e.</description>
    </item>
    <item>
      <title>Lossless Float Image Compression</title>
      <link>https://aras-p.info/blog/2025/07/08/Lossless-Float-Image-Compression/</link>
      <pubDate>Tue, 08 Jul 2025 14:38:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/07/08/Lossless-Float-Image-Compression/</guid>
      <description>Back in 2021 I looked at OpenEXR lossless compression options (and I think my findings led a change of the default zip compression level, as well as change of the compression library from zlib to libdeflate. Yay blogging about things!). Then in 2023 I looked at losslessly compressing a bunch of floating point data, some of which might be image-shaped.&#xA;Well, now a discussion somewhere else has nerd-sniped me to look into lossless compression of floating point images, and especially the ones that might have more than just RGB(A) color channels.</description>
    </item>
    <item>
      <title>Voronoi, Hashing and OSL</title>
      <link>https://aras-p.info/blog/2025/06/13/Voronoi-Hashing-and-OSL/</link>
      <pubDate>Fri, 13 Jun 2025 09:38:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/06/13/Voronoi-Hashing-and-OSL/</guid>
      <description>Sergey from Blender asked me to look into why trying to manually sprinkle some SIMD into Cycles renderer Voronoi node code actually made things slower, and I started to look, and what I did in the end had nothing to do with SIMD whatsoever!&#xA;TL;DR: Blender 5.0 changed Voronoi node hash function to a faster one.&#xA;Voronoi in Blender Blender has a Voronoi node that can be used in any node based scenario (materials, compositor, geometry nodes).</description>
    </item>
    <item>
      <title>Blender FBX importer via ufbx</title>
      <link>https://aras-p.info/blog/2025/05/08/Blender-FBX-importer-via-ufbx/</link>
      <pubDate>Thu, 08 May 2025 13:18:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/05/08/Blender-FBX-importer-via-ufbx/</guid>
      <description>Three years ago I found myself speeding up Blender OBJ importer, and this time I am rewriting Blender FBX importer. Or, letting someone else take care of the actually complex parts of it.&#xA;TL;DR: Blender 4.5 will have a new FBX importer.&#xA;FBX in Blender FBX, a 3D and animation interchange format owned by Kaydara Alias Autodesk, is a proprietary format that is still quite popular in some spaces. The file format itself is quite good actually; the largest downsides of it are: 1) it is closed and with no public spec, and 2) due to it being very flexible, various software represent their data in funny and sometimes incompatible ways.</description>
    </item>
    <item>
      <title>US New Orleans Trip 2025</title>
      <link>https://aras-p.info/blog/2025/03/02/US-New-Orleans-Trip-2025/</link>
      <pubDate>Sun, 02 Mar 2025 17:18:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/03/02/US-New-Orleans-Trip-2025/</guid>
      <description>We just spent a week-and-a-bit in southern part of United States, so here&amp;rsquo;s a bunch of photos and some random thoughts!&#xA;Aistė went for a work related conference in New Orleans, and we (myself and our two kids) joined her after that. A bit in New Orleans, then driving across the Gulf of Mexico coast towards Orlando.&#xA;I wanted to see New Orleans mostly due to its historical importance for music, and we wanted to end the trip in Kennedy Space Center due to, well, &amp;ldquo;space!</description>
    </item>
    <item>
      <title>Surface-Stable Fractal Dither on Playdate</title>
      <link>https://aras-p.info/blog/2025/02/09/Surface-Stable-Fractal-Dither-on-Playdate/</link>
      <pubDate>Sun, 09 Feb 2025 12:18:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/02/09/Surface-Stable-Fractal-Dither-on-Playdate/</guid>
      <description>Rune Skovbo Johansen has a really sweet Surface-Stable Fractal Dithering technique, where the dither dots &amp;ldquo;stick&amp;rdquo; to 3D surfaces, yet the dot density adapts to the view distance and zoom level.&#xA;Some people have asked whether this would be a good technique for Playdate, given that the screen is one-bit color. And so I had to try it out! Here&amp;rsquo;s a video: And here&amp;rsquo;s the code: github.com/aras-p/playdate-dither3d.&#xA;This is a long-arse post, so here&amp;rsquo;s the sections: Is it practical?</description>
    </item>
    <item>
      <title>Doom in Blender VSE</title>
      <link>https://aras-p.info/blog/2025/01/17/Doom-in-Blender-VSE/</link>
      <pubDate>Fri, 17 Jan 2025 12:18:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2025/01/17/Doom-in-Blender-VSE/</guid>
      <description>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 strip headings disappear since there&amp;rsquo;s not enough space for the label: So if you created say 80 columns and 60 rows of color strips&amp;hellip; &amp;hellip;and kept on changing their colors constantly&amp;hellip; you could run Doom inside the Blender VSE timeline.</description>
    </item>
    <item>
      <title>Verbosity of coding styles</title>
      <link>https://aras-p.info/blog/2024/12/17/Verbosity-of-coding-styles/</link>
      <pubDate>Tue, 17 Dec 2024 14:30:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/12/17/Verbosity-of-coding-styles/</guid>
      <description>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.</description>
    </item>
    <item>
      <title>A year in Blender VSE land</title>
      <link>https://aras-p.info/blog/2024/11/21/A-year-in-Blender-VSE-land/</link>
      <pubDate>Thu, 21 Nov 2024 15:35:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/11/21/A-year-in-Blender-VSE-land/</guid>
      <description>Turns out, now is exactly one year of me working on the video sequence editor (VSE).&#xA;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.&#xA;Some of the work I happened to do for VSE over this past year ended up improving other areas of Blender.</description>
    </item>
    <item>
      <title>Vector math library codegen in Debug</title>
      <link>https://aras-p.info/blog/2024/09/14/Vector-math-library-codegen-in-Debug/</link>
      <pubDate>Sat, 14 Sep 2024 21:01:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/09/14/Vector-math-library-codegen-in-Debug/</guid>
      <description>This will be about how when in your C++ code you have a &amp;ldquo;vector math library&amp;rdquo;, and how the choices of code style in there affect non-optimized build performance.&#xA;Backstory A month ago I got into the rabbit hole of trying to &amp;ldquo;sanitize&amp;rdquo; 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 documented and not well understood.</description>
    </item>
    <item>
      <title>Random thoughts about Unity</title>
      <link>https://aras-p.info/blog/2024/08/11/Random-thoughts-about-Unity/</link>
      <pubDate>Sun, 11 Aug 2024 08:11:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/08/11/Random-thoughts-about-Unity/</guid>
      <description>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?&#xA;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!</description>
    </item>
    <item>
      <title>More Blender VSE stuff for 4.2</title>
      <link>https://aras-p.info/blog/2024/07/22/More-Blender-VSE-stuff-for-4.2/</link>
      <pubDate>Mon, 22 Jul 2024 19:45:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/07/22/More-Blender-VSE-stuff-for-4.2/</guid>
      <description>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!&#xA;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&amp;rsquo;ll have to fix any bugs or issues about that for three more years, yay :)</description>
    </item>
    <item>
      <title>Kyrgyzstan Trip 2024</title>
      <link>https://aras-p.info/blog/2024/07/16/Kyrgyzstan-Trip-2024/</link>
      <pubDate>Tue, 16 Jul 2024 20:18:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/07/16/Kyrgyzstan-Trip-2024/</guid>
      <description>Just spent 10 days around in Kyrgyzstan, so here&amp;rsquo;s a bunch of pictures! Overall this was a &amp;ldquo;botanical trip&amp;rdquo;. There&amp;rsquo;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.</description>
    </item>
    <item>
      <title>Crank the World: Playdate demo</title>
      <link>https://aras-p.info/blog/2024/05/20/Crank-the-World-Playdate-demo/</link>
      <pubDate>Mon, 20 May 2024 20:18:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/05/20/Crank-the-World-Playdate-demo/</guid>
      <description>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 then what would I do with it? Of course, try to make a demoscene demo :)&#xA;First impressions The device is cute. The SDK is simple and no-nonsense (see docs). I only used the C part of SDK (there&amp;rsquo;s also Lua, which I did not use).</description>
    </item>
    <item>
      <title>I accidentally Blender VSE</title>
      <link>https://aras-p.info/blog/2024/02/06/I-accidentally-Blender-VSE/</link>
      <pubDate>Tue, 06 Feb 2024 19:45:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/02/06/I-accidentally-Blender-VSE/</guid>
      <description>A bit over two months ago I started to contribute a bit of code to Blender&amp;rsquo;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&amp;hellip; a bit empty lol.&#xA;Do I know anything at all about video editing, timelines, sequencers, color grading, ffmpeg, audio mixing and so on? Of course not!</description>
    </item>
    <item>
      <title>Two years ago: left Unity</title>
      <link>https://aras-p.info/blog/2024/01/02/Two-years-ago-left-Unity/</link>
      <pubDate>Tue, 02 Jan 2024 13:30:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2024/01/02/Two-years-ago-left-Unity/</guid>
      <description>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:&#xA;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).</description>
    </item>
    <item>
      <title>Gaussian explosion</title>
      <link>https://aras-p.info/blog/2023/12/08/Gaussian-explosion/</link>
      <pubDate>Fri, 08 Dec 2023 09:44:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/12/08/Gaussian-explosion/</guid>
      <description>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&amp;rsquo;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.</description>
    </item>
    <item>
      <title>Making Gaussian Splats more smaller</title>
      <link>https://aras-p.info/blog/2023/09/27/Making-Gaussian-Splats-more-smaller/</link>
      <pubDate>Wed, 27 Sep 2023 12:22:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/09/27/Making-Gaussian-Splats-more-smaller/</guid>
      <description>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.&#xA;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.</description>
    </item>
    <item>
      <title>Making Gaussian Splats smaller</title>
      <link>https://aras-p.info/blog/2023/09/13/Making-Gaussian-Splats-smaller/</link>
      <pubDate>Wed, 13 Sep 2023 15:22:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/09/13/Making-Gaussian-Splats-smaller/</guid>
      <description>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 &amp;ldquo;bike&amp;rdquo;, &amp;ldquo;truck&amp;rdquo;, &amp;ldquo;garden&amp;rdquo; 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 some-hundreds-of-MB).</description>
    </item>
    <item>
      <title>Gaussian Splatting is pretty cool!</title>
      <link>https://aras-p.info/blog/2023/09/05/Gaussian-Splatting-is-pretty-cool/</link>
      <pubDate>Tue, 05 Sep 2023 21:04:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/09/05/Gaussian-Splatting-is-pretty-cool/</guid>
      <description>SIGGRAPH 2023 just had a paper &amp;ldquo;3D Gaussian Splatting for Real-Time Radiance Field Rendering&amp;rdquo; 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!).&#xA;I&amp;rsquo;ve decided to try to implement the realtime visualization part (i.e. the one that takes already-produced gaussian splat &amp;ldquo;model&amp;rdquo; file) in Unity.</description>
    </item>
    <item>
      <title>Float Compression 9: LZSSE and Lizard</title>
      <link>https://aras-p.info/blog/2023/04/18/Float-Compression-9-LZSSE-and-Lizard/</link>
      <pubDate>Tue, 18 Apr 2023 14:15:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/04/18/Float-Compression-9-LZSSE-and-Lizard/</guid>
      <description>Introduction and index of this series is here.&#xA;Some people asked whether I have tested LZSSE or Lizard. I have not! But I have been aware of them for years. So here&amp;rsquo;s a short post, testing them on &amp;ldquo;my&amp;rdquo; data set. Note that at least currently both of these compressors do not seem to be actively developed or updated.&#xA;LZSSE and Lizard, without data filtering Here they are on Windows (VS2022, Ryzen 5950X).</description>
    </item>
    <item>
      <title>Float Compression 8: Blosc</title>
      <link>https://aras-p.info/blog/2023/03/02/Float-Compression-8-Blosc/</link>
      <pubDate>Thu, 02 Mar 2023 14:45:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/03/02/Float-Compression-8-Blosc/</guid>
      <description>Introduction and index of this series is here.&#xA;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 fixing that.&#xA;In the graphics/vfx world, OpenVDB uses Blosc as one option for volumetric data compression. I had no idea until about two weeks ago!&#xA;What is Blosc? Blosc is many things, but if we ignore all the parts that are not relevant for us (Python APIs etc.</description>
    </item>
    <item>
      <title>Float Compression 7: More Filtering Optimization</title>
      <link>https://aras-p.info/blog/2023/03/01/Float-Compression-7-More-Filtering-Optimization/</link>
      <pubDate>Wed, 01 Mar 2023 09:45:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/03/01/Float-Compression-7-More-Filtering-Optimization/</guid>
      <description>Introduction and index of this series is here.&#xA;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.&#xA;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&amp;rsquo;s a good approach.</description>
    </item>
    <item>
      <title>Float Compression 6: Filtering Optimization</title>
      <link>https://aras-p.info/blog/2023/02/18/Float-Compression-6-Filtering-Optimization/</link>
      <pubDate>Sat, 18 Feb 2023 10:20:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/02/18/Float-Compression-6-Filtering-Optimization/</guid>
      <description>Introduction and index of this series is here.&#xA;Several posts ago we learned that filtering the data can make it more compressible. Out of several simple filters that I tried, &amp;ldquo;reorder data items byte-wise and delta encode that&amp;rdquo; was the most effective at improving compression ratio. That&amp;rsquo;s all nice and good, but the filtering has a cost to it. One is the extra memory needed to hold the filtered data, and another is the time it takes to do the filtering.</description>
    </item>
    <item>
      <title>Float Compression 5: Science!</title>
      <link>https://aras-p.info/blog/2023/02/03/Float-Compression-5-Science/</link>
      <pubDate>Fri, 03 Feb 2023 18:25:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/02/03/Float-Compression-5-Science/</guid>
      <description>Introduction and index of this series is here.&#xA;Previous post was about mis-using meshoptimizer compression for compressing totally non-mesh data, for pretty good results. This time, let&amp;rsquo;s look at several libraries specifically targeted at compressing floating point data sets. Most of them are coming from the scientific community &amp;ndash; after all, they do have lots of simulation data, which is very often floating point numbers, and some of that data is massive and needs some compression.</description>
    </item>
    <item>
      <title>Float Compression 4: Mesh Optimizer</title>
      <link>https://aras-p.info/blog/2023/02/02/Float-Compression-4-Mesh-Optimizer/</link>
      <pubDate>Thu, 02 Feb 2023 16:00:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/02/02/Float-Compression-4-Mesh-Optimizer/</guid>
      <description>Introduction and index of this series is here.&#xA;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&amp;rsquo;s something for later day).</description>
    </item>
    <item>
      <title>Float Compression 3: Filters</title>
      <link>https://aras-p.info/blog/2023/02/01/Float-Compression-3-Filters/</link>
      <pubDate>Wed, 01 Feb 2023 12:50:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/02/01/Float-Compression-3-Filters/</guid>
      <description>Introduction and index of this series is here.&#xA;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 kraken level 2) size, if we&amp;rsquo;re not willing to spend more than one second compressing it.&#xA;That&amp;rsquo;s not bad, but is there something else we can do? Turns out, there is, and in fact it&amp;rsquo;s quite simple.</description>
    </item>
    <item>
      <title>Float Compression 2: Oodleflate</title>
      <link>https://aras-p.info/blog/2023/01/31/Float-Compression-2-Oodleflate/</link>
      <pubDate>Tue, 31 Jan 2023 16:10:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/01/31/Float-Compression-2-Oodleflate/</guid>
      <description>Introduction and index of this series is here.&#xA;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!&#xA;libdeflate libdeflate is an independent implementation of zlib/deflate compression, that is heavily optimized. I&amp;rsquo;ve seen it before (EXR blog post), and indeed it is very impressive, considering it produces completely zlib-compatible data, but much faster and at a bit higher compression ratio too.</description>
    </item>
    <item>
      <title>Float Compression 1: Generic</title>
      <link>https://aras-p.info/blog/2023/01/29/Float-Compression-1-Generic/</link>
      <pubDate>Sun, 29 Jan 2023 14:10:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/01/29/Float-Compression-1-Generic/</guid>
      <description>Introduction and index of this series is here.&#xA;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 as us old people call it, &amp;ldquo;zip it up&amp;rdquo;.&#xA;There are tons of compression libraries out there, I certainly will not test all of them (there&amp;rsquo;s lzbench and others for that). I tried some popular ones: zlib, lz4, zstd and brotli.</description>
    </item>
    <item>
      <title>Float Compression 0: Intro</title>
      <link>https://aras-p.info/blog/2023/01/29/Float-Compression-0-Intro/</link>
      <pubDate>Sun, 29 Jan 2023 14:04:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2023/01/29/Float-Compression-0-Intro/</guid>
      <description>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, did that ever stop me from blogging? :)&#xA;Situation Suppose we have some sort of &amp;ldquo;simulation&amp;rdquo; thing going on, that produces various data. And we need to take snapshots of it, i.e. save simulation state and later restore it.</description>
    </item>
    <item>
      <title>Swallowing the elephant into Blender</title>
      <link>https://aras-p.info/blog/2022/07/20/Swallowing-the-elephant-into-Blender/</link>
      <pubDate>Wed, 20 Jul 2022 17:09:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2022/07/20/Swallowing-the-elephant-into-Blender/</guid>
      <description>Some years ago Matt Pharr wrote an excellent blog post series, &amp;ldquo;Swallowing the elephant&amp;rdquo;, in which he describes various optimizations done in pbrt using Disnay&amp;rsquo;s Moana Island Scene.&#xA;Recently I was optimizing Blender&amp;rsquo;s OBJ importer, and the state of it in the end was &amp;ldquo;the bottlenecks are not OBJ specific anymore&amp;rdquo;. 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 Blender.</description>
    </item>
    <item>
      <title>Comparing BCn texture decoders</title>
      <link>https://aras-p.info/blog/2022/06/23/Comparing-BCn-texture-decoders/</link>
      <pubDate>Thu, 23 Jun 2022 10:11:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2022/06/23/Comparing-BCn-texture-decoders/</guid>
      <description>PC GPUs use &amp;ldquo;BCn&amp;rdquo; texture compression formats (see &amp;ldquo;Understanding BCn Texture Compression Formats&amp;rdquo; by Nathan Reed or &amp;ldquo;Texture Block Compression in Direct3D 11&amp;rdquo; by Microsoft). While most of the interest is in developing BCn compressors (see &amp;ldquo;Texture Compression in 2020&amp;rdquo; post), I decided to look into various available BCn decompressors.&#xA;Why would you want that? After all, isn&amp;rsquo;t that done by the GPU, magically and efficiently? Normally, yes. Except if for &amp;ldquo;some reason&amp;rdquo; you need to access pixels on the CPU, or perhaps to use BCn data on a GPU that does not support it, or perhaps just to decode a BCn image in order to evaluate the compression quality/error.</description>
    </item>
    <item>
      <title>Comparing .obj parse libraries</title>
      <link>https://aras-p.info/blog/2022/05/14/comparing-obj-parse-libraries/</link>
      <pubDate>Sat, 14 May 2022 20:50:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2022/05/14/comparing-obj-parse-libraries/</guid>
      <description>Wavefront .obj file format is a funny one. Similar to GIF, it&amp;rsquo;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.&#xA;In the previous blog post I asked myself a question, &amp;ldquo;is this new Blender OBJ parsing code even good?&amp;rdquo; Which means, time to compare it with some other existing libraries for parsing Wavefront OBJ files.</description>
    </item>
    <item>
      <title>Speeding up Blender .obj import</title>
      <link>https://aras-p.info/blog/2022/05/12/speeding-up-blender-obj-import/</link>
      <pubDate>Thu, 12 May 2022 13:50:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2022/05/12/speeding-up-blender-obj-import/</guid>
      <description>A while ago I wrote about speeding up Blender&amp;rsquo;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&amp;hellip;&#xA;Existing Python importer Blender 3.1 and earlier has an OBJ importer written in Python. From a quick look, it was written &amp;ldquo;ages ago&amp;rdquo; and has largely unchanged since then. I&amp;rsquo;m going to test it on several files:</description>
    </item>
    <item>
      <title>Optimizing Oklab gradients</title>
      <link>https://aras-p.info/blog/2022/03/11/Optimizing-Oklab-gradients/</link>
      <pubDate>Fri, 11 Mar 2022 20:47:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2022/03/11/Optimizing-Oklab-gradients/</guid>
      <description>An example how one might optimize Oklab color space gradients by&amp;hellip; not doing anything related to Oklab itself!&#xA;The case at hand I wrote about Oklab previously in the &amp;ldquo;gradients in linear space aren&amp;rsquo;t better&amp;rdquo; post. Now, let&amp;rsquo;s assume that the use case we have is this:&#xA;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 &amp;ldquo;gamma space&amp;rdquo;), as 8-bit/channel values, The evaluated gradient colors also have to be in sRGB, 8-bit/channel values.</description>
    </item>
    <item>
      <title>Curious lack of sprintf scaling</title>
      <link>https://aras-p.info/blog/2022/02/25/Curious-lack-of-sprintf-scaling/</link>
      <pubDate>Fri, 25 Feb 2022 19:10:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2022/02/25/Curious-lack-of-sprintf-scaling/</guid>
      <description>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 &amp;ldquo;eh, sprintf is bad!&amp;rdquo; drawer, but I started to wonder why it shows this lack of scaling.&#xA;Test case A simple test: convert two million integers into strings.</description>
    </item>
    <item>
      <title>Speeding up Blender .obj export</title>
      <link>https://aras-p.info/blog/2022/02/03/Speeding-up-Blender-.obj-export/</link>
      <pubDate>Thu, 03 Feb 2022 09:10:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2022/02/03/Speeding-up-Blender-.obj-export/</guid>
      <description>This tweet by @zeuxcg sparked my interest:&#xA;If you think of Ryu as the gold standard of shortest correctly rounded floating point output, note that there&amp;rsquo;s still active research happening in this area, with papers from 2020-2021 (Schubfach, Dragonbox), with both being noticeably faster than Ryu.&#xA;and then I was thinking &amp;ldquo;interesting, if I&amp;rsquo;d find some code that prints a lot of floats, I should test out these new algorithms&amp;rdquo;. And then somehow I was casually profiling Blender&amp;rsquo;s .</description>
    </item>
    <item>
      <title>Gradients in linear space aren&#39;t better</title>
      <link>https://aras-p.info/blog/2021/11/29/Gradients-in-linear-space-arent-better/</link>
      <pubDate>Mon, 29 Nov 2021 14:10:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2021/11/29/Gradients-in-linear-space-arent-better/</guid>
      <description>People smarter than me have already said it (Bart Wronski on twitter), but here&amp;rsquo;s my take in a blog post form too. (blog posts? is this 2005, grandpa?!)&#xA;When you want &amp;ldquo;a gradient&amp;rdquo;, interpolating colors directly in sRGB space does have a lot of situations where &amp;ldquo;it looks wrong&amp;rdquo;. However, interpolating them in &amp;ldquo;linear sRGB&amp;rdquo; is not necessarily better!&#xA;Background In late 2020 Björn Ottosson designed &amp;ldquo;Oklab&amp;rdquo; color space for gradients and other perceptual image operations.</description>
    </item>
    <item>
      <title>EXR: Filtering and ZFP</title>
      <link>https://aras-p.info/blog/2021/08/27/EXR-Filtering-and-ZFP/</link>
      <pubDate>Fri, 27 Aug 2021 07:32:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2021/08/27/EXR-Filtering-and-ZFP/</guid>
      <description>In the previous blog post I looked at using libdeflate for OpenEXR Zip compression. Let&amp;rsquo;s look at a few other things now!&#xA;Prediction / filtering As noticed in the zstd post, OpenEXR does some filtering of the input pixel data before passing it to a zip compressor. The filtering scheme it does is fairly simple: assume input data is in 16-bit units, split that up into two streams (all lower bytes, all higher bytes), and delta-encode the result.</description>
    </item>
    <item>
      <title>EXR: libdeflate is great</title>
      <link>https://aras-p.info/blog/2021/08/09/EXR-libdeflate-is-great/</link>
      <pubDate>Mon, 09 Aug 2021 10:31:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2021/08/09/EXR-libdeflate-is-great/</guid>
      <description>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 to look into libdeflate, which I was not consciously aware of before.&#xA;TL;DR: libdeflate is most excellent. If you need to use zlib/deflate compression, look into it!&#xA;Here&amp;rsquo;s what happens by replacing zlib usage for Zip compression in OpenEXR with libdeflate v1.</description>
    </item>
    <item>
      <title>EXR: Zstandard compression</title>
      <link>https://aras-p.info/blog/2021/08/06/EXR-Zstandard-compression/</link>
      <pubDate>Fri, 06 Aug 2021 11:45:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2021/08/06/EXR-Zstandard-compression/</guid>
      <description>In the previous blog post I looked at OpenEXR Zip compression level settings.&#xA;Now, Zip compression algorithm (DEFLATE) has one good thing going for it: it&amp;rsquo;s everywhere. However, it is also from the year 1993, and both the compression algorithm world and the hardware has moved on quite a bit since then :) These days, if one were to look for a good, general purpose, freely available lossless compression algorithm, the answer seems to be either Zstandard or LZ4, both by Yann Collet.</description>
    </item>
    <item>
      <title>EXR: Zip compression levels</title>
      <link>https://aras-p.info/blog/2021/08/05/EXR-Zip-compression-levels/</link>
      <pubDate>Thu, 05 Aug 2021 07:16:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2021/08/05/EXR-Zip-compression-levels/</guid>
      <description>Update 2021 October: default zip compression level was switched from 6 to 4, for OpenEXR 3.2 (see PR). Yay faster zipped exr writing, soon!&#xA;In the previous blog post I looked at lossless compression options that are available in OpenEXR.&#xA;The Zip compression in OpenEXR is just the standard DEFLATE algorithm as used by Zip, gzip, PNG and others. That got me thinking - the compression has different &amp;ldquo;compression levels&amp;rdquo; that control ratio vs.</description>
    </item>
    <item>
      <title>EXR: Lossless Compression</title>
      <link>https://aras-p.info/blog/2021/08/04/EXR-Lossless-Compression/</link>
      <pubDate>Wed, 04 Aug 2021 17:05:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2021/08/04/EXR-Lossless-Compression/</guid>
      <description>One thing led to another, and I happened to be looking at various lossless compression options available in OpenEXR image file format.&#xA;EXR has several lossless compression options, and most of the available material (e.g. &amp;ldquo;Technical Introduction to OpenEXR&amp;rdquo; and others) basically end up saying: Zip compression is slow to write, but fast to read; whereas PIZ compression is faster to write, but slower to read than Zip. PIZ is the default one used by the library/API.</description>
    </item>
    <item>
      <title>Texture Compression on Apple M1</title>
      <link>https://aras-p.info/blog/2021/01/18/Texture-Compression-on-Apple-M1/</link>
      <pubDate>Mon, 18 Jan 2021 14:20:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2021/01/18/Texture-Compression-on-Apple-M1/</guid>
      <description>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&amp;rsquo;m comparing three setups here:&#xA;MacBookPro (2019 16&amp;quot;, 8 cores / 16 threads). This is basically the &amp;ldquo;top&amp;rdquo; MacBook Pro you can get in 2020, with 9th generation Coffee Lake Core i9 9980HK CPU.</description>
    </item>
    <item>
      <title>Texture Compression in 2020</title>
      <link>https://aras-p.info/blog/2020/12/08/Texture-Compression-in-2020/</link>
      <pubDate>Tue, 08 Dec 2020 09:20:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2020/12/08/Texture-Compression-in-2020/</guid>
      <description>I&amp;rsquo;ve spent some time looking at various texture compression formats and libraries (the ones meant for GPUs, i.e. &amp;ldquo;ASTC, BC7&amp;rdquo; kind, not the &amp;ldquo;PNG, JPG&amp;rdquo; kind). Here&amp;rsquo;s a fully incomprehensible chart to set the stage (click for a semi-interactive page):&#xA;If your reaction is &amp;ldquo;whoa what is this mess?!&amp;rdquo;, that&amp;rsquo;s good. It is a mess! But we&amp;rsquo;ll get through that :)&#xA;Backstory on GPU compression formats Majority of textures on the GPU end up using &amp;ldquo;block compression&amp;rdquo; formats, to save sampling bandwidth, memory usage and for faster texture loads.</description>
    </item>
    <item>
      <title>Black Hole Demo</title>
      <link>https://aras-p.info/blog/2020/07/26/Black-Hole-Demo/</link>
      <pubDate>Sun, 26 Jul 2020 16:20:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2020/07/26/Black-Hole-Demo/</guid>
      <description>I made a demo with my kid, and it somehow managed to get 1st place at a (small) demoparty!&#xA;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&amp;rsquo;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&amp;rsquo;s what I wanted to make a demo from&amp;hellip; so we agreed that I would make a demo, using his story &amp;amp; music for it.</description>
    </item>
    <item>
      <title>Various details about Handles</title>
      <link>https://aras-p.info/blog/2020/04/11/Various-details-about-Handles/</link>
      <pubDate>Sat, 11 Apr 2020 17:02:10 +0300</pubDate>
      <guid>https://aras-p.info/blog/2020/04/11/Various-details-about-Handles/</guid>
      <description>I wanted to fix one thing about Unity editor Handles, and accidentally ended up fixing some more. So here&amp;rsquo;s more random things about Handles than you can handle!&#xA;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.</description>
    </item>
  </channel>
</rss>
