Ivan Molodetskikh’s Webpage

Motion Blur for Half-Life Video Recording with Vulkan

Aug 19, 2023

Half-Life and Counter-Strike movement communities frequently record their videos with motion blur. However, doing that fast is not a trivial task.

I talk about what goes into good motion blur and let you play with the blur parameters. I then describe my GPU-accelerated solution for fast recording of these videos, and the technical issues I’ve faced implementing it. I also analyse the performance and overhead of this code on a slow and a fast laptop.

Identity v0.5 and Synchronized Scrolled Windows

Apr 5, 2023
In the new Identity update I added side-by-side comparison for images and videos. To do it, I synchronize together multiple GtkScrolledWindows. However, that’s tricky to implement correctly. This post describes the problems and how to solve them.

GSoC 2021: Overview

Aug 21, 2021
An overview of my summer work to implement a new screenshot UI into GNOME Shell, and demo of the screencast functionality.

GSoC 2021: Screenshots with Pointer

Aug 6, 2021
I show my progress implementing HiDPI and mixed DPI support in the new GNOME Shell screenshot UI. Then I describe my implementation of pointer capture and preview and the various edge cases entailed within.

Fast Half-Life Video Recording with Vulkan

Jul 27, 2021

I describe the inner workings of my new video recording tool in bxt-rs. It can record in-game footage from Half-Life at 1920×1080@60 at up to 3 times faster than real-time on a reasonably powerful PC.

I explain the general principles of specialized video recording tools, show how the bxt-rs video recording integrates into the game loop, and how to share frame buffers between OpenGL and Vulkan. I then talk about how I implemented the color conversion, the video encoding step, and how I optimized the performance by using two threads and correct GPU memory types.

GSoC 2021: Selection Editing and Window Selection

Jul 15, 2021
I show my progress on the GNOME Shell screenshot UI: the new area selection draggable corner handles, an improved opening animation, window selection, X11 support.

GSoC 2021: GNOME Shell Screenshot UI

Jun 29, 2021
Wherein we meet again, for a new GSoC project to add a screenshot UI to GNOME Shell. I show a mock-up of the UI and a video demo of what I have already implemented.

GSoC 2018: Overview

Aug 10, 2018
An overview of my summer work porting the librsvg filter effects from C to Rust and improving their performance.

GSoC 2018: Parallelizing Filters with Rayon

Aug 10, 2018
I analyze the librsvg performance on a complex SVG and parallelize two of the heaviest filters with Rayon, introducing an abstraction for parallel access to pixel data.

GSoC 2018: Safe Shared Access to Cairo Image Surfaces

Jul 16, 2018
I describe my abstraction for safe shared access to Cairo image surfaces. I then optimize the performance of heavy filter effects by caching whether an image surface is alpha-only to skip unneeded processing. I verify the performance improvement with perf benchmarks.