Max Liani Profile Banner
Max Liani Profile
Max Liani

@maxliani

10,561
Followers
174
Following
721
Media
7,105
Statuses

Raytracing at Nvidia. Previously: Tech Lead for RenderMan at Pixar, Architect of Glimpse Renderer at Animal Logic 🇮🇹🇦🇺🇺🇸🇨🇦 Views are my own.

The pale blue dot
Joined July 2013
Don't wanna be here? Send us removal request.
Pinned Tweet
@maxliani
Max Liani
1 month
How many indirect bounces? 0, 1, 2... 1000?
24
51
671
@maxliani
Max Liani
3 years
A fascinating Moiré pattern forms when I scale down these 100k cubes.
55
600
4K
@maxliani
Max Liani
3 years
My theory is that the hexagonal storm at the pole of planet Saturn is due to the UV interpolation around an extraordinary vertex in a Catmull-Clark subdivision surface...
Tweet media one
Tweet media two
Tweet media three
42
405
3K
@maxliani
Max Liani
1 year
Spot area lights can be tricky to implement because they don't have a simple physical meaning (condensers, reflectors, shutters, barndoors... they all act in a very different way). However, decent basic controls are fundamental to give artistic control over lighting.
36
174
2K
@maxliani
Max Liani
7 years
I know C++
19
2K
2K
@maxliani
Max Liani
1 year
... lots of work to be done 😅
27
60
2K
@maxliani
Max Liani
1 year
Some renderers take the simplification to compute Fresnel on the surface normal, instead of using the microgeometry. Done wrong, that makes high roughness look velvety, requiring some funky f0-f90 controls. This is what that looks like.
Tweet media one
11
86
924
@maxliani
Max Liani
1 year
I am expanding what the pixel inspector can do, now capturing and visualizing light paths contributing to the pixel. The scattered paths are in yellow, NEE in red.
19
82
887
@maxliani
Max Liani
1 year
Hello caustics 😊
17
42
745
@maxliani
Max Liani
1 year
Today I finally pipelined the denoiser to the path tracer. It is expensive to run, around 15ms/frame, so I have work to do!! I feel the result is cool nonetheless! Denoising indirect illumination, caustics, and all ☺️
15
34
617
@maxliani
Max Liani
2 years
I replaced a complex data structure with a flat vector, and changed the algorithm to work with it. Result is twice as fast and uses about 1/3 of the memory. Never underestimate the effectiveness of simplicity.
20
39
617
@maxliani
Max Liani
1 year
The denoiser work is done! It works better than I hoped for. It is impossible to tell the difference between fp32 and fp16. It looks like nothing changes in the image, except that one takes half the time than the other, and at 7.1ms I can have the denoiser on by default.
13
33
597
@maxliani
Max Liani
1 year
Sooooo smoooooth... I think this is done. Moving on!
19
34
580
@maxliani
Max Liani
7 months
The weekend is over. I implemented an analytic ring light. The math is simple, I'll post some notes about it.
9
17
503
@maxliani
Max Liani
1 year
This is not true. Raytracing was introduced in RenderMan 11 in 2003, here is the release notes: Personally I used raytracing rather extensively starting from Happy Feet between 2005 and 2006.
@AMDGPU_
AMDGPU
1 year
No raytracing was used in renderman until 2013. Some movies used shader techniques in specific spots similar to raytracing. Quote from Pixar technical director Chris Horne from 2013
Tweet media one
4
1
22
12
35
456
@maxliani
Max Liani
1 year
Hello Fresnel
Tweet media one
17
15
451
@maxliani
Max Liani
1 year
Ah, the amount of pain people endure these days to avoid writing a for loop
@andreas_longva
Andreas Longva
1 year
Can you spot the undefined behavior? Back to doing some C++ with Eigen. Just wanted to transform some points, and this one had me scratching my head for a while. Solution in next tweet (thanks to my colleague @w1th0utnam3 for pointing out the problem!) 🧵 1/4
Tweet media one
3
0
31
19
32
417
@maxliani
Max Liani
7 months
I posted about this a while ago: sometimes you want to scale a light and adjust its luminosity, bigger light means brighter illumination; sometimes you like the luminosity, but you want to change the softness of the shadows. You need two ways to scale a light.
5
37
389
@maxliani
Max Liani
2 years
Ray traversal on the BVH works, so... hum... I don't know... Enjoy 40 million cubes, I guess.
9
25
381
@maxliani
Max Liani
7 months
Second round on the ring light. It now has a hole in the middle 😉.
12
33
371
@maxliani
Max Liani
7 months
Shades of gray in the shadow penumbra aren't always appealing: a tinge of red or blue can help express warmth or cold and help convey the emotion in a shot. A light control to produce color fringes without having to paint emission textures can be useful.
6
29
364
@maxliani
Max Liani
1 year
The heebie jeebies of when you spot things moving in the dark...
7
20
317
@maxliani
Max Liani
4 years
I am proud to announce I will be joining the NVIDIA family!
34
8
311
@maxliani
Max Liani
9 months
I spent a few hours working on memory pools and now I can handle a hefty amount of unique geometries. Here are 1 million unique cubes where for each I jittered points and colors. The biggest bottleneck is building 1 million tiny BLASs.
5
15
311
@maxliani
Max Liani
1 year
It had been a long flight but I am glad to be in Australia again!
Tweet media one
14
2
291
@maxliani
Max Liani
2 months
First super-naive implementation of texturing is done. From here, it can only get better! :D
10
6
279
@maxliani
Max Liani
3 months
Amazon delivery arrived, apparently it got shipped as a 2-level BVH.
Tweet media one
4
26
275
@maxliani
Max Liani
2 years
When I was a lighter I rarely wanted to deal with radiometric quantities: set some value representing the radiant intensity, set the size... Often you change the size of the light to control the softness of its shadows, not the power; so, you need two ways to scale a light
5
7
267
@maxliani
Max Liani
2 years
Ok, enough for today, the weekend is over. I have a basic top-down 2-ways binned SAH BVH builder. I'll get more complex when I parallelize it and add support of higher branching factors. For now it's 176 lines of code (including comments and debug draw)
4
19
260
@maxliani
Max Liani
1 year
Fixed some fireflies, improved numerical robustness. Using the correct Fresnel equation, one can set IOR=1 to disable the dielectric interface, and only render the substratum. Perhaps trickier to texture, but physically grounded, instead of some arbitrary "specular weight".
4
9
256
@maxliani
Max Liani
4 years
I am currently mentoring no one. If you have questions or need some support in learning, hit me up. I mentor for free. For tech people: C++, raytracing, fundamentals of light transport... For artists: how to approach lighting, tips to develop you skills, how to interview...
@maxliani
Max Liani
7 years
To students and junior programmers and 3D artists. A reminder that I'm here to answer some of your questions. C/C++, low level coding, etc..
2
25
123
12
60
248
@maxliani
Max Liani
3 years
I'm cleaning up my undo system. In preparation of a blog post, I decided to write a guideline to help designing an application that supports undo.
Tweet media one
5
23
247
@maxliani
Max Liani
9 months
Day of debugging at work. So, to end the night with something quick and fun. Here are thousands of dragons ready to pounce!
7
11
239
@maxliani
Max Liani
1 year
I have been buried in tensors for the last couple of weekends and I am coming out for air... Still lots to do, learning a ton in the process! This is what I have been working on:
Tweet media one
8
6
241
@maxliani
Max Liani
2 years
WIP modular BVH traversal implementation
Tweet media one
8
23
234
@maxliani
Max Liani
1 year
A primordial pixel inspector tool to isolate samples and see noise in its full glory!
2
12
230
@maxliani
Max Liani
1 year
Last day of winter break. I added basic support for elliptical lights. Also added single/double-side emission, and light exposure when visible to camera (which makes the light invisible to primary rays when set to zero).
7
13
223
@maxliani
Max Liani
1 year
I am working on a blog mini series about my recent dive in denoising with deep neural networks. I am no expert, but stay tuned if you are interested.
12
4
227
@maxliani
Max Liani
1 year
Second iteration at visualizing paths. Added a filter to exclude noncontributing paths, plus an interactive selection to isolate a single path and see more details about it.
3
19
224
@maxliani
Max Liani
4 years
If you have 50 minutes to spare, check our GTC talk about production rendering on CPUs and GPUs:
5
53
214
@maxliani
Max Liani
3 years
Rotation manipulators are tricky. I have chosen a less conventional approach for this one: instead of circling around the mouse, which isn't natural, manipulation is constrained along the tangent of where you click (check the line). I find this more intuitive. What do you think?
19
14
215
@maxliani
Max Liani
8 months
I made some improvements in how I present subdivision surfaces wireframe. I am still tinkering on how this should be polished, but I feel this is step in the right direction. Sooner or later, I'll have to go back and write myself a few modeling operators, and their manipulators.
11
7
208
@maxliani
Max Liani
1 year
The raytracing elevator
Tweet media one
7
2
204
@maxliani
Max Liani
27 days
First draft adoption of imgui docking is working. Edits on my side made it tricky to get "captionless" windows and imgui viewport to coexist. There is still a lot I'd need to polish. Docking is black magic, so much code in the backend! Kudos to @ocornut for pulling that off!
7
7
207
@maxliani
Max Liani
3 years
This is every software engineer dealing with poorly documented API methods.
@PhriendlyCody
Comrade Phteven
3 years
ive literally been laughing for an hour now
2K
61K
306K
6
39
200
@maxliani
Max Liani
1 year
Some rough surfaces with a matte finishing exhibit sharp reflection at a glancing angle. Not something current microfacet models do well. I am toying around a "polish" parameter to give control over that. Here is an experiment.
8
17
203
@maxliani
Max Liani
2 years
Visualizing BVH SAH split logic. I wish I had this level of convenience when I implemented my first, or second... or third production renderer.
7
15
203
@maxliani
Max Liani
8 months
It's not light transport without the hacks.
2
8
185
@maxliani
Max Liani
1 year
Tweet media one
9
9
186
@maxliani
Max Liani
3 years
We all do this:
7
16
184
@maxliani
Max Liani
2 months
If you can texture albedo, you can texture roughness! Though, the denoiser may not like it... 😜
6
9
181
@maxliani
Max Liani
9 months
Selection got fast!!!
8
7
179
@maxliani
Max Liani
1 year
This is supposed to be a denoiser... but apparently it likes to make pastel paintings instead...
Tweet media one
11
3
166
@maxliani
Max Liani
3 years
printf on the GPU is all you need.
19
7
165
@maxliani
Max Liani
7 months
To me, native visualization tools are key for a speedy development cycle! By native I mean "inside the application". For example, this is the importance sampling visualization for the light controls I posted yesterday:
7
12
162
@maxliani
Max Liani
1 year
I improved the light path visualization to better resemble those cute diagrams you find in light transport papers. 🥰
Tweet media one
5
10
156
@maxliani
Max Liani
9 months
Untitled
2
2
150
@maxliani
Max Liani
3 years
Proof: if Saturn was a NURBS sphere, the storm would be concentric 😇
Tweet media one
3
10
146
@maxliani
Max Liani
1 year
After nearly two years, I implemented the sphere in my project! Backward way of working in graphics... Typically, in a raytracer the sphere is the first thing you ever render. Don't worry about the fireflies: I still need to implemented path regularization.
4
5
151
@maxliani
Max Liani
3 years
This experiment is a a little nuts: non linear undo. Basically, if you undo some stuff and and them make some changes, that state forks into another "parallel reality". You can then jump between any step across the forking paths to continue where you left off, or fork further
9
9
146
@maxliani
Max Liani
9 months
Random doddle.
Tweet media one
6
2
147
@maxliani
Max Liani
1 year
Ok, ok... last one
4
8
144
@maxliani
Max Liani
8 months
This is the last post in a series about scene graph optimizations. In the video, each of the cubes of cubes is a little over 1/4 million transforms. Duplicating, manipulating that mass of nodes seems to be not possible in most DCCs. 🧵1/4
9
17
143
@maxliani
Max Liani
2 years
Friday night drinks, while looking at a BVH rebuilding, AABBs dancing.
4
6
142
@maxliani
Max Liani
9 months
Alright, alright. I took a quick pass of redemption, after posting the wrong polycount yesterday. Here are your complementary 15,641,810,018,304 triangles. Point in case, instancing alone doesn't make a good demo, not unless you want to make dragons' dust.
7
6
139
@maxliani
Max Liani
10 months
I parallelized the startup sequence, now it takes about 800ms for Workbench to boot up and be ready to use. cudnn takes longer than that, so the denoiser won't kick in until a couple of seconds later. You can see it in this video. The operation is seamless.
7
3
138
@maxliani
Max Liani
3 years
This "thing" is beginning to look like an actual 3d editor. I need a file format... I need to implement a file format / scene IO... it's going to be a lot of work...
14
4
136
@maxliani
Max Liani
3 years
VisualStudio trying to replace “,=“ with “ =“ on a 250 lines source file… It’s been going on for minutes… FFS!!
14
19
137
@maxliani
Max Liani
7 years
To students and junior programmers and 3D artists. A reminder that I'm here to answer some of your questions. C/C++, low level coding, etc..
2
25
123
@maxliani
Max Liani
9 months
Here is a clip showing the light rig for the scene:
3
7
127
@maxliani
Max Liani
1 year
Second iteration on the look of the pixel inspector. I really need text rendering...
3
1
127
@maxliani
Max Liani
8 months
Just for giggles, comparison Workbench vs Maya
14
6
127
@maxliani
Max Liani
2 years
Look, I have a thread scheduler 😊 While minimalist, here are a few things it can do:
Tweet media one
11
4
126
@maxliani
Max Liani
3 years
My turn: SDF, subdivision surface, NURBS, triangles
Tweet media one
6
5
122
@maxliani
Max Liani
7 years
First attempt to teach my daughter how computers work:
Tweet media one
7
26
124
@maxliani
Max Liani
3 years
And some procedural animation. Here are about 100,000 cubes.
6
3
121
@maxliani
Max Liani
10 months
With so many graphics people leaving the platform, I wonder how many are still here. I try to compartmentalize, and not let one thing poison another. I’ll keep on posting in a positive spirit.
15
1
122
@maxliani
Max Liani
1 year
@AMDGPU_ Most of the shots you show in that demo reel have been fully path traced 🤔 I contributed to some of those movies myself…
2
5
119
@maxliani
Max Liani
1 year
The old trick of raytracing parallel mirrors never gets old
2
7
117
@maxliani
Max Liani
3 months
So… here is the problem with occasional gaming: by the time the forced update completes, my free time to spend gaming is gone and I moved on doing other stuff…
Tweet media one
9
4
119
@maxliani
Max Liani
4 months
First screen recording of the year! Let's see if I can get back in the rhythm...😁 This is a weird one! (just to test rebuilding the dome light CDF per frame)
4
6
119
@maxliani
Max Liani
9 months
Ok, last offer... slightly faster than before, with twice as much stuff. 20 million cubes... last offer! PS: if you are curious about the scene hierarchy, check the last few seconds of the video.
10
4
118
@maxliani
Max Liani
2 years
It wasn't planned, but I gave a shot at improving the selection wireframe on the path tracer. I feel it tuned out pretty sleek, and it was simpler to implement than I anticipated.
3
9
119
@maxliani
Max Liani
2 years
At which point do you call it a path tracer? Is indirect diffuse enough? I am counting on Twitter's denoiser to make it look good... 😊 Anyway, time is up for today. I didn't originally plan to work on this on my day off.
5
4
116
@maxliani
Max Liani
2 years
There we go, I have a super naïve raytracer running on a single thread on the CPU. Not a bad start, but clearly a monumental amount of work left to do :D In the video I start with the rasterizer view and switch to raytracing (looks the same for now, modulo aliasing and the grid)
3
1
116
@maxliani
Max Liani
21 days
Improved panels alignment. Now, inactive resize bars and the frame around the render viewport are consistent. I believe it gives a small touch of elegance and solidity. Everything can be hidden, leaving just a massive viewport.
Tweet media one
Tweet media two
5
4
116
@maxliani
Max Liani
1 year
I had another go at optimizing my pooling and resampling kernels; convolution is still from cudnn. Now the denoiser runs in 5.5ms. 🍻
@maxliani
Max Liani
1 year
The denoiser work is done! It works better than I hoped for. It is impossible to tell the difference between fp32 and fp16. It looks like nothing changes in the image, except that one takes half the time than the other, and at 7.1ms I can have the denoiser on by default.
13
33
597
7
4
115
@maxliani
Max Liani
1 year
I finally got myself one of these M2 Max thingy! Replacing a 2012 unit :)
Tweet media one
11
1
115
@maxliani
Max Liani
3 years
Scene graph update. 100,000 objects grouped as 100 top level groups containing 1000 cubes each. A procedural animation moves 15 of those top level groups, which propagates xform update to 15,000 objects. The scene graph updates per frame only what changed.
5
7
111
@maxliani
Max Liani
9 months
10 million transforms. Kinda slow... still, usable.
6
2
113
@maxliani
Max Liani
3 years
Tweet media one
5
9
111
@maxliani
Max Liani
4 years
@Nothke @cmuratori Beginner programmer: flat array using std::vector Intermediate programmer: complex data structure using custom templates containers and allocators Expert programmer: flat array using malloc.
9
15
111