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())
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()
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', {
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)