From 9e371a092f69cd876ca2280def7f3c8e1aff2176 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Sun, 22 Dec 2019 23:42:29 +0000 Subject: [PATCH] Index hero/ray04 --- cmuratori/hero/ray/ray04.hmml | 189 ++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 cmuratori/hero/ray/ray04.hmml diff --git a/cmuratori/hero/ray/ray04.hmml b/cmuratori/hero/ray/ray04.hmml new file mode 100644 index 0000000..dab53f5 --- /dev/null +++ b/cmuratori/hero/ray/ray04.hmml @@ -0,0 +1,189 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=ray title="Loading sampled BRDF data" vod_platform=youtube id=iHXYFbHAmlw annotator=Miblo] +[0:01][Welcome to the stream][:speech] +[0:26][Reacquaint ourselves with the ray tracer][:research] +[1:26][Default LANE_WIDTH to 8 if not defined on our build line] +[1:47][Check out our 2017_10_22_Day01.txt :performance dump][:admin] +[2:37][Admire our 2017_11_19_Day08_8x.bmp image][:drawing] +[3:34][Determine to add some importance :sampling and / or material properties][:lighting :research] +[4:27][Try to :run the ray caster] +[5:59][Reacquaint ourselves with CastSampleRays()][:research] +[10:06][Consider adding some exposure control][:research] +[10:57][Try increasing the redness of the 4th material's EmitColor from 4 to 20] +[11:22][:Run the program] +[11:37][Admire our image with more red emittance][:drawing] +[12:45][Try increasing the redness of the 4th material's EmitColor from 20 to 50] +[12:52][:Run the program] +[13:02][Admire our image with yet more red emittance][:drawing] +[14:17][Introduce a second plane] +[14:47][:Run the program] +[15:06][Admire our image with two planes][:drawing] +[15:52][Try decreasing the d of the 2nd plane from 10 to 2] +[15:57][:Run the program] +[16:29][Admire our image with the second plane cutting through the blue hemisphere][:drawing] +[17:11][Determine to vary the light based on direction][:drawing] +[17:44][Try adding some Green and Blue to the 4th material's EmitColor, and take RaysPerPixel as a command line argument] +[18:13][:Run the program with and without passing a RaysPerPixel] +[18:32][Admire our image with orange emittance][:drawing] +[19:02][:Research Disney's standard BRDF (Bidirectional Reflectance Distribution Function)[ref + site="Disney Animation" + page="BRDF Explorer" + url=https://www.disneyanimation.com/technology/brdf.html][ref + author="Brent Burley" + title="Physically-Based Shading at Disney" + publisher="Walt Disney Animation Studios" + url=https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf][ref + site=ShaderToy + page="Disney Principled BRDF" + url=https://www.shadertoy.com/view/XdyyDd]][:lighting] +[25:10][:Research reference implementations of Disney's Principled BRDF[ref + site=GitHub + page="brdf/src/brdfs/disney.brdf" + url=https://github.com/wdas/brdf/blob/master/src/brdfs/disney.brdf][ref + site=Shih-Chin + page="Implementing Disney Principled BRDF in Arnold" + url=http://shihchinw.github.io/2015/07/implementing-disney-principled-brdf-in-arnold.html][ref + site="Rendering Equations" + page="Rendering the Moana Island Scene Part 1: Implementing the Disney BSDF" + url=https://schuttejoe.github.io/post/disneybsdf/]][:lighting] +[27:34][Prepare to proceed, reading 2 "The microfacet model"[ref + author="Brent Burley" + title="Physically-Based Shading at Disney" + publisher="Walt Disney Animation Studios" + url=https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf]][:lighting :research] +[31:21][Read 3 "Visualizing measured BDRFs",[ref + author="Brent Burley" + title="Physically-Based Shading at Disney" + publisher="Walt Disney Animation Studios" + url=https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf] describing a gonioreflectometer[ref + site=Wikipedia + page=Gonioreflectometer + url=https://en.wikipedia.org/wiki/Gonioreflectometer] and checking out MERL's BRDF database[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="MERL BRDF Database" + url=https://www.merl.com/brdf/]][:lighting :research] +[39:21][Read 'A Data-Driven Reflectance Model'[ref + author="Wojciech Matusik, Hanspeter Pfister, Matt Brand and Leonard McMillan" + title="A Data-Driven Reflectance Model" + url=http://www.csbio.unc.edu/mcmillan/pubs/sig03_matusik.pdf]][:lighting :research] +[46:56][Consult the BRDF reference implementation in MERL's BRDF database[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:lighting :research] +[47:52][Embark on our BRDF loader, introducing brdf_table and LoadMERLBinary()[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:"file io" :lighting] +[54:27][Organise our MERL .binary files][:admin] +[55:28][Set up to call LoadMERLBinary(), changing it to handle three colour channels[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:lighting] +[1:00:19][:Run the program, to see no progress printout][:lighting] +[1:03:33][:Run the program with 16 RaysPerPixel][:lighting] +[1:03:55][Admire our test.bmp][:drawing :lighting] +[1:04:12][Determine to sample the BRDF values, first learning about the colour scaling values[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp][ref + author="Wojciech Matusik, Hanspeter Pfister, Matt Brand and Leonard McMillan" + title="A Data-Driven Reflectance Model" + url=http://www.csbio.unc.edu/mcmillan/pubs/sig03_matusik.pdf]][:lighting :research] +[1:08:41][Change LoadMERLBinary() to read in the colour channels as per the reference implementation[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:lighting] +[1:11:09][Upgrade CastSampleRays() to attenuate by the BRDF-sampled reflectance colour, introducing BRDFLookup()][:lighting :sampling] +[1:15:26][Implement BRDFLookup(), informed by the reference implementation[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp] and 'A Data-Driven Reflectance Model'[ref + author="Wojciech Matusik, Hanspeter Pfister, Matt Brand and Leonard McMillan" + title="A Data-Driven Reflectance Model" + url=http://www.csbio.unc.edu/mcmillan/pubs/sig03_matusik.pdf]][:lighting :sampling] +[1:29:05][Coordinate System on a Sphere[ref + site=Wikipedia + page="Spherical cow" + url=https://en.wikipedia.org/wiki/Spherical_cow][ref + site=Wikipedia + page="Hairy ball theorem" + url=https://en.wikipedia.org/wiki/Hairy_ball_theorem]][:blackboard :geometry :lighting] +[1:33:14][Make CastSampleRays() generate a coordinate system for our :sampling sphere, to pass to BRDFLookup()][:geometry :lighting] +[1:37:14][Consult our documents[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp][ref + author="Wojciech Matusik, Hanspeter Pfister, Matt Brand and Leonard McMillan" + title="A Data-Driven Reflectance Model" + url=http://www.csbio.unc.edu/mcmillan/pubs/sig03_matusik.pdf] on computation of the diff vector][:geometry :lighting :research] +[1:39:22][Make BRDFLookup() compute ThetaHalf and PhiHalf, after mapping the LightDir and HalfVector in to the tangent space of the reflection][:lighting] +[1:43:36][Make BRDFLookup() compute ThetaDiff[ref + author="Wojciech Matusik, Hanspeter Pfister, Matt Brand and Leonard McMillan" + title="A Data-Driven Reflectance Model" + url=http://www.csbio.unc.edu/mcmillan/pubs/sig03_matusik.pdf]][:lighting] +[1:45:44][Come to understand the PhiDiff computation[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp][ref + author="Wojciech Matusik, Hanspeter Pfister, Matt Brand and Leonard McMillan" + title="A Data-Driven Reflectance Model" + url=http://www.csbio.unc.edu/mcmillan/pubs/sig03_matusik.pdf][ref + author="Szymon Rusinkiewicz" + title="A New Change of Variables for Efficient BRDF Representation" + url=https://www.cs.princeton.edu/~smr/papers/brdf_change_of_variables/brdf_change_of_variables.pdf]][:geometry :lighting :research] +[1:49:30][Rename Bitangent to Binormal in plane][:"data structure" :lighting] +[1:51:45][Locating a (Light) Vector in a Transformed Coordinate System[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:blackboard :geometry :lighting] +[1:57:52][Efficiently locating a (Light) Vector in a Transformed Coordinate System[ref + author="Szymon Rusinkiewicz" + title="A New Change of Variables for Efficient BRDF Representation" + url=https://www.cs.princeton.edu/~smr/papers/brdf_change_of_variables/brdf_change_of_variables.pdf]][:blackboard :geometry :lighting] +[2:04:37][Make BRDFLookup() efficiently compute the PhiDiff][:geometry :lighting] +[2:10:10][Introduce ExtractF32() for BRDFLookup() to call[ref + site=Intel + page="Intel Intrinsics Guide" + url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]][:simd] +[2:13:51][Make BRDFLookup() look up the colour values[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:lighting] +[2:21:57][Begin to make BRDFLookup() index in to the BRDF table[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:lighting] +[2:25:26][Wonder if the squaring and rooting is correct[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:mathematics :research] +[2:28:34][I = √t × R²][:blackboard :mathematics] +[2:30:14][Finish making BRDFLookup() index in to the BRDF table[ref + site="MERL - Mitsubishi Electric Research Laboratories" + page="BRDFRead.cpp" + url=http://people.csail.mit.edu/wojciech/BRDFDatabase/code/BRDFRead.cpp]][:lighting] +[2:37:16][:Run the program to find uninitialised Values][:lighting] +[2:38:41][Introduce NullBRDF()][:lighting] +[2:40:25][:Run the program][:lighting] +[2:40:39][Admire our test.bmp][:drawing :lighting] +[2:41:06][Q&A][:speech] +[2:41:48][@xxthebigfoxx][Q: When computing the sphere bitangent, could you just NOZ the tangent before computing the Bitangent so you don't have to NOZ the Bitangent afterwards?][:lighting] +[2:42:22][Save BRDFLookup() from performing NOZ() on the DiffX, and make it perform NOZ() when initialising SphereTangent to save doing in on the SphereBinormal][:lighting] +[2:43:28][@somebody_took_my_name][Q: Talking about ray and Linux and more beautiful code, there is still a GitHub issue about :memory loading in :SIMD] +[2:43:40][@pythno][Q: Is the BRDS essentially a function that tells us which rays within the hemisphere to use?][:lighting] +[2:43:53][@smack_ssbm][Q: Do you get "uncanny valley" impressions sometimes when looking at raytraced images? If so, what strategies might you have to mitigate that?] +[2:44:28][@pythno][Q: BRDF, yes, typo, sorry][:lighting] +[2:45:21][@xxthebigfoxx][Q: Will you finish this tomorrow?][:lighting] +[2:45:31][@sagian2005][Q: The sound was fine and it was synced. Your camera frame rate seems low, though] +[2:45:53][@tocsin16][Q: Have you thought about implementing GGX for [~hero/ray Handmade Ray]?][:lighting] +[2:46:52][@tinspin][Q: How much of modern skin mesh :animation did you contribute to?] +[2:47:24][@tocsin16][Q: Haha, this is what I'm talking about[ref + author="Bruce Walter, Stephen R. Marschner, Hongsong Li and Kenneth E. Torrance" + title="Microfacet Models for Refraction through Rough Surfaces" + url=https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf]][:lighting] +[2:49:26][@pythno][Q: Alright, thanks. But what function chooses the outgoing rays to use? Because it will affect the outcome of the picture. It gets fuzzier if the rays spread in more directions][:lighting] +[2:49:50][Equally vs BRDF weighted :sampling][:blackboard :lighting] +[2:53:21][@tinspin][Q: Did shader weighted skin mesh :animation exist before you started meddling with it? How did it evolve, and do you see any future improvements possible on it?] +[2:56:36][@tocsin16][Q: I see missed the start of the stream so didn't realize the dataset was a requirement. I don't know if there is set of measured GGX BRDFs. It is a very common BRDF used in offline pathtracing for film (and I think gaining popularity in the realtime world too). Thanks for the education streams!][:lighting] +[2:57:14][@ryanfleury][Was the game Messiah?] +[2:58:26][Wrap it up][:speech] +[/video]