Andrew Helmer's Avatar

Andrew Helmer

@andrewhelmer.bsky.social

Rendering at Respawn Entertainment. Previously Luxology, The Foundry, Google. Enthusiast landscape photographer (andrewhelmer.com/photography). All views my own. He/him.

100 Followers  |  84 Following  |  50 Posts  |  Joined: 15.11.2024  |  1.8694

Latest posts by andrewhelmer.bsky.social on Bluesky

Hallucinations on the future of real-time rendering. Angelo Pesce's homepage & blog on computers, graphics and other things.

"Hallucinations on the future of real-time rendering", High Performance Graphics 2025 keynote: c0de517e.com/023_hpg.htm

13.07.2025 14:39 β€” πŸ‘ 19    πŸ” 7    πŸ’¬ 0    πŸ“Œ 0

Your cone solid angle sampling post reminded me of this!

09.07.2025 20:42 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

Always a great reference for generating an orthonormal basis from a unit vector: jcgt.org/published/00...

09.07.2025 17:34 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

At SIGGRAPH 2025, Intel, Disney, & Chaos are doing a course on the nitty gritty details of implementing path guiding methods in 3 production renderers: Cycles, Hyperion, and Corona. I helped write the course notes: 80 pages of great stuff! Coming soon.

s2025.conference-schedule.org/presentation...

07.07.2025 04:19 β€” πŸ‘ 84    πŸ” 16    πŸ’¬ 0    πŸ“Œ 0
Preview
Announcing a port of Angband running entirely in-browser. Angband is a venerable roguelike dungeon-crawler set in the Tolkien universe.

There are a bunch of follow-ups, and the libdivide library to do this at runtime:

ridiculousfish.com/blog/posts.h...

libdivide.com

03.07.2025 17:22 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Or maybe do precomputation on a CPU and give the values to the GPU for the divisions? Maybe good for finding cells in a uniform grid that is not a power-of-two size.

03.07.2025 17:19 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Labor of Division (Episode I)

Found this cool blog post explaining one way to optimize integer divisions by a constant divisor: ridiculousfish.com/blog/posts/l...

Could be useful for a lot of things. Eg hash-map with a prime number of entries, do the precomputation on initialization.

03.07.2025 17:18 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I don't think this is bad at all. In addition to being well documented, it's well contained. Hacks like these are often necessary, what really becomes problematic is when they're spread all over the place through the codebase and make other code brittle.

01.07.2025 21:08 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Oh this looks great! I've been looking for an easy-to-use C++ library parser.

26.06.2025 05:05 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
44-Issue 8 High-Performance Graphics 2025

All HPG 2025 papers are now available on the EG digital library.
CGF papers: diglib.eg.org/handle/10.23...
Conference papers: diglib.eg.org/handle/10.23...
It has been a huge honor to act as HPG papers chair and guest editor and I look forward to an exciting program in Copenhagen.

21.06.2025 08:12 β€” πŸ‘ 52    πŸ” 24    πŸ’¬ 1    πŸ“Œ 0

Yeah, me too. But that still doesn't support their statement that someone is interrupted "every 2 minutes". That's the most extreme assumption - that every message is an interruption. The opposite extreme is that only one single message each day is an interruption. Both extremes are wrong.

20.06.2025 16:50 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

By their metric, one 30 minute conversation with 50 messages is the same amount of interruption as a unique message every ~10 minutes throughout the 8 hour workday. In one of these cases you get 7.5 hours of uninterrupted focused work, and in the other you get interrupted every 10 minutes.

20.06.2025 16:27 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Of course many async threads is terrible. But if I'm in an active conversation with a person (whether it's messaging, or in real life), yes it can be a distraction, but it's wrong to refer to every single statement that person makes as a unique "interruption".

20.06.2025 16:24 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Hmm looking at their absolute numbers, it seems like they are not distinguishing.

None of this takes away from your high level point at all, distractions have gotten way worse. But the "average 2 minutes" looks like a very misleading, arguably incorrect stat.

20.06.2025 02:39 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

The mean time between receiving emails for me is probably a few minutes, and probably shorter for the mean time between Slack messages (DMs or tags). But the vast majority of those aren't interruptions.

It's totally possible MS is actually classifying which ones are interruptions in a sensible way.

20.06.2025 02:35 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I'm curious about a lot of these metrics. I get an email for every CL submitted into our codebase, but it goes directly into an archived label. Does this count as an "interruption by an email"? If I've already started a conversation with someone, does each new message count as an interruption?

20.06.2025 02:31 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image Post image Post image

Gigi Version 1.0.0 released!
This includes WebGPU code generation, and the dx12 preview feature cooperative vectors.

A gallery of a few Gigi techniques that you can run in your browser:
electronicarts.github.io/gigi/

Gigi:
github.com/electronicar...

18.06.2025 18:07 β€” πŸ‘ 43    πŸ” 10    πŸ’¬ 1    πŸ“Œ 0

Oh wait, sorry, the distance between two points would be the *maximum* CDF differences amongst projections. Not minimum.

12.06.2025 01:31 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Yup, that's why I mentioned it! I think you could apply this to make a distance measure for best candidate sampling.

12.06.2025 01:29 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Very similar to your number #2, but not the same. Possibly beneficial cause you can precalculate a large number of projected CDFs. Then you *could* make it reasonably fast to do the lookups O(klogn) for the n+1th point, where k is the number of projections you check.

12.06.2025 01:00 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

The sliced optimal transport approach to this would be to calculate a CDF of your image along many projections. The "distance" between two points is the minimum CDF difference among all projections. Could also try something like the sum of projected CDF distances squared.

12.06.2025 00:57 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

Yup, always tradeoffs in the constraints vs quality. Even in the multiclass SOT paper (which is maybe SOTA for this problem?), they show that the quality you get depends on things like whether you only optimize for powers-of-two, or every sub-sequence, etc.

11.06.2025 21:31 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Well that was @bartwr.bsky.social's terminology!

11.06.2025 17:04 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Oh sorry, you meant progressive stippling. I don't think they combined stippling and doing it progressively, but I think that technique *can* do it.

11.06.2025 15:47 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Scalable multi-class sampling via filtered sliced optimal transport We propose a multi-class point optimization formulation based on continuous Wasserstein barycenters. Our formulation is designed to handle hundreds to thousands of optimization objectives and comes wi...

Yup, this paper does it as one of the applications. They treat sub-sequences as overlapping classes (Progressive Sampling in Section 7.2, also Figure 14)

arxiv.org/abs/2211.04314

11.06.2025 15:44 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Totally recognize that the memory, latency, and statefulness constraints of games are very different. But I do miss how easy that was to work with, and agree we should teach concurrency before parallelism and the low-level constructs

10.06.2025 18:02 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Google Search's main logic backend was largely a C++ dataflow graph, with support for timeouts and such. Code was super easy to read, modify, and debug, and no race conditions (because code is not executed until all the inputs are available).

10.06.2025 18:01 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Our #SGP25 work studies a simple and effective way to uniformly sample implicit surfaces by casting rays. (1/9)

β€œUniform Sampling of Surfaces by Casting Rays” w/ @abhishekmadan.bsky.social @nmwsharp.bsky.social and Alec Jacobson

10.06.2025 14:40 β€” πŸ‘ 47    πŸ” 17    πŸ’¬ 1    πŸ“Œ 2

This is my favorite kind of paper. The ones that make everyone else go "why didn't I think of that?"

09.06.2025 06:07 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Yeah, could be! But sometimes things that are intuitive and seem obvious in retrospect, weren't actually obvious or widely known beforehand. Put another way, this may be an application of that fact, but there's a difference between knowing a fact and realizing that it can be applied to a problem.

09.06.2025 06:04 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

@andrewhelmer is following 20 prominent accounts