コード例 #1
0
def build_and_render(scene, accel_name):
    accel = lm.load_accel('accel', accel_name, {})
    scene.set_accel(accel.loc())
    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())
コード例 #2
0
def build_and_render(scene, accel_name):
    accel = lm.load_accel('accel', accel_name)
    scene.set_accel(accel.loc())
    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())
コード例 #3
0
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())
コード例 #4
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())
コード例 #5
0
def render(scene, name, **kwargs):
    w = 854
    h = 480
    film = lm.load_film('film', 'bitmap', w=w, h=h)
    renderer = lm.load_renderer('renderer', name,
        scene=scene,
        output=film,
        max_verts=10,
        scheduler='time',
        render_time=30,
        **kwargs)
    renderer.render()
    return np.copy(film.buffer())
コード例 #6
0
ファイル: util.py プロジェクト: lightmetrica/lightmetrica-v3
def render(renderer_asset_id, renderer_name, params):
    """Render an image."""
    # Create a film for the output
    film = lm.load_film('film_' + renderer_asset_id, 'bitmap', {
        'w': params['w'],
        'h': params['h']
    })

    # Execute rendering
    renderer = lm.load_renderer(renderer_asset_id, renderer_name, {
        **params,
        'output': film.loc()
    })
    out = renderer.render()
    
    return np.copy(film.buffer()), out
コード例 #7
0
def render(scene, name, renderer_name, base_dir, num_verts, **kwargs):
    w = 1920
    h = 1080
    film = lm.load_film('film', 'bitmap', w=w, h=h)
    renderer = lm.load_renderer('renderer', renderer_name,
                                scene=scene,
                                output=film,
                                min_verts=num_verts,  # Number of vertices must be the same
                                max_verts=num_verts,
                                scheduler='time',
                                render_time=30,
                                seed=42,
                                **kwargs)
    out = renderer.render()
    print(json.dumps(out, indent=2))
    film.save(os.path.join(base_dir, name + '.hdr'))
    return np.copy(film.buffer())
コード例 #8
0
def render(scene, name, **kwargs):
    w = 854
    h = 480
    #     w = 1920
    #     h = 1080
    film = lm.load_film('film', 'bitmap', w=w, h=h)
    renderer = lm.load_renderer('renderer',
                                name,
                                scene=scene,
                                output=film,
                                min_verts=3,
                                max_verts=3,
                                scheduler='time',
                                render_time=20,
                                samples_per_iter=10,
                                **kwargs)
    out = renderer.render()
    print(json.dumps(out, indent=2))
    film.save(os.path.join(temp_dir, name + '.hdr'))
    return np.copy(film.buffer())
コード例 #9
0
def render(scene, name, **kwargs):
    if not lm.Release:
        w = 64
        h = 48
    else:
        w = 640
        h = 480
    film = lm.load_film('film', 'bitmap', w=w, h=h)
    renderer = lm.load_renderer('renderer',
                                name,
                                scene=scene,
                                output=film,
                                min_verts=3,
                                max_verts=3,
                                scheduler='time',
                                render_time=60,
                                seed=20,
                                **kwargs)
    out = renderer.render()
    print(json.dumps(out, indent=2))
    film.save(os.path.join(temp_dir, name + '.hdr'))
    return np.copy(film.buffer())
コード例 #10
0
# -

lm.info()

# + {"raw_mimetype": "text/restructuredtext", "active": ""}
# Next we define `assets` necessary to execute renderer, like materials, meshes, etc. In this example, we only need a `film` to which the renderer outputs the image. We can define assets by ``lm::load_*`` function, where ``*`` represents the name of the asset. In this example, we want to make ``film`` asset. So we use :cpp:func:`lm::load_film` function.
#
# The first argument (``film``) specifies id of the asset to be referenced. The second argument (``bitmap``) is given as the type of the assets.
# The optional keyword arguments specify the parameters passed to the instance.
#
# For convenicence, we will refer to the asset of the specific type in ``<asset type>::<name>`` format. For instance, ``film::bitmap`` represents a `bitmap film` asset.  ``film::bitmap`` takes two parameters ``w`` and ``h`` which respectively specify width and height of the film.
#
# This function returns a reference to the asset. You can access the underlying member functions. You can find details in :ref:`api_ref`.
# -

film = lm.load_film('film', 'bitmap', w=1920, h=1080)

# + {"raw_mimetype": "text/restructuredtext", "active": ""}
# The created instance of the asset is internally managed by the framework.
# Lightmetrica uses `component locator` to access the instance.
#
# A component locator is a string starting with the character ``$`` and the words connected by ``.``. A locator indicates a location of the instance managed by the framework. For instance, the locator of the ``film`` asset is ``$.assets.film``. This can be queried by ``.loc()`` function.
# -

film.loc()

# + {"raw_mimetype": "text/restructuredtext", "active": ""}
# To rendering an image, we need to create `renderer` asset. Here, we will create ``renderer::blank`` renderer.  ``renderer::blank`` is a toy renderer that only produces a blank image to the film. The renderer takes ``film`` parameter to specify the film to output the image, and ``color`` parameter for the background color.
#
# A reference to the other asset as a parameter can be passed using component locator. Here we use ``film.loc()`` to get a locator of the film. Althernaively, you can directly pass the instance of the asset directly as a parameter.
# -
コード例 #11
0
    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', {
        **shared_renderer_params, 'scheduler': 'sample',
        'spp': 1,
        'num_samples': 10000000
コード例 #12
0
# +
# Custom material
material = lm.load_material('visualize_normal_mat', 'visualize_normal', {})

# OBJ model
model = lm.load_model(
    'obj1', 'wavefrontobj', {
        'path': os.path.join(env.scene_path,
                             'fireplace_room/fireplace_room.obj'),
        'base_material': material.loc()
    })

# +
# Film for the rendered image
film = lm.load_film('film1', 'bitmap', {'w': 1920, 'h': 1080})

# Pinhole camera
camera = lm.load_camera(
    'camera1', 'pinhole', {
        'position': [5.101118, 1.083746, -2.756308],
        'center': [4.167568, 1.078925, -2.397892],
        'up': [0, 1, 0],
        'vfov': 43.001194
    })

# Scene
accel = lm.load_accel('accel', 'sahbvh', {})
scene = lm.load_scene('scene', 'default', {'accel': accel.loc()})
scene.add_primitive({'camera': camera.loc()})
scene.add_primitive({'model': model.loc()})
コード例 #13
0
    center=[4.167568, 1.078925, -2.397892],
    up=[0,1,0],
    vfov=43.001194,
    aspect=16/9)
material = lm.load_material('obj_base_mat', 'diffuse',
    Kd=[.8,.2,.2])
model = lm.load_model('model_obj', 'wavefrontobj',
    path=os.path.join(env.scene_path, 'fireplace_room/fireplace_room.obj'),
    base_material=material)
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()

film = lm.load_film('film_output', 'bitmap', w=1920, h=1080)
renderer = lm.load_renderer('renderer', 'raycast', scene=scene, output=film)
renderer.render()

img = np.copy(film.buffer())
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.load_material('obj_base_mat', 'diffuse', Kd=[.2,.8,.2])

renderer.render()
コード例 #14
0
# No output in Jupyter notebook
lm.info()

# Initialize the logger with logger::jupyter
lm.log.init('jupyter')

lm.info()

# ### Wrong asset name
#
# If you specify the wrong asset name, the framework will rause an exception.

try:
    # Wrong: bitmapp
    lm.load_film('film1', 'bitmapp', w=1920, h=1080)
except Exception:
    traceback.print_exc()

# Correct: bitmap
lm.load_film('film1', 'bitmap', w=1920, h=1080)

# ### Invalid parameter
#
# The framework will cause an exception if you try to create an asset with invalid parameters.
# The framework will *not* generate an error for the unnecessasry parameters.

try:
    # vfov is missing
    lm.load_camera('camera1',
                   'pinhole',