Tyler Morgan-Wall
banner
tylermw.com
Tyler Morgan-Wall
@tylermw.com
R, data science, dataviz, maps, experimental design, raytracing. Developer of rayshader, rayrender, and the rayverse | PhD in Physics from Johns Hopkins | Penn
Set `shadow = FALSE` in plot_3d(), which will remove the ground. Then set `transparent_background = TRUE` in `render_highquality()`, which will ensure any rays that intersect with the background are marked as transparent. This also will give you softer, anti-aliased edges versus a hard mask.
November 18, 2025 at 3:53 PM
One thing I appreciate about {targets} is the robustness of the pipeline: if I need to stop a long, compute-intensive process to run something else (or, in this case, I resize a pane and make the IDE crash🤷‍♂️), I don't need to worry about corrupted state: just restart R and tar_make() away!

#RStats
November 17, 2025 at 2:11 PM
You can see the difference in the JFA by looking at the areas where the bonds and atoms intercept here in a molecule rendered with #raymolecule. The old method worked by placing an inverted mesh over the mesh, which results in issues where other meshes intersect (note the black lines on the bonds)
November 17, 2025 at 1:50 PM
You can generate these materials via the rayvertex package (available in #rayshader with `render_snapshot(software_render = TRUE)`: practically, these can be mixed and matched with other materials when you want to emphasize (via visual separation) some element of the scene. #Dataviz
November 17, 2025 at 1:50 PM
‼️ #rayverse package update: #rayvertex v0.14.0 released! This overhauls the toon shading algorithm to use a screen space jump fill algorithm (JFA), removing the brittle inverse mesh hack that existed up until now.

#RStats
November 17, 2025 at 1:50 PM
Guess I'm going to go get some coffee while this thing plots

#RStats #ggplot
November 14, 2025 at 3:05 PM
Oh thank god I finally fixed this rayshader 3D ggplot issue that has been bothering me for YEARS (thankfully before anyone called me out on it)

#RStats #rayshader
November 12, 2025 at 5:23 AM
Manhattanhenge: On May 28th/July 13th, the sun aligns with Manhattan's street grid 29° from N. This twice-a-year alignment of urban planning and orbital motion serves both as a temporal tourist attraction as well as a particular good test case for geospatial skymap alignment! #RStats #rayrender
November 9, 2025 at 10:49 PM
Rendering the peak of Mount Everest from sunrise to sunset in R with rayshader and rayrender

#RStats #rayrender #rayshader #rayverse
November 9, 2025 at 4:41 AM
1) Keeping the exposure the same as the dawn image at noon: yuck!

2) Adjusting the exposure down three stops with rayimage::render_exposure(): Nice!

#RStats #rayrender
November 8, 2025 at 4:20 AM
Rendering a tilt-shifted Mount Everest at dawn:

(dawn and dusk are the "magic hour" in rendering too, because you can represent an image in the dynamic range of a PNG/JPEG without clipping or tonemapping hacks!)

#RStats #rayrender #rayimage
November 8, 2025 at 4:07 AM
Absolutely, the fact that we have so many coordinate systems to deal with our dumb ellipsoidal earth means needing to understand incomprehensible incantations like what's listed below... just to load in data

Thankfully sf and terra have done a good job making the process very copy/pastable
November 8, 2025 at 2:09 AM
Only takes a few lines of code to make a beautiful 3D plot in R!
----
library(rayshader)
montereybay |>
sphere_shade() |>
plot_3d(heightmap=montereybay,zscale=50, water=TRUE)
render_highquality()

(I'm cheating of course--the annoying part is loading the data into R!)
November 8, 2025 at 1:58 AM
can't see how this could go wrong
November 8, 2025 at 1:37 AM
uhh always check your gif's AI-generated alt text before posting
November 8, 2025 at 1:37 AM
A set of new render_highquality() options coming to a #rayrender near you 😀
November 8, 2025 at 1:17 AM
Day 6 of the #30DayMapChallenge (3D), a render of Mount Rainier with a realistic atmospheric skydome generated w/ a lat/long/datetime, rendered entirely in #RStats with #rayshader and #rayrender! The atmosphere is annoyingly realistic: I now have to dial in the exposure depending on the time of day!
November 8, 2025 at 1:14 AM
Latest innovation: using RStudio's document outline view + emojis to annotate groups of targets so I can quickly jump through and navigate a very, very long {targets} pipeline.

(now RStudio just needs hierarchical section folding, like Positron, so I can hide everything else away!) #RStats
November 6, 2025 at 9:38 PM
Good instinct! Don't do what I did and be seduced by the relative simplicity of the Felkel and Obdržálek algorithm and waste months trying to patch it to work robustly (turns out the alg isn't correct, and calculating a SS robustly can't be done with float/doubles, only exact arithmetic)
November 6, 2025 at 8:02 PM
Also, here's the #RStats code for the pumpkin:

gist.github.com/tylermorganw...
November 1, 2025 at 4:04 AM
Happy #rayrender Halloween indeed!

@tterence.bsky.social inspired me to whip up an animation: a pumpkin made entirely in rayrender! (CSG for the carved pumpkin, extruded path stem, cyl + sphere candle, and r_obj eyes)

Also, denoising made the below animation render in <3 minutes! #RStats
November 1, 2025 at 3:59 AM
As long as you don't care about hitting the same seed because dates lined up
October 22, 2025 at 3:07 PM
set.seed(42)
set.seed(sample(1L:(2L^32L),1))

😀 #RStats
October 22, 2025 at 2:55 PM
Nice! Love new meshing projects. FYI, you can fairly easily install OIDN (see attached image from rayrender's GH repo) and get fast de-noised output to remove all those fireflies from the rayrender output without increasing sampling time
October 13, 2025 at 3:05 PM
"Man, I really wish RStudio respected hierarchy in code-folded section headers... I wonder how easy it would be to..."

(inner voice: DON'T DO IT! IT'S NOT WORTH IT! JUST GET BACK TO WORK! THE YAK IS BEST LEFT UNSHORN!)

"... I'm gonna do it."

#RStats #RStudio
October 10, 2025 at 12:55 PM