The latest release 0.3.19 of 3DTilesRenderer from NASA adds fixes and improvements for rendering Google's photorealistic 3d tiles! That includes a new GoogleTilesRenderer convenience class for easily loading a globe.
1/2
#threejs
#webgl
#3dtiles
#nasajpl
Path traced videos rendered with three.js? Yes! I've just added a new example that shows how to render three-gpu-pathtracer frames into a video so you can save out high quality animations!
Heres the demo! 🥟
#threejs
#javascript
#webgl
#raytracing
A quick preview of the three.js pathtracer material progress! Metalness, opacity, and glossiness are just about done. Still some work to go on transmission, emission, and alpha cutout, though. Demo soon!
#threejs
#graphics
#pathtracing
#javascript
Got transmission working in three-gpu-pathtracer over the weekend! Its just using hemisphere sampling for the refracted direction but it looks nice. Might need some help getting GGX transmission going in the future!
#threejs
#webgl
#graphics
#raytracing
BatchedMesh will be in
#threejs
core in r159! This includes support for frustum culling, raycasting, object sorting, multidraw, & more!
Here's an updated version of the tiles demo rendering only visible triangles using multidraw with 1 draw call.
#gamedev
#webgl
#javascript
A new version of three-mesh-bvh has been released with support for converting skinned and morph target meshes into a static geometry so a BVH can be generated for animated geometry! More on perf and how below 👇
1/4
#threejs
#webgl
#graphics
#opensource
The initial version of three-gpu-pathtracer has been released on npm! Looking forward to seeing what people make with it. Please share! And as always contributions welcome and encouraged!
#threejs
#graphics
#webgl
#raytracing
Here's a demo showing how material properties can be packed into a data texture so thousands of objects with unique material properties can be rendered in a single draw call with
#threejs
's BatchedMesh. With more effort this can support unique textures, too!
1/2
#gamedev
#webgl
After some PRs to the new
#threejs
BatchedMesh class, this 3d tiles data set can be rendered in a 1 draw call! Textures are sampled from a array texture & reserved geometry buffer sizes are used to hot-swap tile data as its loaded and unloaded!
#3dtiles
#webgl
#cesium
1/2
I wouldn't normally share personal achievements but I'm incredibly proud of this - I was recently awarded a NASA medal for my contributions to robotics 3d visualization at
#NASAJPL
including Mars 2020! Of course most of that work over the years has been in threejs & unity3d 😁
Did some experimenting with translucency awhile ago and came up with this. Thickness is from rendering the front and back of the model iteratively using depth peeling so you can see through the model to other parts of the mesh.
#threejs
#webgl
#javascript
I've finally added better GlobeControls to 3d Tiles Renderer for Googles Photorealistic Tiles! They're based on some of the Google Earth interactions & make navigating the globe a lot more intuitive.
Please make & share some globes! 🌎
1/2
#threejs
#webgl
#maps
#gis
#3dtiles
BatchedMesh is almost in three.js core! I've added a PR to add support for sorting geometry to help transparency rendering & opaque overdraw. Individually animated, sorted, transparent objects will be easily rendered in 1 draw call!
Vid shows w/o and w/ sorting.
#threejs
#webgl
I just added a demo showing how a mesh can be quickly voxelized using three-mesh-bvh! Box queries are used to detect the geometry shell (white) and raycasts are performed to determine inner, solid voxels (yellow) 1/2
#threejs
#graphics
#webgl
#javascript
Its not perfect but a BVH can be used to quickly perform a rough ordering on particles. Compared to the radix sort in
#threejs
its ~60% faster at 1mil points & ~130% at 5mil. Time complexity grows closer to linear
Could be useful for
#GaussianSplatting
?
1/3
#javascript
#webgl
Support for transparent materials with attenuation has been added into three-gpu-pathtracer! So now you can more accurately render colored glass, acrylic, and other transmissive materials using the three.js MeshPhysicalMaterial🐉
#threejs
#raytracing
#webgl
#graphics
A fast mesh SDF generation demo has been added to three-mesh-bvh! SDFs are great for volume rendering, particle animation, lighting effects, bunny inflation, & more! GPU gen can be 10-50+ times faster than CPU gen, too!
#threejs
#webgl
#raymarching
The
@gucci
store in Shibuya, Tokyo has custom arcade machines and games running on
#threejs
for their GG game crossover brand 😲
Looks like you can play the games online in a browser here, too:
Another sketch - this time combining both the curl noise sampling and here geometric surface walking. It gives a very nebular or constellation feel to it ✨🦀
#threejs
#webgl
#generative
#art
#spacecrab
Here's a proof of concept
@threejs_org
shader debug tool I made awhile ago that lets you see the visual output of intermediate variables by clicking them and inspect the unclamped integer, float, or boolean value at any pixel.
#webgl
#threejs
#javascript
Here's a parallel kinematics IK solver I put together awhile ago using the damped least squares method. It can solve systems with closed joint loops and constraints that require moving the rest of the body to reach a goal!
#threejs
#webgl
#robotics
I've just published three-bvh-csg on npm in an effort to make it easier to use and improve visibility! There are still quirks with it but I would still love some help with the project if there are people interested!
#threejs
#csg
#webgl
#javascript
I've released a repo that uses three-mesh-bvh to flatten visible edges to a set of line segments for scalable, svg-like drawings! It contains a number of improvements over the bvh example page for generating lines 👇
1/3
#threejs
#webgl
#javascript
#cad
three-gpu-pathtracer v0.0.7 has been released! This version includes some big material improvements including transmission attenuation, diffuse brightness fix, vertex colors, and more!
Release notes here🦀
#threejs
#raytracing
#webgl
#graphics
#crab
I've gotten some of the final quirks worked out of the fog material for three-gpu-pathtracer including the fireflies which were from subsequent specular hits.
Demo here!
1/2
#threejs
#webgl
#raytracing
#javascript
#graphics
This is from awhile ago but I put together a
#threejs
loader that can parse models from
@valvesoftware
's 2013 source engine!
TF2 & Portal were some of my most played games in college so this was fun to put together.
#webgl
#gamedev
#sourcefilmmaker
1/4
three-gpu-pathtracer v0.0.13 is now out! This version includes iridescence & sheen quality fixes as well as improved perf w/ early path termination & quilt rendering for multi-view displays!
Notes:
#threejs
#webgl
#raytracing
#graphics
#holograms
1/2
Check out the "three-mesh-bvh" package I maintain for
@threejs
to greatly improve raycast performance against complex triangle meshes or perform other fast spatial queries.
#webgl
#threejs
#javascript
Fog volumetrics coming in three-gpu-pathtracer, next! This is an image with a fairly bright spotlight & volume filling the whole space.
It adds a lot of bounces & variance to the scene so its more intensive + requires more samples but its a nice effect
#threejs
#raytracing
Looks like the next release of threejs will include the new "toCreasedNormals" function! It lets you smooth normals on geometry while retaining hard corners by only smoothing the normals between faces that are within some threshold angle.
#threejs
#webgl
The new version of three-mesh-bvh (finally) gets Surface Area Heuristic working so you can get a bit more performance if needed. I've also added a demo so you can look at how the settings affect the BVH.
#webgl
#threejs
#javascript
#opensource
#graphics
I recently added a "flat shading" option to the LDrawLoader example which gives more of a "Lego Instruction Manual" look. It's not perfect but I think it looks pretty good.
You can see it here by enabling "Flat Colors":
#threejs
#lego
#webgl
#graphics
Got emission, glossy filtering, & alpha test added to the three-gpu-pathtracer materials! Here's a live demo so you can play around. Transmission is next & then I'll start playing with some more fun models😁
#threejs
#graphics
#pathtracing
#javascript
v0.0.9 of three-gpu-pathtracer is now released! This release includes bug fixes as well as support for flat shading & owen-scrambled sobol for improved sample stratification leading to faster image convergence!
#threejs
#webgl
#raytracing
#graphics
Three-mesh-bvh v0.5.3 has been released! New additions include improved SAH build time, ability to track and display progress percentage when building the BVH in a worker, and a bug fix to the "bvhcast" function.
#threejs
#webgl
#raycasting
#opensource
I put together an interactive CSG project on top of three-mesh-bvh. Theres still a good amount of room for performance improvement, I think - some help would be appreciated if people are interested!
#threejs
#webgl
#gamedev
#javascript
#csg
1/4 👇
Thanks to
@robertoranon
, three-gpu-pathtracer now has significantly improved support on for iOS devices!
It turns out the platform was incorrectly reporting that f32 textures supported blending & interpolation so we now use f16 textures where necessary.
#safari
#threejs
#webgl
JPLs 3d-tiles-renderer v0.3.20 is released with big optimizations to frustum culling! At times over 45% fewer tiles drawn per frame and 35% fewer loaded on Google Tiles which brings draw & load times down significantly!
#threejs
#webgl
#3dtiles
#nasajpl
Support for configurable geometric bokeh and depth of field has been added to three-gpu-pathtracer! Here are some renders with really juiced up DoF to get that small toy effect and action figure nostalgia. 1/2
#threejs
#webgl
#graphics
#raytracing
I added a new three-mesh-bvh demo for an
@ifc_js
use case that projects visible edges onto the ground plane. The edges are clipped by tris above - using a BVH to find tris improves perf by multiple orders of magnitude!
#threejs
#graphics
#javascript
1/3
Using 3DTilesRendererJS for
#threejs
and Google's tiles API to make desktop-sized dioramas of geographic locations on Apple's Vision Pro emulator - I'm excited to see more of this kind of work!
Experimenting with a Google 3D tile-based diorama mode to bring and built location-based AR experiences within Apple Vision Pro – even when you are not physically on site. Interested in beta testing (available for other Apple platforms as well)?
Took a look at surface sampling points with blue distribution for meshes. This technique starts with a larger set of random points and then removes points from clusters to give a better distribution.
#threejs
#generative
#art
#webgl
I grabbed some LDraw Lego models from my childhood era to render with three-gpu-pathtracer and using volume transmission for the translucent parts really looks amazing. The models look so good!
#lego
#threejs
#ldraw
#raytracing
#javascript
I've gotten env map importance sampling working in three-gpu-pathtracer! It prioritizes light contributions from hotspots so images resolve much faster and we can get sharp shadows & reflections now, too.
#threejs
#javascript
#webgl
#raytracing
#graphics
I added a demo showing how three-edge-projection can be used to produce a topdown floor plan from a model as well as a silhouette backdrop of the shape. Not as robust as working from original CAD but still a nice result!
#threejs
#webgl
#javascript
#bim
Made some progress on progressive ambient occlusion map generation for three-gpu-pathtracer! Now we just need to unwrap UVs and bake results to a texture. Right now it's just a rasterized mesh using PT for occlusion.
#threejs
#webgl
#raytracing
#graphics
With the recent addition of skinned mesh baking to three-mesh-bvh we can now render animated geometry in the path tracer!
Morph target geometry, as well!
1/2
#threejs
#webgl
#raytracing
#graphics
Coming in at just over 150 lines of code - I've added a simple example for three-gpu-pathtracer. This should serve as a good place to get started if anyone wants to start building their own viewer!
#threejs
#webgl
#raytracing
#graphcis
I've just released three-mesh-bvh v0.7.1, adding support for ParallelMeshBVHWorker which parallelizes BVH generation over multiple web workers. I'm generally seeing over 2x perf improvement and over 4x when using the SAH split strategy! 🚀
1/2
#threejs
#webgl
#javascript
I've made my three-mesh-bvh path tracing sandbox public and added a live demo of the Lambertian path tracing with environment map lighting, tiled rendering, texture support and more!
You can see it here:
#threejs
#pathtracing
#raytracing
#webgl
#graphics
I've added another demo page to three-gpu-pathtracer that lets you view all of the materials from
@AntonPalmqvist
's awesome "" PBR material database including blood, chocolate, brass, and more!
Demo here
#threejs
#webgl
#raytracing
Here's a fun demo I worked on awhile ago with edge outlines achieved by toggling lines in a shader based on the angle between adjacent faces and camera pos. It gives a nice crisp, stylized render.
#threejs
#javascript
#webgl
#opensource
#cad
#npr
1/2
Three-gpu-pathtracer revision 14 is out! This release brings the addition of support for volumetric fog and some small performance improvements!
Changelog here:
#threejs
#webgl
#raytracing
#javascript
Another great test scene for three-gpu-pathtracer -- I really like this one. A lot of great transmissive materials and a fun concept! v0.0.1 release coming soon!
Demo is here:
#threejs
#graphics
#raytracing
#javascript
I've just released v0.0.3 for three-bvh-csg! The new release significantly improves the robustness of CSG operations especially with just-touch and exact overlap cases.
#threejs
#webgl
#csg
three-bvh-csg v0.0.10 has been released! This version adds fixes, perf improvements, & a feature to retrieve multiple CSG results w/ the same brushes letting you more quickly slice & core bunnies to see whats inside 🐰
#threejs
#webgl
#csg
#geometry
1/2
Phenomenal work again from
@JustASquid
adding equirectangular rendering to three-gpu-pathtracer! You'll now be able to render out environment maps using the package.
See it in action here (change the camera mode):
#threejs
#graphics
#raytracing
#webgl
Thanks to "oh-jinsu" on Github who was able to track down why three-gpu-pathtracer was crashing on Safari and some OSX Chrome browsers!
The fix? Moving the "lights" struct variable from a function argument to a global variable...
1/2
#threejs
#webgl
#glsl
I love seeing work like this from people - N8Python from the three.js Discord put this awesome rendering of internal gem reflection together using three-mesh-bvh shader raycasting functions to get this really great effect!
#threejs
#webgl
#raytracing
#graphics
v0.5.18 of three-mesh-bvh has been released! It includes a GPU closestPointToPoint function which can be used to generate SDFs & more!
The attached image shows layers of a 3d volume texture with signed distances to a mesh.
#threejs
#webgl
#raymarching
Fast GPU SDF generation for three-mesh-bvh is coming! Meanwhile here is Suzanne trapped in red carbonite 🙈
This is showing the distance value at the surface of the bounding box encapsulating the mesh.
#threejs
#webgl
Three-gpu-pathtracer has been added to the
@modelviewer
fidelity tests page! Now we can see track improvements and capabilities relative to other projects as new test models get added. Thanks to
@EmmettLalish
for the support in getting this merged!
Background transparency is now working in three-gpu-pathtracer! I used a custom alpha-weighted color blend to prevent a "halo" of bg color from appearing around the model - more below 👇 1/2
Set the bg alpha here:
#threejs
#raytracing
#webgl
#javascript
three-gpu-pathtracer v0.0.8 has been released! There are memory fixes, ability to provide a separate background image, QoL improvements, and significant quality improvements to specular lighting!
Release notes here
#threejs
#raytracing
#webgl
#graphics
A no-frills (fewer frills?) internal gem refraction demo has been added to three-mesh-bvh so users can more easily dig in and see how it all works 💎✨ Thank you to
@N8Programs
!
Check out the demo here:
#threejs
#webgl
#raytracing
#graphics
I love seeing work like this from people - N8Python from the three.js Discord put this awesome rendering of internal gem reflection together using three-mesh-bvh shader raycasting functions to get this really great effect!
#threejs
#webgl
#raytracing
#graphics
Support for AgX tone mapping is almost in
#threejs
! This is based on the Filament implementation which is based on Blender's new AgX tone mapper. This aligns the look of three.js' tonemapping more closely to Blenders results.
left: Linear sRGB
right: AgX
1/2
#webgl
#javascript
After years of wanting to I've finally taken a dive into curl noise and made some curl marbles to start. Nothing to crazy but it's fun to see it working.
New seed on refresh ☝️
#threejs
#generative
#art
#webgl
#marbles
Three-gpu-pathtracing v0.0.6 has been released! This version comes with some significant lighting improvements including spotlights and circular area lights, sheen & iridescence material property support, and more!
#threejs
#raytracing
#graphics
#webgl
Three-mesh-bvh v0.5.1 has been released! It includes the addition of type def files and the recent shader-based raycasting functions that enable gpu path tracing. Looking forward to seeing what people make!
#threejs
#shaders
#pathtracing
#graphics
It's a bittersweet moment but after 10 of the most gratifying years of my life - last week was my last day at
#NASAJPL
. Over the next month I'll be moving to Tokyo and starting at
@WovenPlanet_GL
working on the city of the future!
I'm very excited to see what this brings🗼✨
Another curl noise piece -- this time with trails walking along a spherical surface. The points are initialized with a blue noise distribution but I don't know if it makes a huge visual difference over just randomness.
#threejs
#generative
#art
#webgl
Revisiting the three-mesh-bvh gpu path tracer with an interior scene. These images took ~1 min to render at 30 samples per second with ~2k samples and env map lighting. It's amazing how good just a lambert render can look.
1/2
#threejs
#pathtracing
#webgl
#graphics
#shaders
Trying to decide which is better - resetting the rand seed on change resulting in stable noise as the camera moves or continuing to change the seed resulting in moving noise. You can try both w/ the resetSeed setting:
#threejs
#raytracing
#graphics
1/2
three-gpu-pathtracer v0.0.17 has been released! The big changes are that the pathtracer now runs on MacOS & Android, again, after platform issues.
Hopefully the more volatile shader features can be carved out so it's more consistent over time!
1/2
#threejs
#raytracing
#webgl
What an amazingly crafted experience! Definitely a showcase of what's possible on the web. And using three-mesh-bvh for physics and collisions for movement to boot! 🦥
We just open sourced a couple 3D M2020 Perseverance and Ingenuity URDF files we use for operations visualization in a number of our web tools at
@NASAJPL
!
You can get the models here:
#urdf
#robotics
#3d
#geometry