From 094df54d7131357de1292a8cfa7a32e26cf69d40 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Wed, 9 Oct 2019 00:33:13 +0100 Subject: [PATCH] Index hero/code559 --- cmuratori/hero/code/code559.hmml | 84 ++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 cmuratori/hero/code/code559.hmml diff --git a/cmuratori/hero/code/code559.hmml b/cmuratori/hero/code/code559.hmml new file mode 100644 index 0000000..82aa121 --- /dev/null +++ b/cmuratori/hero/code/code559.hmml @@ -0,0 +1,84 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Experimenting with Fragment Light Sampling" vod_platform=youtube id=21rMO0e8FXg annotator=Miblo] +[0:00][Plug Molly Rocket's Discord channel[ref + site=Discord + page=MollyRocket + url=https://discord.gg/mollyrocket] and note that the twitch player on the Watch Page[ref + site="Handmade Hero" + page="Watch" + url=https://handmadehero.org/watch] is broken][:speech] +[1:19][Recap and set the stage for the day, initially fixing a bug in assigning light probe indices][:"entity system" :lighting :speech] +[5:07][Hit our assertion in AssignIndices()][:"entity system" :lighting :run] +[9:45][Add a "conditional break point" in AssignIndices() and RemoveIndices() when the LightProbeIndex is 101][:"entity system" :lighting] +[11:59][Break in to AssignIndices() and RemoveIndices() for LightProbeIndex 101][:"entity system" :lighting :run] +[15:58][Scrutinise EnsureRegionIsUnpacked()][:"entity system" :lighting :research] +[16:59][Add an assertion in EnsureRegionIsUnpacked() that LightProbeIndex is 0][:"entity system" :lighting] +[17:13][Break in to AssignIndices() for LightProbeIndex 101, and fail to hit our new assertion in EnsureRegionIsUnpacked()][:"entity system" :lighting :run] +[18:34][Add an assertion in AcquireUnpackedEntitySlot() that LightProbeIndex is 0][:"entity system" :lighting] +[19:26][Break in to AssignIndices() for LightProbeIndex 101, and successfully hit our new assertion in AcquireUnpackedEntitySlot()][:"entity system" :lighting :run] +[20:39][Realise that we never clear the Entity data when removing from unpacked][:"entity system" :lighting :research] +[21:54][Fix EnsureRegionIsUnpacked() to clear stale data when unpacking entities][:"entity system"] +[22:52][Hit our assertion in AcquireUnpackedEntitySlot()][:"entity system" :lighting :run] +[23:12][Remove our assertion from AcquireUnpackedEntitySlot()][:"entity system" :lighting] +[23:29][We have solved that light probe index assigning bug][:"entity system" :lighting :run] +[23:49][Make UpdateAndRenderEntities() colour the light probes by their index][:"debug visualisation" :lighting] +[24:29][Our light probes remain stably indexed][:"entity system" :lighting :run] +[26:01][Storing light probe positions][:"entity system" :lighting :research] +[28:04][Augment game_render_commands with a LightProbePosition buffer, introducing SetLightProbePosition() for UpdateAndRenderEntities() to call][:"data structure" :"entity system" :lighting] +[32:30][Implement SetLightProbePosition()][:"entity system" :lighting] +[38:00][Wonder if we should treat light probes as points and directions, rather than cubes][:lighting :speech] +[38:38][Introduce light_probe_irradiance for game_render_commands and open_gl to contain][:"data structure" :lighting] +[40:11][Consider converting the light_probe_spatial_index to use our voxel][:"data structure" :lighting :research] +[41:13][Crash in SetLightProbePosition()][:lighting :run] +[41:30][Augment open_gl with a LightProbePosition array for OpenGLBeginFrame() to populate][:"data structure" :lighting] +[42:38][Our SetLightProbePosition() crash is fixed][:lighting :run] +[43:30][:Sampling light probes][:lighting :research] +[51:46][Enable :lighting in CompileZBiasProgram()][:sampling] +[53:20][Calculate our light probe bandwidth requirements (22 GB/sec)[ref + site=Wikipedia + page="List of Nvidia graphics processing units" + url=https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units]][:lighting :research :sampling] +[58:45][Note that we only need to sample one face of a light probe, requiring 3 GB/sec][:lighting :research :sampling] +[1:02:37][Consider :sampling our light probes as a 2D texture: light probe count × direction][:lighting :research] +[1:03:53][Consider :sampling our light probes as a cube map[ref + site="Khronos Wiki" + page="Cubemap Texture" + url=https://www.khronos.org/opengl/wiki/Cubemap_Texture][ref + site="Khronos Wiki" + page="Sampler (GLSL)" + url=https://www.khronos.org/opengl/wiki/Sampler_(GLSL)][ref + site="OpenGL Registry" + page="The OpenGL Shading Language 1.50 Quick Reference Card" + url=https://www.khronos.org/files/opengl-quick-reference-card.pdf]][:lighting :research] +[1:07:47][Make CompileZBiasProgram() sample the light probes as a 2D texture[ref + site="OpenGL Registry" + page="The OpenGL Shading Language 1.50 Quick Reference Card" + url=https://www.khronos.org/files/opengl-quick-reference-card.pdf]][:lighting :sampling] +[1:37:07][Consider instead :sampling our light probes as a cube map[ref + site="Khronos Wiki" + page="Cubemap Texture" + url=https://www.khronos.org/opengl/wiki/Cubemap_Texture][ref + site="OpenGL Hardware Database" + url=https://opengl.gpuinfo.org/]][:lighting :research] +[1:42:23][Begin to prepare CompileZBiasProgram() to sample our light probes as a cube map][:lighting :sampling] +[1:43:21][Continue to consider :sampling our light probes as a cube map[ref + site="Khronos Wiki" + page="Cubemap Texture" + url=https://www.khronos.org/opengl/wiki/Cubemap_Texture][ref + site="OpenGL Registry" + page="The OpenGL Shading Language 1.50 Quick Reference Card" + url=https://www.khronos.org/files/opengl-quick-reference-card.pdf][ref + site="OpenGL Registry" + page="The OpenGL Shading Language 4.40 Quick Reference Card" + url=https://www.khronos.org/files/opengl44-quick-reference-card.pdf]][:lighting :research] +[1:48:25][:Lighting Atlas][:blackboard :sampling] +[1:52:29][Blending the eight octants of a cube][:blackboard :lighting :sampling] +[1:57:15][Disable :lighting in CompileZBiasProgram()][:sampling] +[1:57:32][One last view of the game][:run] +[1:57:41][Q&A][:speech] +[1:58:13][@Longboolean][@cmuratori Would you want to do a debug ~Milton stream?] +[1:59:30][@derpzerker][Q: Does this still work on XP?][:"operating system"] +[2:01:01][@Nick12][Q: If you had to draw text in Arabic, Chinese, Korean, etc in a game, how would you do text shaping?][:font] +[2:02:12][@xxthebigfoxx][Q: Would it make sense to store the whole cube of voxels as six 3D textures, one for each direction, and then use hardware trilinear filtering?][:lighting :sampling] +[2:04:32][@4bitlightning][Q: Would you overestimate side F on the cube map?][:lighting :sampling] +[2:05:28][Wind it down][:speech] +[/video]