mitsuba-renderer / mitsuba3

Mitsuba 3: A Retargetable Forward and Inverse Renderer
https://www.mitsuba-renderer.org/
Other
2.09k stars 246 forks source link

How to render scene with more than 10k spp? #1335

Closed brabbitdousha closed 2 days ago

brabbitdousha commented 1 month ago

Summary

Hi, I am using python with mitsuba3, and I need to render a reference image with more than 10k spp, maybe 100k spp. However, with mi.set_variant("cuda_ad_rgb") and simply calling mi.render(scene=scene, spp=spp) won't let me do it due to the limitations of MC samples, I tried to rewrite the render() and put a loop in it like simple.py, but I can only render 14777 spp at most, I think there might be some hardware limitations. However, I think this task is a fundamental requirement, so is there anyway I can render for more than 10k spp?

System configuration

System information:

OS: windows CPU: intel i9-13900H GPU: RTX 4060 laptop Python version: 3.9 CUDA version: 12.0 NVidia driver: 550.54.14

Dr.Jit version: 0.4.4 Mitsuba version: 3.5.0

brabbitdousha commented 1 month ago

I tried again with dr.set_flag(dr.JitFlag.VCallRecord, False) & dr.set_flag(dr.JitFlag.LoopRecord, False)
this could be running for more than 10k spp, but much slower

andyyankai commented 1 month ago

You might want to consider to render an image in multiple loops using different seed.

for i in range(npass):
    if i == 0:
        image = mi.render(scene, integrator=integrator, spp=spp, seed=i) / npass
    else:
        image += mi.render(scene, integrator=integrator, spp=spp, seed=i) / npass
brabbitdousha commented 1 month ago

You might want to consider to render an image in multiple loops using different seed.

for i in range(npass):
    if i == 0:
        image = mi.render(scene, integrator=integrator, spp=spp, seed=i) / npass
    else:
        image += mi.render(scene, integrator=integrator, spp=spp, seed=i) / npass

Hi, thanks for the advice, I tried this but the memory is still increasing, so still, not working. Anyway, thanks!

njroussel commented 2 days ago

I'll close this for now, it seems to be a duplicate of #1353.

The code that @andyyankai shared should work. Rendering in multiple passes does not increase memory usage.