Further Attempts at Multisampled Depth Peeling ⚠ Click here to regain focus ⚠
?
?

Keyboard Navigation

Global Keys

W, A, P / S, D, N Jump to previous / next marker
z Toggle filter mode V Revert filter to original state

Menu toggling

q Quotes r References f Filter c Credits

Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Credits Menu

Enter Open URL (in new tab)
0:08Recap and set the stage for the day
0:08Recap and set the stage for the day
0:08Recap and set the stage for the day
1:28Run the game to show our custom multi-resolution resolve with and without multisampling, and describe the problem that multisampling introduces for our depth peeling scheme
1:28Run the game to show our custom multi-resolution resolve with and without multisampling, and describe the problem that multisampling introduces for our depth peeling scheme
1:28Run the game to show our custom multi-resolution resolve with and without multisampling, and describe the problem that multisampling introduces for our depth peeling scheme
10:05handmade_opengl.cpp: Read through CompileResolveMultisample(), and tweak it to specify GLSL version 1.50
10:05handmade_opengl.cpp: Read through CompileResolveMultisample(), and tweak it to specify GLSL version 1.50
10:05handmade_opengl.cpp: Read through CompileResolveMultisample(), and tweak it to specify GLSL version 1.50
10:56Run the game to see that it works with GLSL 1.50 specified
10:56Run the game to see that it works with GLSL 1.50 specified
10:56Run the game to see that it works with GLSL 1.50 specified
11:40Continue reading through CompileResolveMultisample()
11:40Continue reading through CompileResolveMultisample()
11:40Continue reading through CompileResolveMultisample()
12:40Show the offset bug with milton
12:40Show the offset bug with milton
12:40Show the offset bug with milton
14:12Blackboard: Multisample Resolve
14:12Blackboard: Multisample Resolve
14:12Blackboard: Multisample Resolve
24:07Blackboard: Picking a primitive's most distant sample from the camera
24:07Blackboard: Picking a primitive's most distant sample from the camera
24:07Blackboard: Picking a primitive's most distant sample from the camera
28:51handmade_opengl.cpp: Make CompileResolveMultisample() sample the colour from the most distant pixel of primitives
28:51handmade_opengl.cpp: Make CompileResolveMultisample() sample the colour from the most distant pixel of primitives
28:51handmade_opengl.cpp: Make CompileResolveMultisample() sample the colour from the most distant pixel of primitives
41:28Compile and run to see weird artifacts
41:28Compile and run to see weird artifacts
41:28Compile and run to see weird artifacts
42:05handmade_opengl.cpp: Read through CompileResolveMultisample() and make it correctly set the Depth
42:05handmade_opengl.cpp: Read through CompileResolveMultisample() and make it correctly set the Depth
42:05handmade_opengl.cpp: Read through CompileResolveMultisample() and make it correctly set the Depth
45:14Run the game to see that we're not getting smoothing along edges
45:14Run the game to see that we're not getting smoothing along edges
45:14Run the game to see that we're not getting smoothing along edges
45:42handmade_opengl.cpp: Increase the DepthThreshold in CompileResolveMultisample() and run the game to see the smoothing
45:42handmade_opengl.cpp: Increase the DepthThreshold in CompileResolveMultisample() and run the game to see the smoothing
45:42handmade_opengl.cpp: Increase the DepthThreshold in CompileResolveMultisample() and run the game to see the smoothing
46:34Consider always taking a particular depth sample for depth peeling purposes
46:34Consider always taking a particular depth sample for depth peeling purposes
46:34Consider always taking a particular depth sample for depth peeling purposes
49:00handmade_opengl.cpp: Revert the DepthThreshold, and rewrite CompileResolveMultisample() to only track the DepthMin
49:00handmade_opengl.cpp: Revert the DepthThreshold, and rewrite CompileResolveMultisample() to only track the DepthMin
49:00handmade_opengl.cpp: Revert the DepthThreshold, and rewrite CompileResolveMultisample() to only track the DepthMin
51:17Run the game to see artifacts at the primitive edges
51:17Run the game to see artifacts at the primitive edges
51:17Run the game to see artifacts at the primitive edges
51:48handmade_opengl.cpp: Introduce a centroid to set FragZ in a way that won't vary per sample in CompileResolveMultisample()
51:48handmade_opengl.cpp: Introduce a centroid to set FragZ in a way that won't vary per sample in CompileResolveMultisample()
51:48handmade_opengl.cpp: Introduce a centroid to set FragZ in a way that won't vary per sample in CompileResolveMultisample()
56:44Run the game to still see the artifacts
56:44Run the game to still see the artifacts
56:44Run the game to still see the artifacts
57:15handmade_opengl.cpp: Enable CompileResolveMultisample() to visualise the number of unique samples
57:15handmade_opengl.cpp: Enable CompileResolveMultisample() to visualise the number of unique samples
57:15handmade_opengl.cpp: Enable CompileResolveMultisample() to visualise the number of unique samples
1:05:57Run the game to see our debug visualisation
1:05:57Run the game to see our debug visualisation
1:05:57Run the game to see our debug visualisation
1:06:53handmade_opengl.cpp: Enable CompileResolveMultisample() to colourise our debug visualisation
1:06:53handmade_opengl.cpp: Enable CompileResolveMultisample() to colourise our debug visualisation
1:06:53handmade_opengl.cpp: Enable CompileResolveMultisample() to colourise our debug visualisation
1:07:49Run the game to see that we are getting two unique depth samples throughout the scene, and consider why
1:07:49Run the game to see that we are getting two unique depth samples throughout the scene, and consider why
1:07:49Run the game to see that we are getting two unique depth samples throughout the scene, and consider why
1:10:23handmade_opengl.cpp: Make CompileResolveMultisample() hard set the InputZ to 0.5
1:10:23handmade_opengl.cpp: Make CompileResolveMultisample() hard set the InputZ to 0.5
1:10:23handmade_opengl.cpp: Make CompileResolveMultisample() hard set the InputZ to 0.5
1:11:13Run the game to view our debug visualisation
1:11:13Run the game to view our debug visualisation
1:11:13Run the game to view our debug visualisation
1:12:17handmade.cpp and handmade_platform.h: And a MultisamplingDebug toggle to the debug system
1:12:17handmade.cpp and handmade_platform.h: And a MultisamplingDebug toggle to the debug system
1:12:17handmade.cpp and handmade_platform.h: And a MultisamplingDebug toggle to the debug system
1:19:16Run the game and toggle between the debug visualisation and regular view
1:19:16Run the game and toggle between the debug visualisation and regular view
1:19:16Run the game and toggle between the debug visualisation and regular view
1:20:08handmade_opengl.cpp: Make CompileResolveMultisample() correctly set the InputZ, run the game and inspect the MultisamplingDebug view
1:20:08handmade_opengl.cpp: Make CompileResolveMultisample() correctly set the InputZ, run the game and inspect the MultisamplingDebug view
1:20:08handmade_opengl.cpp: Make CompileResolveMultisample() correctly set the InputZ, run the game and inspect the MultisamplingDebug view
1:22:16Propose taking the background out of the equation
1:22:16Propose taking the background out of the equation
1:22:16Propose taking the background out of the equation
1:23:00handmade_opengl.cpp: Enable CompileResolveMultisample() to skip sampling the background
1:23:00handmade_opengl.cpp: Enable CompileResolveMultisample() to skip sampling the background
1:23:00handmade_opengl.cpp: Enable CompileResolveMultisample() to skip sampling the background
1:26:09Run the game to see that we don't get multisamples when there's only one primitive
1:26:09Run the game to see that we don't get multisamples when there's only one primitive
1:26:09Run the game to see that we don't get multisamples when there's only one primitive
1:26:53handmade_opengl.cpp: Prevent CompileResolveMultisample() from using the InputZ and run the game to see that everything has multisamples
1:26:53handmade_opengl.cpp: Prevent CompileResolveMultisample() from using the InputZ and run the game to see that everything has multisamples
1:26:53handmade_opengl.cpp: Prevent CompileResolveMultisample() from using the InputZ and run the game to see that everything has multisamples
1:32:36Inspect a screenshot to see that no blending occurs where there is only one depth value
1:32:36Inspect a screenshot to see that no blending occurs where there is only one depth value
1:32:36Inspect a screenshot to see that no blending occurs where there is only one depth value
1:33:12handmade_opengl.cpp: Make CompileResolveMultisample() compute the InvSampleCount from the full SampleCount
1:33:12handmade_opengl.cpp: Make CompileResolveMultisample() compute the InvSampleCount from the full SampleCount
1:33:12handmade_opengl.cpp: Make CompileResolveMultisample() compute the InvSampleCount from the full SampleCount
1:34:48Run the game to see that it now computes the correct colour, but does not sum up properly, and consider why
1:34:48Run the game to see that it now computes the correct colour, but does not sum up properly, and consider why
1:34:48Run the game to see that it now computes the correct colour, but does not sum up properly, and consider why
1:36:40Note that premultiplied alpha and gamma correction don't work well together
1:36:40Note that premultiplied alpha and gamma correction don't work well together
1:36:40Note that premultiplied alpha and gamma correction don't work well together
1:38:23handmade_opengl.cpp: Try to make CompileResolveMultisample() un-premultiply alpha and then reintroduce the alpha after producing the average colour value
1:38:23handmade_opengl.cpp: Try to make CompileResolveMultisample() un-premultiply alpha and then reintroduce the alpha after producing the average colour value
1:38:23handmade_opengl.cpp: Try to make CompileResolveMultisample() un-premultiply alpha and then reintroduce the alpha after producing the average colour value
1:39:51win32_handmade.cpp: Switch back to 1280x720 and run the game
1:39:51win32_handmade.cpp: Switch back to 1280x720 and run the game
1:39:51win32_handmade.cpp: Switch back to 1280x720 and run the game
1:41:29Consider two things: It'd be nice to fix the unique sample picking, but there still may be issues with multiple depth peels across the scene
1:41:29Consider two things: It'd be nice to fix the unique sample picking, but there still may be issues with multiple depth peels across the scene
1:41:29Consider two things: It'd be nice to fix the unique sample picking, but there still may be issues with multiple depth peels across the scene
1:43:15handmade_platform.h and win32_handmade.cpp: Use 2x oversampling, run the game and inspect a screenshot
1:43:15handmade_platform.h and win32_handmade.cpp: Use 2x oversampling, run the game and inspect a screenshot
1:43:15handmade_platform.h and win32_handmade.cpp: Use 2x oversampling, run the game and inspect a screenshot
1:46:46handmade_opengl.cpp: Consider enabling OpenGLRenderCommands() to correctly perform oversampling
1:46:46handmade_opengl.cpp: Consider enabling OpenGLRenderCommands() to correctly perform oversampling
1:46:46handmade_opengl.cpp: Consider enabling OpenGLRenderCommands() to correctly perform oversampling
1:48:23win32_handmade.cpp: Switch to 1920x1080, run the game and consider downsampling that to a much lower resolution on our card
1:48:23win32_handmade.cpp: Switch to 1920x1080, run the game and consider downsampling that to a much lower resolution on our card
1:48:23win32_handmade.cpp: Switch to 1920x1080, run the game and consider downsampling that to a much lower resolution on our card
1:49:22Consider getting the depth peel buffers to work in multisampling mode
1:49:22Consider getting the depth peel buffers to work in multisampling mode
1:49:22Consider getting the depth peel buffers to work in multisampling mode
1:50:19Q&A
1:50:19Q&A
1:50:19Q&A
1:51:43dmitsuki I can't compile the code, it's saying "Requires extension support: sampler2DMS (GL_ARB_texture_multisample)". But not having support for this makes no sense because I have an R9 390, which is a newer AMD card than you
1:51:43dmitsuki I can't compile the code, it's saying "Requires extension support: sampler2DMS (GL_ARB_texture_multisample)". But not having support for this makes no sense because I have an R9 390, which is a newer AMD card than you
1:51:43dmitsuki I can't compile the code, it's saying "Requires extension support: sampler2DMS (GL_ARB_texture_multisample)". But not having support for this makes no sense because I have an R9 390, which is a newer AMD card than you
1:52:30fr0styninja Haven't really followed along with how you've implemented peeling but what if you separate out 3D objects and run them through a different shader that doesn't do peeling?
1:52:30fr0styninja Haven't really followed along with how you've implemented peeling but what if you separate out 3D objects and run them through a different shader that doesn't do peeling?
1:52:30fr0styninja Haven't really followed along with how you've implemented peeling but what if you separate out 3D objects and run them through a different shader that doesn't do peeling?
1:52:51pragmascrypt Would doing a depth pre-pass without multisampling help?
1:52:51pragmascrypt Would doing a depth pre-pass without multisampling help?
1:52:51pragmascrypt Would doing a depth pre-pass without multisampling help?
1:53:29flyingsolomon What do you think about ffmpeg and its likes? In your opinion is there a better way to implement a video-oriented program (with multiple codec support) without going nuts?
1:53:29flyingsolomon What do you think about ffmpeg and its likes? In your opinion is there a better way to implement a video-oriented program (with multiple codec support) without going nuts?
1:53:29flyingsolomon What do you think about ffmpeg and its likes? In your opinion is there a better way to implement a video-oriented program (with multiple codec support) without going nuts?
1:53:50cubercaleb If you want the same depth for each multi-sample, couldn't you write the depth as a separate vertex shader output with centroid interpolation?
1:53:50cubercaleb If you want the same depth for each multi-sample, couldn't you write the depth as a separate vertex shader output with centroid interpolation?
1:53:50cubercaleb If you want the same depth for each multi-sample, couldn't you write the depth as a separate vertex shader output with centroid interpolation?
1:55:15Run the game to show how the centroid sampling works great, but that at the seam between triangles we do get multiple samples
1:55:15Run the game to show how the centroid sampling works great, but that at the seam between triangles we do get multiple samples
1:55:15Run the game to show how the centroid sampling works great, but that at the seam between triangles we do get multiple samples
1:56:22dmitsuki It works! Is that version defining what version of OpenGL that's going to be used? Which version is 150?
1:56:22dmitsuki It works! Is that version defining what version of OpenGL that's going to be used? Which version is 150?
1:56:22dmitsuki It works! Is that version defining what version of OpenGL that's going to be used? Which version is 150?
1:57:36serge_rgb Hey Casey. Sorry about the cursor bug! Could you try creating a new canvas to see if it still happens? I missed the start of the stream but people told me that it only happens with wacom input. Is that true?
1:57:36serge_rgb Hey Casey. Sorry about the cursor bug! Could you try creating a new canvas to see if it still happens? I missed the start of the stream but people told me that it only happens with wacom input. Is that true?
1:57:36serge_rgb Hey Casey. Sorry about the cursor bug! Could you try creating a new canvas to see if it still happens? I missed the start of the stream but people told me that it only happens with wacom input. Is that true?
1:58:04Blackboard: Show the offset input with the wacom tablet
1:58:04Blackboard: Show the offset input with the wacom tablet
1:58:04Blackboard: Show the offset input with the wacom tablet
2:02:39Kknewkles Hi Casey! Do you have a few more good scientific-programmy papers to get me started on a good habit of reading long stuff for coding? I do remember those from "Papers I Loved" and the rasterization bridge one. Maybe there are some lighter reads for to begin on this road?1
2:02:39Kknewkles Hi Casey! Do you have a few more good scientific-programmy papers to get me started on a good habit of reading long stuff for coding? I do remember those from "Papers I Loved" and the rasterization bridge one. Maybe there are some lighter reads for to begin on this road?1
2:02:39Kknewkles Hi Casey! Do you have a few more good scientific-programmy papers to get me started on a good habit of reading long stuff for coding? I do remember those from "Papers I Loved" and the rasterization bridge one. Maybe there are some lighter reads for to begin on this road?1
2:08:07fr0styninja How's 1935 coming along? Long time no news
2:08:07fr0styninja How's 1935 coming along? Long time no news
2:08:07fr0styninja How's 1935 coming along? Long time no news
2:08:54flyingsolomon If thread behavior is considered to be completely random, can we leverage it to our random number generator?2
2:08:54flyingsolomon If thread behavior is considered to be completely random, can we leverage it to our random number generator?2
2:08:54flyingsolomon If thread behavior is considered to be completely random, can we leverage it to our random number generator?2
2:11:32cubercaleb Isn't PCG less favorable than something like Xorshift for games because the stepping function can't be SSE optimized?3
2:11:32cubercaleb Isn't PCG less favorable than something like Xorshift for games because the stepping function can't be SSE optimized?3
2:11:32cubercaleb Isn't PCG less favorable than something like Xorshift for games because the stepping function can't be SSE optimized?3
2:17:13rooctag How come there are different Z values on the diagonal on the same sprite? Is it an epsilon issue, or did I miss something?
2:17:13rooctag How come there are different Z values on the diagonal on the same sprite? Is it an epsilon issue, or did I miss something?
2:17:13rooctag How come there are different Z values on the diagonal on the same sprite? Is it an epsilon issue, or did I miss something?
2:19:59Wrap it up
2:19:59Wrap it up
2:19:59Wrap it up