Elektrine
Log in Register
Paige Chat Timeline Gallery Friends Email Drive DNS Private DNS Domains VPN Kairo Nerve
Remote

Arseny Kapoulkine

@zeux@mastodon.gamedev.place
mastodon 4.7.3
  • Open on mastodon.gamedev.place

Independent. Previously: TF@Roblox

meshoptimizer, pugixml, volk, calm, niagara, qgrep, Luau

0 Followers
0 Following
42 Posts
Joined November 06, 2022
GitHub:
http://github.com/zeux
Blog:
https://zeux.io
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 1w ago
Control Resonant: great game, uses meshoptimizer and credits it. 3/3 will play more
44
0
5
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 6mo ago

meshoptimizer 1.1 is out!

Featuring two new major features, meshlet topology compression and opacity micromaps, as well as a few smaller features and improvements, it's a big release! Meshlet codec is heavily optimized for CPU decompression and output can be compressed further with Zstandard; opacity micromap rasterizer outputs hardware ready data representation and is fast and easy to integrate.

Boosts and repository stars are welcome! Like and subscribe!

https://github.com/zeux/meshoptimizer/releases/tag/v1.1

github.com
74
2
38
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 10mo ago

After nine (nine!) years of development, meshoptimizer has reached its first major version, 1.0!

This release focuses on improvements in clusterization and simplification as well as stabilization; almost all experimental functionality added in past releases is now stable. Here's a release announcement with some more details on past, present and future; please RT!

https://meshoptimizer.org/v1

Mesh optimization library that makes meshes smaller and faster to render

🐇 meshoptimizer v1.0

Mesh optimization library that makes meshes smaller and faster to render

144
8
95
2
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago

New blog post!

In "Quantizing tangent frames", we look at various established methods to represent tangent frames in the vertex data, squeeze a few variants into 32 bits per vertex and look at the resulting precision.

https://zeux.io/2026/04/30/quantizing-tangent-frames/

Retoot, like and subscribe!

zeux.io
40
4
25
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 6mo ago

looking at accelerating github commits of interesting projects

2023: amazing, more new things, love to see it!
2026: oh no

56
0
13
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
36
7
5
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 6mo ago

> with a base of 35-40fps on everything maxed with 4x framegen, I get about 130-144fps with 60ms overall latency

Ah, yes, the peak gaming experience - 60ms latency at 144Hz.

(naturally excludes hardware input/display latency too; glorious.)

31
0
9
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago

Not surprising really, you can run the GPU much hotter as it’s cooled by the outside air.

25
1
2
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago

Democratizing programming, one monthly $200 subscription at a time

22
1
2
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago

old vendor thing: 4.94 MB
new vendor thing: 3.55 MB
meshopt mlc+DXR2: 3.12 MB

alright then

11
2
1
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 2mo ago
neat
2
0
1
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 6mo ago

Finally, a reasonable C++ proposal. We now need std::fever.

https://isocpp.org/files/papers/P4161R0.pdf

isocpp.org
8
1
5
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 4mo ago
Replying to
@wolfpld@mastodon.gamedev.place it was supposed to be a good passion project, how dare you use your free time and the tools random people don't approve of to take your project in the direction you see fit! /s
5
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 19mo ago

meshoptimizer 0.23 is out! Featuring vertex codec v1 (increased compression ratio, faster decompression), even faster decompression on Apple Silicon, improvements to meshlet builder with fewer disconnected clusters and more options for clustered raytracing and hierarchical clusterization, new algorithms for hierarchical clusterization, simplification quality improvements and more.

Thanks to Valve for sponsoring most of the work on the core library in this release!

48
4
32
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@aras@mastodon.gamedev.place In my tests 6-7x vs original mikktspace.c on unindexed inputs, and 10-11x on indexed inputs (the output is the same, indexed inputs allow to reduce some internal work). But that's vs original mikktspace, Blender implementation looks better performance wise so someone would need to do a dedicated comparison. OTOH I don't think Blender would be able to use my implementation anyway since it relies on quad support :) My code only handles triangles.
5
1
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@Doomed_Daniel@mastodon.gamedev.place @lisyarus@mastodon.gamedev.place I agree that contraction should not be enabled unconditionally; Rust is an example of a language that doesn't do that - it follows IEEE 754 strictly. IEEE 754 does not explicitly allow contractions. In fact it has language that prohibits these by default, which C doesn't follow (clang will synthesize fma unconditionally without optimizations when supported)
4
14
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 10mo ago

Turns out TypeScript is not the best language to make command line tooling, such as a TypeScript compiler, if you are even remotely performance conscious.

Shocking, I know.

10
0
2
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@aras@mastodon.gamedev.place The beauty of 3D is that the equivalent problem to w/h swapping is “getting coordinate system wrong”, for which there are 24 possibilities and any number of errors could cancel each other!
3
2
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 2mo ago
Optimizing JavaScript code is an exercise in frustration and futility. Every little thing costs you extra, every abstraction is too expensive, and even once you peel everything away the code is still objectively slow.
1
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 2mo ago
Replying to
@floooh@mastodon.gamedev.place The public statement from id suggests it did.
1
1
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@pervognsen@mastodon.social My current conclusion is that while MikkTSpace is flawed, the world doesn't need yet another TS generation scheme; it needs a good implementation, which mikktspace.c isn't. Addressing flaws is very possible... but I'm wary of incompatibilities increasing the entropy too much.
3
5
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 6mo ago
Replying to
@GDCPresoReviews@mastodon.gamedev.place Jaguar is a tiny and very slow core by modern standards. "hundreds" is correct for modern cores, e.g. here's Zen 4 diagram.
4
2
1
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 39mo ago

New blog post, "Efficient jagged arrays"! Here we go over a few steps that progressively optimize a fairly useful general "array of arrays" data structure to get to something that's low-overhead yet still simple.

As usual, 🚀 appreciated!

https://zeux.io/2023/06/30/efficient-jagged-arrays/

zeux.io

Efficient jagged arrays

A data structure that comes up fairly often when working with graphs or graph-like structure is a jagged array, or array-of-arrays. It’s very simple to build it out of standard containers but that’s often a poor choice for performance; in this post we’ll talk about a simple representation/construction code that I found useful across multiple different projects and domains. Crucially, we will focus on immutable structures - ones that you can build in one go from source data and then continuously

99
13
62
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@aras@mastodon.gamedev.place I only post supertoots
2
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 14mo ago

A few exciting optimizations have been merged to radv recently around RT. radv still isn’t fully competitive on BVH quality from what I can tell but I get close enough performance that I switched back to radv from amdgpu on my system. Feels good to have a small open source driver again.

11
1
2
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@Doomed_Daniel@mastodon.gamedev.place @lisyarus@mastodon.gamedev.place This is not an IEEE754 problem; IEEE754 defines FMA and unfused mul/add. It's up to each language to figure out how to compile compound expressions and what is permissible; C/C++ allow contraction by default, so you do get different results based on the platform or the underlying model - but you can also turn contraction off to fix this, or use languages that don't allow this implicit conversion.
2
16
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 9mo ago
Replying to
@lesley@mastodon.gamedev.place @nothings@mastodon.gamedev.place @nicebyte@mastodon.gamedev.place Also fast AABB transform requires center/extent representation. In general I think it’s hard to claim one representation is universally superior; some algorithms prefer one, some prefer another. The article lists slab RT as motivation but there are also formulations based on center/extents…
4
2
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 7mo ago
Replying to
@crystalmoon@chaos.social @sschoener@mastodon.gamedev.place There’s five circles of hell separating autotools from manually written Makefiles. And what are you going to do with gfx11 elf binaries on Windows anyway?
2
1
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@nothings@mastodon.gamedev.place That's not really what I'm saying. What I mean is that for unrelated reasons to whether you even reconstruct any of the three vectors, skewed UV mapping might have been too expensive to support correctly. And once you decide that you don't want to support it, you can reconstruct either vector from the other two, and B=NxT is a little cleaner because it kicks in only if you need T or B.
1
1
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@nothings@mastodon.gamedev.place My general understanding of the timeline is that compact encodings became popular *after* bitangent reconstruction became standard, so I don't think it was the direct motivation. A matrix inverse though was a tall order at the time, especially because at the time you also had an option to convert light direction into tangent space *in your vertex shader*, as you just had a single light source and fragment compute was precious. Those were the days.
1
8
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@aras@mastodon.gamedev.place @pervognsen@mastodon.social Neat, TIL! Looking at Blender code, there's a couple similarities as one would expect, but my version is a complete rewrite that does not reference or follow the original source code (except for one aspect that is completely left out of the paper for whatever reason). It's single threaded & deterministic, vs Blender which is parallel and looks non-deterministic (presumably fine there). Blender does fix at least one impl flaw wrt behavior that's just a mistake in the original.
1
3
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@aras@mastodon.gamedev.place Nice! 4KB version next? ;)
1
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 6mo ago

pondering

1
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 7mo ago
Replying to
@pervognsen Also works within one stream if you interleave groups of K values.
1
2
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 10mo ago
Replying to
@superluminal@mastodon.gamedev.place Very nice! The keyless technique is great. meshoptimizer uses it in a few places. It can be implemented as part of the hasher entirely if need be (keeping the table implementation generic), although the hash insertion function is small enough that it’s also reasonable to duplicate/adjust if needed.
1
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 13mo ago
Replying to
@TomF@mastodon.gamedev.place Ugh. Sorry to hear that!
1
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 39mo ago
Replying to
@forrestthewoods@mastodon.gamedev.place Yeah I meant the code to be part of the text, not just as an example, but I slightly enhanced one of the sections that was a little too direct at jumping in.
1
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@pervognsen I continue to think single pass compilers are just a bad idea. They were a good idea in the 80s when you literally didn't have enough RAM. Now you can surely afford to do a second pass.
0
1
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 6mo ago
Replying to
@aras for pixelated reflection
0
2
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@morten_skaaning@mastodon.gamedev.place I'm not sure I understand this; 5 bits to encode gives you much lower quality, so then the idea would be to store the difference with the original in 3 bits - *instead* of using the same bits to produce a higher quality original encoding? For octahedron encodings, any bits you give it are strictly better than using the same bits for a 3-axis representation, so this would regress quality.
0
1
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@datenwolf@chaos.social @nothings@mastodon.gamedev.place That’s neither here nor there, as reflections are extracted via the separate orientation/handedness, and non invertible TBNs mean there’s no valid way to compute them (as the UV mapping would be degenerate). Which is a real problem but at this point we’re beyond asking how to correctly transform a normal :) and dangerously close to questioning life choices
0
0
0
0
Open post
Arseny Kapoulkine @zeux@mastodon.gamedev.place
· 5mo ago
Replying to
@nothings@mastodon.gamedev.place Interesting question! I'm not entirely sure :) This would run into problems in UV-degenerate regions but you could solve them with a synthetic orthogonal basis. Ofc none of the techniques I describe further in the post would apply to non-orthogonal bases. I'd guess the industry just gave up on skewed mapping. There's extra complications wrt TBN in that you might need a matrix *inverse* instead of just transpose in certain parts of the pipeline. And vertex averaging muddles it anyway.
0
13
0
0
Back
313k7r1n3
Elektrine

Tor hidden service

elekhj7afj4qnrr4yd3bkzslsyo5jgfxw3orgjkhlcxifueodybyiiad.onion

I2P eepsite

j6b6cyk6gjmepjih7jjadxgxvvf3lzzujljuu2v4biemzpg3naya.b32.i2p

Platform

  • Email
  • Chat
  • Timeline
  • VPN
  • DNS

Company

  • About
  • Contact
  • FAQ
  • Lite (no JS)

Legal

  • Terms of Service
  • Privacy Policy
  • Transparency Report
  • Report Abuse
  • Warrant Canary
  • VPN Policy

Support

  • support@elektrine.com
  • Report Security Issue
Mail client setup IMAP mail.elektrine.com:993 POP3 mail.elektrine.com:995 SMTP mail.elektrine.com:465
© 2026 Elektrine. All rights reserved. Server: 13:23:07 UTC