diff --git a/cmuratori/hero/code/code560.hmml b/cmuratori/hero/code/code560.hmml new file mode 100644 index 0000000..5337a22 --- /dev/null +++ b/cmuratori/hero/code/code560.hmml @@ -0,0 +1,78 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Querying Irradiance Directly from Voxels" vod_platform=youtube id=3w_JPx14aS8 annotator=Miblo] +[0:01][We are working on :lighting][:speech] +[0:41][Plug Molly Rocket's Discord channel[ref + site=Discord + page=MollyRocket + url=https://discord.gg/mollyrocket] and the Watch Page[ref + site="Handmade Hero" + page="Watch" + url=https://handmadehero.org/watch] with best wishes to our friends in Japan near Typhoon Hagibis][:speech] +[2:39][Plug the upcoming [@naysayer88 Jon][ref + site=Twitch + page=Naysayer88 + url=https://twitch.tv/naysayer88] & [@cmuratori Casey][ref + site=Twitch + page=cmuratori + url=https://twitch.tv/cmuratori] gaming stream][:speech] +[3:55][Experimentally getting the :lighting into the fragment shader, with thoughts on specialist vs generalist programming for GPUs][:speech] +[9:11][Reconstituting the inbound :lighting from our light probes, to light pixels][:speech] +[12:10][Contributing the light from only the three front faces][:lighting :speech] +[14:05][On the need to trilinear blend multiple light probes][:lighting :speech] +[16:56][Using a 3D texture voxel representation of the :lighting, to simplify things for the GPU][:speech] +[19:57][Switch CompileZBiasProgram() over to represent the light probes as a 3D 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] +[32:32][Hit an OpenGL shader error][:lighting :run] +[33:09][Fix typo in CompileZBiasProgram()][:lighting] +[34:05][See that everything is black][:lighting :run] +[34:57][Temporarily make CompileZBiasProgram() set the LightData to the WorldN][:lighting] +[35:14][See our colourful world][:lighting :run] +[36:03][Temporarily make CompileZBiasProgram() shift the light into the visible colour range][:lighting] +[37:14][See our fully colourful world][:lighting :run] +[38:15][Set up first to output voxels directly to the GPU, then send just the list of light probes][:lighting :speech] +[40:02][GPU Voxelization[ref + site="NVIDIA GameWorks" + page="The Basics of GPU Voxelization" + url=https://developer.nvidia.com/content/basics-gpu-voxelization]][:lighting :research] +[43:32][Dear NVIDIA, Why does GPU Voxelization require us to use an unordered access view?][:"data structure" :lighting] +[45:42][Set up to send our entire voxel grid at 2,800 MB / sec][:lighting :speech] +[47:23][Make CompileZBiasProgram() submit our six-faced light probes as 3D textures[ref + site="docs.GL" + page="glTexParameter" + url=http://docs.gl/gl3/glTexParameter][ref + site="Khronos" + page="glext.h" + url=https://www.khronos.org/registry/OpenGL/api/GL/glext.h]][:lighting] +[1:05:46][See a black screen with little seams][:lighting :run] +[1:06:11][Make EndLightingComputation() stuff red into the West face of our light probe voxels][:lighting] +[1:10:58][See our red world][:lighting :run] +[1:11:26][Test our spatial querying, by making EndLightingComputation() colour the voxels alternately red / blue][:lighting] +[1:12:04][See a fully blue world][:lighting :run] +[1:12:39][Augment zbias_program and render_setup with VoxelMinCorner and VoxelInvTotalDim for CompileZBiasProgram() to use][:lighting] +[1:19:04][Still see a fully blue world][:lighting :run] +[1:19:24][Introduce SetLightBounds() for UpdateAndRenderWorld() to call][:lighting] +[1:24:36][See our alternately red / blue world][:lighting :run] +[1:25:11][Make EndLightingComputation() stripe our lighting in all three dimensions][:lighting] +[1:26:52][Check out our tartan world][:lighting :run] +[1:27:19][Flip our stripes in EndLightingComputation() from RGBA to BGRA][:lighting] +[1:27:35][Check out our tartan world][:lighting :run] +[1:29:36][Check out our tartan world in release mode][:lighting :run] +[1:30:47][Nsight :rendering time: 22ms / frame][:run] +[1:31:29][Capture a frame to see that we may be CPU-bound][:rendering :run] +[1:32:45][Prevent EndLightingComputation() from striping the world][:lighting] +[1:33:00][Nsight :rendering time: 22ms / frame][:run] +[1:33:43][Q&A][:speech] +[1:35:31][@dithinas][Q: In the pre-stream when you were talking about creating command buffers in your theoretical graphics :API, would this be like a buffer you would dynamically assemble GPU machine code into, or is this something that the driver would need to translate for you to the GPU machine code?] +[1:37:29][@derpzerker][Q: Isn't SPIR-V the thing you are talking about?][:language] +[1:39:16][@fableprotector][Unrelated Q: How would a highlight shader work, e.g. if you want to select a sprite you'd want to color the edges of a sprite in some color? Is this done via the stencil buffer?] +[1:41:54][@Brian][Q: What happened with the profiler? Just before you ended the stream, you mentioned you want to re-enable the profiler (I assume it's the [~hero Handmade Hero] one). Was it disabled, or just not tracking for this part of the code?][:"debug system"] +[1:43:13][@Brian][Q: Have fun gaming with [@naysayer88 Jon]] +[1:43:18][Thank you everyone, with a plug of the [@naysayer88 Jon][ref + site=Twitch + page=Naysayer88 + url=https://twitch.tv/naysayer88] & [@cmuratori Casey][ref + site=Twitch + page=cmuratori + url=https://twitch.tv/cmuratori] gaming stream][:speech] +[/video]