I've spent a lot of time recently learning about volumetrics. Added support for inhomogeneous volumes defined over a voxel grid.
I got tired of mashing together tools to write long threads with ๐ซ๐ข๐๐ก ๐๐๐๐๐๐ก๐ก๐๐๐ and โณฮฑโ โโso I wrote La๐๐ค๐๐๐ก!
It converts Markdown and LaTeX to Unicode that can be used in โtweetsโ, and automatically splits long threads. Try it out!
keenancrane.github.io/LaTweet/
I'm pretty stumped by this equation in the PBR book, I wonder if anyone on here can help me?
computergraphics.stackexchange.com/questions/14...
Asking because I'm thinking of switching to Linux soon - why did you choose Mint? I've been looking at Rocky primarily because of the stable support for VFX tools
Advertise your account with a Simpsons image
This is so cool, is there any possibility of some of the dice models being made available for download? Would love to have a 2D6
Added support for nested dielectrics based on "Simple Nested Dielectrics" by Schmidt & Budge
(More maths)
Added importance sampling for textures. These images were rendered with the same number of samples before and after importance sampling the environment light
Added normal mapping and fixed some edge cases, made a scene to demo the current features
Added emission patterns for lights, and added an environment light
Refactored everything, improved memory management, added pattern interface, added texture pattern
(Maths stuffs)
Finally got microfacet transmission working! ๐ฎ
Implemented a specular glass shader. Had to tweak a lot of my integration code to get it to work with transmission. Going to attempt a microfacet version next
Read Heitz' 2018 paper on GGX VNDF sampling a week ago, then tried to remember how it works and implemented it today. Really simple and elegant, and less noise!
Went on a side quest inspired by OPSR - now I'm roughening over paths using an attenuation factor (gamma) to improve control over blurring out caustics and reducing fireflies
Heard that the STL RNG can be slow. Looked into XORShift RNGs. The seed is multiplied by matrices covering all possible seed values until a repeat. The matrices in XORShift RNGs use bitwise operations so are very cheap. Only 1% faster but fun! Total speed increase: ~11%
Decided to try and optimise starting with some low-hanging fruit. Made tweaks to the BVH, then implemented a better triangle intersection algorithm where rays are transformed to simplify cross products, and transforms are stored per ray ahead of time to save computation
So I derived a sampling strategy for Trowbridge-Reitz as well. Still sampling invisible microfacets though
Made a Veach inspired scene for testing and found and fixed some more bugs
Multiple light sources, layered BSDFs (just additive for now), fixed a whole lotta bugs and edge cases
Got Beckmann microfacet distribution working, added an analytic ring light (inspired by Max Liani), also now adjusting roughness after rough bounces to spread out caustics, accounted for a bunch of edge cases and fixed a load of bugs
Found the Beckmann distribution on pbr-book.org, and derived sampling based that. It's not ideal as I'm sampling the whole distribution, including invisible microfacets, so a lot of samples will be useless. One day I'll learn a better strategy
(I don't know how to derive any Fresnel functions either, but I've memorised the standard dielectric Fresnel function after using it in a lot of places. I understand that the derivation involves Maxwell's equations, which I'm keen to learn more about)
I remembered how to derive the Cook-Torrance BRDF! But never learned how to derive any NDFs / masking-shadowing functions... I have no choice but to Google some, but I will derive the BRDF sampling by myself. Added NDF derivation to my list of things to learn later
Multiple importance sampling! I'm using the power heuristic. Didn't do any derivation, I just remembered the functions and checked that they were working as expected with Desmos. I think the fireflies are caustics?
โฌ๏ธMIS, light sampling, BSDF sampling
Adding BSDF sampling so I can introduce MIS. Here are some cosine-weighted hemisphere samples I exported as a .ply to check in Blender, and my derivation. I'm uniformly sampling a disk and projecting up on to the hemisphere to get the cosine distribution (Malley's method)
I was clamping each ray's max distance for to the closest previous hit for every bounce๐คฆ The shadows look how I would expect them to now! Also added a perfectly specular BRDF
I was building the local coord sys in a slightly stupid way and missing some edge cases, normals are fixed now. Still not sure why the shadows are still so dark, but I added Russian roulette, allowing me to get some more bounces in the same amount of time