Roblox Chief Scientist
U.Waterloo & McGill Prof.
@morgan3d
.bsky
Known for NVIDIA, Unity, Graphics Codex, Markdeep, G3D, Skylanders, E Ink, Titan Quest, Williams
The
@Roblox
metaverse connects 100s of millions of players in millions of games, with consistent personas. As Chief Scientist, I'm now leading computer-, data-, and social-science research to continue Roblox's innovation for coexperience, creativity, safety, and digital civility.
It wasn't until I'd *taught* algorithms a few times that I finally understood why sorting is in the CS curriculum. Unfortunately, most curricula don't explain this!
It is NOT because sorting is an important algorithm to learn to implement...
As a 41 year-old software developer do you know how many times I've had to manually implement QuickSort?
Zero.
Maybe we should test for more useful skills like taking a slow SQL query and optimizing it.
By using different sort algorithms as a running example, we can cover ideas such as:
- Asymptotic analysis
- Space vs. time tradeoffs
- Best case vs. worst case vs. expected case behavior
- Functional vs. imperative implementations
- Explicit stack vs. recursive implementations
We teach sorting in algorithms classes because it is a simple and easy to motivate EXAMPLE of different algorithms for accomplishing the same task. The solution isn't the point in the classroom. The problem is the point...
In conclusion, the point of the sorting lectures you had in college was the lessons you learned along the way, not the sorting. I'm really sorry we didn't tell you that at the time!
I'm excited to announce in partnership with the
@NVIDIA
Deep Learning Institute that the Graphics Codex is now a free online computer graphics rendering and ray tracing textbook at
The programming projects run everywhere and are accelerated on RTX GPUs.
- Stable vs. unstable
- Adversarial cases
- Concurrency
As a bonus, we can also point out that if you give your algorithm a cool name like "QuickSort", then generations of programmers will naively assume that it is the fastest sorting algorithm and use it...
Note that Roblox uses the Right Handed, Y=Up 3D category.
It matches the intuition you probably have from learning coordinates when graphing in school, follows my favorite textbooks, and plays nice with cross products: X × Y = Z; Y × Z = X; Z × X = Y.
I'm now Director of Hyperscale Graphics Systems research at NVIDIA!
And my team is hiring PhD interns and senior scientist/engineer positions right now (thread):
I'm amazed that the debugging experience circa 2000 in C++ with Visual Studio or CodeWarrior (or even xgdb) was more sophisticated than now with Python, JavaScript, and various GPU languages. We're really back to working with "printf" a lot instead of visual debugging.
It's my last day at
@nvidia
, a great company made by great people. Thanks for an amazing 12 years of collaboration accelerating ray tracing, AI, raster VFX, XR, esports, perceptual, and datacenter graphics. I look forward to everything the green team creates next!
#76B900
Very, very, very occasionally, sorting performance or behavior matters so much for a specific application that I need think about it for a total of five minutes.
And then I use:
the radix sort THAT IS IN MY STANDARD LIBRARY.
...
Slides and transcript for "Ray Tracing a Procedural Planet", with links to all of the code.
An easy and inspirational introduction to procedural landscape generation.
Unfortunately, what we've also done by using this convenient example of sorting and its many possible solutions is created generations of programmers who mistakenly think that sorting is an important open problem or something that matters for performance very often.
Buy The Graphics Codex for only $10. Hundreds of detailed entries, a full book on rendering physically-based lighting and materials, and coding projects to learn computer graphics from scratch on Windows, Linux, or Mac.
Ivan Sutherland cofounded one of the most important 3D graphics companies, received a Turing award, and contributed fundamental work on hardware accelerated graphics, CAD, HCI, and VR.
One of his contributions less well known outside of academia is...
That said, heap sort in C is my favorite sort, just because it has a wicked cool implementation. But this is like Rubik's Cube or my favorite ice cream: it is neat, I like it, and it has zero to do with actual software development.
...
Just released on
#Roblox
: AI Material Generator!
Create full PBR materials directly from text prompts. You can control variations, iterate, and change the scale.
I'm sharing my shadertoy ray tracing experiment framework, which I'd unintentionally kept private all this time! It includes extensible abstractions, FXAA, reflections, environment map, shadows, and minimalist physically-based materials.
You'd think game engine programming is all hot-shot graphics optimization, but really it is:
- Motion vectors are wrong again
- Alpha test is broken
- Shader errors are off by one line
- The hash table destructor takes that much time?!?
- Ha ha, look at this physics bug.
I'm in my third decade of programming, and am astonished to keep finding that the most portable, write-once-run-everywhere language in 2022 is still...well-written C or C++ code.
Full source code and precompiled Windows binary demo for "Combining Analytic Direct Illumination and Stochastic Shadows" I3D'18 best paper (
@eric_heitz
,
@self_shadow
, and
@CasualEffects
collaboration)
At GDC'19 I'll present a new high-performance ray traced global illumination solution for games using RTX:
Developed by NVIDIA, McGill University, and the Université de Montréal.
The RTXGI SDK we described at SIGGRAPH is now publicly available.
RTXGI accelerates ray tracing on all DirectX Ray Tracing GPUs at runtime and streamlines artist workflows.
Full dynamic GI for your game without noise, UV maps, or manual probe placement.
@swainrob
@erkaman2
A great sequence for learning rendering for 3D graphics is:
0. Calculus and C++ programming (1 year, prereq)
1. Rendering in One Weekend 1, 2, 3 (5 days)
2. Graphics Codex (3 weeks)
2. RTR4 + Vulkan or DX12 & PBRT (years)
Time estimates are coding time for the projects.
Ray tracing isn't just about reflections and RTX. Here are just a few things you can do with 100k rays/frame on CPU or GPU compute shaders...on GTX GPUs, non-NVIDIA GPUs, and even CPUs.
The Graphics Codex programming projects now run on Jetson Nano .
That means you can get a cute computer with a real NVIDIA GPU for US$99 and learn C++ and 3D programming on it! This is great for hobbyists, homeschooled teens, and low-cost teaching labs.
Chapter 15 of Computer Graphics: Principles and Practice is free online:
This is a deep dive (64 pages with code!) on the differences and enough information to implement each in software from scratch.
Roblox is free for developers. The IDE, the code editor, the version control system, the 3D engine, the servers, the matchmaking server, the translation service, the moderation service, Android, iOS, Windows, macOS, PS4, PS5, Xbox, and Quest.
Final build of my 64x64 space dogfighting
#lowrezjam
game now online at:
Future hobby development continuing, but may surpass the jam's resolution limits.
This month Roblox Studio's music catalog will receive 100,000 new licensed songs, plus 100,000 new licensed sound effects from APM, Monstercat, Pro Sound Effects, Nettwerk Music Group, Position Music, and others that are free for creators to use on the platform.
Wait until the ML research community learns about the Dreams renderer, as they work their way from SDF rendering to volume rendering to point rendering....
Windows 10 puts a fake python/3 executable in the path, ahead of the actual python. This breaks scripts and has caused me problems on nearly every cross-platform project I work on.
The fake executable redirects to the Windows store:
A Dataset and Explorer for 3D Signed Distance Functions, JCGT'22
@yongyuanxi
/
@AndrewGlassner
/
@casualeffects
Normalized, optimized, & categorized analytic SDFs + sample point sets. Perf. benchmarks, NeRF/DeepSDF-style AI without error from meshes, etc.
@AmazingThew
Something life changing I learned early at NVIDIA is that "putting something in hardware" (creating an application-specific integrated circuit, ASIC) usually does not make a program faster. (thread):
Ryan Brooks "octahedral impostors" gives shockingly good LOD and prefiltering, at least for cartoony trees. I think this is a very important direction for combating aliasing as well producing scalability.
Dreams on PS4 might be the most positive development ever in gaming. The vibe of anything is possible, creativity, and new worlds to discover is something I haven't felt since the early beta of Minecraft, and before that not since childhood gaming when everything was new.
I just discovered that W only comes after Z in the alphabet if you're a 3D graphics programmer. To everyone else, the sequence "x, y, z, w" sounds really weird.
Welcome to ray tracing and the new hybrid future of real-time graphics. Games will now keep the amazing performance of rasterization methods and add the quality of ray tracing. With DXR, GPU ray tracing just became mainstream.
I've been coding for VR for almost two decades, and I still find this stupidly funny as a programmer in-joke every time that I type it:
for (int eye = 0; eye < 2; ++eye) { ... }
Now available: Majercik et al, Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields, JCGT 2019
A noise-free, robust, and efficient dynamic irradiance approximation targeting global illumination for games.
Shaved yak game jam:
1. Create a new fantasy console
2. New language & compiler
3. New documentation system for the console
4. Make engine
5. Assets
6. Write short, elegant game
It is relatively easy to write a compiler. It is challenging and requires about 5x as much code to write a compiler that gives useful error messages, because you structure it differently when you need to retain state and history. This applies to most tools programming as well!
You can have a great software career without a computer science *degree*. But that *knowledge* is essential at high levels of system building and you need to gain it somehow, if not at a university. CS isn't elitist academic credentialing. It is practical science and engineering:
I just wrote a line of Python that generates a line of JavaScript that produces a line of HTML that embeds a JavaScript program that compiles a Python program and runs it in a browser...without irony.
At
#SIGGRAPH
2019,
@Peter_shirley
,
@_cwyman_
, and I are teaming up to teach a unified Intro to Real-Time Ray Tracing course.
If you're a game or hobby programmer with no ray tracing experience, we'll teach you parallel ray tracing in 3 hours.
Can't wait? See the replies...
This is one case of a general set of really handy math tricks. I'll explain what's going on at an intuitive level in this thread and give the other tricks.
Transformation matrices compose by multiplication: applying transform B to A to vector B is B * A * v.
...
TIL (from , who is not on twitter afaik) if you interpolate camera matrices in log space, the center of rotation is preserved. this is awesome for smoothing camera paths and I cant believe I didnt do this before. may this tweet make you less dumb than me
Today is my last as a professor at Williams College, after 12 terrific years teaching CS, game design, and film & media studies in the purple valley.
I've migrated my research and open source to and will be moving course materials soon.
Maybe it's time you got up to speed on ray tracing.
If you don't know where to start, don't worry, we've got you covered! Here are three books to take you from zero to the speed of light:
This is not video of a tennis match (notice that the background is static and the players cast no shadows). It is synthesized video of character sprites that are controlled by players, creating a near-photorealistic game [...of Pong 😀].
I'm excited to share the news of Roblox’s acquisition of Byfron, leader in anti-cheat tech. Our latest move to make Roblox the best platform for our community through industry-leading technology for our creators. Welcome,
@ByfronTech
!
As a graphics geek, I always enjoy the AO greeble kitbash version of movies at least as much as the final frames. e.g., Blade Runner 2049, SW:TFA, Inception, Wonder Woman
Working on Roblox has radically changed my mind about "no code"/"low code" programming.
I still feel that traditional programming is the right approach for most software development and language and tools improvements are the best way to accelerate it, but...
I use 7 main ray generation shaders across projects from video game rendering to light field displays.
@zandermajercik
and I will release these as public domain in Ray Tracing Gems 2 for everyone to use. Thanks to
@acmarrs
,
@Peter_shirley
, and
@IngoWald
for editing!
If most of your attempts don't fail, then you aren't trying hard enough.
Good artists/writers/engineers/scientists/etc. don't just have good ideas. They also iterate through the mediocre ones very quickly to get them out of the way.
Denoising is exciting so many of us in graphics research because it is the key to rendering film quality visuals in real time.
Denoising = 1000x speedup for path tracing
Path tracing = 10x AAA game visual quality, at 1/100x artist & code cost