[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Tracking Light Proportional to Photons per Second" vod_platform=youtube id=pj242UOmouE annotator=Miblo]
[0:01][Recap and set the stage for the day continuing debugging the :lighting][:rendering :speech]
[3:23][:Lighting transport with fewer sample points than in nature, and the need to record light over time][:blackboard :rendering]
[8:11][Introducing 1. Formulation for stored light that means something][:blackboard :lighting :rendering]
[9:31][Introducing 2. Understanding of emission and extinguishing][:blackboard :lighting :rendering]
[12:43][Introducing 3. Difference between render colour and the emission][:blackboard :lighting :rendering]
[17:43][Unidirectional vs Bidirectional Transport][:blackboard :lighting :rendering]
[22:05][1. Formulation for stored light that means something][:blackboard :lighting :rendering]
[27:54][Photons / sec, with separate arrays for the emitters and collectors][:blackboard :lighting :rendering]
[32:14][Using photons / sec to update the collectors][:blackboard :lighting :rendering]
[39:02][2. Understanding of emission and extinguishing][:blackboard :lighting :rendering]
[39:52][3. Difference between render colour and the emission][:blackboard :lighting :rendering]
[40:20][Consider the sanity of this way of looking at the problem][:blackboard :lighting :rendering]
[42:52][Consider how to move ComputeLightPropagation() towards a scheme in which emitters emit light at a constant photons / sec rate][:lighting :rendering :research]
[48:33][Introduce the notion of photons / sec and AccumulatedWeight in lighting_solution for LightingTest() to use to average the light over time][:lighting :rendering]
[1:07:19][Simplify ComputeLightPropagation() and AccumulateSample(), enabling the latter to use our new notion of AccumulatedWeight][:lighting :rendering]
[1:14:19][Finish simplifying and enable ComputeLightPropagation() to use our new notion of photons / sec][:lighting :rendering]
[1:20:31][:Run the game to see some flickering][:lighting :rendering]
[1:21:31][Step through LightingTest() to inspect the :lighting Solution][:rendering :run]
[1:30:17][Try to fix the if(Valid) test in LightingTest() and make CompileZBiasProgram() clamp the surface reflectance][:hardware :lighting :rendering]
[1:34:18][Continue to step through LightingTest()][:lighting :rendering :run]
[1:35:10][Correctly fix the if(Valid) test in LightingTest()][:lighting :rendering]
[1:36:14][Continue to step through LightingTest()][:lighting :rendering :run]
[1:36:42][Fix the AccumulatedPPS computation in LightingTest()][:lighting :rendering]
[1:39:04][Continue to step through LightingTest()][:lighting :rendering :run]
[1:40:01][Darken the MoonColor in ComputeLightPropagation()][:lighting :rendering]
[1:40:29][:Run the game to see our current :lighting solution][:rendering]
[1:42:33][Try preventing OutputLightingTextures() from updating the AverageDirectionToLight][:lighting :rendering]
[1:43:15][:Run the game to observe the difference in just the emission values][:lighting :rendering]
[1:45:26][Try forcing LightingTest() to always accumulate the lighting from the previous frame and reduce the tUpdate][:lighting :rendering :research]
[1:46:45][:Run the game to barely see flicker][:lighting :rendering]
[1:47:41][Try increasing the RayCount in ComputeLightPropagation()][:lighting :rendering]
[1:47:55][:Run the game to see greatly reduced flicker][:lighting :rendering]
[1:48:33][Increase the MAX_LIGHT_EMISSION and reduce the RayCount][:lighting :rendering]
[1:52:40][@zilarrezko][Q: Is that... color banding I see? I hope that's just from being on-stream][:rendering]
[1:54:40][@jakkzera][Q: What do you think of game development frameworks like unity? Do you think an AAA game can be made using it?][:"game engine"]
[1:56:02][@bigmofo1][Q: Why can't sampling rays be evenly distributed to eliminate the flickering? Wouldn't it be fine with enough rays?][:lighting :rendering]
[1:56:18][Distribution of Rays][:blackboard :lighting :rendering]
[1:57:32][@azmreece][Q: I've been watching a fair bit of the backlog, and you seem to return values from functions via parameter pointers, even when you're not returning anything else (i.e. `void Func(int Arg, int *Return)` instead of `int Func(int Arg`)). Is there any particular reason behind this? I can imagine it maybe stops the API changing too much over time?]
[1:58:30][@longboolean][Q: Are there any light effects that you can think of where assuming bidirectional ray sampling would give janky results? Maybe subsurface scattering?][:lighting :rendering]
[2:00:13][@bigmofo1][Q: But if the rays are the same across frames, the flickering would only happen around moving objects? Would that be less offensive during gameplay?][:lighting :rendering]
[2:02:45][@vateferfout][Q: Would it be possible to cast cones instead of rays?][:lighting :rendering]
[2:04:01][@lkalinovcic][Q: Do you currently do any form of ambient occlusion?][:lighting :rendering]
[2:04:55][@gureitoro][Q: So you could use a blue noise-like source to select possible "cones" and shoot random rays inside each of these cones?][:lighting :rendering]
[2:05:23][@dragoonx6][Q: What do you think about buying an IP that is practically abandoned by the publisher / developer? For a game that has about 100 players online at maximum? This is an online game]
[2:05:34][@pileopoop][Q: How much does each new light in the scene reduce :performance?][:lighting :rendering]
[2:06:01][@gg_nate][Q: (Off-topic) Do you feel like you still have the same passion for this project as you did back when you first began, or do some days feel more like it's a chore?]
[2:07:14][@zilarrezko][Q: I'm sure it's been asked before, and maybe to some extent like reflections AAA games do this, but are ray casters / tracers really such a :performance hit that they aren't used on more complex set of geometry in games like Call of Dooters or just in general games with lots of geometry?][:lighting :rendering]
[2:10:38][@lkalinovcic][Q: Do you have any good sources for learning about making :lighting solutions?][:rendering]
[2:10:59][@vaualbus][Q: Our light is not getting, at least on the light propagation, more close to PBR schema? How would we implement fog in this system? Can we simulate different media through which the light propagates?][:lighting :rendering]