[video output=day603 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Grid Raycaster Table Generation" vod_platform=youtube id=24VtonJ4Xj0 annotator=Miblo] [0:03][Welcome to the stream][:speech] [1:42][Set up to implement ComputeWalkTable()][:lighting :research] [3:33][Implement ComputeWalkTable()][:lighting] [7:24][Consider how to encode the dGrid in walk_table_entry, computing it at runtime][:lighting :research] [9:10][Augment the lighting_solution with a walk_table_entry][:"data structure" :lighting] [10:13][Make ComputeWalkTable() write to our dynamic lighting_solution][:lighting] [16:22][Make InitLighting() call ComputeWalkTable(), removing light_sampling_sphere_2][:"data structure" :lighting] [21:21][Desire a big, easy-to-clean glass bottle][:speech] [22:11][Augment lighting_solution with a memory_arena TableMemory and TableVoxelDim for BeginLightingComputation() to use][:lighting :memory] [29:29][Estimate the :memory requirements (393,216 rays' worth) and cycles available (509) for the ray casting][:admin :lighting :performance] [31:53][Define our LIGHT_SAMPLING values for FullCast() to use, and include handmade_simd.h and handmade_sampling_spheres.inl in handmade_lighting.cpp][:lighting] [42:18][Consider the pipeline to be running properly][:lighting :speech] [42:43][Break][:admin] [42:52][:afk] [45:13][Return][:admin] [45:27][@math_daemon_][Plot twist: [@cmuratori Casey] accidentally hit the switch and is still coding / talking] [45:50][@somebody_took_my_name][Can I get a recap of the first hour?] [45:54][Make OutputSphereINL() write out the new light_sample_direction struct and LIGHT_SAMPLING defines][:"data structure" :"file io" :lighting] [48:42][Reacquaint ourselves with GenerateOctahedralLightingPattern()][:lighting :research] [50:52][Make GenerateOctahedralLightingPattern() return the OutputDirections to be passed to OutputSphereINL()][:lighting] [54:57][Invoke hhsphere][:admin :lighting] [55:18][Respecify hhsphere to take as arguments and ][:lighting] [1:00:40][Invoke hhsphere][:admin :lighting] [1:00:51][Respecify hhsphere to take as an argument ][:lighting] [1:02:14][Invoke hhsphere][:admin :lighting] [1:03:02][@trolledwoods][[@naysayer88 Jonathan Blow] would like to know your address] [1:03:36][@somebody_took_my_name][Always send [@naysayer88 him] your address] [1:03:39][Send our address to [@naysayer88 Jon]][:admin] [1:05:34][@philoez98][They're trolling] [1:05:49][Inspect temp.inl][:admin :lighting] [1:06:17][Make OutputSphereINL() write out the RawDirections][:"file io" :lighting] [1:07:49][@pragmascrypt][Everyone is fired] [1:08:14][Invoke hhsphere][:admin :lighting] [1:08:43][Inspect temp.inl and copy it into place][:admin :lighting] [1:09:41][Fix compile errors][:lighting] [1:09:55][Fix OutputSphereINL() to insert the semicolon][:"file io" :lighting] [1:10:01][Make ProfileRun() initialise the TableMemory][:lighting :memory] [1:12:57][:Run hhlighprof and hit a read access violation in BuildSpatialPartitionForLighting()][:lighting] [1:13:53][Make BuildSpatialPartitionForLighting() allocate :memory for the SpatialGridNodes][:lighting] [1:15:07][:Run hhlighprof and hit a read access violation in ComputeVoxelIrradianceAt()][:lighting] [1:16:14][On indexing into similar but not identical overlapping sets of data][:language :speech] [1:19:46][Fix ComputeLightPropagationWork() to index in to the aproned voxel][:lighting] [1:22:41][:Run hhlighprof and hit the same read access violation in ComputeVoxelIrradianceAt()][:lighting] [1:24:44][Fix ComputeWalkTable() to set the tTerminate to a valid value][:lighting] [1:25:52][:Run hhlighprof and hit the same read access violation in ComputeVoxelIrradianceAt()][:lighting] [1:28:18][Make GridRayCast() initialise the ProbeSamplePSingle to the incoming RayOriginSingle][:lighting] [1:28:36][:Run hhlighprof and hit the same read access violation in ComputeVoxelIrradianceAt()][:lighting] [1:30:41][Consider the rounding subtraction in ComputeVoxelIrradianceAt()][:lighting :run] [1:32:06][Prevent ComputeVoxelIrradianceAt() from rounding down when setting the FCoord][:lighting] [1:32:27][:Run hhlighprof and hit the same read access violation in ComputeVoxelIrradianceAt()][:lighting] [1:33:19][Make GridRayCast() initialise the ProbeSampleNSingle to the incoming RayDSingle][:lighting] [1:33:49][:Run hhlightprof successfully][:lighting] [1:34:11][hhlightprof total seconds elapsed: 5.363018][:lighting :run] [1:35:46][Q&A][:speech] [1:36:14][@insobot][Q: Cathedral or bust?] [1:37:29][@somebody_took_my_name][Q: Can we try the game in the current state?] [1:37:55][:Run the game to see a black screen][:lighting] [1:38:25][@billdstrong][Q: Since this new pass is to speed up :performance, where do you foresee getting speedups after this pass?][:lighting] [1:39:30][@mindmark42][Q: Given two points, do you think there might be a way to calculate the number voxel cells a Bresenham-like line algorithm will touch? Without walking?] [1:39:58][@uplinkcoder][Q: Can you run hhlightprof?] [1:41:40][@erik_ava][Q: Has it ever happened that you put so much work in an idea and it turned out not working out?] [1:43:33][@billdstrong][Q: Could we generate all these tests we do for the :lighting at box creation?] [1:43:56][@mattiamanzati][Q: Since hhlightprof just runs RayCast(), maybe we put more work into building the occluder leaves than before?] [1:47:08][@sagian2005][Q: Glass milk bottles] [1:47:53][@thetamiel][Q: You've mentioned before at RAD you made a tool for detecting indexing errors. How would a tool like that work?] [1:50:33][@xsinxdx][@sagian2005 How old are you?] [1:51:39][@billdstrong][Q: Could we look for only the farthest box a Ray would hit, and eliminate testing all the boxes in between?][:lighting] [1:52:24][@infinum][Q: How has that 30 Million Lines Problem been going on? Have some hardware vendors contacted you about it or maybe said something?] [1:53:48][Wrap it up][:speech] [/video]