Skip to content

Problem regarding added noise in the samples #171

@ArghyaChatterjee

Description

@ArghyaChatterjee

Hello,

I was testing the NVISII with DOPE. I have set the z depth limit to around 2 m. When the object is close to camera, the rendering looks good and the image sample also looks good but as soon as the object goes far away (roughly more than 1m) from the camera, then the rendered pixels start to add noise inside the rendered scenes (on top of the model) as well as the image samples.

N.B: I am using Nvidia RTX 3070 Ti with 535 driver.

Bad sample

00003

Z = 1.74 m
Width x Height = 1280 x 720
number of sample per pixel = 100

00016

Z = 1.50 m
Width x Height = 1280 x 720
number of sample per pixel = 100

00025

Z = 1.75 m
Width x Height = 1280 x 720
number of sample per pixel = 100

00028

Z = 1.12 m
Width x Height = 1280 x 720
number of sample per pixel = 100

Good sample

00011

Z = 0.37 m
Width x Height = 1280 x 720
number of sample per pixel = 100

00029

Z = 0.98 m
Width x Height = 1280 x 720
number of sample per pixel = 100

00030

Z = 0.85 m
Width x Height = 1280 x 720
number of sample per pixel = 100

00012

Z = 0.43 m
Width x Height = 1280 x 720
number of sample per pixel = 100

For all samples (Good and Bad), here are the configurations that I used during dataset generation:


parser = argparse.ArgumentParser()

parser.add_argument(
    '--spp',
    default=100,
    type=int,
    help = "number of sample per pixel, higher the more costly"
)
parser.add_argument(
    '--width',
    default=1280,
    type=int,
    help = 'image output width'
)
parser.add_argument(
    '--height',
    default=720,
    type=int,
    help = 'image output height'
)
# TODO: change for an array
parser.add_argument(
    '--objs_folder_distractors',
    default='distractor_models/',
    help = "object to load folder"
)
parser.add_argument(
    '--objs_folder',
    default='base_mug_model/',
    help = "object to load folder"
)
parser.add_argument(
    '--path_single_obj',
    default=None,
    help='If you have a single obj file, path to the obj directly.'
)
parser.add_argument(
    '--scale',
    default=1,
    type=float,
    help='Specify the scale of the target object(s). If the obj mesh is in '
         'meters -> scale=1; if it is in cm -> scale=0.01.'
)

# for zed image testing
# parser.add_argument(
#     '--skyboxes_folder',
#     default='background_hdr_images_zed/',
#     help = "dome light hdr"
# )

# for external image testing
parser.add_argument(
    '--skyboxes_folder',
    default='background_hdr_images_dome/',
    help = "dome light hdr"
)

# for single image testing
# parser.add_argument(
#     '--skyboxes_folder',
#     default='background_hdr_images_single/',
#     help = "dome light hdr"
# )

parser.add_argument(
    '--nb_objects',
    default=1,
    type = int,
    help = "how many objects"
)
parser.add_argument(
    '--nb_distractors',
    default=3,
    help = "how many objects"
)
parser.add_argument(
    '--nb_frames',
    default=1,
    help = "how many frames to save"
)
parser.add_argument(
    '--skip_frame',
    default=200,
    type=int,
    help = "how many frames to skip"
)
parser.add_argument(
    '--noise',
    action='store_true',
    default=False,
    help = "if added the output of the ray tracing is not sent to optix's denoiser"
)
parser.add_argument(
    '--outf',
    default='mug_dataset/',
    help = "output filename inside output/"
)
parser.add_argument('--seed',
    default = None,
    help = 'seed for random selection'
)

parser.add_argument(
    '--interactive',
    action='store_true',
    default=False,
    help = "make the renderer in its window"
)

parser.add_argument(
    '--motionblur',
    action='store_true',
    default=False,
    help = "use motion blur to generate images"
)

parser.add_argument(
    '--box_size',
    default=0.5,
    type=float,
    help = "make the object movement easier"
)

parser.add_argument(
    '--focal-length',
    default=521.6779174804688,
    type=float,
    help = "focal length of the camera"
)

# parser.add_argument(
#     '--optical_center_x',
#     default=630.867431640625,
#     type=float,
#     help = "focal length of the camera"
# )

# parser.add_argument(
#     '--optical_center_y',
#     default=364.546142578125,
#     type=float,
#     help = "focal length of the camera"
# )

parser.add_argument(
    '--visibility-fraction',
    action='store_true',
    default=False,
    help = "Compute the fraction of visible pixels and store it in the "
           "`visibility` field of the json output. Without this argument, "
           "`visibility` is always set to 1. Slows down rendering by about "
           "50 %%, depending on the number of visible objects."
)

parser.add_argument(
    '--debug',
    action='store_true',
    default=False,
    help="Render the cuboid corners as small spheres. Only for debugging purposes, do not use for training!"
)

opt = parser.parse_args()

if os.path.isdir(f'output/{opt.outf}'):
    print(f'folder output/{opt.outf}/ exists')
else:
    os.makedirs(f'output/{opt.outf}')
    print(f'created folder output/{opt.outf}/')

opt.outf = f'output/{opt.outf}'

if not opt.seed is None:
    random.seed(int(opt.seed))


# visii.initialize(headless = not opt.interactive)
visii.initialize(headless = opt.interactive)

if not opt.motionblur:
    visii.sample_time_interval((1,1))

visii.sample_pixel_area(
    x_sample_interval = (.5,.5),
    y_sample_interval = (.5, .5))

# visii.set_max_bounce_depth(1)

if not opt.noise:
    visii.enable_denoiser()

Is there any particular way that I can improve the data quality for samples greater than 1m distance from the camera ?? Thanks in advance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions