Scheduler for rendering

[1]:
import lmenv
env = lmenv.load('.lmenv')
[2]:
import os
import numpy as np
import imageio
%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import lightmetrica as lm
%load_ext lightmetrica_jupyter
import lmscene
[3]:
if not lm.Release:
    lm.attach_to_debugger()
[4]:
lm.init()
if not lm.Release:
    lm.parallel.init('openmp', num_threads=1)
lm.log.init('jupyter')
lm.progress.init('jupyter')
lm.info()
[I|0.000] Lightmetrica -- Version 3.0.0 (rev. 70601db) Linux x64
[5]:
lm.comp.load_plugin(os.path.join(env.bin_path, 'accel_embree'))
[I|0.008] Loading plugin [name='accel_embree']
[I|0.010] .. Successfully loaded [name='accel_embree']
[6]:
accel = lm.load_accel('accel', 'embree')
scene = lm.load_scene('scene', 'default', accel=accel)
lmscene.load(scene, env.scene_path, 'fireplace_room')
scene.build()
film = lm.load_film('film_output', 'bitmap', w=1920, h=1080)
[I|0.018] Loading asset [name='accel']
[I|0.018] .. {"intcost":1.0,"maxBranchingFactor":2,"maxDepth":18,"maxLeafSize":32,"minLeafSize":1,"quality":1,"sahBlockSize":1,"travcost":1.0}
[I|0.018] .. {"compact":false,"dynamic":false,"filter":false,"robust":false}
[I|0.019] Loading asset [name='scene']
[I|0.019] Loading asset [name='camera_main']
[I|0.019] Loading asset [name='model_obj']
[I|0.019] .. Loading OBJ file [path='fireplace_room.obj']
[I|0.019] .. Loading MTL file [path='fireplace_room.mtl']
[I|0.344] .. Loading texture [path='wood.ppm']
[I|0.435] .. Loading texture [path='leaf.ppm']
[I|0.437] .. Loading texture [path='picture8.ppm']
[I|0.469] .. Loading texture [path='wood5.ppm']
[I|0.524] Building acceleration structure [name='accel']
[I|0.524] .. Flattening scene
[I|0.529] .. Building
[I|0.577] Loading asset [name='film_output']
[7]:
shared_renderer_params = {
    'scene': scene.loc(),
    'output': film.loc(),
    'image_sample_mode': 'image',
    'max_verts': 20,
}

w/ sample-based scheduler

[8]:
renderer = lm.load_renderer('renderer', 'pt',
    **shared_renderer_params,
    scheduler='sample',
    spp=1,
    num_samples=10000000)
renderer.render()
[I|0.669] Loading asset [name='renderer']
[8]:
{'elapsed': 21.954520048, 'processed': 1}
[9]:
img1 = np.copy(film.buffer())
f = plt.figure(figsize=(15,15))
ax = f.add_subplot(111)
ax.imshow(np.clip(np.power(img1,1/2.2),0,1), origin='lower')
plt.show()
../_images/executed_functest_func_scheduler_10_0.png

w/ time-based scheduler

[10]:
renderer = lm.load_renderer('renderer', 'pt',
    **shared_renderer_params,
    scheduler='time',
    render_time=5)
renderer.render()
[I|23.884] Loading asset [name='renderer']
[I|23.884] .. Asset [name='renderer'] has been already loaded. Replacing..
[10]:
{'elapsed': 21.990105546, 'processed': 1}
[11]:
img2 = np.copy(film.buffer())
f = plt.figure(figsize=(15,15))
ax = f.add_subplot(111)
ax.imshow(np.clip(np.power(img2,1/2.2),0,1), origin='lower')
plt.show()
../_images/executed_functest_func_scheduler_13_0.png

Diff

[12]:
from scipy.ndimage import gaussian_filter
diff_gauss = np.abs(gaussian_filter(img1 - img2, sigma=3))
f = plt.figure(figsize=(15,15))
ax = f.add_subplot(111)
ax.imshow(np.clip(np.power(diff_gauss,1/2.2),0,1), origin='lower')
plt.show()
../_images/executed_functest_func_scheduler_15_0.png