[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Encoding Light Values" vod_platform=youtube id=g3VG1H-CBGU annotator=Miblo] [0:03][Address Patreon's proposed fee change of December 2017[ref site=Patreon page="Patreon Implosion" url=https://www.patreon.com/posts/patreon-15786847]][:speech] [2:31][Plug the Annotated Episode Guide,[ref site="Handmade Hero" page="Annotated Episode Guide" url=https://hero.handmade.network/episode/code] Handmade Network[ref site="Handmade Network" url=https://hero.handmade.network/] - began by @abnercoimbre, @ChronalDragon and @Kelimion - @mr4thdimension's ~4coder and @serge_rgb's ~milton][:speech] [5:12][Continue to address Patreon's fee change[ref site=Patreon page="Patreon Implosion" url=https://www.patreon.com/posts/patreon-15786847]][:speech] [17:47][Mention the chair, a SPACE Seating Professional AirGrid Dark Back and Padded Black Eco Leather Seat…[ref site=Amazon page="SPACE Seating Professional AirGrid Dark Back and Padded Black Eco Leather Seat, 2-to-1 Synchro Tilt Control, Adjustable Arms and Tilt Tension with Nylon Base Managers Chair" url=https://www.amazon.com/Seating-Professional-AirGrid-Adjustable-Managers/dp/B000PWGZOI]][:trivia] [21:14][Segue out of the preamble][:speech] [22:08][:Run the game to see our current :lighting solution][:rendering] [26:16][Make CompileZBiasProgram() clamp the DirFalloff][:hardware :lighting :rendering] [28:07][:Run the game to see dramatically different :lighting results][:rendering] [29:14][Prevent RayCast() from tinting the light grey][:lighting :rendering] [29:51][:Run the game and consider that the ray caster is wrong][:lighting :rendering] [31:11][TODO(casey): Need a skylight method that works with our propagation] [32:37][Mention the office espresso machine][:trivia] [34:01][Read through RayCast()][:lighting :rendering :research] [35:50][Wax lyrical on ~milton and its creator @serge_rgb][:speech] [36:33][Raycast Debugging][:blackboard :lighting :rendering] [43:43][Explain RayCast() complete with :blackboard illustrations][:lighting :rendering] [54:09][Consider what may be going wrong in RayCast()][:lighting :rendering :research] [56:22][How GatherFinalLighting() may be incorrectly generating uniform samples without a hemisphere][:blackboard :lighting :rendering] [59:20][:Run the game to see light sailing out of the back of geometry] [1:00:00][Introduce SampleHemisphere()][:lighting :rendering] [1:01:32][:Run the game to see the same :lighting results][:rendering] [1:02:04][Consider how to improve SampleHemisphere(), preventing the back-face problem][:blackboard :lighting :rendering] [1:06:27][Halve the range of normals that SampleHemisphere() will produce][:lighting :rendering] [1:06:47][:Run the game to see light still emanating from back faces][:lighting :rendering] [1:08:18][Increase light intensity][:lighting :rendering] [1:09:10][:Run the game to see that we must be capping the maximum light brightness][:lighting :rendering] [1:11:07][Consider how better to encode the :lighting][:lighting :rendering] [1:13:42][Introduce the notion of LightPower in OutputLightingTextures()][:lighting :rendering] [1:16:39][Enable CompileZBiasProgram() to handle LightPower][:hardware :lighting :rendering] [1:18:14][:Run the game to see that we didn't do that correctly][:lighting :rendering] [1:18:50][Make OutputLightingTextures() use the Element to compute the LightColor][:lighting :rendering] [1:19:26][:Run the game to see our much more powerful light and the back-face leakage][:lighting :rendering] [1:22:52][Assert in SampleHemisphere() that we never sample from behind the hemisphere][:lighting :rendering] [1:23:18][:Run the game and do not hit that assertion] [1:23:23][Enable OutputTextureDebug() to correctly interpret the :lighting alpha values][:"debug visualisation" :rendering] [1:25:28][:Run the game to see that our :lighting samples are heavily red][:lighting :rendering] [1:26:19][Increase the voxel resolution][:lighting :rendering] [1:26:43][:Run the game to see different artifacts][:lighting :rendering] [1:27:40][Temporarily try to make RayCast() collide against back faces][:lighting :rendering] [1:28:11][:Run the game to see different light leakage][:lighting :rendering] [1:30:22][Toggle OutputLighting() over to OutputLightingQuads()][:"debug visualisation" :lighting :rendering] [1:30:57][:Run the game to see the lit quads, noting that we have a double-counting problem][:"debug visualisation" :lighting :rendering] [1:32:41][Add LightingDisabled to game_render_settings and enable CompileZBiasProgram() to honour this setting][:"debug visualisation" :hardware :lighting :rendering] [1:35:17][Add a LightingDisabled switch to GameUpdateAndRender()][:"debug visualisation" :"debug system"] [1:35:50][:Run the game and unsuccessfully toggle LightingDisabled][:"debug visualisation" :lighting :rendering] [1:36:27][Introduce MemoryIsEqual()][:memory] [1:39:09][:Run the game and successfully toggle LightingDisabled][:"debug visualisation" :lighting :rendering] [1:40:08][Introduce DecodePower()][:lighting :rendering] [1:43:07][:Run the game and take a look at the :lighting][:"debug visualisation" :rendering] [1:43:45][Reduce the light power and :run the game to see hot :lighting][:"debug visualisation" :programming :rendering] [1:45:10][Consider enabling us to dynamically set the :Lighting Iteration Count][:rendering :speech] [1:46:34][:Run the game to confirm the presence of Iteration Count in the :"debug system" :ui] [1:47:35][Provide the ability to set the :Lighting Iteration Count dynamically][:"debug system" :rendering] [1:48:23][:Run the game and try increasing the :lighting iteration count][:"debug visualisation" :rendering] [1:50:56][Consider the future of :lighting][:rendering :speech] [1:52:00][Q&A][:speech] [1:52:40][@flyingsolomon][Q: Don't forget that you can now indent your shaders (if you updated ~4coder)] [1:53:21][@jojomunki][Q: Could the raycasting be bouncing off the bounds of the scene?][:lighting :rendering] [1:53:41][@dragoonx6][SpeedCrunch[ref site=SpeedCrunch url=http://www.speedcrunch.org/] for a great replacement of wincalc] [1:54:45][@deepbluev7][Q: Could Liberapay[ref site=Liberapay url=https://liberapay.com/about/] be a replacement for Patreon? It's nonprofit and payed for by donations to its own Liberapay account] [1:57:40][@ieee754][Q: Just hopped into the stream, are you working on a global illumination approach specific for 2.5D?[ref site="Unreal Engine" page="Enlighten: Real-Time Global Illumination in Unreal Engine 4" url=https://www.unrealengine.com/en-US/showcase/enlighten-real-time-global-illumination-in-unreal-engine-4]][:lighting :rendering] [2:00:54][@quickshift_][Q: I'm out of the loop. What's up with Patreon?[ref site="The Patreon Blog" page="We’re Updating Patreon’s Fee Structure. Here’s Why" url=https://blog.patreon.com/updating-patreons-fee-structure/]] [2:21:10][@deravadom][Q: I've been having a lot of trouble staying motivated / inspired for new projects. Do you have any tips on how to take an idea and actually bring it fully into existence?] [2:25:22][@printf_armin][Q: Did you get depends to work (the new version)] [2:25:35][@stav_5][I'm fairly new to the series (only on Day 013) do you recommend coding along with the series? I personally like to just watch and learn rather than copying everything you type, but I don't know] [2:26:37][@ieee754][Q: Have you considered applying for twitch partner? (I would subscribe)] [2:27:21][@dragoonx6][Q: Consider getting a bitcoin, litecoin, and ethereum wallet, it's an easy way for people to donate. It's hard to get your money out of it, though, but I think it could be worth it] [2:28:26][@kelimion][Blog post about Patreon onboarding[ref site="Brian Balfour" page="Inside the 6 Hypotheses that Doubled Patreon’s Activation Success" url=https://brianbalfour.com/essays/patreon-onboarding-growth]][:research] [2:33:43][][:speech][quote 605] [2:34:24][Continue to address the blog post[ref site="Brian Balfour" page="Inside the 6 Hypotheses that Doubled Patreon’s Activation Success" url=https://brianbalfour.com/essays/patreon-onboarding-growth]][:research] [2:41:13][@dragoonx6][Q: What do you think of git lfs, or any other git large asset plugins over centralized source control such as svn or perforce? I've been taking a look and for free (as in pay) solution I actually came to mercurial with its large asset plugin. What do you recommend?][:vcs] [2:45:02][Wrap it up][:speech] [/video]