Switching to Cosine-weighted Poisson Sampling
?
?

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:01Recap and set the stage for the day with a few words on the recent news around ray tracing
🗩
0:01Recap and set the stage for the day with a few words on the recent news around ray tracing
🗩
0:01Recap and set the stage for the day with a few words on the recent news around ray tracing
🗩
2:58Run the game to see our current lighting
🏃
2:58Run the game to see our current lighting
🏃
2:58Run the game to see our current lighting
🏃
4:38Toggle ComputeLightPropagation() to sample the lighting using the old white noise scheme
4:38Toggle ComputeLightPropagation() to sample the lighting using the old white noise scheme
4:38Toggle ComputeLightPropagation() to sample the lighting using the old white noise scheme
5:10Show the lighting using this method
🏃
5:10Show the lighting using this method
🏃
5:10Show the lighting using this method
🏃
5:40Switch ComputeLightPropagation() back to our customised polar sampling
5:40Switch ComputeLightPropagation() back to our customised polar sampling
5:40Switch ComputeLightPropagation() back to our customised polar sampling
5:44See how the lighting changes
🏃
5:44See how the lighting changes
🏃
5:44See how the lighting changes
🏃
6:40Enable ComputeLightPropagation() to display our lighting debug visualisation
6:40Enable ComputeLightPropagation() to display our lighting debug visualisation
6:40Enable ComputeLightPropagation() to display our lighting debug visualisation
9:09Run the game to see our lighting debug visualisation
🏃
9:09Run the game to see our lighting debug visualisation
🏃
9:09Run the game to see our lighting debug visualisation
🏃
9:42Toggle back to the customised polar sampling in ComputeLightPropagation()
9:42Toggle back to the customised polar sampling in ComputeLightPropagation()
9:42Toggle back to the customised polar sampling in ComputeLightPropagation()
9:47Run the game to see that this sampling is slightly wrong
🏃
9:47Run the game to see that this sampling is slightly wrong
🏃
9:47Run the game to see that this sampling is slightly wrong
🏃
11:44Multiply SamplePointEntropy in to SampleD4x in ComputeLightPropagation()
11:44Multiply SamplePointEntropy in to SampleD4x in ComputeLightPropagation()
11:44Multiply SamplePointEntropy in to SampleD4x in ComputeLightPropagation()
12:47Run the game to see our varying lighting sampling
🏃
12:47Run the game to see our varying lighting sampling
🏃
12:47Run the game to see our varying lighting sampling
🏃
13:33Introduce a LIGHTING_PATTERN_GENERATOR() macro to generalise our generators and enable cycling through them
13:33Introduce a LIGHTING_PATTERN_GENERATOR() macro to generalise our generators and enable cycling through them
13:33Introduce a LIGHTING_PATTERN_GENERATOR() macro to generalise our generators and enable cycling through them
17:35Introduce GenerateLightingPattern() for InitLighting() to call
17:35Introduce GenerateLightingPattern() for InitLighting() to call
17:35Introduce GenerateLightingPattern() for InitLighting() to call
26:57Introduce a GenerateWhiteNoiseSamples version of LIGHTING_PATTERN_GENERATOR()
26:57Introduce a GenerateWhiteNoiseSamples version of LIGHTING_PATTERN_GENERATOR()
26:57Introduce a GenerateWhiteNoiseSamples version of LIGHTING_PATTERN_GENERATOR()
29:52Read through how the debug system could handle strings
📖
29:52Read through how the debug system could handle strings
📖
29:52Read through how the debug system could handle strings
📖
34:35Add a DebugType_string_ptr debug_type
34:35Add a DebugType_string_ptr debug_type
34:35Add a DebugType_string_ptr debug_type
36:09Introduce DEBUG_STRING() for inclusion in GenerateLightingPattern()
36:09Introduce DEBUG_STRING() for inclusion in GenerateLightingPattern()
36:09Introduce DEBUG_STRING() for inclusion in GenerateLightingPattern()
39:19Run the game to see that our new DEBUG_STRING() is a little off
🏃
39:19Run the game to see that our new DEBUG_STRING() is a little off
🏃
39:19Run the game to see that our new DEBUG_STRING() is a little off
🏃
39:47Switch to -Od and determine to implement ceilf() and floorf() functions1
39:47Switch to -Od and determine to implement ceilf() and floorf() functions1
39:47Switch to -Od and determine to implement ceilf() and floorf() functions1
47:50Introduce FloorReal32ToInt32() and CeilReal32ToInt32() using SSE4.1 instructions2
47:50Introduce FloorReal32ToInt32() and CeilReal32ToInt32() using SSE4.1 instructions2
47:50Introduce FloorReal32ToInt32() and CeilReal32ToInt32() using SSE4.1 instructions2
50:17Successfully compile and run
🏃
50:17Successfully compile and run
🏃
50:17Successfully compile and run
🏃
51:15Step in to LightingTest(), open the profiler and inspect our Event to see that our debug string didn't get processed as we want
51:15Step in to LightingTest(), open the profiler and inspect our Event to see that our debug string didn't get processed as we want
51:15Step in to LightingTest(), open the profiler and inspect our Event to see that our debug string didn't get processed as we want
55:42Add a DEBUG_B32() in GenerateLightingPattern()
55:42Add a DEBUG_B32() in GenerateLightingPattern()
55:42Add a DEBUG_B32() in GenerateLightingPattern()
56:00Open up the profiler to see that the entire debug system isn't quite working in GenerateLightingPattern()
56:00Open up the profiler to see that the entire debug system isn't quite working in GenerateLightingPattern()
56:00Open up the profiler to see that the entire debug system isn't quite working in GenerateLightingPattern()
56:57Move our test DEBUG_B32() from GenerateLightingPattern() to the repeatedly-called ComputeLightPropagation()
56:57Move our test DEBUG_B32() from GenerateLightingPattern() to the repeatedly-called ComputeLightPropagation()
56:57Move our test DEBUG_B32() from GenerateLightingPattern() to the repeatedly-called ComputeLightPropagation()
57:21Run the game to see that it is correct, and consider why
🏃
57:21Run the game to see that it is correct, and consider why
🏃
57:21Run the game to see that it is correct, and consider why
🏃
58:43Store PatternName in lighting_solution
58:43Store PatternName in lighting_solution
58:43Store PatternName in lighting_solution
59:24Run the game to see our GenerateWhiteNoiseSamples in the profiler
🏃
59:24Run the game to see our GenerateWhiteNoiseSamples in the profiler
🏃
59:24Run the game to see our GenerateWhiteNoiseSamples in the profiler
🏃
59:34Bind F9 to cycle through the lighting pattern
59:34Bind F9 to cycle through the lighting pattern
59:34Bind F9 to cycle through the lighting pattern
1:00:38Run the game and try cycling through the lighting patterns, to see that the flicker is way lower with the Poisson sampling scheme
🏃
1:00:38Run the game and try cycling through the lighting patterns, to see that the flicker is way lower with the Poisson sampling scheme
🏃
1:00:38Run the game and try cycling through the lighting patterns, to see that the flicker is way lower with the Poisson sampling scheme
🏃
1:02:00Prevent LightingTest() from hard-enabling the debug lines
1:02:00Prevent LightingTest() from hard-enabling the debug lines
1:02:00Prevent LightingTest() from hard-enabling the debug lines
1:02:34Run the game and try cycling through the lighting sampling schemes without the debug visualisation lines
🏃
1:02:34Run the game and try cycling through the lighting sampling schemes without the debug visualisation lines
🏃
1:02:34Run the game and try cycling through the lighting sampling schemes without the debug visualisation lines
🏃
1:04:22Re-enable the snake to add more light into the scene
1:04:22Re-enable the snake to add more light into the scene
1:04:22Re-enable the snake to add more light into the scene
1:05:32See the scene with more lights, without harming our performance
🏃
1:05:32See the scene with more lights, without harming our performance
🏃
1:05:32See the scene with more lights, without harming our performance
🏃
1:06:57Make GenerateLightingPattern() use Poisson sampling by default
1:06:57Make GenerateLightingPattern() use Poisson sampling by default
1:06:57Make GenerateLightingPattern() use Poisson sampling by default
1:07:19Consider our lighting
🏃
1:07:19Consider our lighting
🏃
1:07:19Consider our lighting
🏃
1:08:23Excise superfluous code from RayCast() and increase rCloseEnough from 5 to 10 to gather light emission from further away
1:08:23Excise superfluous code from RayCast() and increase rCloseEnough from 5 to 10 to gather light emission from further away
1:08:23Excise superfluous code from RayCast() and increase rCloseEnough from 5 to 10 to gather light emission from further away
1:08:56Run the game to see fewer lighting errors
🏃
1:08:56Run the game to see fewer lighting errors
🏃
1:08:56Run the game to see fewer lighting errors
🏃
1:10:08Cosine-weighting
🖌
1:10:08Cosine-weighting
🖌
1:10:08Cosine-weighting
🖌
1:11:30Prevent ComputeLightPropagation() from considering the angular falloff when computing the SampleColor
1:11:30Prevent ComputeLightPropagation() from considering the angular falloff when computing the SampleColor
1:11:30Prevent ComputeLightPropagation() from considering the angular falloff when computing the SampleColor
1:11:57Run the game to see our brighter light, and determine to bias the sample generation upwards
🏃
1:11:57Run the game to see our brighter light, and determine to bias the sample generation upwards
🏃
1:11:57Run the game to see our brighter light, and determine to bias the sample generation upwards
🏃
1:12:48Projecting Poisson sampling upwards from a disc
🖌
1:12:48Projecting Poisson sampling upwards from a disc
🖌
1:12:48Projecting Poisson sampling upwards from a disc
🖌
1:13:54Re-enable LightingTest() to draw our sampling pattern
1:13:54Re-enable LightingTest() to draw our sampling pattern
1:13:54Re-enable LightingTest() to draw our sampling pattern
1:16:07Check out our Poisson pattern
🏃
1:16:07Check out our Poisson pattern
🏃
1:16:07Check out our Poisson pattern
🏃
1:16:30Make our GeneratePoissonSamples generator produce samples on a disc
1:16:30Make our GeneratePoissonSamples generator produce samples on a disc
1:16:30Make our GeneratePoissonSamples generator produce samples on a disc
1:21:09Admire our nice distribution of points
🏃
1:21:09Admire our nice distribution of points
🏃
1:21:09Admire our nice distribution of points
🏃
1:21:21Begin to make our GeneratePoissonSamples generator project our samples up
1:21:21Begin to make our GeneratePoissonSamples generator project our samples up
1:21:21Begin to make our GeneratePoissonSamples generator project our samples up
1:22:54Projecting samples upwards
🖌
1:22:54Projecting samples upwards
🖌
1:22:54Projecting samples upwards
🖌
1:24:46Finish making our GeneratePoissonSamples generator project our samples up
1:24:46Finish making our GeneratePoissonSamples generator project our samples up
1:24:46Finish making our GeneratePoissonSamples generator project our samples up
1:25:11Check out our upwards-projected Poisson samples, and determine to check whether it is really cosine-weighted
🏃
1:25:11Check out our upwards-projected Poisson samples, and determine to check whether it is really cosine-weighted
🏃
1:25:11Check out our upwards-projected Poisson samples, and determine to check whether it is really cosine-weighted
🏃
1:28:03View our ray cast debug visualisation
🏃
1:28:03View our ray cast debug visualisation
🏃
1:28:03View our ray cast debug visualisation
🏃
1:29:16Make LightingTest() position our debug sampler below the floor
1:29:16Make LightingTest() position our debug sampler below the floor
1:29:16Make LightingTest() position our debug sampler below the floor
1:30:22See that our sampler is shooting rays in the wrong direction
🏃
1:30:22See that our sampler is shooting rays in the wrong direction
🏃
1:30:22See that our sampler is shooting rays in the wrong direction
🏃
1:31:16Recolour our rays in ComputeLightPropagation(), and visualise the sample coordinate system
1:31:16Recolour our rays in ComputeLightPropagation(), and visualise the sample coordinate system
1:31:16Recolour our rays in ComputeLightPropagation(), and visualise the sample coordinate system
1:33:43See that our coordinate frame is good, but our ability to place samples is not
🏃
1:33:43See that our coordinate frame is good, but our ability to place samples is not
🏃
1:33:43See that our coordinate frame is good, but our ability to place samples is not
🏃
1:34:10Assert in ComputeLightPropagation() that our tRay is >= 0.01f (i.e. not pointing backwards)
1:34:10Assert in ComputeLightPropagation() that our tRay is >= 0.01f (i.e. not pointing backwards)
1:34:10Assert in ComputeLightPropagation() that our tRay is >= 0.01f (i.e. not pointing backwards)
1:36:48Run the game and hit that assert
🏃
1:36:48Run the game and hit that assert
🏃
1:36:48Run the game and hit that assert
🏃
1:38:15Make ComputeLightPropagation() test for tMin > ZeroF32_4x() when setting tValid
1:38:15Make ComputeLightPropagation() test for tMin > ZeroF32_4x() when setting tValid
1:38:15Make ComputeLightPropagation() test for tMin > ZeroF32_4x() when setting tValid
1:38:43See that it looks much better, noting that we got a lot brighter when turning off angular falloff
🏃
1:38:43See that it looks much better, noting that we got a lot brighter when turning off angular falloff
🏃
1:38:43See that it looks much better, noting that we got a lot brighter when turning off angular falloff
🏃
1:42:39Enable GenerateLightingPattern() to produce an additional unweighted sampling pattern for comparison
1:42:39Enable GenerateLightingPattern() to produce an additional unweighted sampling pattern for comparison
1:42:39Enable GenerateLightingPattern() to produce an additional unweighted sampling pattern for comparison
1:53:10Introduce TestFunc() for GenerateLightingPattern() to call
1:53:10Introduce TestFunc() for GenerateLightingPattern() to call
1:53:10Introduce TestFunc() for GenerateLightingPattern() to call
1:54:56Step through to GenerateLightingPattern() and inspect our MinTestAvg and MaxTestAvg to see that they differ a lot
🏃
1:54:56Step through to GenerateLightingPattern() and inspect our MinTestAvg and MaxTestAvg to see that they differ a lot
🏃
1:54:56Step through to GenerateLightingPattern() and inspect our MinTestAvg and MaxTestAvg to see that they differ a lot
🏃
1:55:32Fix GenerateLightingPattern() to use F32Min rather than 0.0f
1:55:32Fix GenerateLightingPattern() to use F32Min rather than 0.0f
1:55:32Fix GenerateLightingPattern() to use F32Min rather than 0.0f
1:55:47Step back through to GenerateLightingPattern() and inspect our MinTestAvg and MaxTestAvg to see that they still differ a lot
🏃
1:55:47Step back through to GenerateLightingPattern() and inspect our MinTestAvg and MaxTestAvg to see that they still differ a lot
🏃
1:55:47Step back through to GenerateLightingPattern() and inspect our MinTestAvg and MaxTestAvg to see that they still differ a lot
🏃
1:56:29Enable GenerateWhiteNoiseSamples to produce a biased sampling pattern
1:56:29Enable GenerateWhiteNoiseSamples to produce a biased sampling pattern
1:56:29Enable GenerateWhiteNoiseSamples to produce a biased sampling pattern
1:58:39Step through to GenerateLightingPattern() and inspect our averages to see that they differ differently
🏃
1:58:39Step through to GenerateLightingPattern() and inspect our averages to see that they differ differently
🏃
1:58:39Step through to GenerateLightingPattern() and inspect our averages to see that they differ differently
🏃
2:00:24Q&A
🗩
2:00:24Q&A
🗩
2:00:24Q&A
🗩
2:01:35insobot Blow's avatar looks exactly like him!
🗪
2:01:35insobot Blow's avatar looks exactly like him!
🗪
2:01:35insobot Blow's avatar looks exactly like him!
🗪
2:02:25vateferfout Q: Hi, not really an on-topic question, but you said you'd talk about some tidbits concerning the SIMD union type
🗪
2:02:25vateferfout Q: Hi, not really an on-topic question, but you said you'd talk about some tidbits concerning the SIMD union type
🗪
2:02:25vateferfout Q: Hi, not really an on-topic question, but you said you'd talk about some tidbits concerning the SIMD union type
🗪
2:03:02Zilarrezko Q: How are you feeling on the progress of the lighting so far?
🗪
2:03:02Zilarrezko Q: How are you feeling on the progress of the lighting so far?
🗪
2:03:02Zilarrezko Q: How are you feeling on the progress of the lighting so far?
🗪
2:03:11hholst80 Q: Are there any libraries available that would help with just the lighting stuff you're working on right now? It seems fairly involved and require some R&D from the developer's part
🗪
2:03:11hholst80 Q: Are there any libraries available that would help with just the lighting stuff you're working on right now? It seems fairly involved and require some R&D from the developer's part
🗪
2:03:11hholst80 Q: Are there any libraries available that would help with just the lighting stuff you're working on right now? It seems fairly involved and require some R&D from the developer's part
🗪
2:03:23gprincip Q: Why are you not sure about GPU'ing light? Do you think that it might not increase FPS?
🗪
2:03:23gprincip Q: Why are you not sure about GPU'ing light? Do you think that it might not increase FPS?
🗪
2:03:23gprincip Q: Why are you not sure about GPU'ing light? Do you think that it might not increase FPS?
🗪
2:04:49cicero743 Q: What are your dislike on Windows 10? Some people complain about it because of their hatred against Microsoft regardless how good to product is but I feel like they mixed a lot of messy stuff after 8 and 8.1. What are the things you'd like them to fix?
🗪
2:04:49cicero743 Q: What are your dislike on Windows 10? Some people complain about it because of their hatred against Microsoft regardless how good to product is but I feel like they mixed a lot of messy stuff after 8 and 8.1. What are the things you'd like them to fix?
🗪
2:04:49cicero743 Q: What are your dislike on Windows 10? Some people complain about it because of their hatred against Microsoft regardless how good to product is but I feel like they mixed a lot of messy stuff after 8 and 8.1. What are the things you'd like them to fix?
🗪
2:07:21blackburn1911 Q: How many hours / day are you programming?
🗪
2:07:21blackburn1911 Q: How many hours / day are you programming?
🗪
2:07:21blackburn1911 Q: How many hours / day are you programming?
🗪
2:07:38Zilarrezko Q: Do you think we will be able to keep the lighting, at least to this complexity or even method, on the Raspberry Pi?
🗪
2:07:38Zilarrezko Q: Do you think we will be able to keep the lighting, at least to this complexity or even method, on the Raspberry Pi?
🗪
2:07:38Zilarrezko Q: Do you think we will be able to keep the lighting, at least to this complexity or even method, on the Raspberry Pi?
🗪
2:07:52jim0_o Q: What level are intrinsics defined, are intrinsic CPU vendor specific or architecture specific? Will we/you need to make AMD/Intel specific Intrinsics or x86/x64 ? (or is it defined on a different level?)
🗪
2:07:52jim0_o Q: What level are intrinsics defined, are intrinsic CPU vendor specific or architecture specific? Will we/you need to make AMD/Intel specific Intrinsics or x86/x64 ? (or is it defined on a different level?)
🗪
2:07:52jim0_o Q: What level are intrinsics defined, are intrinsic CPU vendor specific or architecture specific? Will we/you need to make AMD/Intel specific Intrinsics or x86/x64 ? (or is it defined on a different level?)
🗪
2:08:30alexkelbo Q: I understand you switched from AMD to NVIDIA. Any specific reason?
🗪
2:08:30alexkelbo Q: I understand you switched from AMD to NVIDIA. Any specific reason?
🗪
2:08:30alexkelbo Q: I understand you switched from AMD to NVIDIA. Any specific reason?
🗪
2:08:49thebaker__ Q: how much longer do you expect to spend on lighting?
🗪
2:08:49thebaker__ Q: how much longer do you expect to spend on lighting?
🗪
2:08:49thebaker__ Q: how much longer do you expect to spend on lighting?
🗪
2:08:53iwrestledabeer Q: Sorry for an off-topic question, I'm pretty far behind. I'm curious if you have already implemented the swapping function or macro. How would you avoid using templates for this?
🗪
2:08:53iwrestledabeer Q: Sorry for an off-topic question, I'm pretty far behind. I'm curious if you have already implemented the swapping function or macro. How would you avoid using templates for this?
🗪
2:08:53iwrestledabeer Q: Sorry for an off-topic question, I'm pretty far behind. I'm curious if you have already implemented the swapping function or macro. How would you avoid using templates for this?
🗪
2:09:15Using the SIMD union type to issue instructions to particular units3
🗩
2:09:15Using the SIMD union type to issue instructions to particular units3
🗩
2:09:15Using the SIMD union type to issue instructions to particular units3
🗩
2:17:25sz19 Q: What are the specs of your current dev machine?
🗪
🎲
2:17:25sz19 Q: What are the specs of your current dev machine?
🗪
🎲
2:17:25sz19 Q: What are the specs of your current dev machine?
🗪
🎲
2:17:58lorefyr Q: In your opinion, what are low hanging fruits the UNIX / Linux world could or should tackle to become more competitive with Windows, from a usability perspective?
🗪
2:17:58lorefyr Q: In your opinion, what are low hanging fruits the UNIX / Linux world could or should tackle to become more competitive with Windows, from a usability perspective?
🗪
2:17:58lorefyr Q: In your opinion, what are low hanging fruits the UNIX / Linux world could or should tackle to become more competitive with Windows, from a usability perspective?
🗪
2:21:02elfeck Q: Can you explain why you use f32 instead of f64 (double)?
🗪
2:21:02elfeck Q: Can you explain why you use f32 instead of f64 (double)?
🗪
2:21:02elfeck Q: Can you explain why you use f32 instead of f64 (double)?
🗪
2:21:56n30sh4d0w Q: Is this something that could cause a stack overflow? Or related to it?
🗪
2:21:56n30sh4d0w Q: Is this something that could cause a stack overflow? Or related to it?
🗪
2:21:56n30sh4d0w Q: Is this something that could cause a stack overflow? Or related to it?
🗪
2:22:24n30sh4d0w Q: Would what you are talking about unions be related to overflow of variables (or "stack overflow") if you did things wrong? I was asking because I was curious what error codes you could look for for this problem
🗪
2:22:24n30sh4d0w Q: Would what you are talking about unions be related to overflow of variables (or "stack overflow") if you did things wrong? I was asking because I was curious what error codes you could look for for this problem
🗪
2:22:24n30sh4d0w Q: Would what you are talking about unions be related to overflow of variables (or "stack overflow") if you did things wrong? I was asking because I was curious what error codes you could look for for this problem
🗪
2:24:02Close it down
🗩
2:24:02Close it down
🗩
2:24:02Close it down
🗩