mastodon.gamedev.place is one of the many independent Mastodon servers you can use to participate in the fediverse.
Mastodon server focused on game development and related topics.

Server stats:

5.4K
active users

demofox

For folks that know me as "the blue noise guy", I've put together a 50 minute video that talks about many of the things I've learned in my ~decade long dive into noise and related topics - up to and including our latest paper published days ago at I3D.
I hope you enjoy it!
youtube.com/watch?v=tethAU66xa

note the projective geometric algebra poster in the background @EricLengyel haha

@demofox Cool! I'll have to send you the current version!

@demofox Just checking that you received the posters.

@EricLengyel I found the tube in my wife's office. My goodness, I have some new things to try and absorb now. Thanks Eric :)
I'll move them to the other side of the camera next time I record a video 😂

@demofox Heh, glad you found them! Was the tube damaged? It looks like the posters have gone through the wringer.

@EricLengyel no it was fine and the posters are good. I may have been eager to get them out hehe. They are great though, thanks a lot.

@demofox
I know you know what you're doing, but the left side image about "irrational" and "random" reminds me of the famous John Von Neumann quote that I really love:

"Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."

@dougmerritt that's a great quote, I'm going to log that one to memory. Quantum seems to be the last bastion for non determinism and we'll see if that even holds up over time. 💯

@demofox
Quantum nondeterminism has been established so thoroughly, with so many possible loopholes investigated, that it would take a real genius to even find remaining loopholes to check.

Which might still happen; I just wouldn't bet money on it.

@dougmerritt @demofox sin is fine, but almost any trigonometric function will work <da-dum-tish>

@TomF @demofox
Heh...you just can never resist, can you. 😆

I wonder what von Neumann would have said to that!

@dougmerritt @demofox He would have said that was my least significant "bit".

@TomF @demofox
Ok, I'll bite. What's your most significant "bit"? :)

@dougmerritt @demofox Nod. But "real" random isn't any fun.

@demofox @dougmerritt To expand. With pseudo-random (or LDS) you have a set of known properties. And the fact you can repeat exactly the same sequences (or subset thereof) is of great value. Real random is a niche thing that's only has limited usefulness in "security" IMHO.

@mbr @demofox
Yes, correct, repeatability is extremely handy, and pseudo-random number generators are often a great thing to use -- except that your phrasing might give someone the idea that there's never any point in using true hardware randomness collection -- yet although niche, that sort of thing is very important in some niches.

(I just collected some hardware randomness within the last week, although really that's neither here nor there)

Randomness is a deep subject that very few technical people really understand. (Present company presumably excepted out of respect and politeness)

Anyway I hope it was clear that I wasn't criticizing, it was just an opportunity to share a quote that I really like.

@dougmerritt @mbr definitely clear. It's a great quote :)

@mbr @dougmerritt yeah. Having a deterministic mode is so great to verify you haven't broken anything as you change things :)

@demofox Thanks for the video, I'll watch it ASAP :)

@romulo awesome, I hope you like it!

@demofox Youtube really hated your 8 colors dithered slide ah! Thanks for the talk, I picked up most of it following you here during the last couple years but it's still interesting to see it all put together in a presentation.

@Az it's unfortunate that dithering helps reduce how many colors & bits you use, but makes it a lot harder to compress 😂

@demofox i always knew, if there is a love letter talk to blue noise like that comes one day, it will be from you, and only you! Good job!

@mamoniem not enough people know about 1d blue noise textures, let alone spatiotemporal, and now the generalization to arbitrary spatial and temporal filters.
More people need to hop on the train :)
I think there is still a lot of work to do in the area too. Lots of useful discoveries left to be made.

@demofox i personally was not familiarized with the term till i saw you on twitter sharing about it frequently, hence it caught my attention 🤩 (results speaks to be fair) and i started building knowledge about it (integrating slowly into my personal work).
also, this is why i was expecting that at some point a deep talk about it wouldn't come from anyone but you😅

@demofox This was a great talk. Thanks! I hope you do more of these. :)

@apoorvaj Thanks a lot, i really appreciate you saying that :)

@demofox
It's well known that if someone says "blue noise" three times in a mirror, you appear.

Stoked for this video though, thanks for making it!

@demofox Alan this is an amazing and approachable talk, thank you 🙂

@demofox Just getting to this and continued fractions just blew my mind. I had no idea you could analyze irrationals like this and that the golden ratio is the "most irrational" b/c of it's pessimal approximability is super neat!

@sprig Yeah isn't that neat?
I thought sqrt(2) was globally 2nd place to golden ratio because it is an infinite string of 2's.
A couple days ago i saw that sqrt(3) is an infinite string of "12121212..." which i think makes it be better than sqrt(2).
Someone should make some kind of irrational number table sorted from most to least so we have a place to go and grab em when we need em :)

@demofox Oh that's interesting! Makes me wonder if there's "1111211112" hiding out there or in the extreme case "1111...(arbitrary?)...1112" ? Like is there some theoretical reason that the run of 1s couldn't be arbitrarily long?

@demofox I'm going to make this my "blue noise epiphanies" thread:

I'm wondering it'd be reasonable to use 1d blue noise or golden ratio shuffle to select indices into some resource pool. E.g. say I've got a particle pool that's full and I want to spawn a new particle but I don't want to track lifetimes or keep a free list, I could just claim indices using the golden ratio and you wouldn't see old particles disappearing in a pattern.

@sprig I agree with you and think that could work great, yeah. Only problem with this type of solution is it takes huge strides across the memory and is cache unfriendly!
Unsure what to do about that in general, but i have something cooking for this problem when it's in screenspace for rendering :P

@demofox Oh hmm. Say I wanted to spawn 20 new particles in a burst. Instead of picking these indices across the whole buffer, I could pick them within some subset range that is more likely to be cache friendly. And that process of which range to pick could itself be blue noise!

But maybe this is way too complicated and should instead use some other alloc scheme haha

@sprig i wonder if you could do some hierarchical thing, like it would work in small windows at a time, but work in a way such that the statistics of how long something will live on average before being stomped is the same? not sure of the details but it seems probable

@demofox That seems ideal. Say you've got some address with higher-oder (HO) and lower-order (LO) bits. You advance your HO index using an LDS every once every max value of your LO bits, and the LO index is advanced using some LDS.

I think this evenly samples the whole address space over time? But if your LO size is about some cache size maybe it'll be cache friendly?

@sprig something to also consider here... lets say you wanted to do 2 shuffles and you wanted to make sure they didn't interact with each other (same irrational would make them be the same shuffle but offset), you could pick a 2nd good irrational number, but that irrational number may be somewhat similar to the first irrational number. So it's like you want it to be irrational with respect to integers, but also golden ratio. "Co-irrational" numbers need to come into math's existance :)

@demofox Oh neat. Is this conceptually similar to "multi-class" blue noise you alluded to with the chicken's eye? Two layers, different within, different across. (I'm only at 23:52 in your video; taking lots of notes haha)

@sprig and haha... welcome to the blue noise / golden ratio club.

@demofox Great survey talk btw!
Here's what I think I've taken away (a lot of these concepts are first time for me):

LDS means single index with unknown upper limit produces even distribution
LDS: great for when you want even distribution w/ unknown length
Golden ratio: pretty much ideal LDS for 1D, but for higher dimensions maybe see R2
BN: better than LDS if you want the properties or feel of randomness

@demofox

BN: can help you trade quality for speed by sampling w/ small probability tables (beware the cache)
BN: a lot easier to denoise than WN, in fact your visual system might naturally be denoising
BN: ideal for small sample counts were you don't have the luxury of convergence
many small filters add up to gaussian; gaussian removes high frequencies
WN: has clumps and voids, might be what you want for e.g. perlin noise

@demofox

Fast noise: u can design noise around the filter for better BN-like properties in the output domain(?)

@sprig yeah, FAST is optimized so that if you know you are going to render, then apply a specific spatial filter, then a specific temporal filter, it minimizes the POST FILTERING error.
If you optimize noise for a gaussian filter spatially, that gives you blue noise, which is also how you optimize for perceptual error.
But you can optimize for box spatially which is what we usually use!
Check out "D" on this page for something interesting/unsolved about perceptual error.
github.com/electronicarts/fast

GitHubfastnoise/FastNoiseDesign.md at main · electronicarts/fastnoiseFilter-adapted Spatiotemporal Sampling for Real-Time Rendering - electronicarts/fastnoise

@sprig and FAST lets you have whatever per pixel value type you want. scalars, vectors, importance sampled vectors, etc. It's best to use noise textures with what you want in them, vs take scalar values and turn it into a vector, because that warping hurts the frequencies.

@demofox Ah thank you! These are really helpful clarifications. Gives me a lot to chew on.

This is a very interesting space. The approach of reducing samples to increase speed but choosing your samples carefully to minimize perceptual loss seems very general.

Now I need to look at everywhere where I'm doing box filtering and consider if I can make better use of my resources..

@sprig yeah so true! and box filtering is the same as averaging so if you ever find yourself averaging, or shuffling, or using random numbers etc etc, you have something to try. It's crazy how wide open this is. Like, a person could just start writing all sorts of computer science research papers and improving things IMO :P

@demofox If only there were a "blue noise" guy to fill that niche :P

@demofox Thinking through some non-rendering use cases in my engine, maybe:

enemy aiming: making hit vs miss more fair w/ LDS

evenly spaced colors: Like Martin's approach, but use a more perceptual color space, like OkLab, and use LDS with A & B and with fixed-ish L

network queue: When there's more objects to be synced over the network than capacity, assign priority weights and than using an LDS to reduce starvation of lower priority items instead of just top-priority first.

@demofox Ha because of course you would have a blog post on this topic. Neat! I'm definitely saving that link. :)

@sprig yeah for sure and 1d LDS can give you benefits in probabilities.
For rendering, LDS has problems with aliasing, Blue noise does not.

@sprig LDS is deterministic. It can be a set (must use all points for it to work well) or a sequence (can use any points from 0 to N and it works well).
LDS wins over BN at numerical integration and similar "do a thing with RNG and calculate error" situations.
BN is randomized and is high frequency noise.
There is 2 kinds of BN. BN points and BN textures.
BN points can be sets or sequences too.
At dimensions > 2 Owen Scrambled Sobol seems to be the winner.
BN textures are for perceptual error.