Omniverse Replicator的“Hello World”

news/2025/3/15 3:27:14/

核心功能——Replicator的“Hello World”

学习目标

本教程的目的是介绍基本的 Omniverse Replicator 功能,例如使用一些预定义的 3D 资产创建一个简单的场景,应用随机化,然后将生成的图像写入磁盘以进行进一步处理。

使用复制器 API

要运行脚本,请按照设置脚本编辑器中的设置说明进行操作。

首先,让我们在 USD 文件中使用 rep.new_layer() 创建一个新的 USD 层,用于放置和随机化资产。 现在让我们在场景中的所需位置创建一个相机。 这将启用为其生成帧的视口。 为了做到这一点,相机以首选分辨率连接到渲染器。 在这种情况下,我们使用分辨率为 1024x1024 的默认渲染器。

import omni.replicator.core as repwith rep.new_layer():camera = rep.create.camera(position=(0, 0, 1000))render_product = rep.create.render_product(camera, (1024, 1024))

现在,让我们为我们的简单场景创建基本的 3D 形状。 用户还可以携带他们可能已经创建的任何自定义 3D 对象。 教程在完全开发的场景中使用复制器演示了将用户生成的资产引入场景中的过程。 请注意,在创建资产时,我们使用标志semantics添加语义。 这些语义标签被添加到 3D 形状,并在为数据生成注释时使用。

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))

我们创建了一个相机,将其连接到渲染器,引入了 3D 资产。 此时,我们已准备好定义具有指定分布的随机化器(在本例中为均匀随机)。 在本教程中,我们随机化场景中这些资产的位置和比例。

请注意,这些随机化是在每个帧事件中触发的。 在此示例中,我们生成 10 个随机化的帧。

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))

最后,为每个帧生成的数据然后写入磁盘。 为此,Replicator 提供了一个默认的 Writer,可以像本例中演示的那样使用。 除了默认编写器,用户还可以创建自己的自定义编写器。 这在后续教程之一中进行了演示。

在下面的代码中,默认的 Writer 被初始化并附加到渲染器以生成带有 2D 边界框的图像和注释的输出。 请注意,用户可以指定特定的输出目录供编写器使用。

writer = rep.WriterRegistry.get("OmniWriter")writer.initialize(run_id=1, output_dir="_output", rgb=True,   bounding_box_2d_tight=True)writer.attach([render_product])

注意

如果您没有修改 output_dir,在 linux 中,数据将位于 HOME/_output 或安装代码的文件夹中。 在 Windows 中,由于权限,它可能会失败。 确保将 _output 文件夹修改为有效的内容。

下面是可以直接复制到脚本编辑器的整个脚本。

import omni.replicator.core as repwith rep.new_layer():camera = rep.create.camera(position=(0, 0, 1000))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 writerwriter = rep.WriterRegistry.get("BasicWriter")writer.initialize( output_dir="_output", rgb=True,   bounding_box_2d_tight=True)writer.attach([render_product])rep.orchestrator.preview()

单击脚本编辑器窗口底部的运行 (Ctrl + Enter) 按钮。 这将创建运行工作负载所需的所有必要节点。 最后一行 rep.orchestrator.preview() 运行图形一次,供您预览输出。

要运行完整的生成或另一个预览,请单击 Replicator 左上角的 → Run 以启动数据生成过程,如运行和预览 Replicator 所示。 生成的数据存储在指定的输出目录中。

注意

如果你没有修改 output_dir,在 linux 中,数据将在 HOME/_output 中。 在 Windows 中,由于权限,它可能会失败。 确保将 _output 文件夹修改为有效的内容。


http://www.ppmy.cn/news/47948.html

相关文章

淌入客户市场的“深水区”,锐捷云桌面体验再升级

作者 | 曾响铃 文 | 响铃说 现阶段,云桌面的普惠价值随着行业应用的深化正在不断突显。 以教育为例,教育信息化建设已经跨过了从无到有的阶段,目前正面临着如何降本增效的问题。云桌面的应用,正在有效地解决这个问题。 在响铃…

Java中的null总结

日常工作,遇见几次null的语法报错,整理以下Java中null: 🍁 null是一个关键字,对大小写敏感,像public、static… 🍁 null是所有引用数据类型的默认值(int默认0、boolean默认false…)…

智能面板小程序如何实现跨端开发,并无缝引入ChatGPT?

如何让开发者更便捷高效地开发面板小程序? 全球化 IoT 开发平台服务商涂鸦智能(NYSE:TUYA,HKEX:2391)原先提供的是一套基于 React Native (简称 RN) 的面板 SDK,但是随着面板规模的不断增长&am…

工程项目管理系统源码+spring cloud 系统管理+java 系统设置+二次开发

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

采购系统是如何管理供应商的?

随着数字化的推进,企业面临着越来越多的供应商管理问题。企业采购数字化转型已经成为大势所趋,对于采购数字化转型而言,供应商管理是重要一环。 供应商准入管理 在供应商准入阶段,企业需要从供应商资质、财务能力、信誉能力、管理…

redis笔记——springboot集成redis

Sprigboot整合 springboot整合数据操作一般会通过官方的一个项目springdata来进行整合,它可以操作很多市面上流行的数据库,并且为java程序提供一套完整的统一的api调用。在springboot2版本之后,原本的jedis被替换成功了lettuce。原因是 jed…

Java读取文件方式

IO流读取 文本内容 按行读取文件内容 指定编码格式(推荐) public static void main(String[] args) throws UnsupportedEncodingException {read("D:\\test.txt");}public static void read(String path) {BufferedReader reader null;try …

DNS服务器 - 理论

DNS服务器 1. 概念2. DNS域名结构3. 域名的分级4. 域名服务器4.1 层次结构4.2 DNS服务类型 5. 域名解析过程5.1 递归查询与迭代查询5.2 解析流程1. 迭代查询2. 递归查询 6. 高速缓存7. 加上主机缓存后的DNS解析流程8. 常见的域名解析记录9. DNS正向解析和反向解析10. 配置文件介…