[video output=day548 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Voxelizing Light Probes" vod_platform=youtube id=MluOUXL8F-c annotator=Miblo]
[0:00][Welcome to the show][:speech]
[0:06][@xdafal][@handmade_hero What's a high-level :language you find bit interesting?]
[0:30][:Language Graph: :Performance vs Speed of Development][:blackboard]
[8:03][@internationalizationist][Q: What place on this graph takes [@naysayer88 Jon]'s Jai?][:language]
[8:53][@bulmanator][Q: Where is lisp on that graph? Because you said it was interesting][:language]
[9:48][Plug Guga Foods[ref
    site=YouTube
    page="Guga Foods"
    url=https://www.youtube.com/channel/UCfE5Cz44GlZVyoaYTHJbuZw]][:speech]
[13:14][Recap our switch to light probes and set the stage for the day][:lighting :speech]
[20:02][Walk through our sketched out AddProbeToSpatialIndex()][:lighting :research]
[21:29][:Sampling discontinuities across multiple voxels][:blackboard :lighting]
[25:17][One light probe per voxel cell][:blackboard :lighting :sampling]
[28:06][Smoothly :sampling a moving light probe in 2D][:blackboard :lighting]
[33:44][Fixing light probes at the centre of voxel cells][:blackboard :lighting :sampling]
[37:18][Continue to implement AddProbeToSpatialIndex() with light probes positioned at the centre of voxel cells, introducing light_probe struct][:lighting :sampling]
[44:29][Introduce GetProbeLightingFor(), accumulating the :lighting contribution of all eight corners of the voxel cell][:sampling]
[57:03][Introduce GetLightFromProbe()][:lighting :sampling]
[59:29][Blending two colour values using a normal][:blackboard :lighting :sampling]
[1:02:43][Norms, or Normalised Values][:blackboard :mathematics]
[1:05:30][Blending two colour values using a 1-norm][:blackboard :lighting :sampling]
[1:08:33][Implement GetLightFromProbe(), linearly blending the colours of voxel cell faces][:lighting :sampling]
[1:10:33][:Sampling out of a cube][:blackboard :lighting]
[1:12:08][Continue to implement GetLightFromProbe()][:lighting :sampling]
[1:14:24][Ways to optimise GetLightFromProbe()][:optimisation :speech]
[1:16:57][Introduce AccumulateProbe()][:lighting :sampling]
[1:18:38][Introduce GetCenterOf(), GetSpatialIndexAddress(), GetCornerLightIndex() and MapIntoGrid()][:lighting :sampling]
[1:27:12][Shifting and Powers][:blackboard :mathematics]
[1:28:59][Change GetCornerLightIndex() and GetSpatialIndexAddress() to use efficient shifting][:lighting :sampling]
[1:32:03][Implement MapIntoGrid(), introducing light_probe_spatial_index_mapping][:lighting :sampling]
[1:37:00][Switch gen_v3 over to be a v3s, introducing conversion functions][:language]
[1:42:12][Introduce GetProbeFromCell() and GetProbe(), and clean up compile errors][:lighting :sampling]
[1:46:46][Q&A][:speech]
[1:47:28][@longboolean][Q: Concerning moving light probes, could you have special purpose light probes that only affect the :lighting of certain things that move? So you would end up with things that move, and things that don't and most other probes in the lighting system would be unmoving. (And perhaps the moving probes could use some of the unmoving information, and the unmoving could could gradually sample from the moving.)]
[1:50:16][@xxthebigfoxx][Q: When and how often do we plan to compute the light probes?][:lighting]
[1:51:33][@lspaceyl][Q: How are square roots computed and how fast are they?[ref
    site=Intel
    page="Intel Intrinsics Guide"
    url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]][:performance]
[2:00:16][@npcxx][Q: Is CRT dependency a Visual Studio feature only or do other compilers such as GCC and Clang have it too? Also, does the dependency include C++ or just C?][:language]
[2:02:28][@krystcich][Q: I didn't really see this pop up before, so: Do you think using Direct2D for a 2D game is a good idea if I want to implement it from scratch or would you rather use DX11/12 today?][:api]
[2:03:03][@xxthebigfoxx][Q: You probably went over this last week, but how do you plan to make this faster than what we had before then?][:lighting :optimisation :sampling]
[2:03:53][@xdunex][Q: Hey, I love the trick with the hot loading but having a hard time grasping the general idea. Could you make a kind of generic overlooking explanation, and would it work with a 3rd party library like SFMl?][:"hot reloading"]
[2:06:05][Targeting DX11, rather than DX12][:api :speech]
[2:09:37][@nickito97][Q: Do you have an opinion on C callbacks and void* userdata? Do you know any alternatives? Do you have an opinion on GCC's "nested functions"?][:language]
[2:10:15][@lspaceyl][Q: I'm pretty early on in the stream, like 028, and the sound on my machine was scratchy. Do you end up making it use a separate thread to help clean it up, or did DirectSound get replaced?][:api :audio :threading]
[2:12:39][@xdunex][Q: About hot loading game code, is it a common thing between game programmers?][:"hot reloading"]
[2:13:49][@schw00][Q: Hey, I'm way behind on Day 027, and for some reason StretchDIBits() has started failing after changing resolution to 960x540. I reverted to 1280x720 and now it still fails... Any quick ideas?]
[2:14:28][@nickito97][Q: Would you recommend any free Windows debuggers?[ref
    site=RemedyBG
    url=https://remedybg.itch.io/remedybg]]
[2:17:30][@nickito97][Q: Have you ever used Telemetry debugger?]
[2:17:56][@s0imn][Q: When I look for ways of looking up the position of objects in a game, e.g. for raycasting, some sort of graph or tree is always presented as essential. Are there other ways of doing such lookups efficiently? It seems like an array sorted by the distance from the origin, and doing lookups in ranges]
[2:19:45][@x13pixels][Data breakpoints just got finished up today]
[2:20:32][@lspaceyl][Q: How do you run the .bat compile code on other platforms?]
[2:20:48][@ivereadthesequel][@handmade_hero The other thing you can do in VS is have your debugger not work properly]
[2:21:07][@zrizi][Q: About mip map generation, I was wondering why you decided to compute on CPU and not GPU. In addition, why did you decide to go with a simple box filter and not something smoother like a tent filter?][:rendering]
[2:23:06][Wrap it up][:speech]
[/video]
