Jiayin Cao

@jiayincao.bsky.social

Principal Devtech @Nvidia. Former graphics engineer at Ready At Dawn, Naughty Dog, Ubisoft. Views are my own.

I've spent the whole day improving the QBvh implementation in my renderer. Traversal throughput is now about 2.2–2.5× higher than before. There is still a gap between the latest version and Embree, but that gap has narrowed significantly.

Bild

I've managed to port most of scenes, except those which require unsupported features, from PBRT v4 to SORT Here is a page that reveals all cases that can be ported over, with a few unsupported Except lacking white balancing, most scene look fine comapred with PBRT reference

I found two most interesting scenes from the pbrt 4 scene repo. And threw them to my renderer. It is not a perfect match with PBRT, which is not my goal anyway. (PBRT may have applied some post processing for the first scene so it looks very different)

BildBild

I wanted to support PBRT scene for quite a while. It is non-trivial amount of plumbing work. With the new asset build pipeline, I asked Codex to help implement a processor that reads PBRT scenes. The renderer is agnostic of it. It works for some scene now Left, pbrt Right, SORT

BildBildBildBild

I got a fiber based texture cache system implemented in my offline renderer. It is now able to render a scene that can't fit within physical memory. Image 1 is the scene I'm testing with. Image 2, 3 and 4 show some profilling data that reveals the benefit of the feature (TBC)

BildBildBildBild

I still remember more than 10 years ago, it took me more or less one or two weeks to integrate a CPU profiler in my renderer. Nowdays, you can make one profiler for your program from scratch within a few hours with AI. It is not as powerful, but still pretty crazy.

Bild

Pretty much finished the new asset build pipeline for my renderer. It now reads processed binary assets instead of raw source files. Learned a lot building it, I'll put together a blog post on the design decisions and implementation when I find the time.

BildBild

Working on an asset pipeline for my offline renderer One feature I'm adding is a build page that visualizes asset generation and dependencies, making it much easier to inspect and debug issues. Built a mostly working prototype in a day with Codex's help Still lots to iterate next

Bild

After years of thinking about it, I finally got a reasonable approximation for mipmap selection working in my renderer. The biggest challenge, by far, was supporting procedural UV generation in my shading language. I believe I have enough content to put down a blog post next.

BildBildBildBild

One of the technical blockers that prevents me from rendering scenes like Moana in my offline renderer is the lack of derivative support in my custom shading language. I'm happy to share that I have implemented a solution. Below is a screenshot of a few unit tests.

BildBildBild

I'd like to share @daqilin.bsky.social and I co-authored a chapter in the latest GPU Zen 4 book. We cover the engineering details of implementing ReSTIR GI & PT in UE5's NvRTX branch, adopted in NVIDIA's Zorah project showcased at CES and GDC last year. The book is now available on Amazon.

Bild

A nice hugo blog post tool that I built today Sometimes, when we work on a post with a bunch of references, we may need to remove or add items in between. When the article is almost done, adding/removing any of the references requires updating a bunch of hardcoded numbers, which is error prone