[video output=day550 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="SIMD Raycast Point and Normal Computations" vod_platform=youtube id=BzrMiEVa3gs annotator=Miblo]
[0:00][Recap and set the stage for the day][:speech]
[2:14][Putting six-rayed light probes into the :lighting system][:speech]
[3:16][Our old box-intersection testing in RayCast()][:lighting :speech]
[4:54][Our box :lighting primitives][:run]
[7:00][Our old box-intersection testing and reporting in RayCast(), continued][:lighting :speech]
[10:31][Ways of Getting Intersection Normals for AABB][:blackboard :lighting]
[14:31][Consider storing the BoxMin and BoxMax in lighting_box][:lighting]
[15:39][Getting an Approximate Normal from an Ellipsoid-like AABB][:blackboard :lighting]
[18:50][Getting Accurate AABB Intersection Normals][:blackboard :lighting]
[24:52][Set up RayCast() to compute the intersection normal for a unit cube lighting_box][:lighting]
[29:39][Could we compute our intersection normal more efficiently?][:blackboard :lighting]
[32:26][Consider the cost of our intersection normal computation in RayCast()][:lighting :performance :research]
[34:31][Computing the intersection normal only of box hits, saving the box scale and centre][:blackboard :lighting]
[37:33][Let RayCast() only set the box centre and scale, making ComputeLightPropagation() compute the intersection normal][:lighting]
[40:17][The cost and availability of _mm_blend_ps[ref
    site=Intel
    page="Intel Intrinsics Guide"
    url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/][ref
    site=Valve
    page="Steam Hardware & Software Survey"
    url=https://store.steampowered.com/hwsurvey][ref
    site=uops.info
    url=https://uops.info/table.html]][:performance :research]
[44:25][Make RayCast() select the RefColor and at the end compute the Result, augmenting raycast_result with P, Normal and RefColor[ref
    site=Intel
    page="Intel Intrinsics Guide"
    url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]][:lighting]
[57:37][Introduce SignBitFrom()][:mathematics]
[59:37][Finish making RayCast() set the HitNormal from Masks][:lighting]
[1:07:49][Clean up compile errors, making RayCast() compute BoxRadius and its approximate inverse, introducing ApproxOneOver()[ref
    site=Intel
    page="Intel Intrinsics Guide"
    url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]][:lighting :mathematics :performance]
[1:22:33][Consider the potential speed improvement of RayCast()][:lighting :performance :speech]
[1:23:39][Determine to make ComputeLightPropagation() operate wide][:lighting :speech]
[1:24:52][Lament SIMD's lack of fetching instructions][:speech]
[1:26:09][Consider how to make our :lighting operate wide][:speech]
[1:30:08][Q&A][:speech]
[1:31:12][@ellesar1][Q: Origin, BoxCenter, and HitP are on the same line. Why do we use HitP – Center for the normal computation, and not Origin – Center? The direction should be the same. Problems could arise if origin is within the box (esp if origin = center), but I don't think that's a use case. I understand the HitP is useful for other purposes, just wondering if it's actually necessary for the normals computation][:lighting]
[1:32:37][@uplinkcoder][Q: I've just added the C++ standard reference to the issue type-name member-name, issue.[ref
    site=GitHub
    page="HandmadeHero / cpp / Linux Problems"
    url=https://github.com/HandmadeHero/cpp/issues/109] I agree it's a stupid warning, but there seems to be no way to disable it in GCC][:language]
[1:33:06][@ellesar1][Ahh, thanks for explaining it once more. I get it now][:lighting]
[1:35:22][@rooctag][Q: Why are the light probes cubes and not spheres?][:lighting]
[1:36:29][@uplinkcoder][Q: GCC is following the standard. It's just that the standard is stupid[ref
    site=GitHub
    page="HandmadeHero / cpp / Linux Problems"
    url=https://github.com/HandmadeHero/cpp/issues/109]][:language]
[1:45:33][@mr4thdimention][The good idea in C++ was "Let's start with C"][:language]
[1:46:12][@maliusarth][Q: Should I work on a game engine in C / C++ or just put out games in Unity / Unreal until Jai comes out?][:language]
[1:49:14][@bulmanator][Q: Is there any reading material you recommend for more serious real-time :lighting like this (Papers, books, even blog posts etc.)? I've done simple diffuse lighting before but nothing beyond that[ref
    site=SIGGRAPH
    url=https://www.siggraph.org/]]
[1:51:00][@saidwho12][The PBR book is good book[ref
    site="Matt Pharr and Greg Humphreys"
    page="Physically Based Rendering / 8.4 Microfacet Models"
    url=http://www.pbr-book.org/3ed-2018/Reflection_Models/Microfacet_Models.html]]
[1:53:23][@oliverthebestcat][What do you think is a good idea in games? I feel like I tune into so many programmer streams telling me this and that is terrible, but not really giving me another option. I don't want the answer to be "wait for Jai"! What is good today?][:language]
[1:55:21][@sapper123][Jai demo on Macros is in an hour and a half. Just a reminder for chat][:language]
[1:56:53][@oliverthebestcat][But it's pretty difficult to listen to you or [@naysayer88 Jon]'s stream when it's all just "this is bad, that is bad". But hey, maybe it's true?][:language]
[1:58:02][Shut down, with a plug of [@naysayer88 Jon]'s stream[ref
    site=Twitch
    page=Naysayer88
    url=https://twitch.tv/naysayer88] and Handmade Seattle[ref
    site="Handmade Seattle"
    url=https://www.handmade-seattle.com/]][:speech]
[/video]
