Sign in

Garrett Johnson

@gkjohnson.bsky.social
338 followers 73 following 125 posts

Woven by Toyota | NASA JPL | #threejs, graphics, open source, and a bunch of fun projects!

PostsRepliesMedia
Reposted by Garrett Johnson
Ben Houston @ben3d.ca · 04/10/2026
New project: Fidelity test suite for @gkjohnson.bsky.social's three-gpu-pathtracer vs @blender.org . Compares both the legacy #WebGL and new #WebGPU renderers. bhouston.github.io/three-gpu-pa... github.com/bhouston/thr...
443
Garrett Johnson @gkjohnson.bsky.social · 21/09/2026
Crab noodles also supported 🍝
050
Garrett Johnson @gkjohnson.bsky.social · 21/09/2026
Trying out some path traced generative yarn balls on the web 🧶 #webgpu #threejs
0110
Garrett Johnson @gkjohnson.bsky.social · 07/09/2026
Equal Earth projection is coming to 3DTilesRendererJS! 🗺️ Here it is rendering TerrainRGB & vector annotations. The LA streets look a bit less square but the projection looks great! We are updating the engine so data aligns across projections, letting you render maps however you need ✨ #equalearth
051
Garrett Johnson @gkjohnson.bsky.social · 26/08/2026
Model courtesy of user "VTX" on @sketchfab.bsky.social sketchfab.com/3d-models/20...
020
Garrett Johnson @gkjohnson.bsky.social · 26/08/2026
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 💡
140
Garrett Johnson @gkjohnson.bsky.social · 25/08/2026
Getting depth of field working with none other than the Pixar RenderMan teapot! All rendered with three-gpu-pathtracer in a browser 🫖✨
060
Garrett Johnson @gkjohnson.bsky.social · 27/07/2026
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...
060
Garrett Johnson @gkjohnson.bsky.social · 27/07/2026
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
120
Garrett Johnson @gkjohnson.bsky.social · 27/07/2026
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).
240
Garrett Johnson @gkjohnson.bsky.social · 27/07/2026
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👇
1227
Garrett Johnson @gkjohnson.bsky.social · 13/07/2026
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
130
Garrett Johnson @gkjohnson.bsky.social · 13/07/2026
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 🧵
182
Garrett Johnson @gkjohnson.bsky.social · 06/07/2026
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...💡
090
Garrett Johnson @gkjohnson.bsky.social · 18/06/2026
Settling icons on arbitrary tiles is tricky so to do this generically, they iteratively update via raycast whenever tiles change. And three-mesh-bvh is used to keep things fast.
020
Garrett Johnson @gkjohnson.bsky.social · 18/06/2026
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! 🗺️
171
Garrett Johnson @gkjohnson.bsky.social · 15/06/2026
You can check out the repo and demos here: github.com/gkjohnson/th...
github.com
threejs-sandbox/conditional-lines at master · gkjohnson/threejs-sandbox
Set of experiments and extensions to THREE.js. Contribute to gkjohnson/threejs-sandbox development by creating an account on GitHub.
080
Garrett Johnson @gkjohnson.bsky.social · 15/06/2026
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!
5686
Garrett Johnson @gkjohnson.bsky.social · 27/05/2026
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! 🌏✨
060
Garrett Johnson @gkjohnson.bsky.social · 19/05/2026
Dynamic color updates are still a bit slow but one step at a time!
010
Garrett Johnson @gkjohnson.bsky.social · 19/05/2026
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 🎨🌏
1111
Garrett Johnson @gkjohnson.bsky.social · 14/05/2026
You can find the plugin here, based on Spark.js: github.com/WilliamLiu-1...
github.com
GitHub - WilliamLiu-1997/3D-Tiles-RendererJS-3DGS-Plugin: Gaussian splat tile plugin for 3d-tiles-renderer that streams Gaussian Splats content in Three.js via Spark
Gaussian splat tile plugin for 3d-tiles-renderer that streams Gaussian Splats content in Three.js via Spark - WilliamLiu-1997/3D-Tiles-RendererJS-3DGS-Plugin
040
Garrett Johnson @gkjohnson.bsky.social · 14/05/2026
Thanks to a great plugin by WilliamLiu-1997 on Github, you can now render Gaussian Splat tile sets with 3DTilesRendererJS!
1547
Garrett Johnson @gkjohnson.bsky.social · 11/03/2026
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
0110
Garrett Johnson @gkjohnson.bsky.social · 03/03/2026
Happy to report that Lego LDraw models are working #threejs #raytracing #webgpu #lego
180
Garrett Johnson @gkjohnson.bsky.social · 27/02/2026
Per-instance color support 🫧
1131
Garrett Johnson @gkjohnson.bsky.social · 26/02/2026
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 -
030
Garrett Johnson @gkjohnson.bsky.social · 26/02/2026
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
1110
Garrett Johnson @gkjohnson.bsky.social · 25/02/2026
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
0174
Garrett Johnson @gkjohnson.bsky.social · 09/02/2026
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
1100
Garrett Johnson @gkjohnson.bsky.social · 04/02/2026
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
080
Garrett Johnson @gkjohnson.bsky.social · 04/02/2026
You can check out the project here: github.com/gkjohnson/cl...
github.com
GitHub - gkjohnson/closed-chain-ik-js: A generalized inverse kinematics solver that supports closed chains for parallel kinematics systems, dynamic reconfiguration, and arbitrary joint configuration b...
A generalized inverse kinematics solver that supports closed chains for parallel kinematics systems, dynamic reconfiguration, and arbitrary joint configuration based on damped least squares error m...
063
Garrett Johnson @gkjohnson.bsky.social · 04/02/2026
I revisited my parallel IK system for the first time in awhile to make some ergonomic improvements & got perf improved by over 50% in some cases 🦾🤖 I still have some more improvements in mind, though, when I have some more time. Repo link below 👇 #threejs #webgl #robotics
1143
Garrett Johnson @gkjohnson.bsky.social · 02/02/2026
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
051
Garrett Johnson @gkjohnson.bsky.social · 29/01/2026
Check out the post here! discourse.threejs.org/t/3d-map-250...
discourse.threejs.org
3d map 2500km² running on three.js and 3dtilesrenderer
Hello, A side project I’ve been working on for past few years. 3d maps covering 2500km² running on amazing library developed by @gkjohnson. There still are pretty much no real features, b...
010
Garrett Johnson @gkjohnson.bsky.social · 29/01/2026
User "web3d" over on the threejs forums using 3d-tiles-renderer to display some awesome drone scan data processed into tiles 🗺️ #threejs #gis #3dtiles
130
Garrett Johnson @gkjohnson.bsky.social · 26/01/2026
Using the same scene-wide BVH you can run accelerate frustum culling, as well. With this 500,000-instance BatchedMesh culling runs in less than 1/8th the time 🚀 #threejs #gamedev
0122
Garrett Johnson @gkjohnson.bsky.social · 20/01/2026
With the recent three-mesh-bvh changes you can finally make a full scene-wide BVH to accelerate physics, raycasting, etc. And at some point Pathtracing 😁 Its just a prototype so far but it "just works" with objects and batched instances in a single structure. #threejs #gamedev
061
Garrett Johnson @gkjohnson.bsky.social · 15/01/2026
The SkinnedMeshBVH will work with morph target meshes, as well. It's available in the three-mesh-bvh examples directory for now but I may move it to the core package if there's interest. Demo here: gkjohnson.github.io/three-mesh-b... 2/2
gkjohnson.github.io
three-mesh-bvh - Skinned Mesh BVH
010
Garrett Johnson @gkjohnson.bsky.social · 15/01/2026
With the new abstractions in three-mesh-bvh, making a custom BVH is easier than ever! SkinnedMeshes can now have one created directly, leading to an over 2x perf improvement on update vs creating a new static mesh. 🚀 What else needs a BVH? 1/2 👇 #threejs #webgl #gamedev
1202
Garrett Johnson @gkjohnson.bsky.social · 08/01/2026
See the new LineBVH demo here: gkjohnson.github.io/three-mesh-b... 3/3
000
Garrett Johnson @gkjohnson.bsky.social · 08/01/2026
It took a lot of refactoring but the new BVHs support accelerated raycasting and custom shapecast queries all with the same underlying construction logic and settings. Hopefully some more BVH types coming soon ✨ 2/3
110
Garrett Johnson @gkjohnson.bsky.social · 08/01/2026
It's been a long time coming but the latest version of three-mesh-bvh brings support for out-of-the-box Line & Point cloud BVH support! Now all your geometries can be fast 🚀 1/3 #threejs #webgl #javascript
140
Reposted by Garrett Johnson
Patrick Schroen @pschroen.bsky.social · 08/01/2026
Last year I was also experimenting with @gkjohnson.bsky.social's blue noise sketches, but with my usual subsurface scattering and motion blur. alien.js.org/examples/thr... #threejs #webgl #shader #bluenoise #motionblur
141
Garrett Johnson @gkjohnson.bsky.social · 22/12/2025
From this repo: github.com/gkjohnson/th... 3/3
github.com
GitHub - gkjohnson/three-edge-projection: Visible geometry edge projection and flattening based on three-mesh-bvh.
Visible geometry edge projection and flattening based on three-mesh-bvh. - gkjohnson/three-edge-projection
120
Garrett Johnson @gkjohnson.bsky.social · 22/12/2025
I've tried pushing versions that don't bundle the code (using import maps), adjusting epsilon values, made sure I'm running the exact same code, etc. This happens in Firefox & Chrome. Is there anything that GHPages or a static server could be doing to the file to cause this? 2/3
100
Garrett Johnson @gkjohnson.bsky.social · 22/12/2025
Im seeing a difference in behavior with deployed code on @github.com pages vs the same files locally. Has anyone seen this before? Left is edge generation run locally & right is on Github pages from one of my #threejs projects. Notice the extra lines. 1/3 👇 #webgl #javascript
120
Garrett Johnson @gkjohnson.bsky.social · 11/12/2025
Thanks to amazing work from "SoftwareMechanic" on Github, the 3DTilesRendererJS project now supports GeoJSON overlays! Perfect for draping GIS datasets - region outlines, property boundaries, or GPS paths - onto any 3D Tiles data set 🗺️✨ #threejs #gis #3dtiles #maps #javascript
0132
Garrett Johnson @gkjohnson.bsky.social · 03/12/2025
More graphic screenspace SDF effects 🐔🤖 #threejs #webgl #gamedev #realtimeVFX #javascript
0181
Garrett Johnson @gkjohnson.bsky.social · 18/11/2025
Taking a dive into Bezier curves for fast SVG & font rendering. The curves are evaluated in a fragment shader so they're resolution independent with single-pass antialiasing📈 Cubic curves next! Though it looks a bit more complicated... #threejs #webgl #gamedev #javascript #svg
0134