Shane Simms's Avatar

Shane Simms

@shaneasimms.bsky.social

VFX artist living in Melbourne, learning to write tools in C++ โŒจ๏ธ Currently learning about path tracing ๐Ÿ”ฎ

25 Followers  |  44 Following  |  37 Posts  |  Joined: 15.10.2023  |  2.5033

Latest posts by shaneasimms.bsky.social on Bluesky

Post image

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/

11.09.2025 13:28 โ€” ๐Ÿ‘ 91    ๐Ÿ” 17    ๐Ÿ’ฌ 3    ๐Ÿ“Œ 4
Preview
How does PBRT rewrite the majorant transmittance integral over segments when sampling the majorant transmittance? In the PBRT book section on Sampling the Majorant Transmittance, they take the equation: $\int_0^t \sigma_{maj}(p')T_{maj}(p \to p')f(p')dt'$, and using the multiplicative property of transmittance...

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...

09.09.2025 10:16 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

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

18.06.2025 02:55 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

Advertise your account with a Simpsons image

28.05.2025 09:12 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

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

24.05.2025 06:28 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

Added support for nested dielectrics based on "Simple Nested Dielectrics" by Schmidt & Budge

16.05.2025 07:46 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

(More maths)

25.02.2025 00:12 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image

Added importance sampling for textures. These images were rendered with the same number of samples before and after importance sampling the environment light

24.02.2025 23:52 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image

Added normal mapping and fixed some edge cases, made a scene to demo the current features

09.02.2025 09:22 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

Added emission patterns for lights, and added an environment light

21.01.2025 22:49 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

Refactored everything, improved memory management, added pattern interface, added texture pattern

21.01.2025 01:11 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image Post image

(Maths stuffs)

03.12.2024 01:33 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image Post image Post image

Finally got microfacet transmission working! ๐Ÿ”ฎ

03.12.2024 01:32 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image Post image

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

11.11.2024 06:20 โ€” ๐Ÿ‘ 1    ๐Ÿ” 1    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image Post image Post image

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!

11.11.2024 06:20 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image Post image

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

11.11.2024 06:19 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

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%

11.11.2024 06:18 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

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

11.11.2024 06:18 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image

So I derived a sampling strategy for Trowbridge-Reitz as well. Still sampling invisible microfacets though

11.11.2024 06:18 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

Made a Veach inspired scene for testing and found and fixed some more bugs

11.11.2024 06:16 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

Multiple light sources, layered BSDFs (just additive for now), fixed a whole lotta bugs and edge cases

11.11.2024 06:16 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

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

11.11.2024 06:16 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

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

11.11.2024 06:15 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

(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)

11.11.2024 06:14 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

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

11.11.2024 06:14 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image Post image

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

11.11.2024 06:13 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image Post image

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)

11.11.2024 06:12 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

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

11.11.2024 06:11 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

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

11.11.2024 06:11 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

Finally some actual path tracing! But it looks very broken... normals are getting busted on certain angles, and shadows look way too dark...

11.11.2024 06:11 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

@shaneasimms is following 20 prominent accounts