Spiral and Blue Noise Distributions on the Sphere
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:03Recap and set the stage for the day using sine and cosine to improve the lighting sampling quality
🗩
0:03Recap and set the stage for the day using sine and cosine to improve the lighting sampling quality
🗩
0:03Recap and set the stage for the day using sine and cosine to improve the lighting sampling quality
🗩
2:08Run the game to show the debug visualisation of our lighting's hemisphere sampling
🏃
2:08Run the game to show the debug visualisation of our lighting's hemisphere sampling
🏃
2:08Run the game to show the debug visualisation of our lighting's hemisphere sampling
🏃
4:27Describe the hemisphere sampling in ComputeLightPropagation()
📖
4:27Describe the hemisphere sampling in ComputeLightPropagation()
📖
4:27Describe the hemisphere sampling in ComputeLightPropagation()
📖
5:33Hemisphere sample distribution
🖌
5:33Hemisphere sample distribution
🖌
5:33Hemisphere sample distribution
🖌
7:26Run the game to show our hemisphere sampling
🏃
7:26Run the game to show our hemisphere sampling
🏃
7:26Run the game to show our hemisphere sampling
🏃
8:52Begin to change ComputeLightPropagation() to perform spiral sampling1,2 of the lighting, as suggested by Kelimion
8:52Begin to change ComputeLightPropagation() to perform spiral sampling1,2 of the lighting, as suggested by Kelimion
8:52Begin to change ComputeLightPropagation() to perform spiral sampling1,2 of the lighting, as suggested by Kelimion
17:20Change ComputeLightPropagation() to use polar coordinates for our randomly sampled hemisphere
17:20Change ComputeLightPropagation() to use polar coordinates for our randomly sampled hemisphere
17:20Change ComputeLightPropagation() to use polar coordinates for our randomly sampled hemisphere
18:29Run the game to see our hemisphere sampling
🏃
18:29Run the game to see our hemisphere sampling
🏃
18:29Run the game to see our hemisphere sampling
🏃
18:50Change ComputeLightPropagation() to produce spiral sampling around a sphere3 with a note about Vogel's method4
18:50Change ComputeLightPropagation() to produce spiral sampling around a sphere3 with a note about Vogel's method4
18:50Change ComputeLightPropagation() to produce spiral sampling around a sphere3 with a note about Vogel's method4
29:53Run the game to see the sample distribution
🏃
29:53Run the game to see the sample distribution
🏃
29:53Run the game to see the sample distribution
🏃
30:13Increase the sample count from 16 to 64 in ComputeLightPropagation()
30:13Increase the sample count from 16 to 64 in ComputeLightPropagation()
30:13Increase the sample count from 16 to 64 in ComputeLightPropagation()
30:25Run the game to see the nice covering of the sphere
🏃
30:25Run the game to see the nice covering of the sphere
🏃
30:25Run the game to see the nice covering of the sphere
🏃
30:49Make ComputeLightPropagation() produce hemispherical data
30:49Make ComputeLightPropagation() produce hemispherical data
30:49Make ComputeLightPropagation() produce hemispherical data
31:24Run the game to see the hemispherical data
🏃
31:24Run the game to see the hemispherical data
🏃
31:24Run the game to see the hemispherical data
🏃
32:01Reduce the sample count back to 16 and randomly jitter them in ComputeLightPropagation()
32:01Reduce the sample count back to 16 and randomly jitter them in ComputeLightPropagation()
32:01Reduce the sample count back to 16 and randomly jitter them in ComputeLightPropagation()
33:50Run the game to see that this is back to being clumpy
🏃
33:50Run the game to see that this is back to being clumpy
🏃
33:50Run the game to see that this is back to being clumpy
🏃
34:04Try to alleviate the clumpiness in ComputeLightPropagation()
34:04Try to alleviate the clumpiness in ComputeLightPropagation()
34:04Try to alleviate the clumpiness in ComputeLightPropagation()
36:05Run the game to see the varying samples
🏃
36:05Run the game to see the varying samples
🏃
36:05Run the game to see the varying samples
🏃
36:53Make ComputeLightPropagation() only randomise the Rho value
36:53Make ComputeLightPropagation() only randomise the Rho value
36:53Make ComputeLightPropagation() only randomise the Rho value
37:33Run the game to see this coverage
🏃
37:33Run the game to see this coverage
🏃
37:33Run the game to see this coverage
🏃
37:40Make ComputeLightPropagation() use one randomised RhoOffset for the whole sphere
37:40Make ComputeLightPropagation() use one randomised RhoOffset for the whole sphere
37:40Make ComputeLightPropagation() use one randomised RhoOffset for the whole sphere
38:48Run the game to see this coverage
🏃
38:48Run the game to see this coverage
🏃
38:48Run the game to see this coverage
🏃
38:55Let ComputeLightPropagation() run the sampling over 20 frames for us to visualise the coverage
38:55Let ComputeLightPropagation() run the sampling over 20 frames for us to visualise the coverage
38:55Let ComputeLightPropagation() run the sampling over 20 frames for us to visualise the coverage
39:56Run the game to see this extended coverage
🏃
39:56Run the game to see this extended coverage
🏃
39:56Run the game to see this extended coverage
🏃
40:26Make ComputeLightPropagation() multiple Theta, rather than Tau, in to the RhoOffset
40:26Make ComputeLightPropagation() multiple Theta, rather than Tau, in to the RhoOffset
40:26Make ComputeLightPropagation() multiple Theta, rather than Tau, in to the RhoOffset
40:46Run the game to see this extended coverage
🏃
40:46Run the game to see this extended coverage
🏃
40:46Run the game to see this extended coverage
🏃
41:09Change ComputeLightPropagation() to jitter the 64 points sampling more fairly
41:09Change ComputeLightPropagation() to jitter the 64 points sampling more fairly
41:09Change ComputeLightPropagation() to jitter the 64 points sampling more fairly
42:50Run the game to see this jittered coverage
🏃
42:50Run the game to see this jittered coverage
🏃
42:50Run the game to see this jittered coverage
🏃
43:01Make ComputeLightPropagation() jitter the i value
43:01Make ComputeLightPropagation() jitter the i value
43:01Make ComputeLightPropagation() jitter the i value
43:29Run the game to see this coverage biasing towards the spiral
🏃
43:29Run the game to see this coverage biasing towards the spiral
🏃
43:29Run the game to see this coverage biasing towards the spiral
🏃
44:48Make ComputeLightPropagation() jitter the normal of each ray
44:48Make ComputeLightPropagation() jitter the normal of each ray
44:48Make ComputeLightPropagation() jitter the normal of each ray
46:18Run the game to see this distribution
🏃
46:18Run the game to see this distribution
🏃
46:18Run the game to see this distribution
🏃
47:19Make ComputeLightPropagation() bias the distribution towards upwards
47:19Make ComputeLightPropagation() bias the distribution towards upwards
47:19Make ComputeLightPropagation() bias the distribution towards upwards
49:02Run the game to see this more upwards facing distribution, and consider how to concentrate the samples at the top
🏃
49:02Run the game to see this more upwards facing distribution, and consider how to concentrate the samples at the top
🏃
49:02Run the game to see this more upwards facing distribution, and consider how to concentrate the samples at the top
🏃
52:01Make ComputeLightPropagation() produce a handwritten distribution of 64 points
52:01Make ComputeLightPropagation() produce a handwritten distribution of 64 points
52:01Make ComputeLightPropagation() produce a handwritten distribution of 64 points
56:49Run the game to see this distribution, tweaking the MinimumDistanceSq until we crash
🏃
🖮
56:49Run the game to see this distribution, tweaking the MinimumDistanceSq until we crash
🏃
🖮
56:49Run the game to see this distribution, tweaking the MinimumDistanceSq until we crash
🏃
🖮
57:17Make ComputeLightPropagation set MinimumDistanceSq to 0.25²
57:17Make ComputeLightPropagation set MinimumDistanceSq to 0.25²
57:17Make ComputeLightPropagation set MinimumDistanceSq to 0.25²
57:28Run the game see to see our uniformly covered sphere
🏃
🖮
57:28Run the game see to see our uniformly covered sphere
🏃
🖮
57:28Run the game see to see our uniformly covered sphere
🏃
🖮
57:45Make ComputeLightPropagation() concentrate our distribution towards the top
57:45Make ComputeLightPropagation() concentrate our distribution towards the top
57:45Make ComputeLightPropagation() concentrate our distribution towards the top
1:03:23Run the game to see our tighter distribution
🏃
🖮
1:03:23Run the game to see our tighter distribution
🏃
🖮
1:03:23Run the game to see our tighter distribution
🏃
🖮
1:03:34Let ComputeLightPropagation() run the sampling over 20 frames for us to visualise the coverage
1:03:34Let ComputeLightPropagation() run the sampling over 20 frames for us to visualise the coverage
1:03:34Let ComputeLightPropagation() run the sampling over 20 frames for us to visualise the coverage
1:04:12Run the game to see this extended coverage, and consider how to produce bundles of 4 points, accounting for the spread
🏃
1:04:12Run the game to see this extended coverage, and consider how to produce bundles of 4 points, accounting for the spread
🏃
1:04:12Run the game to see this extended coverage, and consider how to produce bundles of 4 points, accounting for the spread
🏃
1:06:12Euclidean straight-line vs "great arc" parabolic distance
🖌
1:06:12Euclidean straight-line vs "great arc" parabolic distance
🖌
1:06:12Euclidean straight-line vs "great arc" parabolic distance
🖌
1:08:17Change ComputeLightPropagation() to distribute the sampling points by their parabolic rather than straight-line distance
1:08:17Change ComputeLightPropagation() to distribute the sampling points by their parabolic rather than straight-line distance
1:08:17Change ComputeLightPropagation() to distribute the sampling points by their parabolic rather than straight-line distance
1:22:50Run the game to see our extended parabolic distribution
🏃
1:22:50Run the game to see our extended parabolic distribution
🏃
1:22:50Run the game to see our extended parabolic distribution
🏃
1:22:59Make ComputeLightPropagation() jitter our randomly distributed sampling points over 20 frames
1:22:59Make ComputeLightPropagation() jitter our randomly distributed sampling points over 20 frames
1:22:59Make ComputeLightPropagation() jitter our randomly distributed sampling points over 20 frames
1:25:41Run the game to see the random patches
🏃
1:25:41Run the game to see the random patches
🏃
1:25:41Run the game to see the random patches
🏃
1:26:09Make ComputeLightPropagation() concentrate the points towards the top
1:26:09Make ComputeLightPropagation() concentrate the points towards the top
1:26:09Make ComputeLightPropagation() concentrate the points towards the top
1:28:10Run the game to see our distribution, and consider distributing all 64 separately
🏃
1:28:10Run the game to see our distribution, and consider distributing all 64 separately
🏃
1:28:10Run the game to see our distribution, and consider distributing all 64 separately
🏃
1:28:19Make ComputeLightPropagation() distribute all 64 points unbundled
1:28:19Make ComputeLightPropagation() distribute all 64 points unbundled
1:28:19Make ComputeLightPropagation() distribute all 64 points unbundled
1:31:15Run the game to see our 64 distributed points
🏃
1:31:15Run the game to see our 64 distributed points
🏃
1:31:15Run the game to see our 64 distributed points
🏃
1:33:19Q&A
🗩
1:33:19Q&A
🗩
1:33:19Q&A
🗩
1:33:57bestalloys Q: What do you think about a compile time switch to flip between pseudo-rng and standard rng to see if it's an rng issue?
🗪
1:33:57bestalloys Q: What do you think about a compile time switch to flip between pseudo-rng and standard rng to see if it's an rng issue?
🗪
1:33:57bestalloys Q: What do you think about a compile time switch to flip between pseudo-rng and standard rng to see if it's an rng issue?
🗪
1:34:34nxsy Q: Why can’t we use the spiral method to generate 64 points, that we group into 16 groups of 4 based on direction, and then rotate the spiral 18 degrees over 20 frames for the samples?
🗪
1:34:34nxsy Q: Why can’t we use the spiral method to generate 64 points, that we group into 16 groups of 4 based on direction, and then rotate the spiral 18 degrees over 20 frames for the samples?
🗪
1:34:34nxsy Q: Why can’t we use the spiral method to generate 64 points, that we group into 16 groups of 4 based on direction, and then rotate the spiral 18 degrees over 20 frames for the samples?
🗪
1:35:18frostyninja Q: What about a precomputed sample sphere that you rotate over the frame period instead of random jittering?
🗪
1:35:18frostyninja Q: What about a precomputed sample sphere that you rotate over the frame period instead of random jittering?
🗪
1:35:18frostyninja Q: What about a precomputed sample sphere that you rotate over the frame period instead of random jittering?
🗪
1:35:39Lateral distribution
🖌
1:35:39Lateral distribution
🖌
1:35:39Lateral distribution
🖌
1:38:02Consider doing quadrant-based distribution
🗩
1:38:02Consider doing quadrant-based distribution
🗩
1:38:02Consider doing quadrant-based distribution
🗩
1:38:36bestalloys crt rng
🗪
1:38:36bestalloys crt rng
🗪
1:38:36bestalloys crt rng
🗪
1:41:53Step in to the asm of rand() from the CRT5
🏃
1:41:53Step in to the asm of rand() from the CRT5
🏃
1:41:53Step in to the asm of rand() from the CRT5
🏃
1:44:54longboolean Q: Is this intended as a preprocessed step or will these hemispheres be computed for every quad every frame?
🗪
1:44:54longboolean Q: Is this intended as a preprocessed step or will these hemispheres be computed for every quad every frame?
🗪
1:44:54longboolean Q: Is this intended as a preprocessed step or will these hemispheres be computed for every quad every frame?
🗪
1:45:14fierydrake Q: Could anything be done with a centroidal Voronoi tessellation covering the sphere? Is that too expensive? Is it a terrible idea?
🗪
1:45:14fierydrake Q: Could anything be done with a centroidal Voronoi tessellation covering the sphere? Is that too expensive? Is it a terrible idea?
🗪
1:45:14fierydrake Q: Could anything be done with a centroidal Voronoi tessellation covering the sphere? Is that too expensive? Is it a terrible idea?
🗪
1:45:35frostyninja Q: Could we get a relatively performant blue noise?
🗪
1:45:35frostyninja Q: Could we get a relatively performant blue noise?
🗪
1:45:35frostyninja Q: Could we get a relatively performant blue noise?
🗪
1:45:54Point out the blue noise graph in 'The Color of Noise'6
📖
1:45:54Point out the blue noise graph in 'The Color of Noise'6
📖
1:45:54Point out the blue noise graph in 'The Color of Noise'6
📖
1:47:23Wrap things up
🗩
1:47:23Wrap things up
🗩
1:47:23Wrap things up
🗩