Garrett Johnson
@gkjohnson
Woven by Toyota | NASA JPL | #threejs, graphics, open source, and a bunch of fun projects!
Model courtesy of user "VTX" on @sketchfab.bsky.social sketchfab.com/3d-models/20...
Taking a look around at some new models for three-gpu-pathtracer - good PBR assets make all the difference. All rendered in a web browser! Support for lights coming soon 💡
Getting depth of field working with none other than the Pixar RenderMan teapot! All rendered with three-gpu-pathtracer in a browser 🫖✨
Thanks to this "Blue Noise Dithered Sampling" paper: blogs.autodesk.com/media-and-en... And to Ilgis Fatykhov on Sketchfab for the tape recorder model: sketchfab.com/3d-models/so... And the hoverinc ray tracing repo from years ago, I recall using a similar method: github.com/hoverinc/ray...
You can see some of the artifacts at 15spp that become apparent in Sobol vs the new approach, which are particularly noticeable when using an env map with a lot of bright spots. But depending on your use case or scene it can be a big improvement & will converge to the same image
It uses the same Sobol scrambled sequence for all pixels, mixed with a 1D blue noise sample seed. This scatters rays in common directions across the screen-space BN pattern, which gives a smooth appearance quickly, though without full coverage (as seen with 1 sample here).
New random sampling method for three-gpu-pathtracer: blue noise dither sampling! It offsets a common random sequence for ALL screen samples, yielding a cleaner image in just a few samples. Screenshots are single sample scrambled sobol vs blue noise. Small writeup below👇
By using a kind of clustered BVH - effectively a TLAS BVH pointing to BLAS subtrees instead of roots - I've finally got the framerate up in the pathtracer. It now updates at 120 ticks per second, keeping the UI completely responsive while rendering 2/2
v0.9.11 for three-mesh-bvh has been released! And brings an overhaul of compute-shader functionality to improve performance, flexibility & platform support! 🚀 You can use the hooks to write your own compute traversal for custom queries, as with the shapecast function. 1/2 🧵
Just finished adding anisotropy support to the WebGPUPathTracer for three.js - slowly but surely getting to feature parity with the WebGL version. All with better ergonomics, features, and performance! Transmissive materials still need work though...💡
Slowly getting some additional annotations & metadata from vector tiles in 3DTilesRendererJS. Here, icons are layered on top of Google Photorealistic Tiles data so you can find landmarks & restaurants as you navigate. Road labels are up next! 🗺️
Six years later this is still one of my favorite outline effects especially for hard surface models like CAD & architecture. And now it works with three.js' WebGPURenderer thanks to a contribution from "cmhhelgeson" on Github!
It's been almost exactly 6 years since I started the 3DTilesRendererJS project at JPL. This past year alone, downloads jumped 5x to over 20,000 per week. Huge thanks to everyone who has contributed and looking forward to seeing what else people build this year! 🌏✨
Support for @mapbox.com and @protomaps.com vector tiles are coming to three.js in 3DTilesRendererJS! You can now bring vector layers in as 3D Tiles overlays to customize map coloring for visualization and branding. Or just to make something a bit chaotic 🎨🌏
Thanks to a great plugin by WilliamLiu-1997 on Github, you can now render Gaussian Splat tile sets with 3DTilesRendererJS!
Got the path tracer running on mobile with 16-bit output using Kahan-summation & residuals packed into 8 bits. I'm a bit worried about precision loss so I'll probably replace this with something else. But it still looks quite good on these simple scenes! 🦀 #threejs #raytracing #webgpu #javascript
Happy to report that Lego LDraw models are working #threejs #raytracing #webgpu #lego
Here's a look at the TLAS BVH used for rendering. The geometry & TLAS BVHs are packed into a single storage buffer and traversed in the compute buffer for raytracing -
Using the recently-added "ObjectBVH", geometry instancing is also now supported. So complex scenes like these can finally be rendered without merging it all into a single geometry ✨ #threejs #raytracing #javascript #webgpu
Environment map sampling & backgrounds are now supported in the WebGPU path tracer! Slowly but surely we're getting features ported over. Thanks to "TheBlek" for getting this added! #threejs #webgpu #javascript #raytracing
We have a first pass at a wavefront path tracer! You can see the artifacts of thread groups pulling rays off the ring queue to trace in this slowed down video. It's not much, yet, but Im excited for what this will bring in terms of performance scalability✨ #threejs #raytracing
Spent some time today looking into WebGPU support for three-gpu-pathtracer - compute is going to make this a lot easier than WebGL. Looking into Wavefront Pathtracing next ✨ Thanks to "TheBlek" on Github for helping to get this started! #threejs #raytracing
Some amazing work by Jure Triglav putting WebGPU compute and three-mesh-bvh through their paces to render surfel-based global illumination! I'm looking forward to seeing what's coming in the web in the coming years. juretriglav.si/surfel-based... #threejs #raytracing #webgpu
See the new LineBVH demo here: gkjohnson.github.io/three-mesh-b... 3/3