Updating already-loaded materialΒΆ

This test shows an example of updating already-loaded material.

[1]:
import os
import imageio
import pandas as pd
import numpy as np
import timeit
%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import lmfunctest as ft
import lmscene
import lightmetrica as lm
[2]:
%load_ext lightmetrica_jupyter
[3]:
lm.init('user::default', {
    'numThreads': -1,
    'logger': 'logger::jupyter'
})
[4]:
lm.asset('camera_main', 'camera::pinhole', {
    'position': [5.101118, 1.083746, -2.756308],
    'center': [4.167568, 1.078925, -2.397892],
    'up': [0,1,0],
    'vfov': 43.001194
})
lm.asset('obj_base_mat', 'material::diffuse', {
    'Kd': [.8,.2,.2]
})
lm.asset('model_obj', 'model::wavefrontobj', {
    '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')
})
[I|0.010|48@assets ] Loading asset [name='camera_main']
[I|0.010|48@assets ] Loading asset [name='obj_base_mat']
[I|0.011|48@assets ] Loading asset [name='model_obj']
[I|0.011|29@objload]   Loading OBJ file [path='fireplace_room.obj']
[I|0.011|169@objloa]   Loading MTL file [path='fireplace_room.mtl']
[5]:
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')
[I|0.416|246@scene ] Building acceleration structure [name='accel::sahbvh']
[I|0.416|131@accel_]   Flattening scene
[I|0.448|261@accel_]   Building
[I|1.181|48@assets ] Loading asset [name='film_output']
[I|1.269|151@user  ] Starting render [name='renderer::raycast']
[I|1.770|125@progre] Processing [iter=520100/2073600, progress=25.1%, ETA=1.5s]
[I|2.271|125@progre] Processing [iter=945200/2073600, progress=45.6%, ETA=1.2s]
[I|2.772|125@progre] Processing [iter=1490800/2073600, progress=71.9%, ETA=0.6s]
[I|3.273|125@progre] Processing [iter=2016300/2073600, progress=97.2%, ETA=0.1s]
[I|3.324|132@progre] Processing [completed]
[5]:
Text(0.5, 1.0, 'orig')
../_images/executed_functest_func_update_asset_5_2.png
[6]:
# 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')
})
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('updated')
[I|4.457|48@assets ] Loading asset [name='obj_base_mat']
[I|4.457|61@assets ]   Asset [name='obj_base_mat'] has been already loaded. Replacing..
[I|4.457|48@assets ] Loading asset [name='film_output']
[I|4.457|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|4.546|151@user  ] Starting render [name='renderer::raycast']
[I|5.047|125@progre] Processing [iter=520100/2073600, progress=25.1%, ETA=1.5s]
[I|5.548|125@progre] Processing [iter=940200/2073600, progress=45.3%, ETA=1.2s]
[I|6.049|125@progre] Processing [iter=1480900/2073600, progress=71.4%, ETA=0.6s]
[I|6.550|125@progre] Processing [iter=2006800/2073600, progress=96.8%, ETA=0.1s]
[I|6.609|132@progre] Processing [completed]
[6]:
Text(0.5, 1.0, 'updated')
../_images/executed_functest_func_update_asset_6_2.png