diff --git a/cmuratori/hero/code/code414.hmml b/cmuratori/hero/code/code414.hmml new file mode 100644 index 0000000..37aee00 --- /dev/null +++ b/cmuratori/hero/code/code414.hmml @@ -0,0 +1,95 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Improving Light Distribution" vod_platform=youtube id=tKi-DkS0YVo annotator=Miblo] +[0:06][Recap and set the stage for the day][:speech] +[0:30][Plug the SendOwl-powered contribution page[ref + site="Handmade Hero" + page="Handmade Community Recurring Contributions" + url=https://handmadehero.org/patreon.html]][:admin] +[7:44][:Run the game to see our current :lighting solution][:"debug visualisation" :rendering] +[11:25][Read through ComputeLightPropagation()][:lighting :rendering :research] +[15:37][Bouncing light between emitters and reflectors][:blackboard :lighting :rendering] +[18:03][Try to make ComputeLightPropagation() reduce the ray count per iteration][:lighting :rendering] +[18:54][:Run the game to see how that looks][:lighting :rendering] +[22:54][Try to increase the voxel resolution][:lighting :rendering] +[23:30][:Run the game to see much smoother :lighting][:rendering] +[24:23][Make RayCast() tint the scene grey][:lighting :rendering] +[24:54][:Run the game to see how that looks with the skylight][:lighting :rendering] +[25:48][:Lighting Improvement][:blackboard :rendering] +[29:22][Check out Ward's 'Irradiance Caching Algorithm'[ref + author="Gregory J. Ward" + title="Irradiance Caching Algorithm" + url=http://cgg.mff.cuni.cz/~jaroslav/papers/2008-irradiance_caching_class/03-greg-ic.pdf]][:lighting :rendering :research] +[31:36][Irradiance cache][:blackboard :lighting :rendering] +[33:21][Photon tracing][:blackboard :lighting :rendering] +[34:07][Replace the notion of next emission weight from ComputeLightPropagation() with an ever-decreasing accumulation of colour per ray cast iteration][:lighting :rendering] +[35:46][:Run the game to see that the light looks a little more correct][:lighting :rendering] +[36:16][Prevent RayCast() from producing ambient light][:lighting :rendering] +[36:36][:Run the game to check out the :lighting solution without the ambient light][:rendering] +[37:06][Remove NextEmitW from lighting_element][:lighting :rendering] +[37:39][:Run the game to see the straight photon distribution][:lighting :rendering] +[39:36][Consider how to record the photon distribution][:lighting :rendering] +[40:24][Try to make ComputeLightPropagation() accumulate the emittance colour][:lighting :rendering] +[42:17][:Run the game to see the scene getting brighter with each iteration][:lighting :rendering] +[45:46][Try toggling off the hero in AddPlayer()][:"entity system" :rendering] +[46:19][:Run the game to see the :lighting solution without the hero obscuring great swathes of it][:rendering] +[47:10][Try to prevent GatherFinalLighting() from accumulating light but just use the emitter colour and destination normal directly][:lighting :rendering] +[48:46][:Run the game to see the :lighting solution without the final gather][:rendering] +[50:00][Try to make ComputeLightPropagation() modify the AverageDirectionToLight by its power][:lighting :rendering] +[53:02][:Run the game to see how that looks, and consider improving the voxel scheme, hemisphere sampling and sprite cards][:lighting :rendering] +[56:37][Enable ComputeLightPropagation() to apply skylight contribution specially][:lighting :rendering] +[1:02:46][:Run the game with our skylight in place][:lighting :rendering] +[1:05:09][Make ExtractReflectorsFromQuads() clear the IncidentLight and AverageDirectionToLight][:lighting :rendering] +[1:06:38][:Run the game to see the more correct :lighting solution][:rendering] +[1:07:31][Check out CodeItNow's 'Better Sampling' article[ref + site=CodeItNow + page="Better Sampling" + url=http://www.rorydriscoll.com/2009/01/07/better-sampling/]][:lighting :rendering :research] +[1:12:31][Make SampleHemisphere() merely flip the result if the randomly chosen sample is in the reverse hemisphere][:lighting :rendering] +[1:14:34][:Run the game to see how that looks][:lighting :rendering] +[1:15:35][Consider adding a Sun-style light to ComputeLightPropagation()][:lighting :rendering] +[1:16:58][Install ColorCop[ref + site=ColorCop + url=http://colorcop.net/]][:admin] +[1:18:49][Introduce the notion of a Sun-style light in ComputeLightPropagation()][:lighting :rendering] +[1:23:15][:Run the game to see our sunlit scene][:lighting :rendering] +[1:24:25][Make ComputeLightPropagation() create a more powerful sun, and sample its direction][:lighting :rendering] +[1:29:37][:Run the game to see how that looks][:lighting :rendering] +[1:29:57][Prevent ComputeLightPropagation() from bundling the sky color into the sun color][:lighting :rendering] +[1:30:29][:Run the game to see this more directional sun][:lighting :rendering] +[1:31:59][Introduce AccumulateSample() for ComputeLightPropagation() to call][:lighting :rendering] +[1:37:23][:Run the game to see no change][:lighting :rendering] +[1:37:54][Temporarily try to get rid of the sunlight][:lighting :rendering] +[1:38:10][:Run the game without the sunlight][:lighting :rendering] +[1:38:39][Replace IncidentLight from lighting_element with the Hadamard product of EmitC][:lighting :rendering] +[1:41:01][:Run the game to see how that looks][:lighting :rendering] +[1:41:27][Toggle off most of ComputeLightPropagation()][:lighting :rendering] +[1:41:56][:Run the game to see no light][:lighting :rendering] +[1:42:03][Reenable UpdateAndRenderWorld() to call PushLight()][:lighting :rendering] +[1:42:17][:Run the game to see the current :lighting solution][:rendering] +[1:42:51][Glimpse into the future][:speech] +[1:43:20][Q&A][:speech] +[1:43:43][@praet_a51][Q: Why is there a dark horizontal band on the Red / Blue voxels (approximately at the height of bottom of the push light box)? Note: Possibly fixed at the end of stream render] +[1:45:23][Try to decrease the voxel resolution][:lighting :rendering] +[1:45:36][:Run the game to see that our :lighting samples are now too isolated][:rendering] +[1:46:58][@ataradov][Q: Is there a good tutorial for using (modern) OpenGL in CAD-like applications, where you need to draw many sharp and precise lines and filled planes, mostly in 2D?[ref + author="Nicolas P. Rougier" + title="Antialiased 2D Grid, Marker, and Arrow Shaders" + url=http://jcgt.org/published/0003/04/01/paper.pdf]] +[1:49:14][@onanymous][Q: Has anyone tried to give you an actual 3D model of a cartoon spruce by now?] +[1:49:25][@inked_in_java][Q: I remember you mentioning you didn't go to college... how did you learn C?][:language] +[1:50:30][@pytzy][Q: In how much time did you learn :"game development"?][quote 606] +[1:52:03][@sired22][Q: What's the most "oops, I may have deleted the database" thing you have seen?] +[1:53:01][@onanymous][Q: Does C++17 bring anything you like? Do your metaprograms output templates at all?][:language] +[1:54:57][@sneakybob_wot][Q: What's your favourite game from your youth? M.U.L.E. on the Atari 8-bit for me] +[1:55:44][@demiplume][Q: I'm looking for the best tools to begin learning coding / :"game design" from scratch. Is visual studio, in your opinion, a good start?] +[1:56:33][@quickshift_][Q: Did you have any input on JAI?][:language] +[1:58:24][@winter_squirrel][Q: Do you have any :language in mind to replace C++?] +[2:01:27][@printf_armin][Q: What is your experience with macOS, especially their “cocoa :API”?] +[2:01:31][@inked_in_java][Q: I see you switched to ~4coder from emacs. How do you like 4coder compared to emacs?] +[2:02:34][@onanymous][Q: Do you agree with those who say "source code is text" or do you think we should push for more structure awareness in editors and tools?] +[2:02:44][@quiensab3][Q: What will come next after we're done with :lighting?] +[2:03:05][@winter_squirrel][Q: Is there ever gonna be a handmade compiler?] +[2:03:29][Close this down with another plug of the SendOwl-powered contribution page[ref + site="Handmade Hero" + page="Handmade Community Recurring Contributions" + url=https://handmadehero.org/patreon.html]][:speech] +[/video]