Handmade Hero»Episode Guide
Stochastic Ray Origins
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
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 Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

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:00Recap and set the stage for the day handling light emitters overlapping light probes
🗩
0:00Recap and set the stage for the day handling light emitters overlapping light probes
🗩
0:00Recap and set the stage for the day handling light emitters overlapping light probes
🗩
2:41comrademaria Q: Scene is wrong
🗪
2:41comrademaria Q: Scene is wrong
🗪
2:41comrademaria Q: Scene is wrong
🗪
3:01Illustrate our overlapped light emitter-probe dimming bug
🏃
3:01Illustrate our overlapped light emitter-probe dimming bug
🏃
3:01Illustrate our overlapped light emitter-probe dimming bug
🏃
3:56Note how FullCast() doesn't cast rays from overlapped light probes
📖
3:56Note how FullCast() doesn't cast rays from overlapped light probes
📖
3:56Note how FullCast() doesn't cast rays from overlapped light probes
📖
4:28Toggle on DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
4:28Toggle on DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
4:28Toggle on DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
4:49Illustrate our overlapped light emitter-probe dimming bug
🏃
4:49Illustrate our overlapped light emitter-probe dimming bug
🏃
4:49Illustrate our overlapped light emitter-probe dimming bug
🏃
8:12Possible overlapped emitter-probe solutions: 1. Rasterise light into overlapped probes as a pre-pass
🏃
8:12Possible overlapped emitter-probe solutions: 1. Rasterise light into overlapped probes as a pre-pass
🏃
8:12Possible overlapped emitter-probe solutions: 1. Rasterise light into overlapped probes as a pre-pass
🏃
10:52Possible overlapped emitter-probe solutions: 2. Jitter sampling locations
🏃
10:52Possible overlapped emitter-probe solutions: 2. Jitter sampling locations
🏃
10:52Possible overlapped emitter-probe solutions: 2. Jitter sampling locations
🏃
11:12Possible overlapped emitter-probe solutions: 3. Disallow overlapping of emitters and probes
🏃
11:12Possible overlapped emitter-probe solutions: 3. Disallow overlapping of emitters and probes
🏃
11:12Possible overlapped emitter-probe solutions: 3. Disallow overlapping of emitters and probes
🏃
13:51Consider how to handle overlapped light emitters and probes, admiring our specular lighting
🏃
13:51Consider how to handle overlapped light emitters and probes, admiring our specular lighting
🏃
13:51Consider how to handle overlapped light emitters and probes, admiring our specular lighting
🏃
17:06Toggle off DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
17:06Toggle off DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
17:06Toggle off DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
17:14Consider trying jittering the sampling locations
🏃
17:14Consider trying jittering the sampling locations
🏃
17:14Consider trying jittering the sampling locations
🏃
18:52Possible overlapped emitter-probe solutions: 4. Permit rays to hit geometry they're inside of
📖
18:52Possible overlapped emitter-probe solutions: 4. Permit rays to hit geometry they're inside of
📖
18:52Possible overlapped emitter-probe solutions: 4. Permit rays to hit geometry they're inside of
📖
19:54Reacquaint ourselves with the intersection testing code in GridRayCast()
📖
19:54Reacquaint ourselves with the intersection testing code in GridRayCast()
📖
19:54Reacquaint ourselves with the intersection testing code in GridRayCast()
📖
23:54Let GridRayCast() cast rays from inside everything
23:54Let GridRayCast() cast rays from inside everything
23:54Let GridRayCast() cast rays from inside everything
24:19Embedded probes now see light
🏃
24:19Embedded probes now see light
🏃
24:19Embedded probes now see light
🏃
25:19Enable GridRayCast() to track if a light probe was inside geometry
25:19Enable GridRayCast() to track if a light probe was inside geometry
25:19Enable GridRayCast() to track if a light probe was inside geometry
26:56Embedded probes still see light
🏃
26:56Embedded probes still see light
🏃
26:56Embedded probes still see light
🏃
27:51Toggle on DebugDrawOctahedralValues() in UpdateLighting()
27:51Toggle on DebugDrawOctahedralValues() in UpdateLighting()
27:51Toggle on DebugDrawOctahedralValues() in UpdateLighting()
27:59Light probes do not gather light from overlapping emitters
🏃
27:59Light probes do not gather light from overlapping emitters
🏃
27:59Light probes do not gather light from overlapping emitters
🏃
28:28Our light probe's rays must be hitting the overlapping emitter
📖
28:28Our light probe's rays must be hitting the overlapping emitter
📖
28:28Our light probe's rays must be hitting the overlapping emitter
📖
29:36psarokroketa That tInside variable doesn't seem to be used, in case you assume it is?
🗪
29:36psarokroketa That tInside variable doesn't seem to be used, in case you assume it is?
🗪
29:36psarokroketa That tInside variable doesn't seem to be used, in case you assume it is?
🗪
29:53Investigate why GridRayCast() doesn't light up our overlapped light probe
📖
29:53Investigate why GridRayCast() doesn't light up our overlapped light probe
📖
29:53Investigate why GridRayCast() doesn't light up our overlapped light probe
📖
33:23Make GridRayCast() clamp the tMin to 0 and above
33:23Make GridRayCast() clamp the tMin to 0 and above
33:23Make GridRayCast() clamp the tMin to 0 and above
34:29Light probes gather light from overlapping emitters, but too brightly
🏃
34:29Light probes gather light from overlapping emitters, but too brightly
🏃
34:29Light probes gather light from overlapping emitters, but too brightly
🏃
36:07Toggle on room lights in StandardLightingPattern()
36:07Toggle on room lights in StandardLightingPattern()
36:07Toggle on room lights in StandardLightingPattern()
36:26We happily lack light bleed
🏃
36:26We happily lack light bleed
🏃
36:26We happily lack light bleed
🏃
37:08Comment tInside as intentionally not used in GridRayCast()
37:08Comment tInside as intentionally not used in GridRayCast()
37:08Comment tInside as intentionally not used in GridRayCast()
38:24Note our overly bright eclipsed probes, also with square artifacting
🏃
38:24Note our overly bright eclipsed probes, also with square artifacting
🏃
38:24Note our overly bright eclipsed probes, also with square artifacting
🏃
41:44Consider jittering light ray origins in X and Y
📖
41:44Consider jittering light ray origins in X and Y
📖
41:44Consider jittering light ray origins in X and Y
📖
43:36Weld FullCast() and GridRayCast() together
43:36Weld FullCast() and GridRayCast() together
43:36Weld FullCast() and GridRayCast() together
46:38We run just as before
🏃
46:38We run just as before
🏃
46:38We run just as before
🏃
46:54Toggle off DebugDrawOctahedralValues() in UpdateLighting()
46:54Toggle off DebugDrawOctahedralValues() in UpdateLighting()
46:54Toggle off DebugDrawOctahedralValues() in UpdateLighting()
47:05Consider jittering light ray origins in X and Y
🏃
47:05Consider jittering light ray origins in X and Y
🏃
47:05Consider jittering light ray origins in X and Y
🏃
47:45Rename Pick to DebugPick in FullCast()
47:45Rename Pick to DebugPick in FullCast()
47:45Rename Pick to DebugPick in FullCast()
49:57Determine to jitter light ray origins in X and Y
🏃
49:57Determine to jitter light ray origins in X and Y
🏃
49:57Determine to jitter light ray origins in X and Y
🏃
50:47Make FullCast() jitter light ray origins in X and Y
50:47Make FullCast() jitter light ray origins in X and Y
50:47Make FullCast() jitter light ray origins in X and Y
52:45Our lighting system is still doing something
🏃
52:45Our lighting system is still doing something
🏃
52:45Our lighting system is still doing something
🏃
53:35Make FullCast() keep jittered rays within their original tile
53:35Make FullCast() keep jittered rays within their original tile
53:35Make FullCast() keep jittered rays within their original tile
54:55Our lighting looks a little wrong
🏃
54:55Our lighting looks a little wrong
🏃
54:55Our lighting looks a little wrong
🏃
55:42Consider how to proceed
📖
55:42Consider how to proceed
📖
55:42Consider how to proceed
📖
56:53Reduce the JitterRadius in FullCast()
56:53Reduce the JitterRadius in FullCast()
56:53Reduce the JitterRadius in FullCast()
57:04We have a little bit of light bleed
🏃
57:04We have a little bit of light bleed
🏃
57:04We have a little bit of light bleed
🏃
58:06Consider what could be wrong with the jittered lighting
🏃
58:06Consider what could be wrong with the jittered lighting
🏃
58:06Consider what could be wrong with the jittered lighting
🏃
59:08steadygoa Not backface culling rays
🗪
59:08steadygoa Not backface culling rays
🗪
59:08steadygoa Not backface culling rays
🗪
59:38Enable GRID_RAY_CAST_DEBUGGING
59:38Enable GRID_RAY_CAST_DEBUGGING
59:38Enable GRID_RAY_CAST_DEBUGGING
1:00:12Our debug overlay is now over-bright
🏃
1:00:12Our debug overlay is now over-bright
🏃
1:00:12Our debug overlay is now over-bright
🏃
1:00:32Our ray casting isn't obviously wrong
🏃
1:00:32Our ray casting isn't obviously wrong
🏃
1:00:32Our ray casting isn't obviously wrong
🏃
1:01:52Make FullCast() draw our ray's starting location
1:01:52Make FullCast() draw our ray's starting location
1:01:52Make FullCast() draw our ray's starting location
1:02:56Check out a ray's starting locations
🏃
1:02:56Check out a ray's starting locations
🏃
1:02:56Check out a ray's starting locations
🏃
1:04:33Change FullCast() to clamp the tRay to 0 as tClampedCompare, to retain the negatives
1:04:33Change FullCast() to clamp the tRay to 0 as tClampedCompare, to retain the negatives
1:04:33Change FullCast() to clamp the tRay to 0 as tClampedCompare, to retain the negatives
1:06:32Our embedded ray casting looks technically correct
🏃
1:06:32Our embedded ray casting looks technically correct
🏃
1:06:32Our embedded ray casting looks technically correct
🏃
1:08:47The jittering looks okay, but doesn't behave well when moving between probes
🏃
1:08:47The jittering looks okay, but doesn't behave well when moving between probes
🏃
1:08:47The jittering looks okay, but doesn't behave well when moving between probes
🏃
1:10:55steadygoa It looks like water reflecting light rays
🗪
1:10:55steadygoa It looks like water reflecting light rays
🗪
1:10:55steadygoa It looks like water reflecting light rays
🗪
1:11:29Make SampleLighting() use a pure diffuse material
1:11:29Make SampleLighting() use a pure diffuse material
1:11:29Make SampleLighting() use a pure diffuse material
1:11:34Demo our pure diffuse light
🏃
1:11:34Demo our pure diffuse light
🏃
1:11:34Demo our pure diffuse light
🏃
1:12:01Make SampleLighting() use a pure specular material
1:12:01Make SampleLighting() use a pure specular material
1:12:01Make SampleLighting() use a pure specular material
1:12:08Demo our pure specular light
🏃
1:12:08Demo our pure specular light
🏃
1:12:08Demo our pure specular light
🏃
1:13:12Make SampleLighting() use a half-and-half specular / diffuse material
1:13:12Make SampleLighting() use a half-and-half specular / diffuse material
1:13:12Make SampleLighting() use a half-and-half specular / diffuse material
1:13:25Demo our half-and-half specular / diffuse light
🏃
1:13:25Demo our half-and-half specular / diffuse light
🏃
1:13:25Demo our half-and-half specular / diffuse light
🏃
1:14:01Illustrate our square artifacting around overlapped light probes
🏃
1:14:01Illustrate our square artifacting around overlapped light probes
🏃
1:14:01Illustrate our square artifacting around overlapped light probes
🏃
1:15:07Make AddPlayer() shrink the glove's light from 0.5 to 0.25
1:15:07Make AddPlayer() shrink the glove's light from 0.5 to 0.25
1:15:07Make AddPlayer() shrink the glove's light from 0.5 to 0.25
1:15:52Our glove's smaller light almost disappears
🏃
1:15:52Our glove's smaller light almost disappears
🏃
1:15:52Our glove's smaller light almost disappears
🏃
1:17:25Make AddPlayer() brighten the glove's light from 0.2 to 0.5
1:17:25Make AddPlayer() brighten the glove's light from 0.2 to 0.5
1:17:25Make AddPlayer() brighten the glove's light from 0.2 to 0.5
1:17:32Our glove's smaller but brighter light still almost disappears
🏃
1:17:32Our glove's smaller but brighter light still almost disappears
🏃
1:17:32Our glove's smaller but brighter light still almost disappears
🏃
1:20:25Make AddPlayer() enlarge the glove's light from 0.25 to 2
1:20:25Make AddPlayer() enlarge the glove's light from 0.25 to 2
1:20:25Make AddPlayer() enlarge the glove's light from 0.25 to 2
1:20:39Our glove's larger light works
🏃
1:20:39Our glove's larger light works
🏃
1:20:39Our glove's larger light works
🏃
1:21:06Make AddPlayer() darken the glove's light from 0.5 to 0.125
1:21:06Make AddPlayer() darken the glove's light from 0.5 to 0.125
1:21:06Make AddPlayer() darken the glove's light from 0.5 to 0.125
1:21:29Our glove's larger and darkened light looks just right
🏃
1:21:29Our glove's larger and darkened light looks just right
🏃
1:21:29Our glove's larger and darkened light looks just right
🏃
1:21:58Make AddPlayer() darken the glove's light from 0.125 to 0.05
1:21:58Make AddPlayer() darken the glove's light from 0.125 to 0.05
1:21:58Make AddPlayer() darken the glove's light from 0.125 to 0.05
1:22:07Our glove's larger and darkened light looks as expected
🏃
1:22:07Our glove's larger and darkened light looks as expected
🏃
1:22:07Our glove's larger and darkened light looks as expected
🏃
1:23:53Make AddPlayer() shrink the glove's light from 2 to 1, and brighten it from 0.05 to 0.1
1:23:53Make AddPlayer() shrink the glove's light from 2 to 1, and brighten it from 0.05 to 0.1
1:23:53Make AddPlayer() shrink the glove's light from 2 to 1, and brighten it from 0.05 to 0.1
1:24:08Our glove's light remains
🏃
1:24:08Our glove's light remains
🏃
1:24:08Our glove's light remains
🏃
1:25:12Make AddPlayer() shrink the glove's light from 1 to 0.5
1:25:12Make AddPlayer() shrink the glove's light from 1 to 0.5
1:25:12Make AddPlayer() shrink the glove's light from 1 to 0.5
1:25:25Our glove's light remains
🏃
1:25:25Our glove's light remains
🏃
1:25:25Our glove's light remains
🏃
1:26:00Make AddPlayer() shrink the glove's light from 0.5 to 0.4
1:26:00Make AddPlayer() shrink the glove's light from 0.5 to 0.4
1:26:00Make AddPlayer() shrink the glove's light from 0.5 to 0.4
1:26:12Our glove's light blinks
🏃
1:26:12Our glove's light blinks
🏃
1:26:12Our glove's light blinks
🏃
1:28:03Consider stratifying the light sampling
🏃
1:28:03Consider stratifying the light sampling
🏃
1:28:03Consider stratifying the light sampling
🏃
1:29:25deggua Is this because it's so small the probability of a sample ray intersecting the emissive source starts to become heavily affected by the random rays' distribution and whether they actually hit the emissive object? Seems like some kind of temporal averaging or a finer resolution grid would help
🗪
1:29:25deggua Is this because it's so small the probability of a sample ray intersecting the emissive source starts to become heavily affected by the random rays' distribution and whether they actually hit the emissive object? Seems like some kind of temporal averaging or a finer resolution grid would help
🗪
1:29:25deggua Is this because it's so small the probability of a sample ray intersecting the emissive source starts to become heavily affected by the random rays' distribution and whether they actually hit the emissive object? Seems like some kind of temporal averaging or a finer resolution grid would help
🗪
1:29:58Clean out cruft from UpdateLighting()
1:29:58Clean out cruft from UpdateLighting()
1:29:58Clean out cruft from UpdateLighting()
1:33:10We still run
🏃
1:33:10We still run
🏃
1:33:10We still run
🏃
1:33:12Make FullCast() stratify the samples into a 4×4 grid
1:33:12Make FullCast() stratify the samples into a 4×4 grid
1:33:12Make FullCast() stratify the samples into a 4×4 grid
1:36:46Our glove's light still blinks
🏃
1:36:46Our glove's light still blinks
🏃
1:36:46Our glove's light still blinks
🏃
1:38:55Temporarily make FullCast() seed its random series with a constant value, to fix the rays
1:38:55Temporarily make FullCast() seed its random series with a constant value, to fix the rays
1:38:55Temporarily make FullCast() seed its random series with a constant value, to fix the rays
1:39:24Our glove's light still pulsates with fixed rays, but why?
🏃
1:39:24Our glove's light still pulsates with fixed rays, but why?
🏃
1:39:24Our glove's light still pulsates with fixed rays, but why?
🏃
1:44:06Scour FullCast() for sources of noise
📖
1:44:06Scour FullCast() for sources of noise
📖
1:44:06Scour FullCast() for sources of noise
📖
1:45:07mtsmox Maybe the position of the glove, the bobbing, turn that off?
🗪
1:45:07mtsmox Maybe the position of the glove, the bobbing, turn that off?
🗪
1:45:07mtsmox Maybe the position of the glove, the bobbing, turn that off?
🗪
1:45:11The glove doesn't bob
🏃
1:45:11The glove doesn't bob
🏃
1:45:11The glove doesn't bob
🏃
1:45:38Increase tUpdateBlend from 12/60 to 1 in UpdateLighting()
1:45:38Increase tUpdateBlend from 12/60 to 1 in UpdateLighting()
1:45:38Increase tUpdateBlend from 12/60 to 1 in UpdateLighting()
1:46:24Our glove's light blinks vigorously
🏃
1:46:24Our glove's light blinks vigorously
🏃
1:46:24Our glove's light blinks vigorously
🏃
1:48:16fat_dratini Runaway NaNs
🗪
1:48:16fat_dratini Runaway NaNs
🗪
1:48:16fat_dratini Runaway NaNs
🗪
1:48:46Our glove's light blinks vigorously (cont.)
🏃
1:48:46Our glove's light blinks vigorously (cont.)
🏃
1:48:46Our glove's light blinks vigorously (cont.)
🏃
1:49:46Toggle off room lights in StandardLightingPattern()
1:49:46Toggle off room lights in StandardLightingPattern()
1:49:46Toggle off room lights in StandardLightingPattern()
1:50:03Only overlapped light probes have the blinking bug
🏃
1:50:03Only overlapped light probes have the blinking bug
🏃
1:50:03Only overlapped light probes have the blinking bug
🏃
1:51:10Temporarily prevent GridRayCast() from casting rays from inside geometry
1:51:10Temporarily prevent GridRayCast() from casting rays from inside geometry
1:51:10Temporarily prevent GridRayCast() from casting rays from inside geometry
1:51:41Our light still blinks, but less vigorously
🏃
1:51:41Our light still blinks, but less vigorously
🏃
1:51:41Our light still blinks, but less vigorously
🏃
1:52:09Let GridRayCast() cast rays from inside geometry
1:52:09Let GridRayCast() cast rays from inside geometry
1:52:09Let GridRayCast() cast rays from inside geometry
1:52:14Consider how to approach our blinking bug
📖
1:52:14Consider how to approach our blinking bug
📖
1:52:14Consider how to approach our blinking bug
📖
1:54:14snoringtortoise Could you turn on NaN exceptions so if we hit a NaN the program will halt?
🗪
1:54:14snoringtortoise Could you turn on NaN exceptions so if we hit a NaN the program will halt?
🗪
1:54:14snoringtortoise Could you turn on NaN exceptions so if we hit a NaN the program will halt?
🗪
1:54:19Check our tUpdate and JitterRadius
📖
1:54:19Check our tUpdate and JitterRadius
📖
1:54:19Check our tUpdate and JitterRadius
📖
1:55:21Decrease the JitterRadius multiplier from 0.45 to 0.4 in FullCast()
1:55:21Decrease the JitterRadius multiplier from 0.45 to 0.4 in FullCast()
1:55:21Decrease the JitterRadius multiplier from 0.45 to 0.4 in FullCast()
1:55:30Our light still blinks
🏃
1:55:30Our light still blinks
🏃
1:55:30Our light still blinks
🏃
1:55:34Decrease the JitterRadius multiplier from 0.4 to 0.1 in FullCast()
1:55:34Decrease the JitterRadius multiplier from 0.4 to 0.1 in FullCast()
1:55:34Decrease the JitterRadius multiplier from 0.4 to 0.1 in FullCast()
1:55:36Our light blinks more sporadically
🏃
1:55:36Our light blinks more sporadically
🏃
1:55:36Our light blinks more sporadically
🏃
1:56:10Increase the JitterRadius multiplier from 0.1 to 0.45 in FullCast()
1:56:10Increase the JitterRadius multiplier from 0.1 to 0.45 in FullCast()
1:56:10Increase the JitterRadius multiplier from 0.1 to 0.45 in FullCast()
1:56:31Determine to get snacks and enable NaN exceptions
🗩
1:56:31Determine to get snacks and enable NaN exceptions
🗩
1:56:31Determine to get snacks and enable NaN exceptions
🗩
1:56:53fnaarp Maybe try just setting tUpdateBlend to 1 in both clauses of that if?
🗪
1:56:53fnaarp Maybe try just setting tUpdateBlend to 1 in both clauses of that if?
🗪
1:56:53fnaarp Maybe try just setting tUpdateBlend to 1 in both clauses of that if?
🗪
1:57:02Remove the tUpdateBlend modification branch from UpdateLighting(), and remove Accumulating, AccumulationCount and FrameOdd from lighting_solution
1:57:02Remove the tUpdateBlend modification branch from UpdateLighting(), and remove Accumulating, AccumulationCount and FrameOdd from lighting_solution
1:57:02Remove the tUpdateBlend modification branch from UpdateLighting(), and remove Accumulating, AccumulationCount and FrameOdd from lighting_solution
1:57:35Our light continues to blink
🏃
1:57:35Our light continues to blink
🏃
1:57:35Our light continues to blink
🏃
1:58:09Determine to get snacks and enable NaN exceptions
🗩
1:58:09Determine to get snacks and enable NaN exceptions
🗩
1:58:09Determine to get snacks and enable NaN exceptions
🗩
1:58:47Grab snacks
🗹
1:58:47Grab snacks
🗹
1:58:47Grab snacks
🗹
2:03:06Return with snacks
🗹
2:03:06Return with snacks
🗹
2:03:06Return with snacks
🗹
2:03:42snoringtortoise Casey: Just wondering if removing the (tMin < tMax) expression from the Mask calculation will have an effect? That part of the expression was added this stream
🗪
2:03:42snoringtortoise Casey: Just wondering if removing the (tMin < tMax) expression from the Mask calculation will have an effect? That part of the expression was added this stream
🗪
2:03:42snoringtortoise Casey: Just wondering if removing the (tMin < tMax) expression from the Mask calculation will have an effect? That part of the expression was added this stream
🗪
2:04:11snoringtortoise Casey: If the ray can be negative, then couldn't tMin be > tMax some of the time?
🗪
2:04:11snoringtortoise Casey: If the ray can be negative, then couldn't tMin be > tMax some of the time?
🗪
2:04:11snoringtortoise Casey: If the ray can be negative, then couldn't tMin be > tMax some of the time?
🗪
2:04:42fnaarp Why'd it change from a throb to a blink?
🗪
2:04:42fnaarp Why'd it change from a throb to a blink?
🗪
2:04:42fnaarp Why'd it change from a throb to a blink?
🗪
2:05:04Demo the blinking light
🏃
2:05:04Demo the blinking light
🏃
2:05:04Demo the blinking light
🏃
2:05:12Toggle on room lights in StandardLightingPattern()
2:05:12Toggle on room lights in StandardLightingPattern()
2:05:12Toggle on room lights in StandardLightingPattern()
2:05:22Demo the blinking, with stable lighting
🏃
2:05:22Demo the blinking, with stable lighting
🏃
2:05:22Demo the blinking, with stable lighting
🏃
2:06:14Revert FullCast() to seed its random series randomly
2:06:14Revert FullCast() to seed its random series randomly
2:06:14Revert FullCast() to seed its random series randomly
2:06:33Demo the blinking with noisy lighting
🏃
2:06:33Demo the blinking with noisy lighting
🏃
2:06:33Demo the blinking with noisy lighting
🏃
2:07:14yuika_lamonting The blinking?
🗪
2:07:14yuika_lamonting The blinking?
🗪
2:07:14yuika_lamonting The blinking?
🗪
2:07:31Demo the flickery lighting (cont.)
🏃
2:07:31Demo the flickery lighting (cont.)
🏃
2:07:31Demo the flickery lighting (cont.)
🏃
2:09:51fnaarp So temporal averaging made the blink into a throb, got it
🗪
2:09:51fnaarp So temporal averaging made the blink into a throb, got it
🗪
2:09:51fnaarp So temporal averaging made the blink into a throb, got it
🗪
2:10:41Wonder why the glove light blinks when small enough
🏃
2:10:41Wonder why the glove light blinks when small enough
🏃
2:10:41Wonder why the glove light blinks when small enough
🏃
2:11:07Make AddPlayer() enlarge the glove's light from 0.4 to 0.5
2:11:07Make AddPlayer() enlarge the glove's light from 0.4 to 0.5
2:11:07Make AddPlayer() enlarge the glove's light from 0.4 to 0.5
2:11:36Our glove's larger light rarely blinks
🏃
2:11:36Our glove's larger light rarely blinks
🏃
2:11:36Our glove's larger light rarely blinks
🏃
2:12:09mtsmox Can you see if the gameplay speed is related by slowing down the clock?
🗪
2:12:09mtsmox Can you see if the gameplay speed is related by slowing down the clock?
🗪
2:12:09mtsmox Can you see if the gameplay speed is related by slowing down the clock?
🗪
2:12:21Slowing the timestep stops the light from blinking (even after speeding it back up again)
🏃
2:12:21Slowing the timestep stops the light from blinking (even after speeding it back up again)
🏃
2:12:21Slowing the timestep stops the light from blinking (even after speeding it back up again)
🏃
2:14:48Toggle on DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
2:14:48Toggle on DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
2:14:48Toggle on DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
2:14:51Our light probe is suspiciously positioned in Z relative to the glove
🏃
2:14:51Our light probe is suspiciously positioned in Z relative to the glove
🏃
2:14:51Our light probe is suspiciously positioned in Z relative to the glove
🏃
2:15:57Toggle off DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
2:15:57Toggle off DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
2:15:57Toggle off DebugDrawOctahedralValues() and DebugDrawSpatialGrid() in UpdateLighting()
2:16:16Halve the JitterRadius along Z, and make FullCast() jitter light ray origins in Z
2:16:16Halve the JitterRadius along Z, and make FullCast() jitter light ray origins in Z
2:16:16Halve the JitterRadius along Z, and make FullCast() jitter light ray origins in Z
2:16:41Our glove's light flickers more sporadically
🏃
2:16:41Our glove's light flickers more sporadically
🏃
2:16:41Our glove's light flickers more sporadically
🏃
2:17:31Increase the JitterRadius multiplier from 0.45 to 0.5 in FullCast()
2:17:31Increase the JitterRadius multiplier from 0.45 to 0.5 in FullCast()
2:17:31Increase the JitterRadius multiplier from 0.45 to 0.5 in FullCast()
2:17:44Our glove's light still flickers sporadically
🏃
2:17:44Our glove's light still flickers sporadically
🏃
2:17:44Our glove's light still flickers sporadically
🏃
2:18:56Decrease tUpdateBlend from 1 to 12/60 in UpdateLighting()
2:18:56Decrease tUpdateBlend from 1 to 12/60 in UpdateLighting()
2:18:56Decrease tUpdateBlend from 1 to 12/60 in UpdateLighting()
2:18:59The glove's light now barely flickers
🏃
2:18:59The glove's light now barely flickers
🏃
2:18:59The glove's light now barely flickers
🏃
2:20:05Light leaks to the outdoors
🏃
2:20:05Light leaks to the outdoors
🏃
2:20:05Light leaks to the outdoors
🏃
2:21:13Admire the lighting, and consider putting in an exposure curve and a notion of brightness (for bloom)
🏃
2:21:13Admire the lighting, and consider putting in an exposure curve and a notion of brightness (for bloom)
🏃
2:21:13Admire the lighting, and consider putting in an exposure curve and a notion of brightness (for bloom)
🏃
2:23:47Make AddPlayer() shrink the glove's light from 0.4 to 0.25, and brighten it from 0.1 to 0.2
2:23:47Make AddPlayer() shrink the glove's light from 0.4 to 0.25, and brighten it from 0.1 to 0.2
2:23:47Make AddPlayer() shrink the glove's light from 0.4 to 0.25, and brighten it from 0.1 to 0.2
2:24:08The glove's smaller light varies more
🏃
2:24:08The glove's smaller light varies more
🏃
2:24:08The glove's smaller light varies more
🏃
2:24:39Make AddPlayer() enlarge the glove's light from 0.25 to 0.75, and darken it from 0.2 to 0
2:24:39Make AddPlayer() enlarge the glove's light from 0.25 to 0.75, and darken it from 0.2 to 0
2:24:39Make AddPlayer() enlarge the glove's light from 0.25 to 0.75, and darken it from 0.2 to 0
2:25:03Our glove's light is dark
🏃
2:25:03Our glove's light is dark
🏃
2:25:03Our glove's light is dark
🏃
2:25:10Make AddPlayer() brighten the glove's light from 0 to 0.1
2:25:10Make AddPlayer() brighten the glove's light from 0 to 0.1
2:25:10Make AddPlayer() brighten the glove's light from 0 to 0.1
2:25:28The glove's larger light is pretty stable
🏃
2:25:28The glove's larger light is pretty stable
🏃
2:25:28The glove's larger light is pretty stable
🏃
2:26:26Consider adding spheres
🏃
2:26:26Consider adding spheres
🏃
2:26:26Consider adding spheres
🏃
2:31:36Make AddPlayer() shrink the glove's light from 0.75 to 0.25
2:31:36Make AddPlayer() shrink the glove's light from 0.75 to 0.25
2:31:36Make AddPlayer() shrink the glove's light from 0.75 to 0.25
2:31:46Our glove's smaller light is dimmer
🏃
2:31:46Our glove's smaller light is dimmer
🏃
2:31:46Our glove's smaller light is dimmer
🏃
2:31:59Make AddPlayer() brighten the glove's light from 0.1 to 1
2:31:59Make AddPlayer() brighten the glove's light from 0.1 to 1
2:31:59Make AddPlayer() brighten the glove's light from 0.1 to 1
2:32:11Our glove's small and bright light is not too noisy
🏃
2:32:11Our glove's small and bright light is not too noisy
🏃
2:32:11Our glove's small and bright light is not too noisy
🏃
2:33:19Consider how to proceed
🏃
2:33:19Consider how to proceed
🏃
2:33:19Consider how to proceed
🏃
2:34:07Real-time global illumination: General purpose engines (using global illumination only for secondary indirect lighting) vs ours (using it for both direct and indirect lighting)
🏃
2:34:07Real-time global illumination: General purpose engines (using global illumination only for secondary indirect lighting) vs ours (using it for both direct and indirect lighting)
🏃
2:34:07Real-time global illumination: General purpose engines (using global illumination only for secondary indirect lighting) vs ours (using it for both direct and indirect lighting)
🏃
2:39:27mtsmox How do the other engines "skip" the direct light and only use secondary bounces?
🗪
2:39:27mtsmox How do the other engines "skip" the direct light and only use secondary bounces?
🗪
2:39:27mtsmox How do the other engines "skip" the direct light and only use secondary bounces?
🗪
2:41:28fnaarp Crazy idea - since all your surfaces are xy / xz / yz planes, could you look at a circle around a projection of the light source onto the surface rather than spherical intersection?
🗪
2:41:28fnaarp Crazy idea - since all your surfaces are xy / xz / yz planes, could you look at a circle around a projection of the light source onto the surface rather than spherical intersection?
🗪
2:41:28fnaarp Crazy idea - since all your surfaces are xy / xz / yz planes, could you look at a circle around a projection of the light source onto the surface rather than spherical intersection?
🗪
2:43:06deggua So you either have to do all sphere lights or all AABB lights?
🗪
2:43:06deggua So you either have to do all sphere lights or all AABB lights?
🗪
2:43:06deggua So you either have to do all sphere lights or all AABB lights?
🗪
2:43:12Describe the changes to FullCast() required to support spherical lights
📖
2:43:12Describe the changes to FullCast() required to support spherical lights
📖
2:43:12Describe the changes to FullCast() required to support spherical lights
📖
2:45:59spacenaming But shouldn't a small enough box give a spherical falloff as well?
🗪
2:45:59spacenaming But shouldn't a small enough box give a spherical falloff as well?
🗪
2:45:59spacenaming But shouldn't a small enough box give a spherical falloff as well?
🗪
2:46:31Consider how to proceed
🏃
2:46:31Consider how to proceed
🏃
2:46:31Consider how to proceed
🏃
2:47:53Increase RayCount from 16 to 256 in GridRayCast()
2:47:53Increase RayCount from 16 to 256 in GridRayCast()
2:47:53Increase RayCount from 16 to 256 in GridRayCast()
2:48:20The light still doesn't look great around the light source
🏃
2:48:20The light still doesn't look great around the light source
🏃
2:48:20The light still doesn't look great around the light source
🏃
2:48:49Decrease RayCount from 256 to 16 in GridRayCast()
2:48:49Decrease RayCount from 256 to 16 in GridRayCast()
2:48:49Decrease RayCount from 256 to 16 in GridRayCast()
2:48:59Our glove's light is noisier
🏃
2:48:59Our glove's light is noisier
🏃
2:48:59Our glove's light is noisier
🏃
2:49:06Make AddPlayer() shrink the glove's light from 0.25 to 0.1
2:49:06Make AddPlayer() shrink the glove's light from 0.25 to 0.1
2:49:06Make AddPlayer() shrink the glove's light from 0.25 to 0.1
2:49:21Run the game
🏃
2:49:21Run the game
🏃
2:49:21Run the game
🏃
2:49:24Make AddPlayer() shrink the glove's light from 0.1 to 0.05
2:49:24Make AddPlayer() shrink the glove's light from 0.1 to 0.05
2:49:24Make AddPlayer() shrink the glove's light from 0.1 to 0.05
2:49:28Our glove's light is barely visible
🏃
2:49:28Our glove's light is barely visible
🏃
2:49:28Our glove's light is barely visible
🏃
2:49:48Increase RayCount from 16 to 1024 in GridRayCast()
2:49:48Increase RayCount from 16 to 1024 in GridRayCast()
2:49:48Increase RayCount from 16 to 1024 in GridRayCast()
2:49:56Our glove's light is barely visible
🏃
2:49:56Our glove's light is barely visible
🏃
2:49:56Our glove's light is barely visible
🏃
2:50:59Make AddPlayer() brighten the glove's light from 1 to 10, and decrease the RayCount from 1024 to 16 in GridRayCast()
2:50:59Make AddPlayer() brighten the glove's light from 1 to 10, and decrease the RayCount from 1024 to 16 in GridRayCast()
2:50:59Make AddPlayer() brighten the glove's light from 1 to 10, and decrease the RayCount from 1024 to 16 in GridRayCast()
2:51:23Our light flickers
🏃
2:51:23Our light flickers
🏃
2:51:23Our light flickers
🏃
2:51:43Increase RayCount from 16 to 1024 in GridRayCast()
2:51:43Increase RayCount from 16 to 1024 in GridRayCast()
2:51:43Increase RayCount from 16 to 1024 in GridRayCast()
2:51:51Our light no longer flickers
🏃
2:51:51Our light no longer flickers
🏃
2:51:51Our light no longer flickers
🏃
2:53:08Decrease RayCount from 1024 to 16 in GridRayCast(), and make AddPlayer() brighten the glove's light from 10 to 20
2:53:08Decrease RayCount from 1024 to 16 in GridRayCast(), and make AddPlayer() brighten the glove's light from 10 to 20
2:53:08Decrease RayCount from 1024 to 16 in GridRayCast(), and make AddPlayer() brighten the glove's light from 10 to 20
2:53:21Our light flickers
🏃
2:53:21Our light flickers
🏃
2:53:21Our light flickers
🏃
2:53:45Increase RayCount from 16 to 1024 in GridRayCast()
2:53:45Increase RayCount from 16 to 1024 in GridRayCast()
2:53:45Increase RayCount from 16 to 1024 in GridRayCast()
2:53:49Our light no longer flickers
🏃
2:53:49Our light no longer flickers
🏃
2:53:49Our light no longer flickers
🏃
2:54:12Make AddPlayer() brighten the glove's light from 20 to 100, and decrease the RayCount from 1024 to 64 in GridRayCast()
2:54:12Make AddPlayer() brighten the glove's light from 20 to 100, and decrease the RayCount from 1024 to 64 in GridRayCast()
2:54:12Make AddPlayer() brighten the glove's light from 20 to 100, and decrease the RayCount from 1024 to 64 in GridRayCast()
2:54:34Our performance has degraded
🏃
2:54:34Our performance has degraded
🏃
2:54:34Our performance has degraded
🏃
2:54:51Decrease RayCount from 64 to 16 in GridRayCast()
2:54:51Decrease RayCount from 64 to 16 in GridRayCast()
2:54:51Decrease RayCount from 64 to 16 in GridRayCast()
2:55:01Our light flickers
🏃
2:55:01Our light flickers
🏃
2:55:01Our light flickers
🏃
2:55:21Increase RayCount from 16 to 1024 in GridRayCast()
2:55:21Increase RayCount from 16 to 1024 in GridRayCast()
2:55:21Increase RayCount from 16 to 1024 in GridRayCast()
2:55:27Our light no longer flickers
🏃
2:55:27Our light no longer flickers
🏃
2:55:27Our light no longer flickers
🏃
2:55:57Make AddPlayer() enlarge the glove's light from 0.05 to 0.4 and darken it from 100 to 1, and decrease RayCount from 1024 to 16 in GridRayCast()
2:55:57Make AddPlayer() enlarge the glove's light from 0.05 to 0.4 and darken it from 100 to 1, and decrease RayCount from 1024 to 16 in GridRayCast()
2:55:57Make AddPlayer() enlarge the glove's light from 0.05 to 0.4 and darken it from 100 to 1, and decrease RayCount from 1024 to 16 in GridRayCast()
2:56:33Our glove's light has a square falloff
🏃
2:56:33Our glove's light has a square falloff
🏃
2:56:33Our glove's light has a square falloff
🏃
2:56:48Increase RayCount from 16 to 1024 in GridRayCast()
2:56:48Increase RayCount from 16 to 1024 in GridRayCast()
2:56:48Increase RayCount from 16 to 1024 in GridRayCast()
2:56:55Our glove's light still has a square falloff
🏃
2:56:55Our glove's light still has a square falloff
🏃
2:56:55Our glove's light still has a square falloff
🏃
2:57:17Decrease RayCount from 1024 to 16 in GridRayCast()
2:57:17Decrease RayCount from 1024 to 16 in GridRayCast()
2:57:17Decrease RayCount from 1024 to 16 in GridRayCast()
2:57:27Our glove's light still has a square falloff
🏃
2:57:27Our glove's light still has a square falloff
🏃
2:57:27Our glove's light still has a square falloff
🏃
2:57:55mtsmox Could you then also remove the temporal smooth?
🗪
2:57:55mtsmox Could you then also remove the temporal smooth?
🗪
2:57:55mtsmox Could you then also remove the temporal smooth?
🗪
2:58:08Increase tUpdateBlend from 12/60 to 1 in UpdateLighting()
2:58:08Increase tUpdateBlend from 12/60 to 1 in UpdateLighting()
2:58:08Increase tUpdateBlend from 12/60 to 1 in UpdateLighting()
2:58:12Our light flickers
🏃
2:58:12Our light flickers
🏃
2:58:12Our light flickers
🏃
2:58:20Increase RayCount from 16 to 1024 in GridRayCast()
2:58:20Increase RayCount from 16 to 1024 in GridRayCast()
2:58:20Increase RayCount from 16 to 1024 in GridRayCast()
2:58:26Our glove's light still has a square falloff
🏃
2:58:26Our glove's light still has a square falloff
🏃
2:58:26Our glove's light still has a square falloff
🏃
2:59:03Decrease RayCount from 1024 to 16 in GridRayCast()
2:59:03Decrease RayCount from 1024 to 16 in GridRayCast()
2:59:03Decrease RayCount from 1024 to 16 in GridRayCast()
2:59:21Our light flickers
🏃
2:59:21Our light flickers
🏃
2:59:21Our light flickers
🏃
2:59:39Start to enable FullCast() to handle spherical lights
2:59:39Start to enable FullCast() to handle spherical lights
2:59:39Start to enable FullCast() to handle spherical lights
3:02:27Switch to the lightboard
🗹
3:02:27Switch to the lightboard
🗹
3:02:27Switch to the lightboard
🗹
3:03:56Sphere vs. Ray
🖌
3:03:56Sphere vs. Ray
🖌
3:03:56Sphere vs. Ray
🖌
3:08:42Sphere vs. Ray intersection equation, Take 1
🖌
3:08:42Sphere vs. Ray intersection equation, Take 1
🖌
3:08:42Sphere vs. Ray intersection equation, Take 1
🖌
3:16:36Sphere vs. Ray intersection equation, Take 2
🖌
3:16:36Sphere vs. Ray intersection equation, Take 2
🖌
3:16:36Sphere vs. Ray intersection equation, Take 2
🖌
3:19:59Switch to the code
🗹
3:19:59Switch to the code
🗹
3:19:59Switch to the code
🗹
3:20:12sagian2005 Do we need the coordinates? Or do we just need to know if it intersects?
🗪
3:20:12sagian2005 Do we need the coordinates? Or do we just need to know if it intersects?
🗪
3:20:12sagian2005 Do we need the coordinates? Or do we just need to know if it intersects?
🗪
3:20:51Reacquaint ourselves with the sphere intersection code in CastSampleRays() from ray.cpp
📖
3:20:51Reacquaint ourselves with the sphere intersection code in CastSampleRays() from ray.cpp
📖
3:20:51Reacquaint ourselves with the sphere intersection code in CastSampleRays() from ray.cpp
📖
3:24:32SQRTPS() and DIVPS() are on ports 0, and cost 3 cycles1
📖
3:24:32SQRTPS() and DIVPS() are on ports 0, and cost 3 cycles1
📖
3:24:32SQRTPS() and DIVPS() are on ports 0, and cost 3 cycles1
📖
3:27:39Enable FullCast() to handle spherical lights based on CastSampleRays() from ray.cpp
3:27:39Enable FullCast() to handle spherical lights based on CastSampleRays() from ray.cpp
3:27:39Enable FullCast() to handle spherical lights based on CastSampleRays() from ray.cpp
3:42:12Introduce SquareRoot()
3:42:12Introduce SquareRoot()
3:42:12Introduce SquareRoot()
3:42:41Enable FullCast() to handle spherical lights based on CastSampleRays() from ray.cpp (cont.)
3:42:41Enable FullCast() to handle spherical lights based on CastSampleRays() from ray.cpp (cont.)
3:42:41Enable FullCast() to handle spherical lights based on CastSampleRays() from ray.cpp (cont.)
3:44:58Our sphere code is running
🏃
3:44:58Our sphere code is running
🏃
3:44:58Our sphere code is running
🏃
3:45:04Toggle off the spherical intersection in FullCast()
3:45:04Toggle off the spherical intersection in FullCast()
3:45:04Toggle off the spherical intersection in FullCast()
3:46:05Our glove's light has a square falloff
🏃
3:46:05Our glove's light has a square falloff
🏃
3:46:05Our glove's light has a square falloff
🏃
3:46:18Toggle on the spherical intersection in FullCast()
3:46:18Toggle on the spherical intersection in FullCast()
3:46:18Toggle on the spherical intersection in FullCast()
3:46:26Our light is doing something different
🏃
3:46:26Our light is doing something different
🏃
3:46:26Our light is doing something different
🏃
3:46:36Enable GridBuildSpatialPartition() to handle spherical lights
3:46:36Enable GridBuildSpatialPartition() to handle spherical lights
3:46:36Enable GridBuildSpatialPartition() to handle spherical lights
3:50:23Our glove's light looks less square
🏃
3:50:23Our glove's light looks less square
🏃
3:50:23Our glove's light looks less square
🏃
3:51:01Decrease tUpdateBlend from 1 to 12/60 in UpdateLighting()
3:51:01Decrease tUpdateBlend from 1 to 12/60 in UpdateLighting()
3:51:01Decrease tUpdateBlend from 1 to 12/60 in UpdateLighting()
3:51:07Our glove's light looks even less square
🏃
3:51:07Our glove's light looks even less square
🏃
3:51:07Our glove's light looks even less square
🏃
3:51:33Increase RayCount from 16 to 1024 in GridRayCast()
3:51:33Increase RayCount from 16 to 1024 in GridRayCast()
3:51:33Increase RayCount from 16 to 1024 in GridRayCast()
3:51:58Our glove's light is centred wrong
🏃
3:51:58Our glove's light is centred wrong
🏃
3:51:58Our glove's light is centred wrong
🏃
3:52:47Decrease RayCount from 1024 to 16 in GridRayCast(), and make AddPlayer() darken the glove's light from 1 to 0.25
3:52:47Decrease RayCount from 1024 to 16 in GridRayCast(), and make AddPlayer() darken the glove's light from 1 to 0.25
3:52:47Decrease RayCount from 1024 to 16 in GridRayCast(), and make AddPlayer() darken the glove's light from 1 to 0.25
3:53:10Our glove's light is centred wrong
🏃
3:53:10Our glove's light is centred wrong
🏃
3:53:10Our glove's light is centred wrong
🏃
3:54:13Double-check the spherical light code in GridBuildSpatialPartition() and GridRayCast()
📖
3:54:13Double-check the spherical light code in GridBuildSpatialPartition() and GridRayCast()
📖
3:54:13Double-check the spherical light code in GridBuildSpatialPartition() and GridRayCast()
📖
3:58:25Eyeball our spherical light
🏃
3:58:25Eyeball our spherical light
🏃
3:58:25Eyeball our spherical light
🏃
3:59:10Make AddPlayer() add a light to the hero's head rather than the glove
3:59:10Make AddPlayer() add a light to the hero's head rather than the glove
3:59:10Make AddPlayer() add a light to the hero's head rather than the glove
4:00:08We may be detecting intersections where the sphere doesn't actually touch
🏃
4:00:08We may be detecting intersections where the sphere doesn't actually touch
🏃
4:00:08We may be detecting intersections where the sphere doesn't actually touch
🏃
4:01:50deggua Probably NaN I would guess
🗪
4:01:50deggua Probably NaN I would guess
🗪
4:01:50deggua Probably NaN I would guess
🗪
4:02:25Fix the RootTerm computation in GridRayCast(), and test it before square rooting it
4:02:25Fix the RootTerm computation in GridRayCast(), and test it before square rooting it
4:02:25Fix the RootTerm computation in GridRayCast(), and test it before square rooting it
4:04:42Our spherical light looks better
🏃
4:04:42Our spherical light looks better
🏃
4:04:42Our spherical light looks better
🏃
4:05:41Make AddPlayer() brighten the glove's light from 0.25 to 0.5
4:05:41Make AddPlayer() brighten the glove's light from 0.25 to 0.5
4:05:41Make AddPlayer() brighten the glove's light from 0.25 to 0.5
4:06:03Our light still looks a bit square
🏃
4:06:03Our light still looks a bit square
🏃
4:06:03Our light still looks a bit square
🏃
4:06:40Increase RayCount from 16 to 1024 in GridRayCast()
4:06:40Increase RayCount from 16 to 1024 in GridRayCast()
4:06:40Increase RayCount from 16 to 1024 in GridRayCast()
4:06:53Our light still looks a bit square
🏃
4:06:53Our light still looks a bit square
🏃
4:06:53Our light still looks a bit square
🏃
4:08:26Disable LIGHTS_ARE_SPHERES
4:08:26Disable LIGHTS_ARE_SPHERES
4:08:26Disable LIGHTS_ARE_SPHERES
4:08:40Our light looks brighter and more prominently square
🏃
4:08:40Our light looks brighter and more prominently square
🏃
4:08:40Our light looks brighter and more prominently square
🏃
4:09:31sagian2005 Yeah, it looks like it's just being clipped to the voxel somehow
🗪
4:09:31sagian2005 Yeah, it looks like it's just being clipped to the voxel somehow
🗪
4:09:31sagian2005 Yeah, it looks like it's just being clipped to the voxel somehow
🗪
4:09:50Enable LIGHTS_ARE_SPHERES
4:09:50Enable LIGHTS_ARE_SPHERES
4:09:50Enable LIGHTS_ARE_SPHERES
4:09:55Our light looks dimmer and less square
🏃
4:09:55Our light looks dimmer and less square
🏃
4:09:55Our light looks dimmer and less square
🏃
4:11:29Decrease RayCount from 1024 to 16 in GridRayCast()
4:11:29Decrease RayCount from 1024 to 16 in GridRayCast()
4:11:29Decrease RayCount from 1024 to 16 in GridRayCast()
4:11:41Our light trails behind us
🏃
4:11:41Our light trails behind us
🏃
4:11:41Our light trails behind us
🏃
4:11:59Increase tUpdateBlend from 12/60 to 20/60 in UpdateLighting()
4:11:59Increase tUpdateBlend from 12/60 to 20/60 in UpdateLighting()
4:11:59Increase tUpdateBlend from 12/60 to 20/60 in UpdateLighting()
4:12:22Our light trails less, but flickers
🏃
4:12:22Our light trails less, but flickers
🏃
4:12:22Our light trails less, but flickers
🏃
4:12:48Increase tUpdateBlend from 20/60 to 1 in UpdateLighting()
4:12:48Increase tUpdateBlend from 20/60 to 1 in UpdateLighting()
4:12:48Increase tUpdateBlend from 20/60 to 1 in UpdateLighting()
4:12:54Our light flickers, and seems to have a frame of lag
🏃
4:12:54Our light flickers, and seems to have a frame of lag
🏃
4:12:54Our light flickers, and seems to have a frame of lag
🏃
4:14:20Increase tUpdateBlend from 1 to 12/60 in UpdateLighting()
4:14:20Increase tUpdateBlend from 1 to 12/60 in UpdateLighting()
4:14:20Increase tUpdateBlend from 1 to 12/60 in UpdateLighting()
4:14:31Determine to make the light interpolation less square
🏃
4:14:31Determine to make the light interpolation less square
🏃
4:14:31Determine to make the light interpolation less square
🏃
4:15:31Disable LIGHTS_ARE_SPHERES
4:15:31Disable LIGHTS_ARE_SPHERES
4:15:31Disable LIGHTS_ARE_SPHERES
4:15:37Our light looks brighter and more prominently square
🏃
4:15:37Our light looks brighter and more prominently square
🏃
4:15:37Our light looks brighter and more prominently square
🏃
4:16:08That's it for today, with a plug of Molly Movie Club2
🗩
4:16:08That's it for today, with a plug of Molly Movie Club2
🗩
4:16:08That's it for today, with a plug of Molly Movie Club2
🗩