def build_and_render(scene_name):
    lm.reset()
    accel = lm.load_accel('accel', 'embree', {})
    scene = lm.load_scene('scene', 'default', {'accel': accel.loc()})
    lmscene.load(scene, env.scene_path, scene_name)
    scene.build()
    film = lm.load_film('film_output', 'bitmap', {'w': 1920, 'h': 1080})
    renderer = lm.load_renderer('renderer', 'raycast', {
        'scene': scene.loc(),
        'output': film.loc()
    })
    renderer.render()
    return np.copy(film.buffer())
Exemple #2
0
def build_and_render(scene_name):
    lm.reset()
    accel = lm.load_accel('accel', 'embree')
    scene = lm.load_scene('scene', 'default', accel=accel)
    lmscene.load(scene, env.scene_path, scene_name)
    scene.build()
    film = lm.load_film('film_output', 'bitmap', w=1920, h=1080)
    renderer = lm.load_renderer('renderer',
                                'raycast',
                                scene=scene,
                                output=film)
    renderer.render()
    return np.copy(film.buffer())
def execute_experiment(scene_name, base_scene_path, num_verts):
    # Base output directory
    base_dir = os.path.join(temp_dir, scene_name)
    os.makedirs(base_dir, exist_ok=True)

    # Scene
    lm.reset()
    accel = lm.load_accel('accel', 'embree')
    scene = lm.load_scene('scene', 'default', accel=accel)
    scene_create_func = lmscene.scene_create_func(scene_name)
    portal_mesh = scene_create_func(scene, base_scene_path)
    scene.build()

    # Rendering
    # w/ BDPT as reference
    if lm.Release:
        img_bdpt = render(scene,
                          'bdpt',
                          'bdpt',
                          base_dir,
                          num_verts,
                          portal=portal_mesh)
        display_image(img_bdpt)

    # w/ portal BDPT simplified version
    img_portal_bdpt = render(scene,
                             'portal_bdpt',
                             'portal_bdpt_inter',
                             base_dir,
                             num_verts,
                             portal=portal_mesh)
    display_image(img_portal_bdpt)

    # Compute difference
    if lm.Release:
        diff_gauss(img_bdpt, img_portal_bdpt, scale=5)
        #display_error(rrmse_pixelwised(img_bdpt, img_portal_bdpt))

    # Per-strategy images
    for k in range(2, num_verts + 1):
        for s in range(0, k + 1 - 2):
            t = k - s - 2
            f = lm.Film.cast(
                lm.comp.get('$.assets.renderer.film_%d_%d' % (k, s)))
            img = np.copy(f.buffer())
            title = 'Strategy (s,t)=(%d,%d)' % (s, t)
            display_image(img, title=title)
            f.save(os.path.join(base_dir, 'strategy_%d_%d.hdr' % (s, t)))
            if lm.Release:
                diff_gauss(img_bdpt, img, scale=5, title=title)
def render_reference(scene_name, base_scene_path, num_verts):
    # Base output directory
    base_dir = os.path.join(temp_dir, scene_name)
    os.makedirs(base_dir, exist_ok=True)

    # Scene
    lm.reset()
    accel = lm.load_accel('accel', 'embree')
    scene = lm.load_scene('scene', 'default', accel=accel)
    scene_create_func = lmscene.scene_create_func(scene_name)
    portal_mesh = scene_create_func(scene, base_scene_path)
    scene.build()

    # Rendering
    img_bdpt = render(scene,
                      'bdpt',
                      'bdpt',
                      base_dir,
                      num_verts,
                      portal=portal_mesh)
    display_image(img_bdpt)
                        up=[0, 1, 0],
                        vfov=43.001194,
                        aspect=16 / 9)

# OBJ model
model = lm.load_model('model',
                      'wavefrontobj',
                      path=os.path.join(env.scene_path,
                                        'fireplace_room/fireplace_room.obj'))

# + {"raw_mimetype": "text/restructuredtext", "active": ""}
# We can create primitives from the loaded mode using ``model` parameter for the :cpp:func:`lm::Scene::add_primitive` function.
# -

accel = lm.load_accel('accel', 'sahbvh')
scene = lm.load_scene('scene', 'default', accel=accel)
scene.add_primitive(camera=camera)
scene.add_primitive(model=model)
scene.build()

# + {"raw_mimetype": "text/restructuredtext", "active": ""}
# Executing the renderer will produce the following image.
# -

renderer = lm.load_renderer('renderer',
                            'raycast',
                            scene=scene,
                            output=film,
                            bg_color=[0, 0, 0])
renderer.render()
Exemple #6
0
import lmscene

if not lm.Release:
    lm.attach_to_debugger()

lm.init()
if not lm.Release:
    lm.parallel.init('openmp', {'num_threads': 1})
lm.log.init('jupyter')
lm.progress.init('jupyter')
lm.info()

lm.comp.load_plugin(os.path.join(env.bin_path, 'accel_embree'))

accel = lm.load_accel('accel', 'embree', {})
scene = lm.load_scene('scene', 'default', {'accel': accel.loc()})
lmscene.load(scene, env.scene_path, 'fireplace_room')
scene.build()
film = lm.load_film('film_output', 'bitmap', {'w': 1920, 'h': 1080})

shared_renderer_params = {
    'scene': scene.loc(),
    'output': film.loc(),
    'image_sample_mode': 'image',
    'max_length': 20,
}

# ### w/ sample-based scheduler

renderer = lm.load_renderer(
    'renderer', 'pt', {
Exemple #7
0
    return np.sqrt(np.mean((img1 - img2)**2))


def rmse_pixelwised(img1, img2):
    return np.sqrt(np.sum((img1 - img2)**2, axis=2) / 3)


# -

# Execute rendering for each scene and accel
rmse_df = pd.DataFrame(columns=accel_names, index=scene_names)
for scene_name in scene_names:
    print("Rendering [scene='{}']".format(scene_name))

    # Load scene
    scene = lm.load_scene('scene', 'default')
    lmscene.load(scene, env.scene_path, scene_name)

    # Use the image for 'accel::sahbvh' as reference
    ref = build_and_render(scene, 'sahbvh')

    # Check consistency for other accels
    for accel_name in accel_names:
        # Render and compute a different image
        img = build_and_render(scene, accel_name)
        diff = rmse_pixelwised(ref, img)

        # Record rmse
        e = rmse(ref, img)
        rmse_df[accel_name][scene_name] = e

def rmse(img1, img2):
    return np.sqrt(np.mean((img1 - img2)**2))


rmse_series = pd.Series(index=scene_names)
for scene_name in scene_names:
    print("Testing [scene='{}']".format(scene_name))

    # Load scene and render
    print('w/o serialization')
    lm.reset()
    lm.load_film('film_output', 'bitmap', w=1920, h=1080)
    lm.load_accel('accel', 'sahbvh')
    scene = lm.load_scene('scene', 'default', accel='$.assets.accel')
    lmscene.load(scene, env.scene_path, scene_name)
    scene.build()
    lm.load_renderer('renderer',
                     'raycast',
                     scene='$.assets.scene',
                     output='$.assets.film_output')

    renderer = lm.get_renderer('$.assets.renderer')
    renderer.render()
    film = lm.get_film('$.assets.film_output')
    img_orig = np.copy(film.buffer())

    # Visualize
    f = plt.figure(figsize=(15, 15))
    ax = f.add_subplot(111)

rmse_series = pd.Series(index=scene_names)
for scene_name in scene_names:
    print("Testing [scene='{}']".format(scene_name))
    
    # Load scene and render
    print('w/o serialization')
    lm.reset()
    lm.load_film('film_output', 'bitmap', {
        'w': 1920,
        'h': 1080
    })
    lm.load_accel('accel', 'sahbvh', {})
    scene = lm.load_scene('scene', 'default', {
        'accel': '$.assets.accel'
    })
    lmscene.load(scene, env.scene_path, scene_name)
    scene.build()
    lm.load_renderer('renderer', 'raycast', {
        'scene': '$.assets.scene',
        'output': '$.assets.film_output',
    })
    
    renderer = lm.get_renderer('$.assets.renderer')
    renderer.render()
    film = lm.get_film('$.assets.film_output')
    img_orig = np.copy(film.buffer())
    
    # Visualize
    f = plt.figure(figsize=(15,15))
 def load_scene():
     accel = lm.load_accel('accel', 'sahbvh', {})
     scene = lm.load_scene('scene', 'default', {
         'accel': accel.loc()
     })
     lmscene.load(scene, env.scene_path, scene_name)