Skip to content

Render

Render a layer using the specified backend.

Parameters:

Name Type Description Default
root Layer

Root layer to render.

required
config Config | None

Rendering configuration. If None, uses default.

None
filename Path | str | None

Output filename.

None
backend str | None

Backend name ('mitsuba' or 'blender'). If None, uses default.

None
**kwargs

Backend-specific options.

{}

Returns:

Type Description
Any

Rendered image (format depends on backend).

Examples:

>>> import hakowan as hkw
>>> layer = hkw.layer(mesh)
>>> # Use default backend (mitsuba)
>>> hkw.render(layer, filename="output.png")
>>> # Use blender backend
>>> hkw.render(layer, filename="output.png", backend="blender")
Source code in hakowan/render/__init__.py
def render(
    root: layer.Layer,
    config: Config | None = None,
    filename: Path | str | None = None,
    backend: str | None = None,
    **kwargs,
) -> Any:
    """Render a layer using the specified backend.

    Args:
        root: Root layer to render.
        config: Rendering configuration. If None, uses default.
        filename: Output filename.
        backend: Backend name ('mitsuba' or 'blender'). If None, uses default.
        **kwargs: Backend-specific options.

    Returns:
        Rendered image (format depends on backend).

    Examples:
        >>> import hakowan as hkw
        >>> layer = hkw.layer(mesh)
        >>> # Use default backend (mitsuba)
        >>> hkw.render(layer, filename="output.png")
        >>> # Use blender backend
        >>> hkw.render(layer, filename="output.png", backend="blender")
    """
    # Compile the layer tree into a scene
    scene = compile(root)
    logger.info("Compilation done")

    # Get config
    if config is None:
        config = Config()

    # Get backend and render
    logger.info(f"Using backend: {backend or 'default'}")
    backend_impl = get_backend(backend)
    return backend_impl.render(scene, config, filename, **kwargs)

set_default_backend

Set the default rendering backend for subsequent render calls.

import hakowan as hkw

# Set Blender as default
hkw.set_default_backend("blender")

# All subsequent renders will use Blender unless overridden
hkw.render(layer, filename="output.png")

Set the default rendering backend.

Parameters:

Name Type Description Default
name str

Backend name.

required

Raises:

Type Description
ValueError

If backend is not registered.

Source code in hakowan/backends/__init__.py
def set_default_backend(name: str):
    """Set the default rendering backend.

    Args:
        name: Backend name.

    Raises:
        ValueError: If backend is not registered.
    """
    global _default_backend
    if name not in _backends:
        raise ValueError(
            f"Unknown backend: {name}. Available: {list(_backends.keys())}"
        )
    _default_backend = name

list_backends

List all available rendering backends.

import hakowan as hkw

backends = hkw.list_backends()
print(backends)
# Output: ['mitsuba', 'blender']

List all registered backends.

Returns:

Type Description
list[str]

List of backend names.

Source code in hakowan/backends/__init__.py
def list_backends() -> list[str]:
    """List all registered backends.

    Returns:
        List of backend names.
    """
    return list(_backends.keys())