From 3744a6f14e054cdf030e4d8780439b1925d36d54 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Mon, 2 Dec 2019 19:49:53 +0000 Subject: [PATCH] Index hero/code569 --- cmuratori/hero/code/code569.hmml | 96 ++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 cmuratori/hero/code/code569.hmml diff --git a/cmuratori/hero/code/code569.hmml b/cmuratori/hero/code/code569.hmml new file mode 100644 index 0000000..379a110 --- /dev/null +++ b/cmuratori/hero/code/code569.hmml @@ -0,0 +1,96 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Raycasting from Light Probe Locations" vod_platform=youtube id=rE3RPBA7UvI annotator=Miblo] +[0:02][Recap and set the stage for the day][:speech] +[0:44][Demo the current state of our test ray casting from voxel centres, with the determination to cast rays from light probe locations][:lighting :run] +[4:28][Prepare to switch over to raycasting from light probe locations][:lighting :research] +[7:32][Introduce Frumbledygok() to contain the voxel-centre casting code from EndLightingComputation()][:lighting] +[8:47][Begin to develop the light probe-based ray casting][:lighting] +[11:33][A few words on programmable light falloff vs real life inverse-square falloff][:lighting :speech] +[14:07][Continue to develop the light probe-based ray casting, introducing TestCastFromProbes()][:lighting] +[20:58][Introduce GetVoxelIndex() to find which voxel a point in world space corresponds to][:lighting] +[25:38][Introduce GetVoxelCenterP()][:lighting] +[27:34][Make TestCastFromProbes() call our new GetVoxelIndex() and GetVoxelCenterP()][:lighting] +[29:28][Check out our initial light probe-based ray cast :lighting][:run] +[30:46][Toggle on IsTestCast in TestCastFromProbes()][:"debug visualisation" :lighting] +[31:37][See unexpected rays][:"debug visualisation" :run] +[32:16][Disable :lighting in CompileZBiasProgram()] +[32:28][Check out our rays in a shadowless world][:"debug visualisation" :lighting :run] +[33:00][Fix the HitP computation in TestCastFromProbes()][:lighting] +[33:36][Check out our correct rays in a shadowless world][:"debug visualisation" :lighting :run] +[34:44][Consider working on our voxel fill][:lighting :research] +[36:50][Introduce PushDebugBox() for RayCast() to call][:"debug visualisation" :lighting] +[39:00][Make TestCastFromProbes() draw the voxels hit by the rays][:"debug visualisation" :lighting] +[41:38][Check out our hit voxels, finding that we seem to overflow our DebugLines in lighting_solution][:"debug visualisation" :lighting :programming :run] +[43:19][The [@Molly puss] arrives][:speech] +[43:59][Hit our assertion in PushDebugLine() and investigate why][:"debug visualisation" :lighting :run] +[45:39][Increase the DebugLines array in lighting_solution from 4096 to 65536][:"data structure"] +[46:04][Check out our supposed 4096 lines][:"debug visualisation" :lighting :run] +[47:14][Step through TestCastFromProbes() to see multiple light probes set identically][:"debug visualisation" :lighting :run] +[48:45][Replace the SetLightProbePosition() call in UpdateAndRenderEntities() with a newly introduced PushLightProbe(), to prevent multiple light probes in the same location][:lighting] +[51:06][Check out our hit voxels][:"debug visualisation" :lighting :run] +[52:26][Shrink the voxel :"debug visualisation" in TestCastFromProbes()][:lighting] +[53:01][Check out our hit voxels, and determine to fill a swathe of nine voxels][:"debug visualisation" :lighting :run] +[54:35][@Molly][Meow] +[56:41][Introduce SpamVoxel() to flood our light computation into blocks of nine voxels, and a utility InLargeVoxel()][:lighting] +[1:03:17][Check out our flood filled voxels][:"debug visualisation" :lighting :run] +[1:03:37][Prevent CompileZBiasProgram() from disabling the :lighting] +[1:04:05][Check out our beautiful :lighting][:run] +[1:04:52][Make UpdateAndRenderEntities() position our light source nearer the ground][:lighting] +[1:05:20][Find that our light source still lights the area beyond a wall][:lighting :run] +[1:05:55][Disable :lighting in CompileZBiasProgram()] +[1:06:11][Note that our flood filling does not propagate through the wall at the starting location][:lighting :run] +[1:06:49][Prevent CompileZBiasProgram() from disabling the :lighting] +[1:07:14][Increase the radius of our test casting :"debug visualisation" in TestCastFromProbes()][:lighting] +[1:08:02][See our flood filling propagate through that wall at the starting location][:lighting :run] +[1:08:14][Only make TestCastFromProbes() perform the flood fill if our ray did not hit][:lighting] +[1:08:36][Find that we light slightly erroneously, because we aren't clearing voxels][:lighting :run] +[1:09:24][Decrease the radius of our test casting :"debug visualisation" in TestCastFromProbes()][:lighting] +[1:09:45][Make TestCastFromProbes() clear the voxels each frame][:lighting] +[1:11:02][Check out our :lighting][:run] +[1:11:45][Make UpdateAndRenderEntities() position our light source still nearer the ground][:lighting] +[1:12:33][Admire our fog-of-war :lighting][:run] +[1:12:49][Decrease the light falloff time (thus increasing our light radius) in SpamVoxel()][:lighting] +[1:13:12][Admire our more farsighted fog-of-war :lighting][:run] +[1:13:41][Disable IsTestCast in TestCastFromProbes()][:lighting] +[1:14:05][Admire our fog-of-war :lighting without voxel :"debug visualisation"][:run] +[1:15:04][Make UpdateAndRenderWorld() position the light source relative to GroundP][:lighting] +[1:15:34][Admire our more stable light, with the determination to handle blending and convection][:lighting :run] +[1:18:15][Q&A][:speech] +[1:19:22][@sahfortv][Q: Isn't there an hour left?] +[1:19:53][@sneakybob_wot][Q: would the :"particle system" you had (heads popping out) be affected by the shadows at the moment?] +[1:20:09][Check out the :lighting on the particles][:run] +[1:22:17][Disable Global_Lighting_ShowProbes][:lighting] +[1:22:25][Check out our cleanly lit world][:lighting :run] +[1:23:44][@vaualbus][Q: Can we enable light for the debug interface so we see the impact of the code?][:lighting :"debug system"] +[1:24:10][@tootac][Q: Are you procrastinating on doing gameplay code and inventing problems to solve? Last time I checked (\~3 months ago) you were saying you are about to start gameplay code in a couple of streams] +[1:24:56][Admire our :lighting][:run] +[1:25:39][@polijn][Just give the game code as an assignment to [@naysayer88 Jon]. Last I heard he had time to spare] +[1:25:54][@ankut][Q: Why are the debug lines a fixed sized buffer? Just 'cause it's throwaway code?][:memory] +[1:26:43][@dithinas][Q: Do you have any thoughts on the trade-offs of making your data structures directly serializable versus having intermediate serialize / deserialize steps, i.e. data structures containing pointers being converted to offsets or indices][:"data structure"] +[1:28:17][@0lpbm][Q: Are the bounces going to be computed also with the raytracer?][:lighting] +[1:29:19][Increase tCloseEnough in RayCast()][:lighting] +[1:29:42][Determine the tCloseEnough filtering to be garbage][:lighting :run] +[1:30:33][@vaualbus][Q: Can we add for a test a second bounce or it require more work?][:lighting] +[1:31:18][Temporarily make TestCastFromProbe() bounce our rays once][:lighting] +[1:34:50][Check out our hacked secondary bouncing of the ray cast :lighting][:run] +[1:36:16][Delete the secondary bounce code from TestCastFromProbe()][:lighting] +[1:36:43][Check we didn't screw anything up there][:lighting :run] +[1:37:04][@stevenlr][Q: Do you plan on adding details on how sprites are lit? Right now they are full dark when the light is behind it. Maybe normal maps or some subsurface transport? Although I guess bounces will help with that anyway][:lighting] +[1:37:45][@qiaoster][Q: It's my second year programming and it feels like there's endless stuff to catch up before I can be a competent games programmer. What might I do to help with that?] +[1:39:12][@vaualbus][Q: It should be SecCast not Cast?][:lighting] +[1:39:21][Reintroduce and fix the secondary bounce code in TestCastFromProbe()][:lighting] +[1:39:45][Check out our hacked secondary bouncing of the ray cast :lighting][:run] +[1:41:01][Make SpamVoxel() take the LightP and LightC for secondary bounces to compute specially, dimming the light][:lighting] +[1:43:42][Check out our dimmed secondary bouncing of the ray cast :lighting][:run] +[1:44:41][@nickito97][Q: How are you going to handle bouncing off of different materials?][:lighting] +[1:45:29][@timetravel1][Q: Which type of engine programming do you think the industry needs the most? Does it need more graphics programmers, or physics, or sound programmers for example?] +[1:47:43][@timetravel1][So the answer is "everything everywhere yes"] +[1:48:22][@iof_bastion][Q: Are engine programmers really as in-demand as you say? I see that most AAA games are releasing with hundreds of employees but only like 4–6 engine programmers] +[1:49:58][@qiaoster][Q: How much do game studios hire interns? Trying to find something for next year] +[1:50:44][@binarytoshokan][Q: Following with the theme, what would you define as the minimum requirements to be a good engine programmer?] +[1:53:57][@an0nymal][Q: Why aren't most studios willing to compensate appropriately in spite of the seemingly short supply of graphics programmers?] +[1:54:57][@centhusiast][Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming] +[1:55:24][@an0nymal][Q: Relative to other positions on the team that may not require as extensive knowledge] +[1:57:23][@centhusiast][Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming] +[1:58:17][@an0nymal][Q: Well, as a specific example, take Bethesda: They pay gameplay programmers 80–110k, but the graphics / engine programmer is 90–130k. Obviously, those numbers are from pay scale, glass door, etc, but most likely represent a decent sample size] +[2:01:28][Wrap it up][:speech] +[/video]