Wiring Up Light Transport
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Welcome to the stream
🗩
0:00Welcome to the stream
🗩
0:00Welcome to the stream
🗩
0:40Demo the current state of our blended and stably positioned light
🏃
0:40Demo the current state of our blended and stably positioned light
🏃
0:40Demo the current state of our blended and stably positioned light
🏃
2:52Set up to sample the voxel lighting like in the pixel shader
📖
2:52Set up to sample the voxel lighting like in the pixel shader
📖
2:52Set up to sample the voxel lighting like in the pixel shader
📖
4:10Begin to make ComputeVoxelIrradianceAt() sample the voxel lighting, and introduce GetIrradiance(), both based on the CompileZBiasProgram() pixel shader
4:10Begin to make ComputeVoxelIrradianceAt() sample the voxel lighting, and introduce GetIrradiance(), both based on the CompileZBiasProgram() pixel shader
4:10Begin to make ComputeVoxelIrradianceAt() sample the voxel lighting, and introduce GetIrradiance(), both based on the CompileZBiasProgram() pixel shader
6:23Make ComputeVoxelIrradianceAt() take an Incidence query parameter, considering angular specularity
6:23Make ComputeVoxelIrradianceAt() take an Incidence query parameter, considering angular specularity
6:23Make ComputeVoxelIrradianceAt() take an Incidence query parameter, considering angular specularity
8:50Set up ComputeVoxelIrradianceAt() to sample vector 3s
8:50Set up ComputeVoxelIrradianceAt() to sample vector 3s
8:50Set up ComputeVoxelIrradianceAt() to sample vector 3s
9:25Change GetIrradiance() to take a LightColor directly
9:25Change GetIrradiance() to take a LightColor directly
9:25Change GetIrradiance() to take a LightColor directly
10:11Fix compile errors
10:11Fix compile errors
10:11Fix compile errors
11:17Embark on reimplementing OpenGL's texture() function in ComputeVoxelIrradianceAt()
11:17Embark on reimplementing OpenGL's texture() function in ComputeVoxelIrradianceAt()
11:17Embark on reimplementing OpenGL's texture() function in ComputeVoxelIrradianceAt()
16:43Voxel Sample
🖌
16:43Voxel Sample
🖌
16:43Voxel Sample
🖌
19:04Make ComputeVoxelIrradianceAt() pick the correct voxels to sample from, introducing LookUpVoxelClamped()
19:04Make ComputeVoxelIrradianceAt() pick the correct voxels to sample from, introducing LookUpVoxelClamped()
19:04Make ComputeVoxelIrradianceAt() pick the correct voxels to sample from, introducing LookUpVoxelClamped()
22:55Make ComputeVoxelIrradianceAt() sample four light normals and colours from our light field, introducing TriLerp()
22:55Make ComputeVoxelIrradianceAt() sample four light normals and colours from our light field, introducing TriLerp()
22:55Make ComputeVoxelIrradianceAt() sample four light normals and colours from our light field, introducing TriLerp()
26:23Trilinear blending
🖌
26:23Trilinear blending
🖌
26:23Trilinear blending
🖌
27:00Implement TriLerp()
27:00Implement TriLerp()
27:00Implement TriLerp()
29:13Implement LookUpVoxelClamped()
29:13Implement LookUpVoxelClamped()
29:13Implement LookUpVoxelClamped()
31:36Fix compile errors
31:36Fix compile errors
31:36Fix compile errors
32:18Make ComputeLightPropagationWork() pass the SampleD to ComputeVoxelIrradianceAt(), and consider doing the latter in SIMD
32:18Make ComputeLightPropagationWork() pass the SampleD to ComputeVoxelIrradianceAt(), and consider doing the latter in SIMD
32:18Make ComputeLightPropagationWork() pass the SampleD to ComputeVoxelIrradianceAt(), and consider doing the latter in SIMD
34:28Switch EndLightingComputation() to call our real ComputeLightPropagation()
34:28Switch EndLightingComputation() to call our real ComputeLightPropagation()
34:28Switch EndLightingComputation() to call our real ComputeLightPropagation()
36:16Hit an access violation error in ComputeLightPropagation()
🏃
36:16Hit an access violation error in ComputeLightPropagation()
🏃
36:16Hit an access violation error in ComputeLightPropagation()
🏃
36:26Switch ComputeLightPropagation() to operate single-threaded
36:26Switch ComputeLightPropagation() to operate single-threaded
36:26Switch ComputeLightPropagation() to operate single-threaded
37:57Hit an access violation error in ComputeLightPropagation()
🏃
37:57Hit an access violation error in ComputeLightPropagation()
🏃
37:57Hit an access violation error in ComputeLightPropagation()
🏃
38:21Restrict ComputeLightPropagationWork() to sample the one closest light, using GetLightLeafForP()
38:21Restrict ComputeLightPropagationWork() to sample the one closest light, using GetLightLeafForP()
38:21Restrict ComputeLightPropagationWork() to sample the one closest light, using GetLightLeafForP()
39:21See black
🏃
39:21See black
🏃
39:21See black
🏃
39:47See black in release mode
🏃
39:47See black in release mode
🏃
39:47See black in release mode
🏃
40:00Begin to investigate our blackness
📖
40:00Begin to investigate our blackness
📖
40:00Begin to investigate our blackness
📖
41:44Step in to ComputeLightPropagationWork() and inspect the LightC
🏃
41:44Step in to ComputeLightPropagationWork() and inspect the LightC
🏃
41:44Step in to ComputeLightPropagationWork() and inspect the LightC
🏃
42:51Make EndLightingComputation() accumulate the lighting always
42:51Make EndLightingComputation() accumulate the lighting always
42:51Make EndLightingComputation() accumulate the lighting always
43:22See our crazily lit scene
🏃
43:22See our crazily lit scene
🏃
43:22See our crazily lit scene
🏃
44:00See our crazily and briefly lit scene in release mode
🏃
44:00See our crazily and briefly lit scene in release mode
🏃
44:00See our crazily and briefly lit scene in release mode
🏃
44:10Make ComputeLightPropagationWork() only perform moonlight transfer
44:10Make ComputeLightPropagationWork() only perform moonlight transfer
44:10Make ComputeLightPropagationWork() only perform moonlight transfer
45:11See bright ambient light
🏃
45:11See bright ambient light
🏃
45:11See bright ambient light
🏃
45:59Fix ComputeLightPropagationWork() to correctly weight the lighting
45:59Fix ComputeLightPropagationWork() to correctly weight the lighting
45:59Fix ComputeLightPropagationWork() to correctly weight the lighting
48:38See our ambient light darken
🏃
48:38See our ambient light darken
🏃
48:38See our ambient light darken
🏃
48:51Shift our MoonColor into the visible range in ComputeLightPropagationWork()
48:51Shift our MoonColor into the visible range in ComputeLightPropagationWork()
48:51Shift our MoonColor into the visible range in ComputeLightPropagationWork()
50:16Find that our location influences the ambient light
🏃
50:16Find that our location influences the ambient light
🏃
50:16Find that our location influences the ambient light
🏃
51:42Make ComputeLightPropagationWork() normalise the light direction
51:42Make ComputeLightPropagationWork() normalise the light direction
51:42Make ComputeLightPropagationWork() normalise the light direction
52:56Find that the ambient light looks more moonlight-y
🏃
52:56Find that the ambient light looks more moonlight-y
🏃
52:56Find that the ambient light looks more moonlight-y
🏃
54:06Let ComputeLightPropagationWork() perform the full light transfer
54:06Let ComputeLightPropagationWork() perform the full light transfer
54:06Let ComputeLightPropagationWork() perform the full light transfer
54:17Watch our lighting blow up, possibly due to NaN
🏃
54:17Watch our lighting blow up, possibly due to NaN
🏃
54:17Watch our lighting blow up, possibly due to NaN
🏃
55:04Scrutinise ComputeLightPropagationWork()
📖
55:04Scrutinise ComputeLightPropagationWork()
📖
55:04Scrutinise ComputeLightPropagationWork()
📖
56:54Debug our TransferPPS and LightP, introducing LooksFishy()
56:54Debug our TransferPPS and LightP, introducing LooksFishy()
56:54Debug our TransferPPS and LightP, introducing LooksFishy()
59:05Break in to ComputeLightPropagationWork() on a supposedly fishy LightP
🏃
59:05Break in to ComputeLightPropagationWork() on a supposedly fishy LightP
🏃
59:05Break in to ComputeLightPropagationWork() on a supposedly fishy LightP
🏃
1:00:13Debug our ProbeSampleP, not LightP
1:00:13Debug our ProbeSampleP, not LightP
1:00:13Debug our ProbeSampleP, not LightP
1:00:23Break in to ComputeLightPropagationWork() on a fishy TransferPPS
🏃
1:00:23Break in to ComputeLightPropagationWork() on a fishy TransferPPS
🏃
1:00:23Break in to ComputeLightPropagationWork() on a fishy TransferPPS
🏃
1:04:42Make SpamVoxelSlice() use the LightDF directly as the LightA, without boosting the intensity
1:04:42Make SpamVoxelSlice() use the LightDF directly as the LightA, without boosting the intensity
1:04:42Make SpamVoxelSlice() use the LightDF directly as the LightA, without boosting the intensity
1:05:20See black
🏃
1:05:20See black
🏃
1:05:20See black
🏃
1:06:03See black and then craziness, in release mode
🏃
1:06:03See black and then craziness, in release mode
🏃
1:06:03See black and then craziness, in release mode
🏃
1:06:58Make EndLightingComputation() normalise our light normals
1:06:58Make EndLightingComputation() normalise our light normals
1:06:58Make EndLightingComputation() normalise our light normals
1:08:02See crazy lighting
🏃
1:08:02See crazy lighting
🏃
1:08:02See crazy lighting
🏃
1:08:27Consider clamping our light irradiance
📖
1:08:27Consider clamping our light irradiance
📖
1:08:27Consider clamping our light irradiance
📖
1:10:24Try making EndLightingComputation() use a known stable normal
1:10:24Try making EndLightingComputation() use a known stable normal
1:10:24Try making EndLightingComputation() use a known stable normal
1:11:07See crazy lighting with stable normals
🏃
1:11:07See crazy lighting with stable normals
🏃
1:11:07See crazy lighting with stable normals
🏃
1:11:19Try instead making EndLightingComputation() use a known stable colour
1:11:19Try instead making EndLightingComputation() use a known stable colour
1:11:19Try instead making EndLightingComputation() use a known stable colour
1:12:59See bizarre, but flicker-free lighting
🏃
1:12:59See bizarre, but flicker-free lighting
🏃
1:12:59See bizarre, but flicker-free lighting
🏃
1:13:11Try also making EndLightingComputation() use a known stable normal
1:13:11Try also making EndLightingComputation() use a known stable normal
1:13:11Try also making EndLightingComputation() use a known stable normal
1:13:27See ordinary lighting
🏃
1:13:27See ordinary lighting
🏃
1:13:27See ordinary lighting
🏃
1:13:35Let EndLightingComputation() pack the actual normals
1:13:35Let EndLightingComputation() pack the actual normals
1:13:35Let EndLightingComputation() pack the actual normals
1:13:42Traverse the world, trying to make sense of our normals
🏃
1:13:42Traverse the world, trying to make sense of our normals
🏃
1:13:42Traverse the world, trying to make sense of our normals
🏃
1:15:02Begin to investigate our weird colours and normals
📖
1:15:02Begin to investigate our weird colours and normals
📖
1:15:02Begin to investigate our weird colours and normals
📖
1:16:38Prevent SpamVoxel() from spamming out to all the slices
1:16:38Prevent SpamVoxel() from spamming out to all the slices
1:16:38Prevent SpamVoxel() from spamming out to all the slices
1:17:32Consider our lighting to be close to being good
🏃
1:17:32Consider our lighting to be close to being good
🏃
1:17:32Consider our lighting to be close to being good
🏃
1:18:43Switch EndLightingComputation() to call TestCastFromProbes()
1:18:43Switch EndLightingComputation() to call TestCastFromProbes()
1:18:43Switch EndLightingComputation() to call TestCastFromProbes()
1:18:58See our test cast lighting, without flood-filling
🏃
1:18:58See our test cast lighting, without flood-filling
🏃
1:18:58See our test cast lighting, without flood-filling
🏃
1:20:21Add a switch in EndLightingComputation() for the known stable colour test
1:20:21Add a switch in EndLightingComputation() for the known stable colour test
1:20:21Add a switch in EndLightingComputation() for the known stable colour test
1:21:38See black
🏃
1:21:38See black
🏃
1:21:38See black
🏃
1:21:55Increase the LightC intensity eight-fold in TestCastFromProbes()
1:21:55Increase the LightC intensity eight-fold in TestCastFromProbes()
1:21:55Increase the LightC intensity eight-fold in TestCastFromProbes()
1:22:04See gapped lighting
🏃
1:22:04See gapped lighting
🏃
1:22:04See gapped lighting
🏃
1:22:32Increase the LightC intensity in TestCastFromProbes() from 8 to 10
1:22:32Increase the LightC intensity in TestCastFromProbes() from 8 to 10
1:22:32Increase the LightC intensity in TestCastFromProbes() from 8 to 10
1:22:48See questionably gapped lighting
🏃
1:22:48See questionably gapped lighting
🏃
1:22:48See questionably gapped lighting
🏃
1:23:08Restrict ComputeLightPropagationWork() to sample the one closest light, using GetLightLeafForP()
1:23:08Restrict ComputeLightPropagationWork() to sample the one closest light, using GetLightLeafForP()
1:23:08Restrict ComputeLightPropagationWork() to sample the one closest light, using GetLightLeafForP()
1:23:24See potentially sensible light
🏃
1:23:24See potentially sensible light
🏃
1:23:24See potentially sensible light
🏃
1:24:02Decrease the tIrradiancePreservation delay in EndLightingComputation()
1:24:02Decrease the tIrradiancePreservation delay in EndLightingComputation()
1:24:02Decrease the tIrradiancePreservation delay in EndLightingComputation()
1:24:16Check out our light
🏃
1:24:16Check out our light
🏃
1:24:16Check out our light
🏃
1:24:30Increase the tIrradiancePreservation delay in EndLightingComputation()
1:24:30Increase the tIrradiancePreservation delay in EndLightingComputation()
1:24:30Increase the tIrradiancePreservation delay in EndLightingComputation()
1:24:52Check out our light, with the determination to clean up our light encoding and perform flood filling to room edges
🏃
1:24:52Check out our light, with the determination to clean up our light encoding and perform flood filling to room edges
🏃
1:24:52Check out our light, with the determination to clean up our light encoding and perform flood filling to room edges
🏃
1:27:33Make IrradiancePack() encode our light to allow for "tailroom"
1:27:33Make IrradiancePack() encode our light to allow for "tailroom"
1:27:33Make IrradiancePack() encode our light to allow for "tailroom"
1:32:51Enable CompileZBiasProgram() to handle our light's new tailroom
1:32:51Enable CompileZBiasProgram() to handle our light's new tailroom
1:32:51Enable CompileZBiasProgram() to handle our light's new tailroom
1:35:51See more sane, but unfortunately shifting lighting
🏃
1:35:51See more sane, but unfortunately shifting lighting
🏃
1:35:51See more sane, but unfortunately shifting lighting
🏃
1:37:01Encode our light in 16 bits, changing IrradiancePack() to return a 64-bit value
1:37:01Encode our light in 16 bits, changing IrradiancePack() to return a 64-bit value
1:37:01Encode our light in 16 bits, changing IrradiancePack() to return a 64-bit value
1:41:33See striped lighting
🏃
1:41:33See striped lighting
🏃
1:41:33See striped lighting
🏃
1:42:01Fix OpenGLEndFrame() to submit a 16-bit texture for the lighting
1:42:01Fix OpenGLEndFrame() to submit a 16-bit texture for the lighting
1:42:01Fix OpenGLEndFrame() to submit a 16-bit texture for the lighting
1:42:29Still see shifting lighting
🏃
1:42:29Still see shifting lighting
🏃
1:42:29Still see shifting lighting
🏃
1:42:59Determine to figure out the light encoding later, and now submit it all as floats
1:42:59Determine to figure out the light encoding later, and now submit it all as floats
1:42:59Determine to figure out the light encoding later, and now submit it all as floats
1:48:18See non-shifting, but slower lighting
🏃
1:48:18See non-shifting, but slower lighting
🏃
1:48:18See non-shifting, but slower lighting
🏃
1:49:03Make CompileZBiasProgram() only sample one of the lights
1:49:03Make CompileZBiasProgram() only sample one of the lights
1:49:03Make CompileZBiasProgram() only sample one of the lights
1:49:24See that our lighting has sped back up
🏃
1:49:24See that our lighting has sped back up
🏃
1:49:24See that our lighting has sped back up
🏃
1:52:04Plan our next steps for the lighting: 1) Encoding; 2) Flood filling; 3) Voxel centering
🗹
1:52:04Plan our next steps for the lighting: 1) Encoding; 2) Flood filling; 3) Voxel centering
🗹
1:52:04Plan our next steps for the lighting: 1) Encoding; 2) Flood filling; 3) Voxel centering
🗹
1:54:12Q&A
🗩
1:54:12Q&A
🗩
1:54:12Q&A
🗩
1:55:06letambourinroyal Q: Remind us why you #define internal static
🗪
1:55:06letambourinroyal Q: Remind us why you #define internal static
🗪
1:55:06letambourinroyal Q: Remind us why you #define internal static
🗪
1:58:48zrizi Q: Hey master Casey. Is there a way to suggest / home [hint] the processor that a branch is likely / not likely taken? Goal is to help with branch prediction
🗪
1:58:48zrizi Q: Hey master Casey. Is there a way to suggest / home [hint] the processor that a branch is likely / not likely taken? Goal is to help with branch prediction
🗪
1:58:48zrizi Q: Hey master Casey. Is there a way to suggest / home [hint] the processor that a branch is likely / not likely taken? Goal is to help with branch prediction
🗪
2:01:05jelly_toast_ Q: I was watching an early stream where you said something along the lines of "I've never worked on a commercial compiler". So, have you ever worked on a non-commercial compiler or something of the sort?
🗪
2:01:05jelly_toast_ Q: I was watching an early stream where you said something along the lines of "I've never worked on a commercial compiler". So, have you ever worked on a non-commercial compiler or something of the sort?
🗪
2:01:05jelly_toast_ Q: I was watching an early stream where you said something along the lines of "I've never worked on a commercial compiler". So, have you ever worked on a non-commercial compiler or something of the sort?
🗪
2:02:35overhaulhead Q: Not relevant to today's episode but what C / C++ books do you recommend for a beginner?
🗪
2:02:35overhaulhead Q: Not relevant to today's episode but what C / C++ books do you recommend for a beginner?
🗪
2:02:35overhaulhead Q: Not relevant to today's episode but what C / C++ books do you recommend for a beginner?
🗪
2:02:53math_daemon_ Q: What's your guess on how much faster GPU trilinear sampling is compared to CPU side? Also, could you not bounce the light on GPU side and be faster even on non RTX cards? What are the reasons against doing that? Is it just to keep complexity at Handmade Hero scope?
🗪
2:02:53math_daemon_ Q: What's your guess on how much faster GPU trilinear sampling is compared to CPU side? Also, could you not bounce the light on GPU side and be faster even on non RTX cards? What are the reasons against doing that? Is it just to keep complexity at Handmade Hero scope?
🗪
2:02:53math_daemon_ Q: What's your guess on how much faster GPU trilinear sampling is compared to CPU side? Also, could you not bounce the light on GPU side and be faster even on non RTX cards? What are the reasons against doing that? Is it just to keep complexity at Handmade Hero scope?
🗪
2:05:24tbodt_ Q: It seems unlikely that Intel / AMD would change the default behavior of branch prediction, considering things like PGO and gcc __builtin_expect assume that behavior
🗪
2:05:24tbodt_ Q: It seems unlikely that Intel / AMD would change the default behavior of branch prediction, considering things like PGO and gcc __builtin_expect assume that behavior
🗪
2:05:24tbodt_ Q: It seems unlikely that Intel / AMD would change the default behavior of branch prediction, considering things like PGO and gcc __builtin_expect assume that behavior
🗪
2:06:00aidsjorb Q: Have you considered the fact that if you just said Handmade Hero had an AI based lighting solution you could say it was now done?
🗪
2:06:00aidsjorb Q: Have you considered the fact that if you just said Handmade Hero had an AI based lighting solution you could say it was now done?
🗪
2:06:00aidsjorb Q: Have you considered the fact that if you just said Handmade Hero had an AI based lighting solution you could say it was now done?
🗪
2:06:13x1bzzr Q: I understand you're doing a unity build in Handmade Hero. What is the meaning of internal in this scenario?
🗪
2:06:13x1bzzr Q: I understand you're doing a unity build in Handmade Hero. What is the meaning of internal in this scenario?
🗪
2:06:13x1bzzr Q: I understand you're doing a unity build in Handmade Hero. What is the meaning of internal in this scenario?
🗪
2:06:46centhusiast Q: Hi! I got contacted by two companies to work as a C programmer. One job on numerical computing and data visualization, and the other one on cryptography. They also wrote to me that they have a hard time in finding people who are interested in the low level-ish programming. Do you think it is because the majority of people use python, java script or high level languages? I guess there is always a job if someone can do C and a bit assembly
🗪
2:06:46centhusiast Q: Hi! I got contacted by two companies to work as a C programmer. One job on numerical computing and data visualization, and the other one on cryptography. They also wrote to me that they have a hard time in finding people who are interested in the low level-ish programming. Do you think it is because the majority of people use python, java script or high level languages? I guess there is always a job if someone can do C and a bit assembly
🗪
2:06:46centhusiast Q: Hi! I got contacted by two companies to work as a C programmer. One job on numerical computing and data visualization, and the other one on cryptography. They also wrote to me that they have a hard time in finding people who are interested in the low level-ish programming. Do you think it is because the majority of people use python, java script or high level languages? I guess there is always a job if someone can do C and a bit assembly
🗪
2:07:40x1bzzr Q: When running Visual Studio with my executable as an argument I can't find the project properties window in which you would set #defines. Do you know why that happens?
🗪
2:07:40x1bzzr Q: When running Visual Studio with my executable as an argument I can't find the project properties window in which you would set #defines. Do you know why that happens?
🗪
2:07:40x1bzzr Q: When running Visual Studio with my executable as an argument I can't find the project properties window in which you would set #defines. Do you know why that happens?
🗪
2:08:08zrizi Q: Just catching up on the show again. What do we have left, other than lighting and actual gameplay?
🗪
2:08:08zrizi Q: Just catching up on the show again. What do we have left, other than lighting and actual gameplay?
🗪
2:08:08zrizi Q: Just catching up on the show again. What do we have left, other than lighting and actual gameplay?
🗪
2:10:12x1bzzr Q: Which features of C++ do you think are conducive to performance oriented programming and which do you think are detrimental and should be avoided? I noticed that you use default arguments sometimes, for example
🗪
2:10:12x1bzzr Q: Which features of C++ do you think are conducive to performance oriented programming and which do you think are detrimental and should be avoided? I noticed that you use default arguments sometimes, for example
🗪
2:10:12x1bzzr Q: Which features of C++ do you think are conducive to performance oriented programming and which do you think are detrimental and should be avoided? I noticed that you use default arguments sometimes, for example
🗪
2:11:02horrowind Q: When adding the normals together, doesn't immediately normalizing after each add make the result dependent on the order of the vectors? I guess NOZ(NOZ(NOZ(a) + b) + c) != NOZ(NOZ(NOZ(c) + b) + a) is what I am saying. (I don't remember the exact routine where you did this.)
🗪
2:11:02horrowind Q: When adding the normals together, doesn't immediately normalizing after each add make the result dependent on the order of the vectors? I guess NOZ(NOZ(NOZ(a) + b) + c) != NOZ(NOZ(NOZ(c) + b) + a) is what I am saying. (I don't remember the exact routine where you did this.)
🗪
2:11:02horrowind Q: When adding the normals together, doesn't immediately normalizing after each add make the result dependent on the order of the vectors? I guess NOZ(NOZ(NOZ(a) + b) + c) != NOZ(NOZ(NOZ(c) + b) + a) is what I am saying. (I don't remember the exact routine where you did this.)
🗪
2:13:13centhusiast Q: As you remember we talked about Valve's ACO shader compiler that is replacing LLVM. I heard that it reduces the shader compile time significantly compared to LLVM. They said that it is great for the open source graphic's driver on Linux
🗪
2:13:13centhusiast Q: As you remember we talked about Valve's ACO shader compiler that is replacing LLVM. I heard that it reduces the shader compile time significantly compared to LLVM. They said that it is great for the open source graphic's driver on Linux
🗪
2:13:13centhusiast Q: As you remember we talked about Valve's ACO shader compiler that is replacing LLVM. I heard that it reduces the shader compile time significantly compared to LLVM. They said that it is great for the open source graphic's driver on Linux
🗪
2:13:38morglod Q: Do you track light energy?
🗪
2:13:38morglod Q: Do you track light energy?
🗪
2:13:38morglod Q: Do you track light energy?
🗪
2:14:39tbodt_ Q: How is irradiance different from radiance?
🗪
2:14:39tbodt_ Q: How is irradiance different from radiance?
🗪
2:14:39tbodt_ Q: How is irradiance different from radiance?
🗪
2:16:26ymm0 Radiance is per surface area per solid angle
🗪
2:16:26ymm0 Radiance is per surface area per solid angle
🗪
2:16:26ymm0 Radiance is per surface area per solid angle
🗪
2:17:04psychomaniactv No, different units
🗪
2:17:04psychomaniactv No, different units
🗪
2:17:04psychomaniactv No, different units
🗪
2:18:12centhusiast Q: Have you read Sean Barrett's post on anti-aliasing?1
🗪
2:18:12centhusiast Q: Have you read Sean Barrett's post on anti-aliasing?1
🗪
2:18:12centhusiast Q: Have you read Sean Barrett's post on anti-aliasing?1
🗪
2:19:11Close it down
🗩
2:19:11Close it down
🗩
2:19:11Close it down
🗩