mitsuba-renderer / mitsuba3

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

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

Open brabbitdousha opened 1 month 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!