def build_and_render(scene):
    lm.reset()
    lmscene.load(ft.env.scene_path, scene)
    lm.build('accel::nanort', {})
    lm.asset('film_output', 'film::bitmap', {'w': 1920, 'h': 1080})
    lm.render('renderer::raycast', {'output': lm.asset('film_output')})
    return np.copy(lm.buffer(lm.asset('film_output')))
def render_and_visualize():
    lm.build('accel::nanort', {})
    lm.asset('film_output', 'film::bitmap', {'w': 1920, 'h': 1080})
    lm.render(
        'renderer::raycast', {
            'output': lm.asset('film_output'),
            'visualize_normal': True,
            'bg_color': [1, 1, 1]
        })
    img = np.copy(lm.buffer(lm.asset('film_output')))
    f = plt.figure(figsize=(15, 15))
    ax = f.add_subplot(111)
    ax.imshow(np.clip(np.power(img, 1 / 2.2), 0, 1), origin='lower')
    plt.show()
Example #3
0
lm.info()

scenes = lmscene.scenes_small()

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

    lm.reset()

    lm.asset('film_output', 'film::bitmap', {'w': 1920, 'h': 1080})

    # Load scene and render
    lmscene.load(ft.env.scene_path, scene)
    lm.build('accel::sahbvh', {})
    lm.render('renderer::raycast', {'output': lm.asset('film_output')})
    img_orig = np.copy(lm.buffer(lm.asset('film_output')))

    # Serialize, reset, deserialize, and render
    lm.serialize('lm.serialized')
    lm.reset()
    lm.deserialize('lm.serialized')
    lm.render('renderer::raycast', {'output': lm.asset('film_output')})
    img_serial = np.copy(lm.buffer(lm.asset('film_output')))

    # Compare two images
    rmse = ft.rmse(img_orig, img_serial)
    rmse_series[scene] = rmse

rmse_series
Example #4
0
def build_and_render(accel):
    lm.build(accel, {})
    lm.asset('film_output', 'film::bitmap', {'w': 1920, 'h': 1080})
    lm.render('renderer::raycast', {'output': lm.asset('film_output')})
    return np.copy(lm.buffer(lm.asset('film_output')))
# Pinhole camera
lm.asset(
    'camera1', 'camera::pinhole', {
        'position': [5.101118, 1.083746, -2.756308],
        'center': [4.167568, 1.078925, -2.397892],
        'up': [0, 1, 0],
        'vfov': 43.001194
    })

# OBJ model
lm.asset('obj1', 'model::wavefrontobj', {
    'path':
    os.path.join(ft.env.scene_path, 'fireplace_room/fireplace_room.obj')
})

# Camera
lm.primitive(lm.identity(), {'camera': lm.asset('camera1')})

# Create primitives from model asset
lm.primitive(lm.identity(), {'model': lm.asset('obj1')})
# -

lm.build('accel::sahbvh', {})
lm.render('renderer::ao', {'output': lm.asset('film1'), 'spp': 10})

img = np.copy(lm.buffer(lm.asset('film1')))
f = plt.figure(figsize=(15, 15))
ax = f.add_subplot(111)
ax.imshow(np.clip(np.power(img, 1 / 2.2), 0, 1), origin='lower')
plt.show()
Example #6
0
        for i in range(w * h):
            process(i)
        lm.progress.end()


lm.init('user::default', {})

lm.parallel.init('parallel::openmp', {'numThreads': 1})

lm.log.init('logger::jupyter', {})

lm.progress.init('progress::jupyter', {})

lm.info()

# Scene
lm.asset('film_output', 'film::bitmap', {'w': 640, 'h': 360})
lmscene.load(ft.env.scene_path, 'fireplace_room')

lm.build('accel::sahbvh', {})

lm.render('renderer::ao', {'output': lm.asset('film_output'), 'spp': 5})

img = np.flip(np.copy(lm.buffer(lm.asset('film_output'))), axis=0)

f = plt.figure(figsize=(15, 15))
ax = f.add_subplot(111)
ax.imshow(np.clip(np.power(img, 1 / 2.2), 0, 1))
plt.show()
# ### Master process

lm.init()
lm.log.init('logger::jupyter', {})
lm.progress.init('progress::jupyter', {})
lm.dist.init('dist::master::default', {'port': 5000})
lm.dist.printWorkerInfo()

lmscene.load(ft.env.scene_path, 'fireplace_room')
lm.build('accel::sahbvh', {})
lm.asset('film_output', 'film::bitmap', {'w': 1920, 'h': 1080})
lm.renderer('renderer::raycast', {'output': lm.asset('film_output')})

lm.dist.allowWorkerConnection(False)
lm.dist.sync()
lm.render()
lm.dist.gatherFilm(lm.asset('film_output'))
lm.dist.allowWorkerConnection(True)

img = np.copy(lm.buffer(lm.asset('film_output')))
f = plt.figure(figsize=(15, 15))
ax = f.add_subplot(111)
ax.imshow(np.clip(np.power(img, 1 / 2.2), 0, 1), origin='lower')
plt.show()

# Termination of the worker process is necessary for Windows
# because fork() is not supported in Windows.
# cf. https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
pool.terminate()
pool.join()
Example #8
0
 def update(self, processed):
     self.ax.clear()
     img = np.flip(lm.buffer(self.film), axis=0)
     self.ax.imshow(np.clip(np.power(img, 1 / 2.2), 0, 1))
     self.fig.canvas.draw()
Example #9
0
    'path': os.path.join(ft.env.scene_path, 'fireplace_room/fireplace_room.obj'),
    'base_material': lm.asset('obj_base_mat')
})
lm.primitive(lm.identity(), {
    'camera': lm.asset('camera_main')
})
lm.primitive(lm.identity(), {
    'model': lm.asset('model_obj')
})

lm.build('accel::sahbvh', {})
lm.asset('film_output', 'film::bitmap', {'w': 1920, 'h': 1080})
lm.render('renderer::raycast', {
    'output': lm.asset('film_output')
})
img = lm.buffer(lm.asset('film_output'))
f = plt.figure(figsize=(10,10))
ax = f.add_subplot(111)
ax.imshow(np.clip(np.power(img,1/2.2),0,1), origin='lower')
ax.set_title('orig')

# Replace `obj_base_mat` with different color
# Note that this is not trivial, because `model::wavefrontobj`
# already holds a reference to the original material.
lm.asset('obj_base_mat', 'material::diffuse', {
    'Kd': [.2,.8,.2]
})
lm.asset('film_output', 'film::bitmap', {'w': 1920, 'h': 1080})
lm.render('renderer::raycast', {
    'output': lm.asset('film_output')
})