本教程的目的是向您展示如何不费吹灰之力地使用 Replicator。 Headless 在这种情况下意味着计算设备没有显示器或外围设备,例如键盘和鼠标。 为了做到这一点,我们将对 Replicator 的核心功能 - “Hello World”中解释的脚本进行轻微修改,以使其工作。 鼓励首先阅读该教程以了解 Replicator 的基础知识。
运行需要两个主要修改。 第一个是添加额外的光。 当使用头部运行时,默认情况下,Omniverse 应用程序会启动顶灯。 终端形式跑时,需要加一盏灯。 对于此示例,选择了球形灯。 但是,您可以选择不同类型的灯。
sphere_light = rep.create.light(
light_type="Sphere",
temperature=rep.distribution.normal(6500, 500),
intensity=rep.distribution.normal(35000, 5000),
position=rep.distribution.uniform((-300, -300, -300), (300, 300, 300)),
scale=rep.distribution.uniform(50, 100),
count=2
)
第二个也是最重要的变化是在脚本末尾添加 rep.orchestrator.run()
。 正如介绍中提到的,在后台复制器制作一个 omnigraph
,然后您需要告诉 Omniverse 执行该图。 这将由 rep.orchestrator.run
完成。 没有它,脚本将不会运行 omnigraph 也不会产生输出。 可以复制并粘贴下面的完整脚本。 您可以将其作为 python 文件存储在计算机的任何位置。 为了本示例,将其称为 test.py 。
import omni.replicator.core as rep
with rep.new_layer():
camera = rep.create.camera(position=(0, 0, 1000))
sphere_light = rep.create.light(
light_type="Sphere",
temperature=rep.distribution.normal(6500, 500),
intensity=rep.distribution.normal(35000, 5000),
position=rep.distribution.uniform((-300, -300, -300), (300, 300, 300)),
scale=rep.distribution.uniform(50, 100),
count=2
)
render_product = rep.create.render_product(camera, (1024, 1024))
torus = rep.create.torus(semantics=[('class', 'torus')] , position=(0, -200 , 100))
sphere = rep.create.sphere(semantics=[('class', 'sphere')], position=(0, 100, 100))
cube = rep.create.cube(semantics=[('class', 'cube')], position=(100, -200 , 100) )
with rep.trigger.on_frame(num_frames=10):
with rep.create.group([torus, sphere, cube]):
rep.modify.pose(
position=rep.distribution.uniform((-100, -100, -100), (200, 200, 200)),
scale=rep.distribution.uniform(0.1, 2))
# Initialize and attach writer
writer = rep.WriterRegistry.get("BasicWriter")
writer.initialize( output_dir="_output", rgb=True, bounding_box_2d_tight=True)
writer.attach([render_product])
rep.orchestrator.run()
现在您已准备好运行上面的 test.py 脚本。 我们需要安装 Omniverse Code 的文件夹的位置。在启动器的“LIBRARY”部分中,选择 Code App。 然后,单击显示三个水平线的代码选项菜单并选择“设置”。 现在应该显示安装路径。 下面是一张 gif 动画,展示了如何获取源代码。
从终端转到该文件夹,您会发现其中有适用于 Linux 的 omni.code.sh 或适用于 Windows 的 omni.code.bat。 要从终端运行,您将使用以下命令:
.\omni.code.bat --no-window --/omni/replicator/script=C:\PATH\TO\test.py
请注意,在 Code 2022.3.0 及更早版本中,您需要在上述命令行中改用 .\omni.code.replicator.bat
。
注意
如果您没有修改 output_dir,在 linux 中,数据将位于 HOME/_output 或您的 python 脚本所在的文件夹中。如果由于权限而出现任何错误,请修改脚本中的输出文件夹。
在一分钟左右运行该脚本后,您将获得带有注释的图像。 任何终端形式运行的示例都会有很长的初始启动时间,因为它在后台启动 Omniverse 应用程序。 样本本身的生成应该很快。
注意
已知问题:应用程序关闭有时可能会崩溃,但数据集的完整性不受影响。