0:09Recap and set the stage for the day
0:09Recap and set the stage for the day
0:09Recap and set the stage for the day
1:15ray.cpp: Rename RayCount to BounceCount
1:15ray.cpp: Rename RayCount to BounceCount
1:15ray.cpp: Rename RayCount to BounceCount
1:46View our image and determine to perform better material processing and to optimise
1:46View our image and determine to perform better material processing and to optimise
1:46View our image and determine to perform better material processing and to optimise
8:28ray.cpp: Figure out the resolution of clock_t1
8:28ray.cpp: Figure out the resolution of clock_t1
8:28ray.cpp: Figure out the resolution of clock_t1
12:56ray.cpp. Introduce a timer using clock() from time.h
12:56ray.cpp. Introduce a timer using clock() from time.h
12:56ray.cpp. Introduce a timer using clock() from time.h
19:15Run our ray caster and see the timer results, noting that the ms/bounce remains constant for various bounce counts
19:15Run our ray caster and see the timer results, noting that the ms/bounce remains constant for various bounce counts
19:15Run our ray caster and see the timer results, noting that the ms/bounce remains constant for various bounce counts
20:55Consider the performance gain we may achieve by multithreading
20:55Consider the performance gain we may achieve by multithreading
20:55Consider the performance gain we may achieve by multithreading
25:29Determine to perform the usual way of doing ray tracing, using tiles that are square shaped
25:29Determine to perform the usual way of doing ray tracing, using tiles that are square shaped
25:29Determine to perform the usual way of doing ray tracing, using tiles that are square shaped
26:26ray.cpp: Introduce RenderTile() and GetPixelPointer()
26:26ray.cpp: Introduce RenderTile() and GetPixelPointer()
26:26ray.cpp: Introduce RenderTile() and GetPixelPointer()
32:25ray.cpp: Break up the world into multiple tiles
32:25ray.cpp: Break up the world into multiple tiles
32:25ray.cpp: Break up the world into multiple tiles
43:36ray.cpp: Add TileRetiredCount to the world struct
43:36ray.cpp: Add TileRetiredCount to the world struct
43:36ray.cpp: Add TileRetiredCount to the world struct
48:38ray.cpp: Inline the contents of RayCast() in RenderTile()
48:38ray.cpp: Inline the contents of RayCast() in RenderTile()
48:38ray.cpp: Inline the contents of RayCast() in RenderTile()
54:08ray.h: Introduce work_queue and work_order to enable multithreading
54:08ray.h: Introduce work_queue and work_order to enable multithreading
54:08ray.h: Introduce work_queue and work_order to enable multithreading
1:01:09ray.cpp: Initialise a work_queue and push our RenderTile() calls onto it
1:01:09ray.cpp: Initialise a work_queue and push our RenderTile() calls onto it
1:01:09ray.cpp: Initialise a work_queue and push our RenderTile() calls onto it
1:06:55Run our ray tracer to see that everything's good
1:06:55Run our ray tracer to see that everything's good
1:06:55Run our ray tracer to see that everything's good
1:07:14ray.cpp: Make RenderTile() only take a work_queue and get its work_order off that queue itself
1:07:14ray.cpp: Make RenderTile() only take a work_queue and get its work_order off that queue itself
1:07:14ray.cpp: Make RenderTile() only take a work_queue and get its work_order off that queue itself
1:10:51Run to see that all is well
1:10:51Run to see that all is well
1:10:51Run to see that all is well
1:12:09ray.cpp: Set us up for multithreading by introducing LockedAddAndReturnPreviousValue() and CreateWorkThread()
1:12:09ray.cpp: Set us up for multithreading by introducing LockedAddAndReturnPreviousValue() and CreateWorkThread()
1:12:09ray.cpp: Set us up for multithreading by introducing LockedAddAndReturnPreviousValue() and CreateWorkThread()
1:21:09ray.cpp: Implement CreateWorkThread() using CreateThread()2,3 and introduce WorkerThread()
1:21:09ray.cpp: Implement CreateWorkThread() using CreateThread()2,3 and introduce WorkerThread()
1:21:09ray.cpp: Implement CreateWorkThread() using CreateThread()2,3 and introduce WorkerThread()
1:27:08Run to see that our speed has improved dramatically
1:27:08Run to see that our speed has improved dramatically
1:27:08Run to see that our speed has improved dramatically
1:28:25ray.cpp: Make LockedAddAndReturnPreviousValue() call InterlockedExchangeAdd64()4
1:28:25ray.cpp: Make LockedAddAndReturnPreviousValue() call InterlockedExchangeAdd64()4
1:28:25ray.cpp: Make LockedAddAndReturnPreviousValue() call InterlockedExchangeAdd64()4
1:29:27Run to see our 5x speed-up
1:29:27Run to see our 5x speed-up
1:29:27Run to see our 5x speed-up
1:30:24ray.cpp: Fuss with the CoreCount and Tile sizes to see if they affect the speed
1:30:24ray.cpp: Fuss with the CoreCount and Tile sizes to see if they affect the speed
1:30:24ray.cpp: Fuss with the CoreCount and Tile sizes to see if they affect the speed
1:32:38Blackboard: Drain-out
1:32:38Blackboard: Drain-out
1:32:38Blackboard: Drain-out
1:35:23ray.cpp: Introduce GetCPUCoreCount()5
1:35:23ray.cpp: Introduce GetCPUCoreCount()5
1:35:23ray.cpp: Introduce GetCPUCoreCount()5
1:39:18win32_ray.cpp: Pull in Windows-specific functions from ray.cpp
1:39:18win32_ray.cpp: Pull in Windows-specific functions from ray.cpp
1:39:18win32_ray.cpp: Pull in Windows-specific functions from ray.cpp
1:42:29build.bat: Prevent our program from running if compilation fails
1:42:29build.bat: Prevent our program from running if compilation fails
1:42:29build.bat: Prevent our program from running if compilation fails
1:47:04ray.cpp: Crank up the RaysPerPixel from 16 to 512 and view our smooth image
1:47:04ray.cpp: Crank up the RaysPerPixel from 16 to 512 and view our smooth image
1:47:04ray.cpp: Crank up the RaysPerPixel from 16 to 512 and view our smooth image
1:48:20Run our program on the command line
1:48:20Run our program on the command line
1:48:20Run our program on the command line
1:49:32ray.h: Add RaysPerPixel and MaxBounceCount to work_queue
1:49:32ray.h: Add RaysPerPixel and MaxBounceCount to work_queue
1:49:32ray.h: Add RaysPerPixel and MaxBounceCount to work_queue
1:52:11Run to see all the information we need, and note that the next step will be SIMD
1:52:11Run to see all the information we need, and note that the next step will be SIMD
1:52:11Run to see all the information we need, and note that the next step will be SIMD
1:53:45dautor Could you please make a portal (changing ray position and orientation upon hitting the portal to come out of the second portal)?
🗪
1:53:45dautor Could you please make a portal (changing ray position and orientation upon hitting the portal to come out of the second portal)?
🗪
1:53:45dautor Could you please make a portal (changing ray position and orientation upon hitting the portal to come out of the second portal)?
🗪
1:54:00syanoks Do you assume the x86 memory model in your code?
🗪
1:54:00syanoks Do you assume the x86 memory model in your code?
🗪
1:54:00syanoks Do you assume the x86 memory model in your code?
🗪
1:54:27dautor What about const volatile and register together in a single declaration? (I saw it once in an implementation for a BLE stack)
🗪
1:54:27dautor What about const volatile and register together in a single declaration? (I saw it once in an implementation for a BLE stack)
🗪
1:54:27dautor What about const volatile and register together in a single declaration? (I saw it once in an implementation for a BLE stack)
🗪
1:55:25ray.cpp: Log stats to stderr
1:55:25ray.cpp: Log stats to stderr
1:55:25ray.cpp: Log stats to stderr
1:56:43macielda What is the difference between Path Tracing and Ray Tracing?
🗪
1:56:43macielda What is the difference between Path Tracing and Ray Tracing?
🗪
1:56:43macielda What is the difference between Path Tracing and Ray Tracing?
🗪
1:59:24LongBoolean Now that the raysPerPixel and maxBounceCount are parameters, you could potentially give different tiles different settings, to compare quality side by side on the same image?
🗪
1:59:24LongBoolean Now that the raysPerPixel and maxBounceCount are parameters, you could potentially give different tiles different settings, to compare quality side by side on the same image?
🗪
1:59:24LongBoolean Now that the raysPerPixel and maxBounceCount are parameters, you could potentially give different tiles different settings, to compare quality side by side on the same image?
🗪
1:59:44siltnamis What do you think about OpenMP?
🗪
1:59:44siltnamis What do you think about OpenMP?
🗪
1:59:44siltnamis What do you think about OpenMP?
🗪
1:59:483dextended What is SIMD [sic]?
🗪
1:59:483dextended What is SIMD [sic]?
🗪
1:59:483dextended What is SIMD [sic]?
🗪
2:01:05seventh_chord Do you get effects like bloom / lens flare "for free" if you implement more realistic camera stuff?
🗪
2:01:05seventh_chord Do you get effects like bloom / lens flare "for free" if you implement more realistic camera stuff?
🗪
2:01:05seventh_chord Do you get effects like bloom / lens flare "for free" if you implement more realistic camera stuff?
🗪
2:02:46butwhynot1 Isn't the uniform random sampling bad? I thought you need to use blue noise or Poisson-Disc sampling or something?
🗪
2:02:46butwhynot1 Isn't the uniform random sampling bad? I thought you need to use blue noise or Poisson-Disc sampling or something?
🗪
2:02:46butwhynot1 Isn't the uniform random sampling bad? I thought you need to use blue noise or Poisson-Disc sampling or something?
🗪
2:03:40syanoks ARM memory model is extremely relaxed, though
🗪
2:03:40syanoks ARM memory model is extremely relaxed, though
🗪
2:03:40syanoks ARM memory model is extremely relaxed, though
🗪
2:03:56garryjohanson So you mentioned that hyperthreading can schedule instructions on separate ALUs of the same core. Did I hear that correctly or did I misconstrue what you said in my mind?
🗪
2:03:56garryjohanson So you mentioned that hyperthreading can schedule instructions on separate ALUs of the same core. Did I hear that correctly or did I misconstrue what you said in my mind?
🗪
2:03:56garryjohanson So you mentioned that hyperthreading can schedule instructions on separate ALUs of the same core. Did I hear that correctly or did I misconstrue what you said in my mind?
🗪
2:06:30ttbjm Would you change anything if you were using a Ryzen / Threadripper CPU that has 4 core core-complexes?
🗪
2:06:30ttbjm Would you change anything if you were using a Ryzen / Threadripper CPU that has 4 core core-complexes?
🗪
2:06:30ttbjm Would you change anything if you were using a Ryzen / Threadripper CPU that has 4 core core-complexes?
🗪
2:07:20macielda Can you give a quick overview of how Importance Sampling works?
🗪
2:07:20macielda Can you give a quick overview of how Importance Sampling works?
🗪
2:07:20macielda Can you give a quick overview of how Importance Sampling works?
🗪
2:07:25ray_caster Why were you trying to kill me? I was working very hard
🗪
2:07:25ray_caster Why were you trying to kill me? I was working very hard
🗪
2:07:25ray_caster Why were you trying to kill me? I was working very hard
🗪
2:07:36dautor Could you maybe do a GJK implementation on a test stream some time?
🗪
2:07:36dautor Could you maybe do a GJK implementation on a test stream some time?
🗪
2:07:36dautor Could you maybe do a GJK implementation on a test stream some time?
🗪
2:07:45thisdrunkdane Is AVX2 common enough to use it in, like, a game?
🗪
2:07:45thisdrunkdane Is AVX2 common enough to use it in, like, a game?
🗪
2:07:45thisdrunkdane Is AVX2 common enough to use it in, like, a game?
🗪
2:08:27gordolani Will the raytracer program in the future use GPU to do the ray traces?
🗪
2:08:27gordolani Will the raytracer program in the future use GPU to do the ray traces?
🗪
2:08:27gordolani Will the raytracer program in the future use GPU to do the ray traces?
🗪
2:08:31y_ah Where can we find the code?
🗪
2:08:31y_ah Where can we find the code?
🗪
2:08:31y_ah Where can we find the code?
🗪
2:08:463dextended Wouldn't it be more sufficient to make an entry for each ray to split up the work even more evenly and also this could work on the GPU?
🗪
2:08:463dextended Wouldn't it be more sufficient to make an entry for each ray to split up the work even more evenly and also this could work on the GPU?
🗪
2:08:463dextended Wouldn't it be more sufficient to make an entry for each ray to split up the work even more evenly and also this could work on the GPU?
🗪
2:09:16jim0_o How much different is this raytracer to those with "live previews" where you see the image get better starting low res and goes higher and higher? (I assume they don't render line by line?)
🗪
2:09:16jim0_o How much different is this raytracer to those with "live previews" where you see the image get better starting low res and goes higher and higher? (I assume they don't render line by line?)
🗪
2:09:16jim0_o How much different is this raytracer to those with "live previews" where you see the image get better starting low res and goes higher and higher? (I assume they don't render line by line?)
🗪
2:10:23LongBoolean Are there any things that you need to do to take extra advantage of hyperthreading CPUs or do you treat threading the same as a non-hyperthreading CPU?
🗪
2:10:23LongBoolean Are there any things that you need to do to take extra advantage of hyperthreading CPUs or do you treat threading the same as a non-hyperthreading CPU?
🗪
2:10:23LongBoolean Are there any things that you need to do to take extra advantage of hyperthreading CPUs or do you treat threading the same as a non-hyperthreading CPU?
🗪
2:11:33The ARM memory model
6📖
2:11:33The ARM memory model
6📖
2:11:33The ARM memory model
6📖
2:18:50That's it for today
🗩
2:18:50That's it for today
🗩
2:18:50That's it for today
🗩