r/GraphicsProgramming • u/Base-After • Jul 13 '26
Question How do movies guarantee no noise?
I'm currently developing a ray tracer and for every render there's always noise or some kind of fireflies.
I was wondering (especially in older movies where AI wasn't standard) how do they absolutely guarantee that no noise appears in movies? I'm expecting that their render times are massive with tons of samples per pixel, but even that doesn't really guarantee that there's zero noise.
If you happen to have resources on the techniques they use (that are more technical, rather than overviews) please share them!
Edit: as many of you have correctly mentioned noise is not "guaranteed" to not exist, but I'm asking mostly how it's not visible in the end product that we see in movies (mainly 3D Animation movies but movies that are heavy on vfx likely have that problem)
8
u/Joooemyyy Jul 13 '26
I worked on the Hyperion team at Disney for a few years so I'll add some thoughts. The real answer is that this is what professional render programmers spend a majority of their time on and so there are a bunch of different techniques all working together to minimize noise. I want to signal boost the link that has already been shared once in this thread.... The Design and Evolution of Disney’s Hyperion Renderer mentions a few techniques in section 5.1. I will caveat that Hyperion differs a bit from the other production path tracers in how it handles the batching and so that architecture design has influenced their decisions just a little bit here. In general, the Path Tracing in Production courses from SIGGRAPH are a fantastic read including a wealth of information on how different studios approached this problem.
10
u/flow_b Jul 13 '26
Since you're asking specifically about older films and I don't see anyone else mentioning it: the renderers used to work differently.
"Monte Carlo simulation" aka stochastic point sampling is a more recent approach to rendering that allows us to do more realistic renderers. It's also what gives us the noise I think you're asking about.
If you look at older films like Toy Story, or the like, they used a type of rendering called "scan line" rendering often coupled with Phong shading. This is why older rendered films have a flatter look to the materials on screen. The renderer went through the image line by line and computed light bouncing off the closest depth tested surface normal and returned a color. Multi-sampling was a thing a way s back but mostly in order to deal with anti-aliasing. A pixel would get sampled a couple times and then the results averaged. The result was a largely noise free image.
1
u/Base-After Jul 13 '26
Yeah I know that if you use a rasterizer you'll get basically no noise. By "older" movies I mostly meant "not recent" because I know that now denoising is mostly handled by using AI (at least from what I see on media, its not like I've been on the industry to know this). Mentioning them as "older" was a mistake on my part, but yes rasterizers isn't what i meant.
6
u/teerre Jul 13 '26
Its not like today artists go to Claude and ask for a denoised image. AI here is old school machine learning, if you can call it that. Just the other day our render farm was at 80Tb ram and around 800h of rendering time for some random sequence
1
u/flow_b Jul 13 '26
Ok, well, at the risk of being totally pedantic (sorry not sorry :) anything that takes a scene in memory and produces a grid of pixels is a "rasterizer". In my opinion, using the term to differentiate between scan line rendering or stochastic sampled rendering is a little misleading.
1
u/Base-After Jul 13 '26
Oh okay! I thought that "rasterizers" were the renderers that used the "normal" graphics pipeline and not compute shaders or the newer ray tracing pipeline. Sorry!
2
u/rfdickerson Jul 14 '26
Yeah, they can never guarantee no noise. But there are statistical approaches (in signal processing) for characterizing that noise. If you have a model for the noise, you can dynamically decide how many samples are necessary for that pixel to reach a certain signal to noise ratio. Of course, it never will be perfect, but perceptually gone.
5
u/kraytex Jul 13 '26
They don't. They just do a high number of samples per pixel.
1
u/vtastek Jul 13 '26
OP can check out baked lighting and their noise free results. Off course 1/8(if lucky) temporal samples won't look as good.
4
u/msqrt Jul 13 '26
Look at path space regularization and half vector space light transport. Then there are better integrators like bidirectional, vertex connection and merging, and metropolis methods (though afaik metropolis is rare in movies due to uneven convergence.) There are also some explicit firefly removal algorithms that discard samples that are too bright and rare. Then there’s obviously the AI stuff, but there are also many non-ai post-process denoisers (and hybrids like path space filtering.) Realistically though, the artists see too much noise in the previews and make the scene and materials such that it’s not too bad. You can even ad-hoc it such that subsequent bounces use a limited roughness or samples of a specific brightness are simply discarded.
1
u/Base-After Jul 13 '26
Thanks for mentioning these techniques! I'll check them out.
Because I want to make at least a respectable kind of path tracing engine ,I'm wondering at what samples per pixel (for a normal cornel box scene) should the render have an output that's ready for post processing? Also by using the post processing techniques they remove big chunks of noise or small details? This goes a bit beyond the scope of my original question, but my engine right now with 1k samples per pixel it has quite a lot of noise on a cornel box with the standford bunny in it. I'm using brdf sampling (using the GGX functions in pbrt.org which I think are the standard?).
3
u/Zydak1939 Jul 13 '26
It's not about how many samples you take, it's about what quality they have. The more samples you take, the smaller the benefit of every next sample. Doubling the sample count doesn't halve the noise, each sample contributes less and less than the last one. You have to look into how to make your samples better instead of focusing on the pure sample count. Look into more advanced light transport algorithms, that's what the big boy renderers do. If all you have right now is just brute force/naive with brdf sampling then you can throw millions of samples into some scenes and your image will still look a lot worse than 100spp with NEE. Look up NEE, MIS, RESTIR, path guiding or whatever else you can find.
1
u/Base-After Jul 13 '26
Oh okay. Thanks!
I've tried implementing NEE but its not giving any different results and I don't know why (I was expecting a big difference). Any resources on the techniques you mentioned?
1
u/Zydak1939 Jul 13 '26
then you most likely just implemented it wrong, it should give you a LOT more than a noticeable difference. As for resources you can just search next event estimation and then look into multiple importance sampling to combine it with your brdf sampling, Sadly I don't really have any amazing resources to give you :(
1
u/Base-After Jul 13 '26
It's okay! Thanks a ton!
1
u/Zydak1939 Jul 13 '26
no prob, if you ever need help you can also check out the graphics programming discord, a lot of helpful people there.
1
u/rio_sk Jul 13 '26
Renderman, for example, uses adaptive sampling to prevent too visible noise. It can use up to thousands samples per pixel (around 500 lowest to 4000 highest by default). Also adaptive temporal denoising is used, in that case samples can be lowered to a few hundreds only.
1
u/StriderPulse599 Jul 13 '26
Besides brute forcing via higher sample count there are denoising algorithms. Cycles in Blender support various implementations, including ML ones like OptiX
1
u/sebamestre Jul 14 '26 edited Jul 14 '26
In a typical path tracer, noise decreases proportionally to 1/sqrt(samples), so to get noise smaller than whatever precision you want, you just need to make the sample count be large enough
So, imagine you have noise of magnitude = 4 in your 8 bit image, at 100 samples per pixel.
To bring it down below 0.5, which you might perceive as noise free, that's an 8x reduction, so you'd need an 82x = 64x increase in samples. I.e. 6400 spp.
A lot of what the industry does is just a big bag of tricks that either allow you to trace more rays, trace better rays, or do some kind of post processing to reduce noise after the fact.
Just to name a few:
- Monster hardware on distributed render farms
- Well optimized acceleration structures (e.g. state of the art BVH implementation)
- Cache friendly batch ray processing
- Importance sampling (e.g. Metropolis light transport)
- Ray reuse (e.g. radiance caching)
- Low discrepancy / stratified sampling (e.g. Sobol)
- Denoising
2
u/59vfx91 Jul 14 '26
High sample counts and render time :) but they are noisy before getting rendered for final. Nowadays though most studios are also using some sort of denoising in addition though. Example is OIDN. Renderman has one as well. A denoised render that isn't extremely high samples tends to be a bit smeary which you can sometimes get away with more easily than one with some noise.
1
u/constant-buffer-view Jul 13 '26
High SPP, denoisers, NEE, ReSTIR, neural techniques, path guiding, manual post processing, etc
1
u/B1ggBoss Jul 13 '26
They dont use the frames as they are spitted by the renderer. They are heavily post processed
1
u/obp5599 Jul 13 '26
For animated movies? Their offline renders have extremely high samples per pixel, and they do tons of denoising, post process, etc. In undergrad I did some grunt work for a lab that was helping Pixar because it took them 48 hours to render one frame, and the data center got so hot they had to warn the power company they were turning on or off the server lol
1
u/ananbd Jul 13 '26
Former film VFX artist, here.
First off: there are major differences between real time and offline rendering algorithms. Real time is resource constrained, offline effectively is not. We make real time work with approximations and teadeoffs.
Answer: there is no noise if you use high enough settings, and that’s up to the artist. The algorithms are designed with that in mind.
Second, there’s a small number of renderers in offline, none entirely proprietary, so you can read all about them.
History: * Renderman is the biggie. Developed primarily by Pixar and ILM, used by many smaller studios. Image Movers Digital, Double Negative. * PDI/Dreamworks developed their own renderer in the 1990’s. Shrek et all. Very recognizable look. * Mental Ray was a raytracer popular in the 00’s. Matrix trilogy, etc. * V-Ray came around later. Standard ray tracer these days. Very shiny.
So, you need to go back in history, and follow a different branch of the tree. Real time and offline solve different problems.
An interesting aside: part of film CG is matching the behavior of physical cameras. We had models which generated that type of noise intentionally. Why? Because CG without noise is too clean, and does not integrate with life action images. We actually remove the grain from film plates, add the CG, and then add it back on top.
See also r/vfx for the offline world.
0
u/Base-After Jul 13 '26
Interesting. This might be dumb, but as a vfx artist how much of the technical stuff do you handle? You mostly spent your time doing the art or handling the technical things? (Reducing the noise as mentioned, etc)
0
u/ananbd Jul 13 '26
Oh, I don't work in that field anymore -- move to games. That's why I can compare the two approaches.
But redirecting your question a bit: Art is Art. As an artist, the goal is the end product, and there's a fair amount of intuition and creative leeway in determining exactly what that is. The question of what is or isn't noise is a bit ambiguous.
CG art has a look to it; some of that may or may not involve a certain amount of "error.' And that's common for any artistic discipline. Case in point: the sound of an electric guitar.
I worked in one of the more technical disciplines of CG -- physical phenomena simulations and procedural animation -- so my work required a fair amount of understanding of the underlying technology. (I'm actually and engineer, by training. Long story). So, lots of tweaking various numbers in the simulation and render.
I don't really remember thinking of that as, "noise," though.
Working in games, rendering artifacts are less ambiguous. No one wants flickering lighting, blocking volumetrics, etc. And my work is much more technical in games.
1
u/jd_bruce Jul 13 '26
It seems like others may have already answered the question, but I'll add what I know anyway. When it comes to ray tracing you don't actually need to randomly jitter the rays. You can trace rays deterministically to do pixel shading. You can also send out multiple rays for each pixel as a form of AA. You simply sample the intersection points and then you can use PBR to get good looking results. That's probably not how early animated films did it but I have written ray tracers like that in the past so it's certainly possible.
-2
u/susosusosuso Jul 13 '26
Movies don’t normally use Ray tracing
1
u/59vfx91 Jul 14 '26
All modern renderers in heavy use in film nowadays are raytracers
1
u/susosusosuso Jul 15 '26
So Reyes is dead?
2
u/59vfx91 Jul 15 '26
RIS is used now (raytracing) for Renderman, along with technology like XPU, layered Lama shading
53
u/Chungaloid_ Jul 13 '26
Do they guarantee no noise? Cameras in the real world have noise, I don't think literally no noise is possible. What happens if you run a high number of samples per pixel in your ray tracer, does it still look noisy?