LambdaRender 渲染入门
LambdaSim 提供 lambdasim.render.create_render(),可以在 Python 脚本中创建渲染会话,将场景保存为图片。程序完成渲染后退出,适合离线出图和自动生成图像。
本文使用 examples/lambda_render.py,创建地面、一个球、一盏矩形面积光和相机,输出一张带阴影的图片。几何由公开 API 创建,运行时无需准备外部模型资产。
运行示例
在已配置好 LambdaSim 和 CUDA 渲染依赖、具有可用 cuda:0 的环境中,从 LambdaSim 仓库根目录执行:
.venv/bin/python examples/lambda_render.py
渲染完成后,图片保存在仓库内的 tmp/sphere_ground.png,分辨率为 960 × 640。输出目录由渲染 API 创建;再次运行会覆盖同名图片。

如图(上): 橙色球体放置在地面上,一盏矩形面积光照亮球面,并在地面形成阴影。图片由相机直接渲染生成。
场景与渲染流程
下面五段代码按顺序衔接 ,使用同一个 scene。文末提供可直接执行的完整脚本。
1. 创建场景和几何
import ektro as ek
import lambdasim.render
from lambdasim.scene.light_object import RectLightObject
from lambdasim.scene.scene import Scene
scene = Scene()
scene.add_plane__ektro(
path="/World/Ground",
width=12.0,
length=12.0,
color=(0.38, 0.43, 0.50),
)
scene.add_sphere__ektro(
path="/World/Sphere",
pos=(0.0, 0.0, 0.75),
radius=0.75,
segments=64,
rings=32,
static=True,
color=(0.85, 0.22, 0.07),
)
Scene() 保存本次渲染的场景对象。这里生成一块地面和一个橙色球体,尺寸按米设置。
球心高度和半径同为 0.75,因此球底恰好接触地面。后续灯光和相机也添加到这个 scene 中。
2. 添加灯光
scene.add_light(RectLightObject(
"key",
size=(2.5, 2.5),
world_xform=ek.transform(ek.vec3(-3, -4, 6), ek.quat(0, 0, 0, 1)),
intensity=20.0,
cast_shadow=True,
))
RectLightObject 是矩形面积光,本例用这一盏灯照亮球体和地面。
size=(2.5, 2.5):光源宽、高均为 2.5 米。world_xform:指定世界位置和朝向;本例位置为(-3, -4, 6)米。intensity=20.0:设置灯光强度。cast_shadow=True:启用阴影,使地面能显示球体的投影。
3. 配置相机
camera = scene.add_camera("/root", name="Camera")
camera.set_local_RT(ek.vec3(0, -6, 3.5), ek.vec3(65, 0, 0))
camera.set_fov_y(40.0)
camera.set_resolution((960, 640))
scene.add_camera() 创建场景相机,后续渲染通过 camera.path 选择它。
set_local_RT():设置相机的局部 平移和 XYZ 欧拉角,单位分别为米和度。set_fov_y(40.0):设置竖直视场角为 40 度。set_resolution((960, 640)):设置图片宽度为 960 像素、高度为 640 像素。
4. 创建和同步渲染会话
renderer = lambdasim.render.create_render(
render_name="lambda_render",
scene=scene,
device="cuda:0",
spp=128,
)
renderer.update_scene()
create_render() 将渲染会话绑定到前面创建的 scene,使用 cuda:0,每像素采样 128 次。
renderer.update_scene() 将当前场景同步给渲染器。后续修改对象位置、几何、材质或灯光后,再调用它更新渲染器中的场景。
5. 渲染和释放
renderer.render(camera=camera.path, output="tmp/sphere_ground.png")
renderer.close()
renderer.render() 使用第 3 步创建的相机,将图片保存到 tmp/sphere_ground.png。相对路径从运行命令所在目录计算,输出目录由 API 创建。
图片生成后,renderer.close() 释放渲染会话资源,脚本结束。
完整代码
以下代码与示例的执行代码一致,省略了文件开头的运行说明。可从仓库根目录执行。
import ektro as ek
import lambdasim.render
from lambdasim.scene.light_object import RectLightObject
from lambdasim.scene.scene import Scene
def main(
) -> None:
"""渲染地面上的球和阴影。Render a sphere resting on the ground with shadows."""
# 创建程序化地面和球,球心高度等于半径。Create a procedural ground and a resting sphere.
scene = Scene()
scene.add_plane__ektro(
path="/World/Ground",
width=12.0,
length=12.0,
color=(0.38, 0.43, 0.50),
)
scene.add_sphere__ektro(
path="/World/Sphere",
pos=(0.0, 0.0, 0.75),
radius=0.75,
segments=64,
rings=32,
static=True,
color=(0.85, 0.22, 0.07),
)
# 添加场景灯光。Add a scene light.
scene.add_light(RectLightObject(
"key",
size=(2.5, 2.5),
world_xform=ek.transform(ek.vec3(-3, -4, 6), ek.quat(0, 0, 0, 1)),
intensity=20.0,
cast_shadow=True,
))
# 创建并设置相机。Create and configure the camera.
camera = scene.add_camera("/root", name="Camera")
camera.set_local_RT(ek.vec3(0, -6, 3.5), ek.vec3(65, 0, 0))
camera.set_fov_y(40.0)
camera.set_resolution((960, 640))
# 创建渲染器。Create the renderer.
renderer = lambdasim.render.create_render(
render_name="lambda_render",
scene=scene,
device="cuda:0",
spp=128,
)
# 同步场景并输出图片。Synchronize the scene and render an image.
renderer.update_scene()
renderer.render(camera=camera.path, output="tmp/sphere_ground.png")
# 释放渲染资源。Release rendering resources.
renderer.close()
# 直接运行示例。Run the example directly.
if __name__ == "__main__":
main()

